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

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


岡田と申します。

トランザクション管理されていないコンポーネントで
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;
}


-- 
Ikue OKADA <[E-MAIL ADDRESS DELETED]>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Log-Servlet-NoTx.txt
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20080808/b2865998/attachment-0002.txt>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Log-Servlet-Tx.txt
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20080808/b2865998/attachment-0003.txt>


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