アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://www.okweb.ne.jp/kotaeru.php3?q=508088
と似ているのですが、ループ中のある段階で処理に時間がかかってしまう場合、その回だけスキップさせて次に進みたいのですが、どのようにすればいいのでしょうか。
スレッドの設定が一番いいですか?簡単なコーディングがあれば教えてください。

処理は、全体としてメールを複数配信します。
forの1回のループにはメール1件送信とDB登録が含まれていて、ある特定のドメインに送信しようとすると、処理が止まってしまい、DBの接続エラー(タイムアウト?)が出てしまいます(原因不明)。また、vecListはメールを送信する相手を入れたVectorです。

for(int i=0;i<vecList.size();i++){
処理
}

のどこにスレッドをセットすればいいのでしょうか。
30秒ほど待ってレスポンスがない場合、スキップして次のアドレスの送信処理に進みたいのですが・・・

A 回答 (3件)

ちょっとみたところ、javamailでの送信には、タイムアウトの設定がないようです。



自分で作ったというメール送信用クラスのsendMail()メソッドに機能をもたせてはどうでしょうか。

・送信用クラスにsetTimeout()メソッドを追加
・sendMail()メソッドは、タイムアウトの場合、
TimeoutExceptionを発生させる

・sendMail()内の処理で、監視用オブジェクトを生成し、
別スレッドで起動する。
・監視用スレッドは、タイムアウトの場合、メール送信を中断させる

おおまかに、こんな感じだと思います。


メール送信用スレッドと、監視用スレッドの間での同期に注意して設計してみて下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます。
運用中なので反映に時間がかかると思いますが、この方針で開発して、テストしてみます。

お礼日時:2003/06/29 10:20

私には、「javamailの、sendMail()」というメソッドを


見つけることが出来ませんでした。

どのクラスですか?
    • good
    • 0
この回答へのお礼

すみません。自分で作ったメール送付用のクラスのメソッドでした(このクラスがjavamailを使ってます)。なんとかがんばってみます。ありがとうございます。

お礼日時:2003/06/18 00:26

送信処理を行うオブジェクトに、タイムアップ設定のメソッドが


存在しないかを、まず確認します。
あれば、それを使えば楽にできます。

タイムアップ設定もない場合は、ロックする可能性のあるメソッドを
呼び出す前に監視用スレッドを起動するしかありません。
タイマーを使うのでもいいですが、別スレッドを使うという
意味では同じです。

スレッドを実行される場所は、ロックする可能性のあるメソッドを呼び出す前です。
呼び出した後では、スレッドの起動を行うタイミングがありませんから。
また、for文の中か外かは、監視スレッドの作り方で変わってきます。

この回答への補足

タイムアップは、javamailの、sendMail()で起こっています。楽にできるのでしょうか。

補足日時:2003/06/16 20:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!