[Seasar-user:7832] Re: S2Mai-0.9.1でNullPointerException

[E-MAIL ADDRESS DELETED]
2007年 5月 25日 (金) 16:56:59 JST


六です。

> と、ここでちょっと補足を、
> ドキュメントの「セットアップ」の必要なjarの中には
> activation-1.1.jar
> は書いてありませんが、これがないと実行時に怒られます。
> これを入れたら上手く動きました。

ああまた忘れ物が・・・すみません・・・。直します!

因みにgeronimo-j2ee_1.4_spec-1.0.jarの中に
activationの実装が入ってますので、
geronimo-j2ee_1.4_spec-1.0.jarがクラスパスに入ってると
activation-1.1.jarは不要になります。
が、geronimoがあれなもんで、それ以前の問題ですねぇ・・・。

> > プロジェクトでgeronimo-j2ee_1.4_spec-1.0.jarを使う場合に関しては
> > 少々時間を下さい(こればっかりであいすみませんが)。
> > 調べてみます。
>
> 実はそこの所よくわかってないんです・・・すみません。
> ドキュメントでは「スタントアロン」で、S2JTA,S2Txを使う場合必要と
> 書いてありますが、これは例えば「メールを定期的に送る」と言った
> 要件の場合に、バッチ処理をcronで実行する際には必要とならないので
> しょうか?

JTA、S2Txを使う場合というのはトランザクションを使いたい場合と
いう事になります。その必要がない場合は不要という事に
なるかと思います。

ただし、アプリケーションでトランザクションを使わない場合も、
S2Mai自体でトランザクション連携機能をもっているので
geronimo-jta_1.1_spec-1.0.jar (j2eeじゃない方)は必須になります。

ドキュメントの書き方だとオプションぽく読めるので
ここも直しておきます。

で、そのトランザクション連携なのですが、
これは0.9.1からの新機能でして、まだブログにも書いてないのです。
のびのびになってしまって申し訳ありません。

例えば、1つのトランザクションの中で、

(1)DBへの更新処理
(2)その結果を受けてメール送信
(3)またDBへの更新処理
(4)その結果を受けてメール送信

という流れがあり、(1)の処理はOKで(3)でエラーが発生したとします。
1つのトランザクションなので、(1)と(3)に対してはロールバックがかかり、
(4)のメール送信処理までは到達しませんが、(2)のメールは
送信されてしまいます。

トランザクションと連携すると、まず、(2)と(4)のメール送信処理を
保留にし、トランザクションがコミットされた時に保留された
メール送信を行うようになります。

そうすると先程の例ですと、(3)でエラーが発生しても
(2)と(4)の双方のメールが送信されなくなります。

デフォルトでこの動きになります。連携を行いたくない場合は、
s2maiのjarの中にあるs2mai.diconの内容をコピーした
ものをルートパッケージに置き、

<include path="jta.dicon"/>

の行を削除する事で連携せず、メール送信メソッドが呼ばれた
タイミングで実際に送信されます。

以上がトランザクション連携機能になります。

で、geronimoのJavaMailですが、文字化けなどのトラブルがあるようで
頭の痛い問題であります。

スタンドアロンでトランザクションを扱うアプリケーションの場合は
geronimo-j2eeを使わざるを得ないと思いますので、
なんとかしたい所です。うむむ・・・。


Seasar-user メーリングリストの案内