[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...

Gavin King gavin.king at jboss.com
Wed Jun 20 17:44:41 EDT 2007


  User: gavin   
  Date: 07/06/20 17:44:41

  Modified:    src/main/org/jboss/seam/core      Events.java
                        LocalTransactionListener.java
                        TransactionListener.java
  Added:       src/main/org/jboss/seam/core     
                        AbstractTransactionListener.java
                        EjbTransactionListener.java
  Log:
  workaround problem on WAS
  
  Revision  Changes    Path
  1.32      +2 -2      jboss-seam/src/main/org/jboss/seam/core/Events.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Events.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Events.java,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -b -r1.31 -r1.32
  --- Events.java	20 Jun 2007 20:42:21 -0000	1.31
  +++ Events.java	20 Jun 2007 21:44:41 -0000	1.32
  @@ -123,9 +123,9 @@
         getTransactionListener().scheduleEvent(type, parameters);
      }
   
  -   private LocalTransactionListener getTransactionListener()
  +   private TransactionListener getTransactionListener()
      {
  -      LocalTransactionListener transactionListener = TransactionListener.instance();
  +      TransactionListener transactionListener = AbstractTransactionListener.instance();
         if (transactionListener==null)
         {
            throw new IllegalStateException("org.jboss.seam.core.transactionListener is not installed");
  
  
  
  1.5       +2 -4      jboss-seam/src/main/org/jboss/seam/core/LocalTransactionListener.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: LocalTransactionListener.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/LocalTransactionListener.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- LocalTransactionListener.java	18 Jun 2007 03:21:33 -0000	1.4
  +++ LocalTransactionListener.java	20 Jun 2007 21:44:41 -0000	1.5
  @@ -1,12 +1,10 @@
   package org.jboss.seam.core;
   
   import javax.ejb.Local;
  -import javax.transaction.Synchronization;
  +
   
   @Local
  -public interface LocalTransactionListener
  +public interface LocalTransactionListener extends TransactionListener
   {
  -   public void scheduleEvent(String type, Object... parameters);
  -   public void registerSynchronization(Synchronization sync);
      public void destroy();
   }
  
  
  
  1.10      +3 -127    jboss-seam/src/main/org/jboss/seam/core/TransactionListener.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: TransactionListener.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/TransactionListener.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -b -r1.9 -r1.10
  --- TransactionListener.java	20 Jun 2007 20:42:21 -0000	1.9
  +++ TransactionListener.java	20 Jun 2007 21:44:41 -0000	1.10
  @@ -1,133 +1,9 @@
   package org.jboss.seam.core;
   
  -import static org.jboss.seam.annotations.Install.BUILT_IN;
  -
  -import java.io.Serializable;
  -import java.rmi.RemoteException;
  -import java.util.ArrayList;
  -import java.util.List;
  -
  -import javax.ejb.EJBException;
  -import javax.ejb.Remove;
  -import javax.ejb.SessionSynchronization;
  -import javax.ejb.Stateful;
  -import javax.transaction.Status;
   import javax.transaction.Synchronization;
   
  -import org.jboss.seam.Component;
  -import org.jboss.seam.ScopeType;
  -import org.jboss.seam.annotations.Install;
  -import org.jboss.seam.annotations.Logger;
  -import org.jboss.seam.annotations.Name;
  -import org.jboss.seam.annotations.Scope;
  -import org.jboss.seam.contexts.Contexts;
  -import org.jboss.seam.log.Log;
  -
  -/**
  - * Temporary solution for getting JTA transaction lifecycle
  - * callbacks. Once all appservers support the new EE5 APIs,
  - * this will be removed.
  - * 
  - * @author Gavin King
  - *
  - */
  - at Stateful
  - at Scope(ScopeType.EVENT)
  - at Name("org.jboss.seam.core.transactionListener")
  - at Install(value=false, precedence=BUILT_IN)
  -public class TransactionListener implements LocalTransactionListener, SessionSynchronization
  +public interface TransactionListener
   {
  -   private static @Logger Log log;
  -   
  -   static class Event implements Serializable
  -   {
  -      private String type;
  -      private Object[] parameters;
  -      
  -      public Event(String type, Object[] parameters)
  -      {
  -         this.type = type;
  -         this.parameters = parameters;
  -      }
  -      public void call()
  -      {
  -         Events.instance().raiseEvent(type, parameters);
  -      }
  -   }
  -
  -   private List<Event> events = new ArrayList<Event>();
  -   private List<Synchronization> synchronizations = new ArrayList<Synchronization>();
  -   
  -   public static LocalTransactionListener instance()
  -   {
  -      if ( !Contexts.isEventContextActive() )
  -      {
  -         throw new IllegalStateException("no event context active");
  -      }
  -      return (LocalTransactionListener) Component.getInstance(TransactionListener.class, ScopeType.EVENT);         
  -   }
  -   
  -   public void afterBegin() throws EJBException, RemoteException {}
  -   
  -   public void scheduleEvent(String type, Object... parameters)
  -   {
  -      events.add( new Event(type, parameters) );
  -   }
  -   
  -   public void registerSynchronization(Synchronization sync)
  -   {
  -      synchronizations.add(sync);
  -   }
  -
  -   public void afterCompletion(boolean success) throws EJBException, RemoteException
  -   {
  -      Events.instance().raiseEvent("org.jboss.seam.afterTransactionCompletion", success);
  -      for (Synchronization sync: synchronizations)
  -      {
  -         try
  -         {
  -            sync.afterCompletion(success ? Status.STATUS_COMMITTED : Status.STATUS_ROLLEDBACK);
  -         }
  -         catch (Exception e)
  -         {
  -            log.error("Exception processing transaction Synchronization after completion", e);
  -         }
  -      }
  -      synchronizations.clear();
  -      if (success)
  -      {
  -         for (Event event: events)
  -         {
  -            try
  -            {
  -               event.call();
  -            }
  -            catch (Exception e)
  -            {
  -               log.error("Exception processing transaction success event", e);
  -            }
  -         }
  -         events.clear();
  -      }
  -   }
  -
  -   public void beforeCompletion() throws EJBException, RemoteException
  -   {
  -      Events.instance().raiseEvent("org.jboss.seam.beforeTransactionCompletion");
  -      for (Synchronization sync: synchronizations)
  -      {
  -         try
  -         {
  -            sync.beforeCompletion();
  -         }
  -         catch (Exception e)
  -         {
  -            log.error("Exception processing transaction Synchronization before completion", e);
  -         }
  -      }
  -   }
  -   
  -   @Remove
  -   public void destroy() {}
  -
  +   public void scheduleEvent(String type, Object... parameters);
  +   public void registerSynchronization(Synchronization sync);
   }
  
  
  
  1.1      date: 2007/06/20 21:44:41;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/core/AbstractTransactionListener.java
  
  Index: AbstractTransactionListener.java
  ===================================================================
  package org.jboss.seam.core;
  
  import static org.jboss.seam.annotations.Install.BUILT_IN;
  
  import java.io.Serializable;
  import java.util.ArrayList;
  import java.util.List;
  
  import javax.transaction.Status;
  import javax.transaction.Synchronization;
  
  import org.jboss.seam.Component;
  import org.jboss.seam.ScopeType;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Logger;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.contexts.Contexts;
  import org.jboss.seam.log.Log;
  
  /**
   * Temporary solution for getting JTA transaction lifecycle
   * callbacks. Once all appservers support the new EE5 APIs,
   * this will be removed.
   * 
   * @author Gavin King
   *
   */
  @Scope(ScopeType.EVENT)
  @Name("org.jboss.seam.core.transactionListener")
  @Install(value=false, precedence=BUILT_IN)
  public class AbstractTransactionListener implements TransactionListener
  {
     private static @Logger Log log;
     
     private List<Event> events = new ArrayList<Event>();
     private List<Synchronization> synchronizations = new ArrayList<Synchronization>();
     
     private static class Event implements Serializable
     {
        private String type;
        private Object[] parameters;
        
        public Event(String type, Object[] parameters)
        {
           this.type = type;
           this.parameters = parameters;
        }
        public void call()
        {
           Events.instance().raiseEvent(type, parameters);
        }
     }
  
     public static TransactionListener instance()
     {
        if ( !Contexts.isEventContextActive() )
        {
           throw new IllegalStateException("no event context active");
        }
        return (TransactionListener) Component.getInstance(AbstractTransactionListener.class, ScopeType.EVENT);         
     }
        
     public void scheduleEvent(String type, Object... parameters)
     {
        events.add( new Event(type, parameters) );
     }
     
     public void registerSynchronization(Synchronization sync)
     {
        synchronizations.add(sync);
     }
  
     protected void afterTransactionCompletion(boolean success)
     {
        Events.instance().raiseEvent("org.jboss.seam.afterTransactionCompletion", success);
        for (Synchronization sync: synchronizations)
        {
           try
           {
              sync.afterCompletion(success ? Status.STATUS_COMMITTED : Status.STATUS_ROLLEDBACK);
           }
           catch (Exception e)
           {
              log.error("Exception processing transaction Synchronization after completion", e);
           }
        }
        synchronizations.clear();
        if (success)
        {
           for (Event event: events)
           {
              try
              {
                 event.call();
              }
              catch (Exception e)
              {
                 log.error("Exception processing transaction success event", e);
              }
           }
           events.clear();
        }
     }
     
     protected void beforeTransactionCompletion()
     {
        Events.instance().raiseEvent("org.jboss.seam.beforeTransactionCompletion");
        for (Synchronization sync: synchronizations)
        {
           try
           {
              sync.beforeCompletion();
           }
           catch (Exception e)
           {
              log.error("Exception processing transaction Synchronization before completion", e);
           }
        }
     }
     
  }
  
  
  
  1.1      date: 2007/06/20 21:44:41;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/core/EjbTransactionListener.java
  
  Index: EjbTransactionListener.java
  ===================================================================
  package org.jboss.seam.core;
  
  import static org.jboss.seam.annotations.Install.FRAMEWORK;
  
  import java.rmi.RemoteException;
  
  import javax.ejb.EJBException;
  import javax.ejb.Remove;
  import javax.ejb.SessionSynchronization;
  import javax.ejb.Stateful;
  
  import org.jboss.seam.ScopeType;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  
  /**
   * Temporary solution for getting JTA transaction lifecycle
   * callbacks. Once all appservers support the new EE5 APIs,
   * this will be removed.
   * 
   * @author Gavin King
   *
   */
  @Stateful
  @Scope(ScopeType.EVENT)
  @Name("org.jboss.seam.core.transactionListener")
  @Install(precedence=FRAMEWORK, value=false)
  public class EjbTransactionListener extends AbstractTransactionListener 
        implements LocalTransactionListener, SessionSynchronization
  {
     public void afterCompletion(boolean success) throws EJBException, RemoteException
     {
        super.afterTransactionCompletion(success);
     }
  
     public void beforeCompletion() throws EJBException, RemoteException
     {
        super.beforeTransactionCompletion();
     }
     
     public void afterBegin() throws EJBException, RemoteException {}
     
     @Remove
     public void destroy() {}
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list