Hi,

Our EJB app contains a servlet which runs a number of daemon threads on 
startup. Threads access entity beans that use common JDBC connections pool.
I'm observing strange problems in the following scenario:
- daemon calls entity bean finder
- (due to our bug) finder generates NPE and fails
As far as I can see it all happens without a TX context, so there's nothing to 
rollback.
- another daemon thread tries to get a connection from the pool but hits 
"Transaction is not active".

It looks like some connection in the pool gets 'broken', daemon threads can't 
ever get DB connections after this.

Here's a relevant stack trace:
anonymous wrote : 
  | 2006-12-27 14:43:29,158 ERROR  [jb.plugins.LogInterceptor] 
TransactionRolledbackException in method: public abstract java.util.Collection 
com.supportwizard.dml.interfaces.SWRecordHome.findByTableAndFieldValue(com.supportwizard.seance.Seance,java.lang.Long,java.lang.String,java.lang.Object)
 throws javax.ejb.FinderException,java.rmi.RemoteException, causedBy:
  | java.lang.NullPointerException
  |     at java.lang.StringBuffer.(StringBuffer.java:104)
  |     at com.supportwizard.db.SQLBase.prepareColumnName(SQLBase.java:179)
  |     at com.supportwizard.db.SQLBase.prepareWhere(SQLBase.java:100)
  |     at 
com.supportwizard.db.SQLText_mysql.getQueryText(SQLText_mysql.java:133)
  |     at com.supportwizard.db.SQLText.getQueryText(SQLText.java:121)
  |     at com.supportwizard.db.SWInternal_SQL.sqlQuery(SWInternal_SQL.java:470)
  |     at com.supportwizard.db.SWInternal_SQL.sqlQuery(SWInternal_SQL.java:447)
  |     at 
com.supportwizard.utils.ejb.SWBMPEntityBean.genericMultiFind(SWBMPEntityBean.java:957)
  |     at 
com.supportwizard.utils.ejb.SWBMPEntityBean.genericMultiFind(SWBMPEntityBean.java:920)
  |     at 
com.supportwizard.utils.ejb.SWBMPEntityBean.genericMultiFind(SWBMPEntityBean.java:865)
  |     at 
com.supportwizard.utils.ejb.SWBMPEntityBean.genericMultiFind(SWBMPEntityBean.java:834)
  |     at 
com.supportwizard.dml.ejb.SWRecordBean.ejbFindByTableAndFieldValues(SWRecordBean.java:447)
  |     at 
com.supportwizard.dml.ejb.SWRecordBean.ejbFindByTableAndFieldValue(SWRecordBean.java:401)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |     at java.lang.reflect.Method.invoke(Method.java:585)
  |     at 
org.jboss.ejb.plugins.BMPPersistenceManager.callFinderMethod(BMPPersistenceManager.java:632)
  |     at 
org.jboss.ejb.plugins.BMPPersistenceManager.findEntities(BMPPersistenceManager.java:335)
  |     at 
org.jboss.resource.connectionmanager.CachedConnectionInterceptor.findEntities(CachedConnectionInterceptor.java:242)
  |     at org.jboss.ejb.EntityContainer.find(EntityContainer.java:706)
  |     at sun.reflect.GeneratedMethodAccessor179.invoke(Unknown Source)
  |     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |     at java.lang.reflect.Method.invoke(Method.java:585)
  |     at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
  |     at 
org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:1130)
  |     at 
org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:203)
  |     at 
org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:189)
  |     at 
org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:105)
  |     at 
org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:134)
  |     at 
org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockInterceptor.java:76)
  |     at 
org.jboss.ejb.plugins.EntityCreationInterceptor.invokeHome(EntityCreationInterceptor.java:43)
  |     at 
org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:125)
  |     at 
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:378)
  |     at 
org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:161)
  |     at 
org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:145)
  |     at 
org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:132)
  |     at 
org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invokeHome(ProxyFactoryFinderInterceptor.java:107)
  |     at 
