Okay, I'll check it out.  I'm on the road today so it will
probably be tomorrow.  I think the only illegalargumentexception I added
was when you try to remove an event listener from an XAConnection and
there was no listener there...  As I said, I'll look into it.

Aaron

On Thu, 26 Oct 2000, Oleg Nitz wrote:
> Hi Aaron,
> 
> After the latest changes I sometimes get exceptions on transaction
> commit(), like this: 
> 
> java.lang.IllegalArgumentException
>     at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:72)
>     at 
>org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:418)
>     at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:99)
>     at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
>     at 
>org.jboss.ejb.StatefulSessionContainer.invoke(StatefulSessionContainer.java:326)
>     at 
>org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:163)
>     at java.lang.reflect.Method.invoke(Native Method)
>     at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)
>     at sun.rmi.transport.Transport$1.run(Transport.java:142)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at sun.rmi.transport.Transport.serviceCall(Transport.java:139)
>     at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443)
>     at 
>sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643)
>     at java.lang.Thread.run(Thread.java:484)
> 
> And on the next commit():
> 
> TRANSACTION ROLLBACK EXCEPTION:Application Error: tried to enter Stateful bean with 
>different transaction context; nested exception is:
>     java.rmi.RemoteException: Application Error: tried to enter Stateful bean with 
>different transaction context
> java.rmi.RemoteException: Application Error: tried to enter Stateful bean with 
>different transaction context                            Best regards,
>     at 
>org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSessionInstanceInterceptor.java:148)
>                      Oleg
>     at org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:133)
>     at 
>org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:378)
>     at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:99)       
>                                                   jBoss CVS Development wrote:
>     at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)          
>                                                   jCD>   User: mulder
>     at 
>org.jboss.ejb.StatefulSessionContainer.invoke(StatefulSessionContainer.java:326)      
>                                           jCD>   Date: 00/10/25 16:54:37
>     at 
>org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:163)
>     at java.lang.reflect.Method.invoke(Native Method)                                
>                                                   jCD>   Modified:    
>src/main/org/jboss/minerva/factories
>     at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)           
>                                                   jCD>                         
>XAConnectionFactory.java
>     at sun.rmi.transport.Transport$1.run(Transport.java:142)                         
>                                                   jCD>   Log:
>     at java.security.AccessController.doPrivileged(Native Method)                    
>                                                   jCD>   More compliant with JDBC 2 
>Optional Package spec.
>     at sun.rmi.transport.Transport.serviceCall(Transport.java:139)                   
>                                                   jCD>    - Don't de-register a 
>connection from transaction in case of error
>     at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443)      
>                                                   jCD>    - Don't allow commit, 
>rollback, or setAutoCommit(true) if registered
>     at 
>sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643)       
>                                           jCD>        with transaction
>     at java.lang.Thread.run(Thread.java:484)
> 
> I traced the first exception until the line 129 of
> XAConnectionFactory.java:
>         transListener = new TransactionListener() {
>             public void transactionFinished(XAConnectionImpl con) {
> here:           con.removeConnectionEventListener(errorListener);
> the IllegalArgumentException is thrown because errorListener is not
> found in the list of listeners. 
> 
> Certainly, it is possible that something is wrong in Castor-jBoss
> integration (all there exception appeared when I worked through
> Castor).
> Could you give me a tip, what might be done wrong, what error could
> cause the exception.
> 
> Regards,
>  Oleg
> 
>                                                                                      
>                                                                                      
>     jCD>   Also try to avoid a sporadic problem in load test where it tries to
> jCD>     deregister a connection from the transaction but it has no record
> jCD>     of a resource for the connection.  I think this is a threading issue
> jCD>     where somehow the event is triggered again before the listener is
> jCD>     removed, though that's only a guess.  Unfortunately I've only seen
> jCD>     the problem twice in about 50 5-minute runs, so it's pretty hard
> jCD>     to test for.
>   
> jCD>   Revision  Changes    Path
> jCD>   1.11      +8 -4      
>jboss/src/main/org/jboss/minerva/factories/XAConnectionFactory.java
>   
> jCD>   Index: XAConnectionFactory.java
> jCD>   ===================================================================
> jCD>   RCS file: 
>/products/cvs/ejboss/jboss/src/main/org/jboss/minerva/factories/XAConnectionFactory.java,v
> jCD>   retrieving revision 1.10
> jCD>   retrieving revision 1.11
> jCD>   diff -u -r1.10 -r1.11
> jCD>   --- XAConnectionFactory.java  2000/10/21 05:20:22     1.10
> jCD>   +++ XAConnectionFactory.java  2000/10/25 23:54:37     1.11
> jCD>   @@ -39,7 +39,7 @@
> jCD>     * connection, the same previous connection will be returned.  Otherwise,
> jCD>     * you won't be able to share changes across connections like you can with
> jCD>     * the native JDBC 2 Standard Extension implementations.</P>
> jCD>   - * @version $Revision: 1.10 $
> jCD>   + * @version $Revision: 1.11 $
> jCD>     * @author Aaron Mulder ([EMAIL PROTECTED])
> jCD>     */
> jCD>    public class XAConnectionFactory extends PoolObjectFactory {
> jCD>   @@ -78,7 +78,7 @@
> jCD>                    if(pool.isInvalidateOnError()) {
> jCD>                        pool.markObjectAsInvalid(evt.getSource());
> jCD>                    }
> jCD>   -                closeConnection(evt, XAResource.TMFAIL);
> jCD>   +//                closeConnection(evt, XAResource.TMFAIL);
> jCD>                }
>    
> jCD>                public void connectionClosed(ConnectionEvent evt) {
> jCD>   @@ -87,11 +87,16 @@
>    
> jCD>                private void closeConnection(ConnectionEvent evt, int status) {
> jCD>                    XAConnection con = (XAConnection)evt.getSource();
> jCD>   +                try {
> jCD>   +                    con.removeConnectionEventListener(listener);
> jCD>   +                } catch(IllegalArgumentException e) {
> jCD>   +                    return; // Removed twice somehow?
> jCD>   +                }
> jCD>                    Transaction trans = null;
> jCD>                    try {
> jCD>                        if(tm.getStatus() != Status.STATUS_NO_TRANSACTION) {
> jCD>                            trans = tm.getTransaction();
> jCD>   -                        XAResource res = 
>(XAResource)rms.get(con);//con.getXAResource();
> jCD>   +                        XAResource res = (XAResource)rms.get(con);
> jCD>                            trans.delistResource(res, status);
> jCD>                            rms.remove(con);
> jCD>                        }
> jCD>   @@ -99,7 +104,6 @@
> jCD>                        Logger.exception(e);
> jCD>                        throw new RuntimeException("Unable to deregister with 
>TransactionManager: "+e);
> jCD>                    }
> jCD>   -                con.removeConnectionEventListener(listener);
>    
> jCD>                    if(!(con instanceof XAConnectionImpl)) {
> jCD>                        // Real XAConnection -> not associated w/ transaction
> 
> 
> 


Reply via email to