背景
私は、MS Exchange 2007サーバーからメールを取得するプログラムを実装する予定です。 アーキテクチャの設計上、同じメールボックス&にメールをフェッチするには、複数のスレッド(固定量ではない)を実行して同じメールボックスに接続する必要があります。IMAPStoreとIMAPFolderはJavaMailスレッドセーフですか?
のJavaMail:1.5.6 取引所:2007
問題
各スレッドは、最終的には、電子メールIDを検索して電子メールを取得、電子メールIDを取得し、IMAPStore
を使用して接続し、IMAPFolder
を開きます。最後にIMAPFolder
& IMAPStore
を閉じます。
プログラムがしばらくの間実行すると、スレッドが増加し、私は例外の下に表示されます:
javax.mail.StoreClosedException: failed to create new store connection
at com.sun.mail.imap.IMAPFolder.throwClosedException(IMAPFolder.java:3368)
at com.sun.mail.imap.IMAPFolder.doCommand(IMAPFolder.java:3497)
at com.sun.mail.imap.IMAPFolder.exists(IMAPFolder.java:560)
at com.myco.myapp.MessageHandler.getFolder(MessageHandler.java:68)
私は多分、Exchangeサーバーの接続制限があると思いますので、私は、Exchange管理者に尋ねると、彼は言いましたIMAPStore
によって
- 接続:(各メールボックスへ)接続制限はその後、私はテストをした16
に設定されていますループでは
- 、オープン
IMAPFolder
(と同じフォルダ名)を保つが、
が、私は同じ例外を得た後、15日IMAPFolder
を開いて、それらを閉じないと16 1を開こう。私はIMAPFolderのソースコードを読んで、その機能のほとんどを発見した
Tks Billは、ExchangeサーバーレベルでIMAPStore.getFolder(folderName)を呼び出すたびに、サーバーへの新しい接続が確立されることを意味しますか? – yellowB
いいえ、Folder.open。 –