- - PR -
DataSourceコネクションのAutoCommit設定について
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-06-24 23:22
ukさん、おつきあいいただいて恐縮です。
やろうとしている処理は1本のセッションビーン内で閉じていますが、SQLの実行処理は内部で振り分けており、実際にはprivateメソッドに委譲しています。その際にメインのメソッド内で conn = ds.getConnection();で得たコネクションを引数で渡し、close処理はあくまで メインのfainally句で行っています。 DBの業務処理なんですが、CSVで元ねたを複数件もらいうけ、PKで存在してればUPDATE 新規ならINSERTのような処理を施しています。 そこで、Aテーブル用のCSVデータをロードした後、Bテーブル用のCSVデータをロードし 最後に問題のなかったときだけコミットかけたいのです。 | ||||
|
投稿日時: 2005-06-24 23:42
Anthyhimeさん、貴重な情報ありがとうございます。
そこで、試してはいるのですが、結果が変わらず、まだ何がおかしいのか不明なところです。 ejb-jar.xml に、みなさんに教えていただいたやり方で <container-transaction> <method> <ejb-name>FmjAddApn</ejb-name> <method-intf>Remote</method-intf> <method-name>*</method-name> </method> <trans-attribute>RequiresNew</trans-attribute> </container-transaction> </assembly-descriptor> を追加して走らせてみると、やはり、 conn = ds.getConnection(); // autocommit の設定 conn.setAutoCommit(false); のところで例外 23:34:08,705 INFO [APNMsg] [RMI TCP Connection(16)-172.31.50.95]■□□データソースの取得:2:org.jboss.resource.adapter.jdbc.WrapperDataSource@6ca1a6 23:34:08,705 INFO [STDOUT] java.sql.SQLException: You cannot set autocommit during a managed transaction! 23:34:08,715 INFO [STDOUT] at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.setJdbcAutoCommit(BaseWrapperManagedConnection.java:468) 23:34:08,715 INFO [STDOUT] at org.jboss.resource.adapter.jdbc.WrappedConnection.setAutoCommit(WrappedConnection.java:443) 23:34:08,715 INFO [STDOUT] at fec.sb.maintenance.addapn.FmjAddApnBean.insertDB(FmjAddApnBean.java:563) が発生してしまいます。 <trans-attribute>RequiresNew</trans-attribute> をいろいろためしているところです。。。 ちなみに、UserTransactionはまだJNDIうまくいってません。 近況報告でした。。。 | ||||
|
投稿日時: 2005-06-25 00:00
Anthyhimeさん、こんばんわ。
引用: EntityBeanではないのでCMPやBMPとは関係がありません。 メソッドのトランザクション属性を変更してJTAオフの状態でDataSourceからConnectionを取得してくださいといっているだけです。 おそらくそれでautocommitをfalseに設定できるはずです。 CMTのトランザクション属性は、 Required なければ作る。普通。 RequiredNew 新たに作る。 Mandatory ないとエラー。 Supports あれば使う。 NotSupported あっても使わない。 Never あったらエラー。 だそうですが、Supports を設定すると。。。いけました!!! 本当にありがとうございます! ワンダフルです。。。これでいってしまおうかと思ってもいます。。。 ただ、依然としてUserTransactionの設定の仕方が分からず、悔しいです。 それがだめならTransactionManagerでもいいのです。 どなたか、やり方伝授していただけないでしょうか。。。 制御できないのなら制御できないことを知っておきたいのです。 | ||||
|
投稿日時: 2005-06-27 12:08
これらの処理がセッションBeanの中で閉じているのであれば、問題がある場合にセッション Beanのメソッドから例外を投げれば自動的にトランザクションがロールバックされます。 トランザクション属性をいろいろいじることを考えているようですが、今までの書き込みを 読む限りでは、そのようなことが必要とは思えません。EJBに関する理解が浅いまま、場当たり 的な対応はすべきでないと思います。 | ||||
