[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 メーリングリストの案内