[Seasar-user:15323] Re: 【S2JDBC】シーケンス取得処理で物理コネクションが開放されない

OKADA Ikue [E-MAIL ADDRESS DELETED]
2008年 8月 8日 (金) 16:04:40 JST


岡田です。
たびたび申し訳ございません。下記の件に補足いたします。

コンポーネントは、以下のようにapp.diconに設定しており、

<component
class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
  <initMethod name="addReferenceClass">
    <arg>@[E-MAIL ADDRESS DELETED]</arg>
  </initMethod>
  <initMethod name="addClassPattern">
    <arg>"samples.servlet.logic"</arg>
    <arg>".*Logic"</arg>
  </initMethod>
</component>

トランザクション管理を行うパターンの場合は、
以下を併せて記述しています。

<component
class="org.seasar.framework.container.autoregister.AspectAutoRegister">
  <property name="interceptor">j2ee.requiredTx</property>
  <initMethod name="addClassPattern">
    <arg>"samples.servlet.logic"</arg>
    <arg>".*Logic"</arg>
  </initMethod>
</component>


※以下の記述でも試しました。
<component class="samples.servlet.logic.SampleLogic">
  <aspect>j2ee.requiredTx</aspect>
</component>



OKADA Ikue さんは書きました:
> 岡田と申します。
> 
> トランザクション管理されていないコンポーネントで
> S2JDBCを使ってデータをINSERTするとき、シーケンスの取得処理で
> DBへの物理コネクションが毎回作成されて開放されず、
> コネクションの使い切りが発生するという現象が起きております。
> 
> SequenceGeneratorで、DBのシーケンスを参照してIDを振っているのですが、
> システムの仕様上、シーケンスのallocationSizeを1とする必要があり
> シーケンス取得のために毎回DBアクセスが発生し、そのときに
> 現象が発生しております。
> ※下記サンプルのSampleLogicに、トランザクションを適用した場合と
>  適用しない場合のログを添付いたします。
> 
> 以下はサンプルとして、サーブレット内でトランザクション管理されていない
> コンポーネントを実行しています。
> 10回目のリクエストで、jdbc.diconに設定するプール数(10)の上限に達し
> 応答が返ってこなくなります。
> ※実際に開発するシステムでは、サーブレットではなく
>  MessageDrivenBean内でコンポーネントを使おうとしています。
> 
> トランザクション管理設定をすれば、物理コネクションが作成されなくなるため
> 問題は解消できるのですが、そもそもシーケンスの取得処理で
> このような現象が発生するのは、どのような原因なのでしょうか?
> コンポーネントの使い方や設定に問題があるのでしょうか。
> ご教示いただければ幸いです。
> 
> --------------------------------------------------------
> OS          :WindowsXP
> JRE         :1.6.0_03
> APサーバ    :JBoss 4.0.3 SP1
> DB          :PostgreSQL 8.3.1
> S2Container :2.4.24
> SAStruts    :1.0.1
> --------------------------------------------------------
> 
> [SampleServlet.java]
> public class SampleServlet extends HttpServlet {
>   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
> 		throws ServletException, IOException {
>     S2Container container = SingletonS2ContainerFactory.getContainer();
>     SampleLogic logic =
>       (SampleLogic)container.getComponent(SampleLogic.class);
> 
>     logic.insertSample();
>   }
> }
> 
> [SampleLogic.java]
> public class SampleLogic {
>   public JdbcManager jdbcManager;
>   public void insertSample() {
>     SampleEntity entity = new SampleEntity();
>     entity.name = "ikue";
>     entity.message = "test";
>     int result = jdbcManager.insert(entity).execute();
>   }	
> }
> 
> [SampleEntity.java]
> @Entity
> public class SampleEntity {
>   @Id
>   @GeneratedValue(strategy = GenerationType.SEQUENCE,
>     generator = "SAMPLE_ID_GEN")
>   @SequenceGenerator(name = "SAMPLE_ID_GEN",
>     sequenceName = "seq_sample_id", allocationSize = 1)
> 
>   public int id;
>   public String name;
>   public String message;
> }
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user


-- 
------------------------------------------------------------------------
 * 岡田 育枝 [ Ikue OKADA ]
------------------------------------------------------------------------
 * 富士フイルムソフトウエア株式会社
 * ソフトウエア第三事業部 ソリューション開発部
 * イメージング&グラフィックソリューショングループ
 * Email : [E-MAIL ADDRESS DELETED]
 * Tel : 044-953-0719
 * Web : http://ffs.fujifilm.co.jp/
 * PGP fingerprint : 837F 64FC 9A56 2C1C 04CF D62C DC5A A3E0 08E4 7C6A
------------------------------------------------------------------------


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