org.jboss.ejb.EntityContainer.internalInvokeHome(EntityContainer.java:514)
  |     at org.jboss.ejb.Container.invoke(Container.java:975)
  |     at sun.reflect.GeneratedMethodAccessor174.invoke(Unknown Source)
  |     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |     at java.lang.reflect.Method.invoke(Method.java:585)
  |     at 
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
  |     at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
  |     at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
  |     at 
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
  |     at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
  |     at 
org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:169)
  |     at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:118)
  |     at 
org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:206)
  |     at 
org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:192)
  |     at 
org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
  |     at 
org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70)
  |     at org.jboss.proxy.ejb.HomeInterceptor.invoke(HomeInterceptor.java:184)
  |     at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
  |     at $Proxy1164.findByTableAndFieldValue(Unknown Source)
  |     at 
com.supportwizard.swmail.daemon.UserHelper.getUserIdByEmailColumns(UserHelper.java:208)
  |     at 
com.supportwizard.swmail.daemon.UserHelper.getUserIdByEmailAndProject(UserHelper.java:181)
  |     at 
com.supportwizard.swmail.daemon.EmailDaemon.processIncomingMail(EmailDaemon.java:243)
  |     at com.supportwizard.swmail.daemon.EmailDaemon.run(EmailDaemon.java:784)
  |     at 
com.supportwizard.swmail.daemon.manager.TaskCarrier.run(TaskCarrier.java:84)
  |     at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
  |     at 
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:280)
  |     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:135)
  |     at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:65)
  |     at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:142)
  |     at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:166)
  |     at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
  |     at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
  |     at java.lang.Thread.run(Thread.java:595)
  | 2006-12-27 14:43:29,163 ERROR  [.InboundEmailFilterHelper] Delete not 
accepted 
  | 2006-12-27 14:43:29,168 WARN   [swmail.daemon.EmailDaemon] Checking email 
failed
  | com.supportwizard.utils.SWRuntimeException: 
com.supportwizard.db.SW_SQLException: Exception in DBConnect
  |     at 
com.supportwizard.swmail.MailStorageBase.dbConnect(MailStorageBase.java:40)
  |     at 
com.supportwizard.swmail.ReceivedMailsStorage.delete(ReceivedMailsStorage.java:221)
  |     at com.supportwizard.swmail.daemon.EmailDaemon.run(EmailDaemon.java:785)
  |     at 
com.supportwizard.swmail.daemon.manager.TaskCarrier.run(TaskCarrier.java:84)
  |     at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
  |     at 
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:280)
  |     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:135)
  |     at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:65)
  |     at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:142)
  |     at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:166)
  |     at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
  |     at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
  |     at java.lang.Thread.run(Thread.java:595)
  | Caused by: com.supportwizard.db.SW_SQLException: Exception in DBConnect
  |     at 
com.supportwizard.db.SWInternal_SQL.dbConnect(SWInternal_SQL.java:263)
  |     at 
com.supportwizard.db.SWInternal_SQL.dbConnect(SWInternal_SQL.java:213)
  |     at 
com.supportwizard.swmail.MailStorageBase.dbConnect(MailStorageBase.java:37)
  |     ... 12 more
  | Caused by: org.jboss.util.NestedSQLException: Transaction is not active: 
tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=server7/3995, BranchQual=, 
localId=3995]; - nested throwable: (javax.resource.ResourceException: 
Transaction is not active: tx=TransactionImpl:XidImpl[FormatId=257, 
GlobalId=server7/3995, BranchQual=, localId=3995])
  |     at 
org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:94)
  |     at 
com.supportwizard.db.SWInternal_SQL.dbConnect(SWInternal_SQL.java:253)
  |     ... 14 more
  | Caused by: javax.resource.ResourceException: Transaction is not active: 
tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=server7/3995, BranchQual=, 
localId=3995]
  |     at 
org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:290)
  |     at 
org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:379)
  |     at 
org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:812)
  |     at 
org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:88)
  |     ... 15 more
  | 

The first 'TransactionRolledBack' message makes me think that in fact there is 
a transaction, but I can't find where it is created. UserTransaction isn't used 
anywhere, SWRecordBean finders are marked as 'Supports'.

Of course we will fix this NPE, but the fact that such exception can leave 
connection pool in an inconsistent state really frightens me.
Is it a JBoss bug or we're doing something wrong?

Thanks.

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

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

Reply via email to