[Seasar-user:21819] Re: TomcatのJNDI との連携について

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2014年 3月 12日 (水) 11:11:12 JST


小林 様

ご回答ありがとうございます。

> なんとなくS2DBCPのコネクションプールも
> 記述されているので騙されそうになりますが、
> 実際にはTomcat側で設定されている (JTAとは
> 連携しない) データソースをそのまま使うような
> 設定になっています。以下の部分です。
私が完全に思い込みで見ていました。
前提が間違っていました。


> TomcatのデータソースであるCommons DBCPは、
> JTAトランザクションマネージャと連動しないので、
> (単独では) 使わないほうがいいと思いますよ。
> 
> ということになります。
納得いたしました。
補足いただきありがとうございます。


まとめると、
JNDIを Tomcat などJTA機能が無いAPPサーバーで使用する場合の注意点
・jdbc.dicon の データソース設定で class属性に「org.seasar.extension.dbcp.impl.DataSourceXADataSource」を指定する
<component name="DataSource"
    class="org.seasar.extension.dbcp.impl.DataSourceXADataSource"> 
    <property name="dataSourceName">"java:comp/env/jdbc/hoge"</property>
</component>

・「S2JDBC の コネクションプール設定の maxPoolSize属性 < Tomcat の リソース設定の maxActive」 に設定する


分かりやすくご説明頂き、ありがとうございました。




On Wed Mar 12 03:00:00 JST 2014
Koichi Kobayashi <koichik @ improvement.jp> wrote:

