[ 
https://issues.apache.org/jira/browse/DERBY-6110?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14126420#comment-14126420
 ] 

Mamta A. Satoor commented on DERBY-6110:
----------------------------------------

Hi Knut, when you say that "This suggests that the connection should work after 
the transaction branch has been ended, and that it is correct to leave the 
logical connection open.", do you mean that the logical connection should work 
after the distributed transaction branch has been ended and hence it is correct 
to leave the logical connection open? Haven't work in XA code in a log time and 
hence this might be a very basic question? Thanks

> BrokeredConnection.isClosed() may open a new connection
> -------------------------------------------------------
>
>                 Key: DERBY-6110
>                 URL: https://issues.apache.org/jira/browse/DERBY-6110
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.8.2.2
>            Reporter: Knut Anders Hatlen
>              Labels: derby_triage10_11
>
> I noticed this odd-looking stack trace in the thread dump provided in 
> DERBY-5632:
> "DRDAConnThread_22" prio=3 tid=0x0000000101b81800 nid=0x31 waiting for 
> monitor entry [0xfffffffd236fe000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>       at 
> org.apache.derby.impl.store.access.RAMAccessManager.conglomCacheFind(Unknown 
> Source)
>       - waiting to lock <0xfffffffd3a7fcc68> (a 
> org.apache.derby.impl.services.cache.ConcurrentCache)
>       at 
> org.apache.derby.impl.store.access.RAMTransaction.findExistingConglomerate(Unknown
>  Source)
>       at 
> org.apache.derby.impl.store.access.RAMTransaction.openConglomerate(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndexMinion(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getDescriptorViaIndex(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.locateSchemaRow(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.getSchemaDescriptor(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.initDefaultSchemaDescriptor(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.initialize(Unknown
>  Source)
>       at org.apache.derby.impl.db.BasicDatabase.setupConnection(Unknown 
> Source)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.startTransaction(Unknown 
> Source)
>       at 
> org.apache.derby.impl.jdbc.EmbedConnection.checkUserIsNotARole(Unknown Source)
>       at 
> org.apache.derby.impl.jdbc.EmbedConnection.checkUserCredentials(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection40.<init>(Unknown Source)
>       at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source)
>       at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
>       at org.apache.derby.jdbc.EmbeddedDataSource.getConnection(Unknown 
> Source)
>       at 
> org.apache.derby.jdbc.EmbedPooledConnection.openRealConnection(Unknown Source)
>       at org.apache.derby.jdbc.EmbedXAConnection.getRealConnection(Unknown 
> Source)
>       at 
> org.apache.derby.iapi.jdbc.BrokeredConnection.getRealConnection(Unknown 
> Source)
>       at org.apache.derby.iapi.jdbc.BrokeredConnection.isClosed(Unknown 
> Source)
>       at 
> org.apache.derby.impl.drda.PiggyBackedSessionData.getInstance(Unknown Source)
>       at 
> org.apache.derby.impl.drda.Database.getPiggyBackedSessionData(Unknown Source)
>       at org.apache.derby.impl.drda.DRDAConnThread.writePBSD(Unknown Source)
>       at org.apache.derby.impl.drda.DRDAConnThread.processCommands(Unknown 
> Source)
>       at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)
> It looks as if BrokeredConnection.isClosed() fails to find a usable physical 
> connection and then tries to open a new one. Presumably, when this happens, 
> isClosed() will return false. It sounds more reasonable to return true in 
> such circumstances.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to