Hi,

We use the following JBOSS Datasource:

<datasources>
  |         <ha-local-tx-datasource>
  |       <!--
  |         The JNDI name under which the DataSource wrapper will be bound. 
Note that
  |                 this name is relative to the "java:/" prefix unless 
use-java-context is false.-->
  |       <jndi-name>OracleDS</jndi-name>
  | 
  |                 <!-- Setting this to false will bind the DataSource into 
global jndi -->
  | 
  |                 <use-java-context>false</use-java-context>
  | 
  | 
  |       <!--      An element to specify that all intermediate end(suspend) and
  |                         start(resume) calls.  Also, all work on one tx will 
go through one
  |                         connection.
  |                         A side effect of this (currently at least) is that 
a connection will only
  |                         be usable by one tx until the tx commits.
  |                                    <track-connection-by-tx/>
  |         -->
  | 
  | 
  | 
  |            <!--  The database URL . -->
  |       <connection-url>${redbox.oracle.url}</connection-url>
  |       <url-delimeter>;</url-delimeter>
  | 
  |                    <!-- The fully qualifed name of the javax.sql.Driver 
implementation class   -->
  |         
<driver-class>${redbox.oracle.driver.class:oracle.jdbc.OracleDriver}</driver-class>
  | 
  |            <!-- The login and password. Remplace
  |               <user-name>${redbox.oracle.username}</user-name>
  | <?xml version="1.0"?>
  | <!DOCTYPE connection-factories
  |     PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
  |     "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd";>
  | 
  | <!-- The Hypersonic embedded database JCA connection factory config
  | $Id: oracle-nonxa-ds.xml,v 1.4 2006/05/18 07:21:38 pignace Exp $ -->
  | 
  | <datasources>
  |         <ha-local-tx-datasource>
  | 
  | 
  |       <!--
  |         The JNDI name under which the DataSource wrapper will be bound. 
Note that
  |                 this name is relative to the "java:/" prefix unless 
use-java-context is false.-->
  |       <jndi-name>OracleDS</jndi-name>
  | 
  |                 <!-- Setting this to false will bind the DataSource into 
global jndi -->
  | 
  |                 <use-java-context>false</use-java-context>
  | 
  | 
  |       <!--      An element to specify that all intermediate end(suspend) and
  |                         start(resume) calls.  Also, all work on one tx will 
go through one
  |                         connection.
  |                         A side effect of this (currently at least) is that 
a connection will only
  |                         be usable by one tx until the tx commits.
  |                                    <track-connection-by-tx/>
  |         -->
  | 
  | 
  | 
  |            <!--  The database URL . -->
  |       <connection-url>${redbox.oracle.url}</connection-url>
  |       <url-delimeter>;</url-delimeter>
  | 
  |                    <!-- The fully qualifed name of the javax.sql.Driver 
implementation class   -->
  |         
<driver-class>${redbox.oracle.driver.class:oracle.jdbc.OracleDriver}</driver-class>
  | 
  |            <!-- The login and password. Remplace
  |               <user-name>${redbox.oracle.username}</user-name>
  |               <password>${redbox.oracle.password}</password>
  |                 -->
  | 
  |                 <connection-property 
name="User">${redbox.oracle.username}</connection-property>
  |                 <connection-property 
name="Password">${redbox.oracle.password}</connection-property>
  |                 <user-name>${redbox.oracle.username}</user-name>
  |             <password>${redbox.oracle.password}</password>
  | 
  | 
  | 
  |       <!--example of how to specify class that determines if exception 
means connection should be destroyed-->
  |       
<!--exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyExceptionSorter</exception-sorter-class-name-->
  | 
  |       <!-- this will be run before a managed connection is removed from the 
pool for use by a client-->
  |       <!-- new-connection-sql>select DUMMY from DUAL</new-connection-sql -->
  | 
  |       <!-- The minimum connections in a pool/sub-pool. Pools are lazily 
constructed on first use -->
  |       <min-pool-size>1</min-pool-size>
  | 
  |       <!-- The maximum connections in a pool/sub-pool -->
  |       <max-pool-size>10</max-pool-size>
  | 
  |       <!-- The time before an unused connection is destroyed -->
  |       <!-- NOTE: This is the check period. It will be destroyed somewhere 
between 1x and 2x this timeout after last use -->
  |       <!-- TEMPORARY FIX! - Disable idle connection removal, HSQLDB has a 
problem with not reaping threads on closed connections -->
  |       <idle-timeout-minutes>1</idle-timeout-minutes>
  | 
  |       <!-- sql to call when connection is created -->
  |         <new-connection-sql>select DUMMY from DUAL</new-connection-sql>
  | 
  |       <!-- sql to call on an existing pooled connection when it is obtained 
from pool  -->
  |          <check-valid-connection-sql>select DUMMY from 
DUAL</check-valid-connection-sql>
  | 
  |        <!-- Oracles XA datasource cannot reuse a connection outside a 
transaction once enlisted in a global transaction and vice-versa -->
  |     <no-tx-separate-pools/>
  | 
  |       <!-- example of how to specify a class that determines a connection 
is valid before it is handed out from the pool -->
  |          <valid-connection-checker-class-name>
  |                 
org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker
  |          </valid-connection-checker-class-name>
  | 
  | <!-- Checks the Oracle error codes and messages for fatal errors -->
  |     
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
  | 
  |       <!-- Whether to check all statements are closed when the connection 
is returned to the pool,
  |            this is a debugging feature that should be turned off in 
