1

Ubuntu12.04.1でGlassfish3.1.2を実行しています。

私はデータベース接続プールを次のように定義しています:

jdbc-connection-pool validation-table-name="sysibm.sysdummy1" datasource-classname="com.ibm.db2.jcc.DB2DataSource" pooling="false" res-type="javax.sql.DataSource" wrap-jdbc-objects="false" name="eERPnextPool" is-connection-validation-required="true">
      <property name="portNumber" value="12345"></property>
      <property name="databaseName" value="MYDB"></property>
      <property name="driverType" value="4"></property>
      <property name="serverName" value="192.168.0.2"></property>
      <property name="user" value="MYDB"></property>
      <property name="password" value="MYDB"></property>
      <property name="enableNamedParameterMarkers" value="1"></property>
    </jdbc-connection-pool>
    <jdbc-resource pool-name="eERPnextPool" description="" jndi-name="jdbc/eERPnextDataSource"></jdbc-resource>

EJBに次のようなコードがある場合:

InitialContext initialContext = null;
Connection conn = null;
Connection conn1 = null;
try {
    initialContext = new InitialContext();
    DataSource workDs = (DataSource) initialContext.lookup("jdbc/eERPnextDataSource");
    conn = workDs.getConnection();
    conn1 = workDs.getConnection();

    System.out.println("conn = " + conn + " = " + conn.unwrap(DB2Connection.class));
    System.out.println("conn1 = " + conn1 + " = " + conn1.unwrap(DB2Connection.class));
} catch (Exception e) {
    Log.error("ERROR", e);
} finally {
    conn.close();
    conn1.close();
    initialContext.close();
}

私は得る:

conn  = com.sun.gjc.spi.jdbc40.ConnectionHolder40@2df6b722 = com.ibm.db2.jcc.t4.b@207130c1
conn1 = com.sun.gjc.spi.jdbc40.ConnectionHolder40@2ebfbc98 = com.ibm.db2.jcc.t4.b@207130c1

したがって、2つの異なる接続ホルダーの背後に同じ物理接続があります。何故ですか?これは正常ですか?

4

1 に答える 1

0

@TransactionManagement(TransactionManagementType.BEAN)をクラス定義に追加します。

@LocalBean                                                                                                                                                                
@TransactionManagement(TransactionManagementType.BEAN)                                                                                                                    
public class HelloBean {  
.....
}

違いを生んだ。これで、workDs.getConnection()を2回呼び出すと、2つの接続が得られます。しかし、今はロールバック/コミットを自分で呼び出す必要があります。これは私にとってより便利です。

于 2012-12-31T16:18:02.913 に答える