Hi, all,
I've successfuly deployed SPECjAppServer2004 benchmark on Geronimo 1.0
(see http://issues.apache.org/jira/browse/GERONIMO-1800), but I have
trouble running the basic atomicity tests
(http://localhost:8080/SPECjAppServer/ page, link "Atomicity Tests")
that check the correctness of the benchmark operation - all three
tests
are marked FAILED.
The investigation (see below) showed that the root cause for the
problem
is the following piece of code:
org.tranql.connector.jdbc.ManagedJDBCConnection:
123 public XAResource getXAResource() throws ResourceException {
124 throw new NotSupportedException("XAResource not available
from
a LocalTransaction connection");
125 }
The question is, how critical this situation is? Does it mean
SPECjAppServer2004 uses things it shouldn't use? Or the problem
lies in
TranQL implementation, or maybe Derby database or Derby JDBC
driver? Or
does it mean SPECjAppServer2004 can't run on Geronimo at all?
Any ideas, suggestion and comments are highly welcome!
Thanks!
Here's the original stack displayed in Geronimo console window at each
atomicity tests' run:
javax.transaction.TransactionRolledbackException:
javax.ejb.FinderException: Error executing statement: SELECT C.C_ID
FROM
C_CUSTOMER C WHERE C.C_ID = ?
at
org.openejb.transaction.ContainerPolicy$TxRequired.invoke
(ContainerPolic
y.java:126)
at
org.openejb.transaction.TransactionContextInterceptor.invoke
(Transaction
ContextInterceptor.java:80)
at
org.openejb.slsb.StatelessInstanceInterceptor.invoke
(StatelessInstanceIn
terceptor.java:98)
at
org.openejb.transaction.ContainerPolicy$TxRequired.invoke
(ContainerPolic
y.java:140)
at
org.openejb.transaction.TransactionContextInterceptor.invoke
(Transaction
ContextInterceptor.java:80)
at
org.openejb.SystemExceptionInterceptor.invoke
(SystemExceptionInterceptor
.java:82)
at
org.openejb.GenericEJBContainer.invoke(GenericEJBContainer.java:238)
at
org.openejb.proxy.EJBMethodInterceptor.intercept
(EJBMethodInterceptor.ja
va:129)
at
org.openejb.proxy.SessionEJBObject$$EnhancerByCGLIB$
$4084bef.checkCustom
erCredit(<generated>)
at
org.spec.jappserver.servlet.helper.SpecAction.atomicityTestTwo
(SpecActio
n.java:166)
at
org.spec.jappserver.servlet.helper.SpecServletAction.doAtomicityTests(
Sp
ecServletAction.java:1304)
at
org.spec.jappserver.servlet.SpecAppServlet.performTask
(SpecAppServlet.ja
va:166)
at
org.spec.jappserver.servlet.SpecAppServlet.doGet
(SpecAppServlet.java:96)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
688)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
at
org.apache.geronimo.jetty.JettyServletHolder.handle
(JettyServletHolder.j
ava:99)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter
(Web
ApplicationHandler.java:830)
at
org.mortbay.jetty.servlet.JSR154Filter.doFilter(JSR154Filter.java:170)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter
(Web
ApplicationHandler.java:821)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch
(WebApplicationH
andler.java:471)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
568)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle
(WebApplicationCon
text.java:633)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
at org.mortbay.http.HttpServer.service(HttpServer.java:909)
at
org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
at
org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
at
org.mortbay.http.HttpConnection.handle(HttpConnection.java:833)
at
org.mortbay.http.SocketListener.handleConnection
(SocketListener.java:244
)
at
org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at
org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Note that the SQL prepared statement causing the error is correct and
references the table and fields that really exist in the database.
Executing this statement from a separate Java application using JDBC
causes no problem.
The code throwing this exception is:
org.openejb.transaction.ContainerPolicy$TxRequired.invoke():
117 try {
118 ejbInvocation.setTransactionContext(callerContext);
119 return interceptor.invoke(ejbInvocation);
120 } catch (Throwable t){
121 callerContext.setRollbackOnly();
122 if (ejbInvocation.getType().isLocal()) {
123 throw new
TransactionRolledbackLocalException().initCause(t);
124 } else {
125 // can't set an initCause on a
TransactionRolledbackException
126 -> throw new TransactionRolledbackException(t.getMessage
());
127 }
128 } finally {
129 ejbInvocation.setTransactionContext(null);
130 }
So, the real cause for the exception is unknown. Adding
t.printStackTrace() at line 125 provided the following stack:
javax.ejb.EJBException: javax.ejb.FinderException: Error executing
statement: SELECT C.C_ID FROM C_CUSTOMER C WHERE C.C_ID = ?
at
org.spec.jappserver.corp.customerses.ejb.CustomerSesEJB.checkCustomerC
re
dit(CustomerSesEJB.java:246)
at
org.spec.jappserver.corp.customerses.ejb.CustomerSesEJB$
$FastClassByCGLI
B$$c445ce6f.invoke(<generated>)
at
org.openejb.dispatch.AbstractMethodOperation.invoke
(AbstractMethodOperat
ion.java:90)
at
org.openejb.slsb.BusinessMethod.execute(BusinessMethod.java:67)
at
org.openejb.dispatch.DispatchInterceptor.invoke
(DispatchInterceptor.java
:72)
at
org.apache.geronimo.naming.java.ComponentContextInterceptor.invoke
(Compo
nentContextInterceptor.java:56)
at
org.openejb.ConnectionTrackingInterceptor.invoke
(ConnectionTrackingInter
ceptor.java:81)
at
org.openejb.transaction.ContainerPolicy$TxRequired.invoke
(ContainerPolic
y.java:119)
at
org.openejb.transaction.TransactionContextInterceptor.invoke
(Transaction
ContextInterceptor.java:80)
at
org.openejb.slsb.StatelessInstanceInterceptor.invoke
(StatelessInstanceIn
terceptor.java:98)
at
org.openejb.transaction.ContainerPolicy$TxRequired.invoke
(ContainerPolic
y.java:142)
at
org.openejb.transaction.TransactionContextInterceptor.invoke
(Transaction
ContextInterceptor.java:80)
at
org.openejb.SystemExceptionInterceptor.invoke
(SystemExceptionInterceptor
.java:82)
at
org.openejb.GenericEJBContainer.invoke(GenericEJBContainer.java:238)
at
org.openejb.proxy.EJBMethodInterceptor.intercept
(EJBMethodInterceptor.ja
va:129)
at
org.openejb.proxy.SessionEJBObject$$EnhancerByCGLIB$
$82edd9c9.checkCusto
merCredit(<generated>)
at
org.spec.jappserver.servlet.helper.SpecAction.atomicityTestTwo
(SpecActio
n.java:166)
at
org.spec.jappserver.servlet.helper.SpecServletAction.doAtomicityTests(
Sp
ecServletAction.java:1304)
at
org.spec.jappserver.servlet.SpecAppServlet.performTask
(SpecAppServlet.ja
va:166)
at
org.spec.jappserver.servlet.SpecAppServlet.doGet
(SpecAppServlet.java:96)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
688)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
at
org.apache.geronimo.jetty.JettyServletHolder.handle
(JettyServletHolder.j
ava:99)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter
(Web
ApplicationHandler.java:830)
at
org.mortbay.jetty.servlet.JSR154Filter.doFilter(JSR154Filter.java:170)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter
(Web
ApplicationHandler.java:821)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch
(WebApplicationH
andler.java:471)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
568)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle
(WebApplicationCon
text.java:633)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
at org.mortbay.http.HttpServer.service(HttpServer.java:909)
at
org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
at
org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
at
org.mortbay.http.HttpConnection.handle(HttpConnection.java:833)
at
org.mortbay.http.SocketListener.handleConnection
(SocketListener.java:244
)
at
org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at
org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Caused by: javax.ejb.FinderException: Error executing statement:
SELECT
C.C_ID FROM C_CUSTOMER C WHERE C.C_ID = ?
at
org.openejb.entity.cmp.SingleValuedFinder.execute
(SingleValuedFinder.jav
a:83)
at
org.openejb.dispatch.DispatchInterceptor.invoke
(DispatchInterceptor.java
:72)
at
org.apache.geronimo.naming.java.ComponentContextInterceptor.invoke
(Compo
nentContextInterceptor.java:56)
at
org.openejb.ConnectionTrackingInterceptor.invoke
(ConnectionTrackingInter
ceptor.java:81)
at
org.openejb.entity.EntityInstanceInterceptor.invoke
(EntityInstanceInterc
eptor.java:136)
at
org.openejb.entity.cmp.InTxCacheInterceptor.invoke
(InTxCacheInterceptor.
java:90)
at
org.openejb.transaction.ContainerPolicy$TxRequired.invoke
(ContainerPolic
y.java:119)
at
org.openejb.transaction.TransactionContextInterceptor.invoke
(Transaction
ContextInterceptor.java:80)
at
org.openejb.SystemExceptionInterceptor.invoke
(SystemExceptionInterceptor
.java:82)
at
org.openejb.GenericEJBContainer.invoke(GenericEJBContainer.java:238)
at
org.openejb.proxy.EJBMethodInterceptor.intercept
(EJBMethodInterceptor.ja
va:129)
at
org.openejb.proxy.EntityEJBLocalHome$$EnhancerByCGLIB$
$bc77798c.findByPr
imaryKey(<generated>)
at
org.spec.jappserver.corp.customerses.ejb.CustomerSesEJB.checkCustomerC
re
dit(CustomerSesEJB.java:243)
... 38 more
Caused by: org.tranql.ql.QueryException: Error executing statement:
SELECT C.C_ID FROM C_CUSTOMER C WHERE C.C_ID = ?
at
org.tranql.sql.jdbc.JDBCQueryCommand.execute(JDBCQueryCommand.java:79)
at
org.tranql.cache.cache.FindByPKCacheQueryCommand.execute
(FindByPKCacheQu
eryCommand.java:66)
at org.openejb.entity.cmp.CMPFinder.execute(CMPFinder.java:99)
at
org.openejb.entity.cmp.SingleValuedFinder.execute
(SingleValuedFinder.jav
a:80)
... 50 more
Caused by: java.sql.SQLException
at
org.tranql.connector.jdbc.DataSource.getConnection(DataSource.java:61)
at
$javax.sql.DataSource$$FastClassByCGLIB$$6525cafd.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at
org.apache.geronimo.connector.ConnectorMethodInterceptor.intercept
(Conne
ctorMethodInterceptor.java:53)
at
$javax.sql.DataSource$$EnhancerByCGLIB$$5149252c.getConnection
(<generate
d>)
at
org.tranql.sql.DataSourceDelegate.getConnection
(DataSourceDelegate.java:
39)
at
org.tranql.sql.jdbc.JDBCQueryCommand.execute(JDBCQueryCommand.java:61)
... 53 more
Caused by: XAResource not available from a LocalTransaction connection
at
org.tranql.connector.jdbc.ManagedJDBCConnection.getXAResource
(ManagedJDB
CConnection.java:124)
at
org.apache.geronimo.connector.outbound.XAResourceInsertionInterceptor.
ge
tConnection(XAResourceInsertionInterceptor.java:43)
at
org.apache.geronimo.connector.outbound.SinglePoolConnectionInterceptor
.i
nternalGetConnection(SinglePoolConnectionInterceptor.java:63)
at
org.apache.geronimo.connector.outbound.AbstractSinglePoolConnectionInt
er
ceptor.getConnection(AbstractSinglePoolConnectionInterceptor.java:73)
at
org.apache.geronimo.connector.outbound.TransactionEnlistingInterceptor
.g
etConnection(TransactionEnlistingInterceptor.java:47)
at
org.apache.geronimo.connector.outbound.TransactionCachingInterceptor.g
et
Connection(TransactionCachingInterceptor.java:81)
at
org.apache.geronimo.connector.outbound.ConnectionHandleInterceptor.get
Co
nnection(ConnectionHandleInterceptor.java:43)
at
org.apache.geronimo.connector.outbound.TCCLInterceptor.getConnection
(TCC
LInterceptor.java:39)
at
org.apache.geronimo.connector.outbound.ConnectionTrackingInterceptor.g
et
Connection(ConnectionTrackingInterceptor.java:66)
at
org.apache.geronimo.connector.outbound.AbstractConnectionManager.alloc
at
eConnection(AbstractConnectionManager.java:57)
at
org.tranql.connector.jdbc.DataSource.getConnection(DataSource.java:56)
... 59 more
Vasily Zakharov
Intel Middleware Product Division