production -->
  |       <track-statements/>
  | 
  |       <!-- Use the getConnection(user, pw) for logins
  |         <application-managed-security/>
  |       -->
  | 
  |       <!-- Use the security domain defined in conf/login-config.xml -->
  |       <!-- security-domain>HsqlDbRealm</security-domain -->
  | 
  |       <!-- Use the security domain defined in conf/login-config.xml or the
  |            getConnection(user, pw) for logins. The security domain takes 
precedence.
  |         
<security-domain-and-application>HsqlDbRealm</security-domain-and-application>
  |       -->
  | 
  |         <!-- set-tx-query-timeout/ -->
  |         <!-- query-timeout>10</query-timeout -->
  | 
  |       <type-mapping>Oracle9i</type-mapping>
  |    </ha-local-tx-datasource>
  | </datasources>

Sometimes, we noticed that 2 threads are locked (see the following thread dump):

Open lock chains
  | ================
  | Chain 1:
  | "http-0.0.0.0-8080-3" id=306 idx=0x9a tid=4669 waiting for 
oracle/jdbc/driver/T4CCon
  | [EMAIL PROTECTED] held by:
  | "http-0.0.0.0-8080-2" id=305 idx=0x98 tid=4668 (active)
  | 
  | ===== END OF THREAD DUMP ===============
  | 
  | 
  | "http-0.0.0.0-8080-3" id=306 idx=0x9a tid=4669 prio=5 alive, in native, 
interrupted, blocked, daemon
  | -- Blocked trying to get lock: oracle/jdbc/driver/[EMAIL PROTECTED] lock]
  | at _dl_sysinfo_int80+2(:0)@0x4737a2
  | at ptWaitForEvent+45(:0)@0xb7ec8481
  | at vmtWaitUntilNotSoftSuspended+67(:0)@0xb7ed39f7
  | at tsCheckTransitToJava+26(:0)@0xb7ed3a4a
  | at jrockit/vm/Threads.shortNap(I)V(Native Method)
  | at jrockit/vm/Locks.waitForThinRelease(Ljava/lang/Object;I)I(Unknown Source)
  | at 
jrockit/vm/Locks.monitorEnterSecondStage(Ljava/lang/Object;I)Ljava/lang/Object;
  | (Unknown Source)
  | at 
jrockit/vm/Locks.monitorEnter(Ljava/lang/Object;)Ljava/lang/Object;(Unknown 
Source)[optimized]
  | at 
oracle/jdbc/driver/PhysicalConnection.prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;(PhysicalCon
  | nection.java:651)
  | 
  | 
  | "http-0.0.0.0-8080-2" id=305 idx=0x98 tid=4668 prio=5 alive, in native, 
interrupted, daemon
  | at _dl_sysinfo_int80+0(:0)@0x4737a0
  | at RJNI_jrockit_net_SocketNativeIO_readBytesPinned+180(:0)@0xb7eb1428
  | at jrockit/net/SocketNativeIO.readBytesPinned(I[BIII)I(Native Method)
  | at 
jrockit/net/SocketNativeIO.socketRead(Ljava/io/FileDescriptor;[BIII)I(Unknown 
Source)
  | at 
java/net/SocketInputStream.socketRead0(Ljava/io/FileDescriptor;[BIII)I(Unknown S
  | ource)
  | at java/net/SocketInputStream.read([BII)I(SocketInputStream.java:129)
  | at oracle/net/ns/Packet.receive()V(Unknown Source)
  | at oracle/net/ns/DataPacket.receive()V(Unknown Source)
  | at oracle/net/ns/NetInputStream.getNextPacket()V(Unknown Source)
  | at oracle/net/ns/NetInputStream.read([BII)I(Unknown Source)
  | at oracle/net/ns/NetInputStream.read([B)I(Unknown Source)
  | at oracle/net/ns/NetInputStream.read()I(Unknown Source)
  | at oracle/jdbc/driver/T4CMAREngine.unmarshalUB1()S(T4CMAREngine.java:978)
  | at oracle/jdbc/driver/T4CMAREngine.unmarshalSB1()B(T4CMAREngine.java:950)
  | at oracle/jdbc/driver/T4C8Oall.receive()V(T4C8Oall.java:434)
  | at 
oracle/jdbc/driver/T4CPreparedStatement.doOall8(ZZZZ)V(T4CPreparedStatement.java:181)
  | at 
oracle/jdbc/driver/T4CPreparedStatement.execute_for_rows(Z)V(T4CPreparedStatement.java:629)
  | at 
oracle/jdbc/driver/OracleStatement.doExecuteWithTimeout()V(OracleStatement.java:1080)
  | at 
oracle/jdbc/driver/OraclePreparedStatement.executeInternal()I(OraclePreparedS
  | tatement.java:2904)
  | at 
oracle/jdbc/driver/OraclePreparedStatement.executeUpdate()I(OraclePreparedStatement.java:2976)
  | ^-- Holding lock: oracle/jdbc/driver/[EMAIL PROTECTED] lock]
  | ^-- Holding lock: oracle/jdbc/driver/[EMAIL PROTECTED] lock]
  | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Is it a bug of the JDBC driver or the JBOSS datasource implementation? At any 
rate, if we use the C3P0 connection pool instead of JBOSS 
ManagedConnectionPool, the problem of blocked threads do not occur any more.

Do you have an explaination?

Thanks in advance.

Best Regards,

David

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4100588#4100588

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4100588
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to