djencks     2005/02/14 13:32:31

  Modified:    modules/core/src/java/org/openejb/mdb MDBContainer.java
                        MDBContext.java MDBInstanceContext.java
  Log:

  implement the amazing rules on when getTimerService() and the TimerService 
and Timer methods are available
  
  Revision  Changes    Path
  1.24      +4 -4      
openejb/modules/core/src/java/org/openejb/mdb/MDBContainer.java
  
  Index: MDBContainer.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/mdb/MDBContainer.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- MDBContainer.java 1 Feb 2005 22:26:03 -0000       1.23
  +++ MDBContainer.java 14 Feb 2005 18:32:30 -0000      1.24
  @@ -83,7 +83,7 @@
   import org.openejb.cache.InstancePool;
   import org.openejb.dispatch.InterfaceMethodSignature;
   import org.openejb.dispatch.SystemMethodIndices;
  -import org.openejb.timer.BasicTimerService;
  +import org.openejb.timer.BasicTimerServiceImpl;
   
   /**
    * @version $Revision$ $Date$
  @@ -100,7 +100,7 @@
       private final boolean[] deliveryTransacted;
       private final TransactionContextManager transactionContextManager;
       private final Map methodIndexMap;
  -    private final BasicTimerService timerService;
  +    private final BasicTimerServiceImpl timerService;
   
       public MDBContainer(String containerId,
               String ejbName,
  @@ -167,7 +167,7 @@
           contextFactory.setSystemChain(chains.getSystemChain());
           
contextFactory.setTransactionContextManager(transactionContextManager);
           if (timer != null) {
  -            timerService = new BasicTimerService(systemMethodIndices, 
interceptor, timer, objectName, kernel.getKernelName(), 
ObjectName.getInstance(objectName), transactionContextManager, classLoader);
  +            timerService = new BasicTimerServiceImpl(systemMethodIndices, 
interceptor, timer, objectName, kernel.getKernelName(), 
ObjectName.getInstance(objectName), transactionContextManager, classLoader);
               contextFactory.setTimerService(timerService);
           } else {
               timerService = null;
  
  
  
  1.7       +27 -1     
openejb/modules/core/src/java/org/openejb/mdb/MDBContext.java
  
  Index: MDBContext.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/mdb/MDBContext.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- MDBContext.java   1 Feb 2005 22:27:50 -0000       1.6
  +++ MDBContext.java   14 Feb 2005 18:32:30 -0000      1.7
  @@ -62,6 +62,7 @@
   import org.openejb.EJBContextImpl;
   import org.openejb.EJBInstanceContext;
   import org.openejb.EJBOperation;
  +import org.openejb.timer.TimerState;
   
   /**
    * Implementation of MessageDrivenContext using the State pattern to 
determine
  @@ -87,6 +88,13 @@
                   userTransaction.setOnline(false);
               }
           }
  +        
context.setTimerServiceAvailable(timerServiceAvailable[operation.getOrdinal()]);
  +    }
  +
  +    public boolean setTimerState(EJBOperation operation) {
  +        boolean oldTimerState = TimerState.getTimerState();
  +        
TimerState.setTimerState(timerMethodsAvailable[operation.getOrdinal()]);
  +        return oldTimerState;
       }
   
       public MessageContext getMessageContext() throws IllegalStateException {
  @@ -239,4 +247,22 @@
           states[EJBOperation.ENDPOINT.getOrdinal()] = BIZ_WSENDPOINT;
           states[EJBOperation.TIMEOUT.getOrdinal()] = EJBTIMEOUT;
       }
  +    //spec p 344
  +    private static final boolean timerServiceAvailable[] = new 
boolean[EJBOperation.MAX_ORDINAL];
  +
  +    static {
  +        timerServiceAvailable[EJBOperation.EJBCREATE.getOrdinal()] = true;
  +        timerServiceAvailable[EJBOperation.EJBREMOVE.getOrdinal()] = true;
  +        timerServiceAvailable[EJBOperation.BIZMETHOD.getOrdinal()] = true;
  +        timerServiceAvailable[EJBOperation.ENDPOINT.getOrdinal()] = true;
  +        timerServiceAvailable[EJBOperation.TIMEOUT.getOrdinal()] = true;
  +    }
  +
  +    private static final boolean timerMethodsAvailable[] = new 
boolean[EJBOperation.MAX_ORDINAL];
  +
  +    static {
  +        timerMethodsAvailable[EJBOperation.BIZMETHOD.getOrdinal()] = true;
  +        timerMethodsAvailable[EJBOperation.TIMEOUT.getOrdinal()] = true;
  +    }
  +
   }
  
  
  
  1.11      +5 -1      
openejb/modules/core/src/java/org/openejb/mdb/MDBInstanceContext.java
  
  Index: MDBInstanceContext.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/mdb/MDBInstanceContext.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- MDBInstanceContext.java   5 Feb 2005 02:36:25 -0000       1.10
  +++ MDBInstanceContext.java   14 Feb 2005 18:32:31 -0000      1.11
  @@ -105,6 +105,10 @@
           mdbContext.setState(operation);
       }
   
  +    public boolean setTimerState(EJBOperation operation) {
  +        return mdbContext.setTimerState(operation);
  +    }
  +
       public void ejbCreate() throws Throwable {
           assert(getInstance() != null);
           systemChain.invoke(ejbCreateInvocation);
  
  
  

Reply via email to