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

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2014年 3月 10日 (月) 21:25:43 JST


お世話になっております。
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 メーリングリストの案内