I'm looking at it Chris.
On Jul 25, 2007, at 10:57 PM, Christopher Blythe wrote:
I was working on DayTrader 2.0 when I found that the resetTrade
method for all of the runtime modes (with the exception of Direct
mode) would fail. I went back and deploy DayTrader 1.2 on GMO 2.0
and noticed the same behavior. I then went back and deploy DT 1.2
on GMO 1.1.1 and resetTrade worked for EJB mode like a champ.
If you look in the ejb-jar.xml and check out the container
transactions, you see the following...
<container-transaction>
<method>
<ejb-name>TradeEJB</ejb-name>
<method-intf>Remote</method-intf>
<method-name>resetTrade</method-name>
<method-params>
<method-param>boolean</method-param>
</method-params>
</method>
...
<trans-attribute>NotSupported</trans-attribute>
</container-transaction>
<container-transaction>
...
<method>
<ejb-name>TradeEJB</ejb-name>
<method-name>*</method-name>
</method>
...
<trans-attribute>Required</trans-attribute>
</container-transaction>
The impl for resetTrade in the TradeEJB session bean calls to the
TradeDirect code in order to perform the reset. The TradeDirect
code manages the transaction commits on its own. That is why the
resetTrade method in TradeEJB was marked as NotSupported.
As I mentioned earlier, this was recognized by the Geronimo 1.1.1
container; however, it looks like the Geronimo 2.0 container is not
picking this up.
A look at some of the OpenEJB trace information seems to confirm
this...
22:11:51,437 INFO [OpenEJB] invoking method resetTrade on ejb/
TradeEJB with identity null
22:11:51,437 INFO [Transaction] TX Required: Started transaction
[EMAIL PROTECTED]
22:11:51,437 TRACE [SinglePoolConnectionInterceptor] Supplying
pooled connection MCI:
[EMAIL PROTECTED]
MC: [EMAIL PROTECTED] from
pool:
org.apache.geronimo.connector.outbound.SinglePoolConnectionInterceptor
@56525652
22:11:51,437 TRACE [TransactionCachingInterceptor] supplying
connection from pool null for managed connection
[EMAIL PROTECTED] to tx
caching interceptor
[EMAIL PROTECTED]
c005c00
22:11:51,546 ERROR [Log] Error: Failed to reset Trade
Just for reference, here is the exception that is being thrown....
22:51:04,031 ERROR [Log] Error: Failed to reset Trade
com.ibm.db2.jcc.b.SqlException: setAutoCommit(true) invalid
during global transaction
com.ibm.db2.jcc.b.SqlException: setAutoCommit(true) invalid during
global transaction
at com.ibm.db2.jcc.b.p.setAutoCommit(p.java:1152)
at com.ibm.db2.jcc.b.dc.setAutoCommit(dc.java:151)
at
org.tranql.connector.jdbc.ManagedXAConnection.localTransactionCommit
(ManagedXAConnection.java :104)
at org.tranql.connector.AbstractManagedConnection
$LocalTransactionImpl.commit(AbstractManagedConnection.java:192)
at org.tranql.connector.jdbc.ConnectionHandle.commit
(ConnectionHandle.java:115)
at
org.apache.geronimo.samples.daytrader.direct.TradeDirect.commit
(TradeDirect.java:2044)
at
org.apache.geronimo.samples.daytrader.direct.TradeDirect.resetTrade
(TradeDirect.java:1964)
at
org.apache.geronimo.samples.daytrader.ejb.TradeBean.resetTrade
(TradeBean.java:931)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java :64)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at
org.apache.openejb.core.interceptor.ReflectionInvocationContext
$Invocation.invoke (ReflectionInvocationContext.java:146)
at
org.apache.openejb.core.interceptor.ReflectionInvocationContext.procee
d(ReflectionInvocationContext.java:129)
at
org.apache.openejb.core.interceptor.InterceptorStack.invoke
(InterceptorStack.java:67)
at
org.apache.openejb.core.stateless.StatelessContainer._invoke
(StatelessContainer.java:203)
at
org.apache.openejb.core.stateless.StatelessContainer.invoke
(StatelessContainer.java :165)
...
Anyone have any thoughts on this one?
Chris
--
"I say never be complete, I say stop being perfect, I say let...
lets evolve, let the chips fall where they may." - Tyler Durden