> 小林 (koichik) です。
> 
> >  コミットやロールバックは正常に行えるようですし、
> >  プールに戻す際のデッドロックも設定で回避できると回答を頂きました。
> 
> リンク先のブログに書かれているjdbc.diconの
> 設定はそうなってはいません (このスレッドの
> 設定と同じではありません)。
> 
> なんとなくS2DBCPのコネクションプールも
> 記述されているので騙されそうになりますが、
> 実際にはTomcat側で設定されている (JTAとは
> 連携しない) データソースをそのまま使うような
> 設定になっています。以下の部分です。
> 
> 	<component name="DataSource"
> 		class="javax.sql.DataSource">
> 		@org.seasar.extension.j2ee.JndiResourceLocator @ lookup("java:comp/env/jdbc/DataSource")
> 	</component>
> 
> class属性がDataSourceXADataSourceではないことに
> 注意。
> このデータソースがS2JDBCやS2DaoにDIされると、
> そこから取得されるコネクションはJTAと連携せず、
> おそらくは (JDBCのデフォルトである) 文単位
> トランザクションになります。
> 
> なので、ひがさんのコメントを少し捕捉すると、
> 
> TomcatのデータソースであるCommons DBCPは、
> JTAトランザクションマネージャと連動しないので、
> (単独では) 使わないほうがいいと思いますよ。
> 
> ということになります。
> 
> 
> On Tue, 11 Mar 2014 14:41:26 +0900, rasu @ mx4.tiki.ne.jp wrote:
> 
> > pianyiです。
> > 
> > ご回答ありがとうございます。
> > 
> > > > http://d.hatena.ne.jp/osakana_21/20081006/1223269740
> > > > コメント欄で書かれている意味はどういう事でしょうか?
> > > 
> > > 書いてある通りです。
> > > 不明点があれば具体的にお願いします。
> > 
> > ・「Tomcatのデータソースは、トランザクション(JTA)と
> >   連動しないので、使わないほうがいいと思いますよ。」
> >  使わない方が良い理由が良く分かりませんでした。
> >  
> >  コミットやロールバックは正常に行えるようですし、
> >  プールに戻す際のデッドロックも設定で回避できると回答を頂きました。
> > 
> >  連動していないと言う事は、DBコネクションが取得されたまま、解放されない等が起こるのでしょうか?
> > 
> > 分かりにくい表現で申し訳ありません。
> > 
> > 以上、よろしくお願いいたします。
> > 
> > 
> > 
> > 
> > On Tue Mar 11 01:23:43 JST 2014
> > Koichi Kobayashi <koichik @ improvement.jp> wrote:
> > 
> > > 小林 (koichik) です。
> > > 
> > > > 設定変更ごとに毎回、APPサーバーの再起動を行うのでしょうか?
> > > 
> > > 個人的にはそれが推奨です。
> > > 自分自身ではアプリの再デプロイをする運用は
> > > 考えません。
> > > 
> > > > この内容は、下記の設定を行う事で解決と考えて良いのでしょうか。
> > > > ・S2JDBCのmaxPoolSizeを10 にする
> > > > ・TomcatのmaxActiveを11以上にする
> > > 
> > > はい。
> > > 
> > > > http://d.hatena.ne.jp/osakana_21/20081006/1223269740
> > > > コメント欄で書かれている意味はどういう事でしょうか?
> > > 
> > > 書いてある通りです。
> > > 不明点があれば具体的にお願いします。
> > > 
> > > > 例えば、トランザクションのカスタマイザをServiceCustomizer で指定している場合、
> > > > Serviceのメソッドが終わってもcommit されないと言う事なのでしょうか?
> > > 
> > > いいえ。
> > > コミットはされますが、その後でコネクションを
> > > プールに戻す際にデッドロックになるケースが
> > > あるということです。
> > > 
> > > 
> > > On Mon, 10 Mar 2014 21:25:43 +0900, rasu @ mx4.tiki.ne.jp wrote:
> > > 
> > > > お世話になっております。
> > > > pianyiと申します。
> > > > 
> > > > 現在、SAStruts + S2JDBC + Postgresql9.3 + Tomcat7.50 で開発を行っておりますが、
> > > > DB接続方法をJNDIに変更した所、下記問題が発生して困っております。解決のヒントを下さい。
> > > > 
> > > > 
> > > > 1.diconファイルやJavaファイルを変更した時に発生する「Tomcatの自動リロード」が発生した場合、
> > > > DBコネクションが増えてしまい、接続数オーバー例外(FATAL: sorry, too many clients already)が発生してしまい
> > ます。
> > > > 
> > > > このような場合、どのような設定で開発を進めるのが一番良いでしょうか。
> > > > 設定変更ごとに毎回、APPサーバーの再起動を行うのでしょうか?
> > > > 
> > > > Context.xmlの設定:
> > > > <Resource name="jdbc/search"
> > > >           auth="Container"
> > > >           type="javax.sql.DataSource"
> > > >           driverClassName="org.postgresql.Driver"
> > > >           url="jdbc:postgresql://localhost:5432/aiueo"
> > > >           username="postgres"
> > > >           password="postgres" />
> > > > 
> > > > jdbc.diconの設定:
> > > > <components>
> > > >     <include path="jta.dicon"/>
> > > >     <!-- from JNDI -->
> > > >     <component name="updateDataSource"
> > > >         class="org.seasar.extension.dbcp.impl.DataSourceXADataSource">
> > > >         <property name="dataSourceName">"java:comp/env/jdbc/update"</property>
> > > >     </component>
> > > >     <component name="connectionPool"
> > > >         class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
> > > >         <property name="timeout">600</property>
> > > >         <property name="maxPoolSize">10</property>
> > > >         <property name="allowLocalTx">false</property>
> > > >         <property name="validationQuery">"select 1"</property>
> > > >         <property name="validationInterval">10000</property>
> > > >         <destroyMethod name="close"/>
> > > >     </component>
> > > >     <component name="updateDataSource"
> > > >         class="org.seasar.extension.dbcp.impl.DataSourceImpl"
> > > >     />
> > > > </components>
> > > > 
> > > > 
> > > > 
> > > > 2.下記URLに記載されている問題について教えて下さい。
> > > > (無断リンクで申し訳ありません)
> > > > 
> > > > http://paulownia.hatenablog.com/entry/20101223/1293112702
> > > > この内容は、下記の設定を行う事で解決と考えて良いのでしょうか。
> > > > ・S2JDBCのmaxPoolSizeを10 にする
> > > > ・TomcatのmaxActiveを11以上にする
> > > > 
> > > > 
> > > > http://d.hatena.ne.jp/osakana_21/20081006/1223269740
> > > > コメント欄で書かれている意味はどういう事でしょうか?
> > > > 例えば、トランザクションのカスタマイザをServiceCustomizer で指定している場合、
> > > > Serviceのメソッドが終わってもcommit されないと言う事なのでしょうか?
> > > > 
> > > > カスタマイザーの設定:
> > > > <component name="serviceCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
> > > >     <initMethod name="addAspectCustomizer">
> > > >         <arg>"aop.traceInterceptor"</arg>
> > > >     </initMethod>
> > > >     <initMethod name="addCustomizer">
> > > >         <arg>
> > > >             <component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
> > > >         </arg>
> > > >     </initMethod>
> > > > </component>
> > > > 
> > > > 
> > > > 
> > > > 3.JNDIを使用するにあたり注意事項や他の注意点など有りましたらご教授下さい。
> > > > (JNDIじゃ無くて別のを使う方が良い…など)
> > > > 
> > > > 因みに、JNDIの採用理由は、WARファイルを数十か所に配布するため、更新後のDB接続先などの変更ミスを防ぐため
> > です。
> > > > 
> > > > 
> > > > 
> > > > 以上、よろしくお願いいたします。
> > > > 
> > > > _______________________________________________
> > > > Seasar-user mailing list
> > > > Seasar-user @ ml.seasar.org
> > > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > > 
> > > 
> > > -- 
> > > {
> > >   name: "Koichi Kobayashi",
> > >   mail: "koichik @ improvement.jp",
> > >   blog: "http://d.hatena.ne.jp/koichik/",
> > >   twitter: "@koichik"
> > > }
> > > 
> > > _______________________________________________
> > > Seasar-user mailing list
> > > Seasar-user @ ml.seasar.org
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > > 
> > > 
> > 
> > _______________________________________________
> > Seasar-user mailing list
> > Seasar-user @ ml.seasar.org
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> 
> 
> -- 
> {
>   name: "Koichi Kobayashi",
>   mail: "koichik @ improvement.jp",
>   blog: "http://d.hatena.ne.jp/koichik/",
>   twitter: "@koichik"
> }
> 
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 
> 



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