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

Gavin King gavin.king at jboss.com
Fri Dec 15 23:34:06 EST 2006


  User: gavin   
  Date: 06/12/15 23:34:06

  Modified:    src/main/org/jboss/seam/core    Events.java
  Added:       src/main/org/jboss/seam/core   
                        LocalTransactionListener.java
                        TransactionListener.java
  Log:
  transaction success events
  
  Revision  Changes    Path
  1.15      +5 -0      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.14
  retrieving revision 1.15
  diff -u -b -r1.14 -r1.15
  --- Events.java	16 Dec 2006 02:58:10 -0000	1.14
  +++ Events.java	16 Dec 2006 04:34:06 -0000	1.15
  @@ -121,6 +121,11 @@
         Dispatcher.instance().scheduleEvent(type, 0l, null, null, parameters);
      }
      
  +   public void raiseTransactionSuccessEvent(String type, Object... parameters)
  +   {
  +      TransactionListener.instance().scheduleEvent(type, parameters);
  +   }
  +   
      public void raiseTimedEvent(String type, long duration, Object... parameters)
      {
         Dispatcher.instance().scheduleEvent(type, duration, null, null, parameters);
  
  
  
  1.1      date: 2006/12/16 04:34:06;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/core/LocalTransactionListener.java
  
  Index: LocalTransactionListener.java
  ===================================================================
  package org.jboss.seam.core;
  
  import javax.ejb.Local;
  
  @Local
  public interface LocalTransactionListener
  {
     public void scheduleEvent(String type, Object... parameters);
     public void destroy();
  }
  
  
  
  1.1      date: 2006/12/16 04:34:06;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/core/TransactionListener.java
  
  Index: TransactionListener.java
  ===================================================================
  package org.jboss.seam.core;
  
  import static org.jboss.seam.annotations.Install.BUILT_IN;
  
  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 org.jboss.seam.Component;
  import org.jboss.seam.ScopeType;
  import org.jboss.seam.annotations.Destroy;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.contexts.Contexts;
  
  @Stateful
  @Scope(ScopeType.EVENT)
  @Name("org.jboss.seam.core.transactionListener")
  @Install(value=false, precedence=BUILT_IN)
  public class TransactionListener implements LocalTransactionListener, SessionSynchronization
  {
     static class Event
     {
        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>();
     
     public static LocalTransactionListener instance()
     {
        if ( !Contexts.isApplicationContextActive() )
        {
           throw new IllegalStateException("no application context active");
        }
        return (LocalTransactionListener) Component.getInstance(TransactionListener.class);         
     }
     
     public void afterBegin() throws EJBException, RemoteException
     {
     }
     
     public void scheduleEvent(String type, Object... parameters)
     {
        events.add( new Event(type, parameters) );
     }
  
     public void afterCompletion(boolean success) throws EJBException, RemoteException
     {
        try
        {
           if (success)
           {
              for (Event event: events) event.call();
           }
        }
        finally
        {
           events.clear();
        }
     }
  
     public void beforeCompletion() throws EJBException, RemoteException
     {
     }
     
     @Remove @Destroy
     public void destroy() {}
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list