dain        2005/01/26 18:28:01

  Modified:    modules/openejb-builder/src/java/org/openejb/deployment
                        AbstractContainerBuilder.java ContainerBuilder.java
                        EntityBuilder.java MDBContainerBuilder.java
                        MdbBuilder.java SessionBuilder.java
                        StatelessContainerBuilder.java
  Log:

  ENC is now passed around as a Map instead of a jndi Context.  This allows the 
ejb container to modify it and inject the kernel and class loader into 
references.
  Changed Stateless and MDB containers to use system chain for ejbCreate and 
ejbRemove invocations.
  Added test to verify that ejbRemove is propertly called from the cache code.
  
  Revision  Changes    Path
  1.5       +7 -6      
openejb/modules/openejb-builder/src/java/org/openejb/deployment/AbstractContainerBuilder.java
  
  Index: AbstractContainerBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/AbstractContainerBuilder.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractContainerBuilder.java     26 Jan 2005 15:13:20 -0000      1.4
  +++ AbstractContainerBuilder.java     26 Jan 2005 23:28:01 -0000      1.5
  @@ -48,6 +48,7 @@
   package org.openejb.deployment;
   
   import java.util.Set;
  +import java.util.Map;
   import javax.ejb.TimedObject;
   import javax.ejb.Timer;
   import javax.management.ObjectName;
  @@ -55,7 +56,6 @@
   
   import org.apache.geronimo.gbean.GBeanData;
   import org.apache.geronimo.kernel.ClassLoading;
  -import org.apache.geronimo.naming.java.ReadOnlyContext;
   import org.apache.geronimo.transaction.TrackedConnectionAssociator;
   import org.apache.geronimo.transaction.UserTransactionImpl;
   import org.apache.geronimo.transaction.context.TransactionContextManager;
  @@ -96,7 +96,7 @@
       private boolean securityEnabled = false;
       private boolean useContextHandler = false;
       private SecurityConfiguration securityConfiguration;
  -    private ReadOnlyContext componentContext;
  +    private Map componentContext;
       private Set unshareableResources;
       private Set applicationManagedSecurityResources;
       private UserTransactionImpl userTransaction;
  @@ -238,11 +238,11 @@
           this.securityConfiguration = securityConfiguration;
       }
   
  -    public ReadOnlyContext getComponentContext() {
  +    public Map getComponentContext() {
           return componentContext;
       }
   
  -    public void setComponentContext(ReadOnlyContext componentContext) {
  +    public void setComponentContext(Map componentContext) {
           this.componentContext = componentContext;
       }
   
  @@ -346,7 +346,6 @@
           interceptorBuilder.setDoAsCurrentCaller(doAsCurrentCaller);
           interceptorBuilder.setSecurityEnabled(securityEnabled);
           interceptorBuilder.setUseContextHandler(useContextHandler);
  -        interceptorBuilder.setComponentContext(componentContext);
           interceptorBuilder.setTransactionPolicyManager(new 
TransactionPolicyManager(transactionPolicySource, signatures));
           interceptorBuilder.setPermissionManager(new 
PermissionManager(ejbName, signatures));
           return interceptorBuilder;
  @@ -394,6 +393,7 @@
                   contextFactory,
                   interceptorBuilder,
                   pool,
  +                getComponentContext(),
                   getUserTransaction(),
                   getJndiNames(),
                   getLocalJndiNames(),
  @@ -421,6 +421,7 @@
           gbean.setAttribute("ContextFactory", contextFactory);
           gbean.setAttribute("InterceptorBuilder", interceptorBuilder);
           gbean.setAttribute("Pool", pool);
  +        gbean.setAttribute("componentContext", getComponentContext());
           gbean.setAttribute("UserTransaction", getUserTransaction());
           gbean.setAttribute("JndiNames", getJndiNames());
           gbean.setAttribute("LocalJndiNames", getLocalJndiNames());
  
  
  
  1.4       +5 -7      
openejb/modules/openejb-builder/src/java/org/openejb/deployment/ContainerBuilder.java
  
  Index: ContainerBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/ContainerBuilder.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ContainerBuilder.java     27 Dec 2004 02:03:25 -0000      1.3
  +++ ContainerBuilder.java     26 Jan 2005 23:28:01 -0000      1.4
  @@ -44,11 +44,11 @@
    */
   package org.openejb.deployment;
   
  +import java.util.Map;
   import javax.management.ObjectName;
   
   import org.apache.geronimo.gbean.GBeanData;
   import org.apache.geronimo.naming.deployment.ResourceEnvironmentBuilder;
  -import org.apache.geronimo.naming.java.ReadOnlyContext;
   import org.apache.geronimo.transaction.TrackedConnectionAssociator;
   import org.apache.geronimo.transaction.UserTransactionImpl;
   import org.apache.geronimo.transaction.context.TransactionContextManager;
  @@ -56,8 +56,6 @@
   import org.openejb.transaction.TransactionPolicySource;
   
   /**
  - *
  - *
    * @version $Revision$ $Date$
    */
   public interface ContainerBuilder extends ResourceEnvironmentBuilder, 
SecureBuilder {
  @@ -97,9 +95,9 @@
   
       void setPrimaryKeyClassName(String primaryKeyClassName);
   
  -    ReadOnlyContext getComponentContext();
  +    Map getComponentContext();
   
  -    void setComponentContext(ReadOnlyContext componentContext);
  +    void setComponentContext(Map componentContext);
   
       UserTransactionImpl getUserTransaction();
   
  
  
  
  1.10      +1 -3      
openejb/modules/openejb-builder/src/java/org/openejb/deployment/EntityBuilder.java
  
  Index: EntityBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/EntityBuilder.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- EntityBuilder.java        22 Jan 2005 00:39:14 -0000      1.9
  +++ EntityBuilder.java        26 Jan 2005 23:28:01 -0000      1.10
  @@ -62,7 +62,6 @@
   import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext;
   import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
   import org.apache.geronimo.naming.deployment.ENCConfigBuilder;
  -import org.apache.geronimo.naming.java.ReadOnlyContext;
   import org.apache.geronimo.security.deploy.Security;
   import org.apache.geronimo.xbeans.geronimo.naming.GerEjbLocalRefType;
   import org.apache.geronimo.xbeans.geronimo.naming.GerEjbRefType;
  @@ -193,10 +192,9 @@
           MessageDestinationRefType[] messageDestinationRefs = 
entityBean.getMessageDestinationRefArray();
           ServiceRefType[] serviceRefs = entityBean.getServiceRefArray();
   
  -        ReadOnlyContext context = 
ENCConfigBuilder.buildComponentContext(earContext, ejbModule, userTransaction, 
envEntries, ejbRefs, openejbEjbRefs, ejbLocalRefs, openejbEjbLocalRefs, 
resourceRefs, openejbResourceRefs, resourceEnvRefs, openejbResourceEnvRefs, 
messageDestinationRefs, serviceRefs, cl);
  +        Map context = ENCConfigBuilder.buildComponentContext(earContext, 
ejbModule, userTransaction, envEntries, ejbRefs, openejbEjbRefs, ejbLocalRefs, 
openejbEjbLocalRefs, resourceRefs, openejbResourceRefs, resourceEnvRefs, 
openejbResourceEnvRefs, messageDestinationRefs, serviceRefs, cl);
           builder.setComponentContext(context);
           ENCConfigBuilder.setResourceEnvironment(earContext, 
ejbModule.getModuleURI(), builder, resourceRefs, openejbResourceRefs);
  -
       }
   
       public void initContext(EARContext earContext, J2eeContext 
moduleJ2eeContext, URI moduleUri, ClassLoader cl, EnterpriseBeansType 
enterpriseBeans, Set interfaces) throws DeploymentException {
  
  
  
  1.3       +29 -30    
openejb/modules/openejb-builder/src/java/org/openejb/deployment/MDBContainerBuilder.java
  
  Index: MDBContainerBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/MDBContainerBuilder.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MDBContainerBuilder.java  1 Dec 2004 06:59:10 -0000       1.2
  +++ MDBContainerBuilder.java  26 Jan 2005 23:28:01 -0000      1.3
  @@ -59,12 +59,10 @@
   
   import org.apache.geronimo.gbean.GBeanData;
   import org.apache.geronimo.naming.deployment.ResourceEnvironmentBuilder;
  -import org.apache.geronimo.naming.java.ReadOnlyContext;
   import org.apache.geronimo.transaction.UserTransactionImpl;
   import org.openejb.cache.InstancePool;
   import org.openejb.dispatch.EJBTimeoutOperation;
   import org.openejb.dispatch.InterfaceMethodSignature;
  -import org.openejb.dispatch.MethodHelper;
   import org.openejb.dispatch.MethodSignature;
   import org.openejb.dispatch.VirtualOperation;
   import org.openejb.mdb.BusinessMethod;
  @@ -74,7 +72,8 @@
   import org.openejb.mdb.MDBInterceptorBuilder;
   import org.openejb.mdb.dispatch.SetMessageDrivenContextOperation;
   import org.openejb.security.SecurityConfiguration;
  -import org.openejb.slsb.CreateMethod;
  +import org.openejb.slsb.EJBCreateMethod;
  +import org.openejb.slsb.RemoveMethod;
   import org.openejb.transaction.ContainerPolicy;
   import org.openejb.transaction.TransactionPolicy;
   import org.openejb.transaction.TransactionPolicySource;
  @@ -85,6 +84,7 @@
    * @version $Revision$ $Date$
    */
   public class MDBContainerBuilder implements ResourceEnvironmentBuilder, 
SecureBuilder {
  +    private static final MethodSignature SET_MESSAGE_DRIVEN_CONTEXT = new 
MethodSignature("setMessageDrivenContext", new 
String[]{"javax.ejb.MessageDrivenContext"});
   
       private String containerId;
       private String ejbName;
  @@ -96,7 +96,7 @@
       private boolean securityEnabled = false;
       private boolean useContextHandler = false;
       private SecurityConfiguration securityConfiguration;
  -    private ReadOnlyContext componentContext;
  +    private Map componentContext;
       private Set unshareableResources;
       private Set applicationManagedSecurityResources;
       private UserTransactionImpl userTransaction;
  @@ -194,11 +194,11 @@
           this.securityConfiguration = securityConfiguration;
       }
   
  -    public ReadOnlyContext getComponentContext() {
  +    public Map getComponentContext() {
           return componentContext;
       }
   
  -    public void setComponentContext(ReadOnlyContext componentContext) {
  +    public void setComponentContext(Map componentContext) {
           this.componentContext = componentContext;
       }
   
  @@ -270,7 +270,7 @@
   
           // build the instance factory
           MDBInstanceContextFactory contextFactory = new 
MDBInstanceContextFactory(containerId, beanClass, userTransaction, 
unshareableResources, applicationManagedSecurityResources);
  -        MDBInstanceFactory instanceFactory = new 
MDBInstanceFactory(componentContext, contextFactory, beanClass);
  +        MDBInstanceFactory instanceFactory = new 
MDBInstanceFactory(contextFactory);
   
           // build the pool
           InstancePool pool = new SoftLimitedInstancePool(instanceFactory, 1);
  @@ -280,7 +280,6 @@
           interceptorBuilder.setEJBName(ejbName);
           interceptorBuilder.setVtable(vtable);
           interceptorBuilder.setRunAs(runAs);
  -        interceptorBuilder.setComponentContext(componentContext);
           interceptorBuilder.setInstancePool(pool);
   
           boolean[] deliveryTransacted = new boolean[signatures.length];
  @@ -314,6 +313,7 @@
           gbean.setAttribute("deliveryTransacted", deliveryTransacted);
           gbean.setAttribute("contextFactory", contextFactory);
           gbean.setAttribute("interceptorBuilder", interceptorBuilder);
  +        gbean.setAttribute("componentContext", getComponentContext());
           gbean.setAttribute("instancePool", pool);
           gbean.setAttribute("userTransaction", userTransaction);
           gbean.setReferencePattern("Timer", timerName);
  @@ -325,20 +325,16 @@
       protected LinkedHashMap buildVopMap(Class beanClass) throws Exception {
           LinkedHashMap vopMap = new LinkedHashMap();
   
  -        Method setMessageDrivenContext = null;
  -        try {
  -            Class messageDrivenContextClass = 
getClassLoader().loadClass("javax.ejb.MessageDrivenContext");
  -            setMessageDrivenContext = 
beanClass.getMethod("setMessageDrivenContext", new 
Class[]{messageDrivenContextClass});
  -        } catch (NoSuchMethodException e) {
  -            throw new IllegalArgumentException("Bean does not implement 
setMessageDrivenContext(javax.ejb.MessageDrivenContext)");
  -        }
  +        boolean isBMT = (getUserTransaction() != null);
  +        // ejbCreate... this is the method called by the pool to create a 
new instance
  +        vopMap.put(new InterfaceMethodSignature("ejbCreate", false), new 
EJBCreateMethod(beanClass, isBMT));
  +        // ejbRemove... this is the method called by the pool to destroy an 
instance
  +        vopMap.put(new InterfaceMethodSignature("ejbRemove", false), new 
RemoveMethod(beanClass, isBMT));
  +        // ejbTimeout
           if (TimedObject.class.isAssignableFrom(beanClass)) {
  -            MethodSignature signature = new MethodSignature("ejbTimeout", 
new Class[]{Timer.class});
  -            vopMap.put(MethodHelper.translateToInterface(signature)
  -                       , EJBTimeoutOperation.INSTANCE);
  +            vopMap.put(new InterfaceMethodSignature("ejbTimeout", new 
String[]{Timer.class.getName()}, false),
  +                EJBTimeoutOperation.INSTANCE);
           }
  -        // add the create method
  -        vopMap.put(new InterfaceMethodSignature("create", true), new 
CreateMethod());
   
           // add the business methods
           Method[] beanMethods = beanClass.getMethods();
  @@ -347,20 +343,23 @@
               if (Object.class == beanMethod.getDeclaringClass()) {
                   continue;
               }
  -            String name = beanMethod.getName();
  -            MethodSignature signature = new MethodSignature(beanMethod);
  -            if (setMessageDrivenContext.equals(beanMethod)) {
  -                vopMap.put(MethodHelper.translateToInterface(signature)
  -                           , SetMessageDrivenContextOperation.INSTANCE);
  +
  +            if (beanMethod.getName().startsWith("ejb")) {
                   continue;
               }
  -            if (name.startsWith("ejb")) {
  -                continue;
  +
  +            // match set message driven context down here since it can not 
be easily ignored like ejb* methods
  +            MethodSignature signature = new MethodSignature(beanMethod);
  +            if (SET_MESSAGE_DRIVEN_CONTEXT.equals(signature)) {
  +                vopMap.put(new 
InterfaceMethodSignature("setMessageDrivenContext", new 
String[]{"javax.ejb.MessageDrivenContext"}, false),
  +                        SetMessageDrivenContextOperation.INSTANCE);
  +            } else {
  +                vopMap.put(new InterfaceMethodSignature(signature, false),
  +                        new BusinessMethod(beanClass, signature));
               }
  -            vopMap.put(new InterfaceMethodSignature(signature, false),
  -                       new BusinessMethod(beanClass, signature));
           }
   
           return vopMap;
       }
  +
   }
  
  
  
  1.10      +1 -2      
openejb/modules/openejb-builder/src/java/org/openejb/deployment/MdbBuilder.java
  
  Index: MdbBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/MdbBuilder.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- MdbBuilder.java   22 Jan 2005 00:39:14 -0000      1.9
  +++ MdbBuilder.java   26 Jan 2005 23:28:01 -0000      1.10
  @@ -64,7 +64,6 @@
   import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl;
   import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
   import org.apache.geronimo.naming.deployment.ENCConfigBuilder;
  -import org.apache.geronimo.naming.java.ReadOnlyContext;
   import org.apache.geronimo.security.deploy.Security;
   import org.apache.geronimo.transaction.UserTransactionImpl;
   import org.apache.geronimo.xbeans.geronimo.naming.GerEjbLocalRefType;
  @@ -314,7 +313,7 @@
           MessageDestinationRefType[] messageDestinationRefs = 
messageDrivenBean.getMessageDestinationRefArray();
           ServiceRefType[] serviceRefs = 
messageDrivenBean.getServiceRefArray();
   
  -        ReadOnlyContext context = 
ENCConfigBuilder.buildComponentContext(earContext, ejbModule, userTransaction, 
envEntries, ejbRefs, openejbEjbRefs, ejbLocalRefs, openejbEjbLocalRefs, 
resourceRefs, openejbResourceRefs, resourceEnvRefs, openejbResourceEnvRefs, 
messageDestinationRefs, serviceRefs, cl);
  +        Map context = ENCConfigBuilder.buildComponentContext(earContext, 
ejbModule, userTransaction, envEntries, ejbRefs, openejbEjbRefs, ejbLocalRefs, 
openejbEjbLocalRefs, resourceRefs, openejbResourceRefs, resourceEnvRefs, 
openejbResourceEnvRefs, messageDestinationRefs, serviceRefs, cl);
           builder.setComponentContext(context);
           ENCConfigBuilder.setResourceEnvironment(earContext, 
ejbModule.getModuleURI(), builder, resourceRefs, openejbResourceRefs);
   
  
  
  
  1.12      +1 -2      
openejb/modules/openejb-builder/src/java/org/openejb/deployment/SessionBuilder.java
  
  Index: SessionBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/SessionBuilder.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- SessionBuilder.java       22 Jan 2005 00:39:14 -0000      1.11
  +++ SessionBuilder.java       26 Jan 2005 23:28:01 -0000      1.12
  @@ -62,7 +62,6 @@
   import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext;
   import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
   import org.apache.geronimo.naming.deployment.ENCConfigBuilder;
  -import org.apache.geronimo.naming.java.ReadOnlyContext;
   import org.apache.geronimo.security.deploy.Security;
   import org.apache.geronimo.transaction.UserTransactionImpl;
   import org.apache.geronimo.xbeans.geronimo.naming.GerEjbLocalRefType;
  @@ -136,7 +135,7 @@
           MessageDestinationRefType[] messageDestinationRefs = 
sessionBean.getMessageDestinationRefArray();
           ServiceRefType[] serviceRefs = sessionBean.getServiceRefArray();
   
  -        ReadOnlyContext context = 
ENCConfigBuilder.buildComponentContext(earContext, ejbModule, userTransaction, 
envEntries, ejbRefs, openejbEjbRefs, ejbLocalRefs, openejbEjbLocalRefs, 
resourceRefs, openejbResourceRefs, resourceEnvRefs, openejbResourceEnvRefs, 
messageDestinationRefs, serviceRefs, cl);
  +        Map context = ENCConfigBuilder.buildComponentContext(earContext, 
ejbModule, userTransaction, envEntries, ejbRefs, openejbEjbRefs, ejbLocalRefs, 
openejbEjbLocalRefs, resourceRefs, openejbResourceRefs, resourceEnvRefs, 
openejbResourceEnvRefs, messageDestinationRefs, serviceRefs, cl);
           builder.setComponentContext(context);
           ENCConfigBuilder.setResourceEnvironment(earContext, 
ejbModule.getModuleURI(), builder, resourceRefs, openejbResourceRefs);
   
  
  
  
  1.2       +27 -37    
openejb/modules/openejb-builder/src/java/org/openejb/deployment/StatelessContainerBuilder.java
  
  Index: StatelessContainerBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/StatelessContainerBuilder.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StatelessContainerBuilder.java    10 Nov 2004 01:35:08 -0000      1.1
  +++ StatelessContainerBuilder.java    26 Jan 2005 23:28:01 -0000      1.2
  @@ -58,22 +58,23 @@
   import org.openejb.cache.InstancePool;
   import org.openejb.dispatch.EJBTimeoutOperation;
   import org.openejb.dispatch.InterfaceMethodSignature;
  -import org.openejb.dispatch.MethodHelper;
   import org.openejb.dispatch.MethodSignature;
   import org.openejb.dispatch.VirtualOperation;
   import org.openejb.slsb.BusinessMethod;
  -import org.openejb.slsb.CreateMethod;
  +import org.openejb.slsb.EJBCreateMethod;
  +import org.openejb.slsb.RemoveMethod;
   import org.openejb.slsb.StatelessInstanceContextFactory;
   import org.openejb.slsb.StatelessInstanceFactory;
   import org.openejb.slsb.StatelessInterceptorBuilder;
  -import org.openejb.slsb.dispatch.EJBActivateOperation;
  -import org.openejb.slsb.dispatch.EJBPassivateOperation;
  +import org.openejb.slsb.CreateMethod;
   import org.openejb.slsb.dispatch.SetSessionContextOperation;
   
   /**
    * @version $Revision$ $Date$
    */
   public class StatelessContainerBuilder extends AbstractContainerBuilder {
  +    private static final MethodSignature SET_SESSION_CONTEXT = new 
MethodSignature("setSessionContext", new String[]{"javax.ejb.SessionContext"});
  +
       protected int getEJBComponentType() {
           return EJBComponentType.STATELESS;
       }
  @@ -93,7 +94,7 @@
   
           // build the instance factory
           StatelessInstanceContextFactory contextFactory = new 
StatelessInstanceContextFactory(getContainerId(), beanClass, 
getUserTransaction(), getUnshareableResources(), 
getApplicationManagedSecurityResources());
  -        StatelessInstanceFactory instanceFactory = new 
StatelessInstanceFactory(getComponentContext(), contextFactory, beanClass);
  +        StatelessInstanceFactory instanceFactory = new 
StatelessInstanceFactory(contextFactory);
   
           // build the pool
           InstancePool pool = createInstancePool(instanceFactory);
  @@ -111,16 +112,18 @@
       protected LinkedHashMap buildVopMap(Class beanClass) throws Exception {
           LinkedHashMap vopMap = new LinkedHashMap();
   
  -        Method setSessionContext = null;
  -        try {
  -            Class sessionContextClass = 
getClassLoader().loadClass("javax.ejb.SessionContext");
  -            setSessionContext = beanClass.getMethod("setSessionContext", new 
Class[]{sessionContextClass});
  -        } catch (NoSuchMethodException e) {
  -            throw new IllegalArgumentException("Bean does not implement 
setSessionContext(javax.ejb.SessionContext)");
  -        }
  -
  -        // add the create method
  +        boolean isBMT = (getUserTransaction() != null);
  +        // ejbCreate... this is the method called by the pool to create a 
new instance
  +        vopMap.put(new InterfaceMethodSignature("ejbCreate", false), new 
EJBCreateMethod(beanClass, isBMT));
  +        // create... this is the method that is called by the user
           vopMap.put(new InterfaceMethodSignature("create", true), new 
CreateMethod());
  +        // ejbRemove... this is the method called by the pool to destroy an 
instance
  +        vopMap.put(new InterfaceMethodSignature("ejbRemove", false), new 
RemoveMethod(beanClass, isBMT));
  +        // ejbTimeout
  +        if (TimedObject.class.isAssignableFrom(beanClass)) {
  +            vopMap.put(new InterfaceMethodSignature("ejbTimeout", new 
String[]{Timer.class.getName()}, false),
  +                EJBTimeoutOperation.INSTANCE);
  +        }
   
           // add the business methods
           Method[] beanMethods = beanClass.getMethods();
  @@ -129,31 +132,18 @@
               if (Object.class == beanMethod.getDeclaringClass()) {
                   continue;
               }
  -            String name = beanMethod.getName();
  -            if (TimedObject.class.isAssignableFrom(beanClass)) {
  -                MethodSignature signature = new 
MethodSignature("ejbTimeout", new Class[]{Timer.class});
  -                vopMap.put(
  -                        MethodHelper.translateToInterface(signature)
  -                        , EJBTimeoutOperation.INSTANCE);
  +
  +            if (beanMethod.getName().startsWith("ejb")) {
  +                continue;
               }
  +
               MethodSignature signature = new MethodSignature(beanMethod);
  -            if (name.equals("ejbActivate")) {
  -                vopMap.put(
  -                        MethodHelper.translateToInterface(signature)
  -                        , EJBActivateOperation.INSTANCE);
  -            } else if (name.equals("ejbPassivate")) {
  -                vopMap.put(
  -                        MethodHelper.translateToInterface(signature)
  -                        , EJBPassivateOperation.INSTANCE);
  -            } else if (setSessionContext.equals(beanMethod)) {
  -                vopMap.put(
  -                        MethodHelper.translateToInterface(signature)
  -                        , SetSessionContextOperation.INSTANCE);
  -            } else if (name.startsWith("ejb")) {
  -                continue;
  +            // match set session context sig down here since it can not be 
easily ignored like ejb* methods
  +            if (SET_SESSION_CONTEXT.equals(signature)) {
  +                vopMap.put(new InterfaceMethodSignature("setSessionContext", 
new String[]{"javax.ejb.SessionContext"}, false),
  +                        SetSessionContextOperation.INSTANCE);
               } else {
  -                vopMap.put(
  -                        new InterfaceMethodSignature(signature, false),
  +                vopMap.put(new InterfaceMethodSignature(signature, false),
                           new BusinessMethod(beanClass, signature));
               }
           }
  
  
  

Reply via email to