2012-01-26 3 views
0

にデプロイされたアプリケーションに電子メールを送信することは不可能で、どこでもそれをGoogleで検索し、まだそれを解決するためcouldntの、誰かが私が間違ってやって発見した場合を見てみましょう:は、私はこれで2日間文字通り費やしてきたGlassfishの

私はしましたGlassfishでjavaMailセッションを定義し、メールサーバ(ホスト、ユーザ、パス、ポートなど)と通信するために必要なすべてのパラメータを定義しました。 jndiを使用してそのセッションを検索し、電子メールを送信しようとするアプリケーションをデプロイします。コードは次のとおりです。今

InitialContext ctx = new InitialContext(); 
Session session = (Session) ctx.lookup("mail/javaMailSession"); 

Message msg = new MimeMessage(session); 
msg.setSubject("test"); 
msg.setRecipient(RecipientType.TO, new InternetAddress("[email protected]", "zzz"));  
msg.setFrom(new InternetAddress("[email protected]", "hhh")); 
BodyPart messageBodyPart = new MimeBodyPart(); 
messageBodyPart.setText("this is a test email"); 

Transport.send(msg); 

私はこのコードを含むクラスがロードされるのmail.jar依存せずに私のアプリを、展開する場合、私はメールを配置する場合、私は

ClassNotFoundException: javax.mail.Message, meaning mail.jar is not in the classpath.

を取得します。 jarをdomain/libフォルダに入れたり、mail.jarの場所を含むアプリケーションのマニフェストにclasspathエントリを追加すると、私はもはやClassNotFoundExceptionを持っていませんが、ルックアップを実行してセッションを取得すると私は奇妙な結果になります

ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session. 

これは私がmail.jarの2つのバージョンを持っていることを意味しますが、私が/ libから削除するか、クラスパスエントリをマニフェストに追加しないと、見つけられません。

私は(そうactivation.jarのは問題ではありません)Glassfishの3.1.1のjava-6-sunが-1.6.0.26を使用して、のUbuntu 11.10上です。私は他の何かを考えることができないので、任意のアイデアは非常に高く評価されます。

答えて

1

JavaMail(すべてのjavax.mail。*クラス)はGlassFishに含まれています(Webプロファイルのバージョンだけでなく、Java EEプラットフォームの完全版を使用していることを前提としています)。アプリケーションにmail.jarを含めるか、手動でインストールする必要はありません。あなたがそれをするときにjavax.mail.Messageが見つからない理由を説明することはできません。 ClassCastExceptionは、アプリケーションで使用可能な2つのバージョンのmail.jarがあることを示します。

+0

エラーが見つかりました。コードはライブラリ内にありましたいくつかのプロジェクトを共有したいので、domain1/lib/ext(domain1/lib/applibsで動作しません)に配置しました。このライブラリでは、JDBC接続プールやその他のサーバーリソースを使用しましたが、メール以外は問題ありません。ライブラリをdomain1/libに移動しました。これで私のコードはjavax.mail。*を見つけました。私はこれが奇妙な振る舞いか、それらのフォルダが他の目的のために意図されているかどうかわかりません。それはちょうど私の誤解です...とにかく、助けてくれてありがとう、問題解決! – Juan

+0

私は、lib/extディレクトリはJDKクラスの前にロードされ、libディレクトリは後に読み込まれると思います。 –

関連する問題