Ole,

1- when you modify a class please please please add yourself as author
2- it seems to slow down the whole system dramatically we need to think some
more

marc

|-----Original Message-----
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of jBoss CVS
|Development
|Sent: Friday, February 09, 2001 10:56 AM
|To: [EMAIL PROTECTED]
|Subject: [jBoss-Dev] CVS update: jboss/src/main/org/jboss/ejb
|MethodInvocation.java
|
|
|  User: osh
|  Date: 01/02/09 10:56:14
|
|  Modified:    src/main/org/jboss/ejb MethodInvocation.java
|  Log:
|  Changed tx export/propagation/import in preparation to JTA independence.
|
|  Revision  Changes    Path
|  1.10      +130 -35   jboss/src/main/org/jboss/ejb/MethodInvocation.java
|
|  Index: MethodInvocation.java
|  ===================================================================
|  RCS file:
|/products/cvs/ejboss/jboss/src/main/org/jboss/ejb/MethodInvocation.java,v
|  retrieving revision 1.9
|  retrieving revision 1.10
|  diff -u -r1.9 -r1.10
|  --- MethodInvocation.java    2000/12/07 15:44:11     1.9
|  +++ MethodInvocation.java    2001/02/09 18:56:14     1.10
|  @@ -14,9 +14,14 @@
|   import java.lang.reflect.Method;
|   import java.util.Map;
|
|  +import javax.naming.InitialContext;
|  +import javax.naming.NamingException;
|  +
|   import java.security.Principal;
|   import javax.transaction.Transaction;
|
|  +import org.jboss.tm.TransactionPropagationContextImporter;
|  +
|   import org.jboss.logging.Logger;
|
|   /**
|  @@ -27,58 +32,110 @@
|    *  @see <related>
|    *  @author Rickard Öberg ([EMAIL PROTECTED])
|    *  @author <a href="mailto:[EMAIL PROTECTED]">Marc Fleury</a>.
|  - *  @version $Revision: 1.9 $
|  + *  @version $Revision: 1.10 $
|    */
|   public class MethodInvocation
|   {
|      // Constants -----------------------------------------------------
|
|      // Attributes ----------------------------------------------------
|  +
|      Object id;
|      Object[] args;
|
|  -    Transaction tx;
|  -    Principal identity;
|  -  Object credential;
|  +   Principal identity;
|  +   Object credential;
|
|  -    Method m;
|  -    EnterpriseContext ctx;
|  +   Method m;
|  +   EnterpriseContext ctx;
|
|  +
|      // Static --------------------------------------------------------
|
|  +   private static TransactionPropagationContextImporter tpcImporter;
|  +
|  +
|      // Constructors --------------------------------------------------
|  +
|  +   /**
|  +    *  Create a new instance.
|  +    *
|  +    *  @param id
|  +    *    The id of target EJB of this method invocation.
|  +    *  @param m
|  +    *    The method to invoke. This method is declared in the remote or
|  +    *    home interface of the bean.
|  +    *  @param args
|  +    *    The arguments for this invocation.
|  +    *  @param tpc
|  +    *    The transaction propagation context of this invocation.
|  +    *  @param identity
|  +    *    The security identity to use in this invocation.
|  +    *  @param credential
|  +    *    The security credentials to use in this invocation.
|  +    */
|      public MethodInvocation(Object id, Method m, Object[] args,
|Transaction tx,
|  -    Principal identity, Object credential )
|  +                           Principal identity, Object credential)
|      {
|  -        this.id = id;
|  -        this.m = m;
|  -        this.args = args;
|  -        this.tx = tx;
|  -        this.identity = identity;
|  -    this.credential = credential;
|  +      this.id = id;
|  +      this.m = m;
|  +      this.args = args;
|  +      this.tpc = null;
|  +      this.tx = tx;
|  +      this.identity = identity;
|  +      this.credential = credential;
|      }
|  +
|  +   /**
|  +    *  Create a new instance.
|  +    *
|  +    *  @param id
|  +    *    The id of target EJB of this method invocation.
|  +    *  @param m
|  +    *    The method to invoke. This method is declared in the remote or
|  +    *    home interface of the bean.
|  +    *  @param args
|  +    *    The arguments for this invocation.
|  +    *  @param identity
|  +    *    The security identity to use in this invocation.
|  +    *  @param credential
|  +    *    The security credentials to use in this invocation.
|  +    *  @param tpc
|  +    *    The transaction propagation context of this invocation.
|  +    */
|  +   public MethodInvocation(Object id, Method m, Object[] args,
|  +                           Principal identity, Object
|credential, Object tpc)
|  +   {
|  +      this.id = id;
|  +      this.m = m;
|  +      this.args = args;
|  +      this.tpc = tpc;
|  +      this.tx = null;
|  +      this.identity = identity;
|  +      this.credential = credential;
|  +   }
|  +
|      // Public --------------------------------------------------------
|  +
|      public Object getId() { return id; }
|
|      public Method getMethod()
|      {
|  -        return m;
|  +      return m;
|      }
|
|      public Object[] getArguments()
|      {
|         return args;
|      }
|  -
|  -    /*
|  -    * setTransaction()
|  -    *
|  -    * This method sets the transaction associated with the method
|  -    * Note that this doesn't mean that the transaction is associated
|  -    * with the thread.  In fact this is the only place it exists until
|  -    * the TxInterceptor logic.  Notably it might be the case that the
|  -    * tx associated here is different than the one on the
|target instance.
|  -    */
|  +
|  +    /**
|  +     *  This method sets the transaction associated with the method.
|  +     *  Note that this doesn't mean that the transaction is associated
|  +     *  with the thread.  In fact this is the only place it
|exists until
|  +     *  the TxInterceptor logic.  Notably it might be the case that the
|  +     *  tx associated here is different than the one on the
|target instance.
|  +     */
|       public void setTransaction(Transaction tx)
|       {
|
|  @@ -87,9 +144,36 @@
|           this.tx = tx;
|
|       }
|  -
|  +
|  +    /**
|  +     *  Return the transaction associated with the method.
|  +     *
|  +     *  If no transaction is associated with this method but we have
|  +     *  a transaction propagation context, import the TPC into the
|  +     *  transaction manager, and associate the resulting transaction
|  +     *  with this method before returning it.
|  +     */
|       public Transaction getTransaction()
|       {
|  +        if (tx == null) {
|  +            // See if we have a transaction propagation context
|  +            if (tpc != null) {
|  +                // import the propagation context
|  +                if (tpcImporter == null) {
|  +                    try {
|  +                      tpcImporter =
|(TransactionPropagationContextImporter)new
|InitialContext().lookup("java:/TransactionPropagationContextImporter");
|  +                    } catch (NamingException ex) {
|  +                        // No importer: Log exception, and return null.
|  +                        Logger.exception(ex);
|  +                        return null;
|  +                    }
|  +                }
|  +                tx =
|tpcImporter.importTransactionPropagationContext(tpc);
|  +//DEBUG                Logger.debug("Imported transaction " + tx +
|  +//DEBUG                             " on Method invocation " +
|hashCode() +
|  +//DEBUG                             " " + m.getName());
|  +            }
|  +        }
|           return tx;
|       }
|
|  @@ -113,22 +197,23 @@
|           return credential;
|       }
|
|  -    /*
|  -    * setEnterpriseContext()
|  -    *
|  -    * Once a context is associated to a Method Invocation the
|MI can pass it all the relevant information
|  -    * We set Transaction and Principal
|  -    */
|  +    /**
|  +     *  Set the enterprise context of this invocation.
|  +     *
|  +     *  Once a context is associated to a Method Invocation,
|  +     *  the MI can pass it all the relevant information.
|  +     *  We set Transaction and Principal.
|  +     */
|       public void setEnterpriseContext(EnterpriseContext ctx)
|       {
|           this.ctx = ctx;
|  -
|  +
|           //Set the transaction
|           // MF FIXME: wrong decision. Setting the context is
|just an assocation of the
|           // the Method invocation to the instance.  Decisions on
|the transaction association
|           // should be done elsewhere (new interceptor)
|           //ctx.setTransaction(tx);
|  -
|  +
|           // Set the principal
|           // MF FIXME: a warning really.  The association of the
|context variables (tx, principal)
|           // to the enterprise Context should not be done here
|but by the final interceptor in the
|  @@ -148,7 +233,17 @@
|      // Protected -----------------------------------------------------
|
|      // Private -------------------------------------------------------
|  -
|  -    // Inner classes -------------------------------------------------
|  +
|  +   /**
|  +    *  The transaction propagation context of this invocation.
|  +    */
|  +   private Object tpc;
|  +
|  +   /**
|  +    *  The transaction of this invocation.
|  +    */
|  +   private Transaction tx;
|  +
|  +   // Inner classes -------------------------------------------------
|   }
|
|
|
|
|


Reply via email to