dain        2006/02/01 06:50:05

  Modified:    modules/core/src/java/org/openejb/dispatch
                        AbstractMethodOperation.java
                        AbstractSpecificMethodOperation.java
                        DispatchInterceptor.java EJBTimeoutOperation.java
                        InterfaceMethodSignature.java MethodHelper.java
                        MethodSignature.java SystemMethodIndices.java
                        VirtualOperation.java
  Log:

  Major refactor
  Split container into an object to represent a deployed ejb and a set of 
shared containers which process invocations
  Introduced interface between CMP container and CMP engine
  
  Revision  Changes    Path
  1.6       +3 -3      
openejb/modules/core/src/java/org/openejb/dispatch/AbstractMethodOperation.java
  
  Index: AbstractMethodOperation.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/dispatch/AbstractMethodOperation.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- AbstractMethodOperation.java      21 Jun 2005 21:16:57 -0000      1.5
  +++ AbstractMethodOperation.java      1 Feb 2006 11:50:04 -0000       1.6
  @@ -59,7 +59,7 @@
   import net.sf.cglib.reflect.FastClass;
   
   import org.openejb.EJBInstanceContext;
  -import org.openejb.EJBInvocation;
  +import org.openejb.EjbInvocation;
   import org.openejb.EJBOperation;
   import org.openejb.timer.TimerState;
   
  @@ -81,7 +81,7 @@
           initializeCGLIBFields();
       }
   
  -    protected InvocationResult invoke(EJBInvocation invocation, EJBOperation 
operation) throws Throwable {
  +    protected InvocationResult invoke(EjbInvocation invocation, EJBOperation 
operation) throws Throwable {
           EJBInstanceContext ctx = invocation.getEJBInstanceContext();
           boolean oldTimerMethodAvailable = ctx.setTimerState(operation);
           try {
  
  
  
  1.4       +3 -3      
openejb/modules/core/src/java/org/openejb/dispatch/AbstractSpecificMethodOperation.java
  
  Index: AbstractSpecificMethodOperation.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/dispatch/AbstractSpecificMethodOperation.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractSpecificMethodOperation.java      21 Jun 2005 21:16:57 -0000      
1.3
  +++ AbstractSpecificMethodOperation.java      1 Feb 2006 11:50:04 -0000       
1.4
  @@ -61,7 +61,7 @@
   import net.sf.cglib.reflect.FastClass;
   
   import org.openejb.EJBInstanceContext;
  -import org.openejb.EJBInvocation;
  +import org.openejb.EjbInvocation;
   import org.openejb.EJBOperation;
   import org.openejb.timer.TimerState;
   
  @@ -72,7 +72,7 @@
    */
   public abstract class AbstractSpecificMethodOperation implements 
VirtualOperation, Serializable {
   
  -    protected InvocationResult invoke(EJBInvocation invocation, EJBOperation 
operation) throws Throwable {
  +    protected InvocationResult invoke(EjbInvocation invocation, EJBOperation 
operation) throws Throwable {
           EJBInstanceContext ctx = invocation.getEJBInstanceContext();
           boolean oldTimerMethodAvailable = ctx.setTimerState(operation);
           try {
  
  
  
  1.2       +8 -14     
openejb/modules/core/src/java/org/openejb/dispatch/DispatchInterceptor.java
  
  Index: DispatchInterceptor.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/dispatch/DispatchInterceptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DispatchInterceptor.java  1 Mar 2004 07:14:43 -0000       1.1
  +++ DispatchInterceptor.java  1 Feb 2006 11:50:04 -0000       1.2
  @@ -50,25 +50,19 @@
   import org.apache.geronimo.core.service.Interceptor;
   import org.apache.geronimo.core.service.Invocation;
   import org.apache.geronimo.core.service.InvocationResult;
  -
  -import org.openejb.EJBInvocation;
  +import org.openejb.ExtendedEjbDeployment;
  +import org.openejb.EjbInvocation;
   
   /**
  - *
  - *
    * @version $Revision$ $Date$
    */
   public final class DispatchInterceptor implements Interceptor {
  -    private final VirtualOperation[] vtable;
  -
  -    public DispatchInterceptor(VirtualOperation[] vtable) {
  -        this.vtable = vtable;
  -    }
  -
       public InvocationResult invoke(Invocation invocation) throws Throwable {
  -        EJBInvocation ejbInvocation = (EJBInvocation) invocation;
  +        EjbInvocation ejbInvocation = (EjbInvocation) invocation;
   
  -        VirtualOperation vop = vtable[ejbInvocation.getMethodIndex()];
  -        return vop.execute(ejbInvocation);
  +        ExtendedEjbDeployment deployment = (ExtendedEjbDeployment) 
ejbInvocation.getEjbDeployment();
  +        VirtualOperation virtualOperation = 
deployment.getVirtualOperation(ejbInvocation.getMethodIndex());
  +        InvocationResult result = virtualOperation.execute(ejbInvocation);
  +        return result;
       }
   }
  
  
  
  1.2       +3 -3      
openejb/modules/core/src/java/org/openejb/dispatch/EJBTimeoutOperation.java
  
  Index: EJBTimeoutOperation.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/dispatch/EJBTimeoutOperation.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EJBTimeoutOperation.java  18 Jul 2004 22:24:01 -0000      1.1
  +++ EJBTimeoutOperation.java  1 Feb 2006 11:50:04 -0000       1.2
  @@ -52,7 +52,7 @@
   import javax.ejb.Timer;
   
   import org.apache.geronimo.core.service.InvocationResult;
  -import org.openejb.EJBInvocation;
  +import org.openejb.EjbInvocation;
   import org.openejb.EJBOperation;
   import org.openejb.dispatch.AbstractSpecificMethodOperation;
   
  @@ -69,7 +69,7 @@
       private EJBTimeoutOperation() {}
   
   
  -    public InvocationResult execute(EJBInvocation invocation) throws 
Throwable {
  +    public InvocationResult execute(EjbInvocation invocation) throws 
Throwable {
           return invoke(invocation, EJBOperation.TIMEOUT);
       }
   
  
  
  
  1.3       +42 -21    
openejb/modules/core/src/java/org/openejb/dispatch/InterfaceMethodSignature.java
  
  Index: InterfaceMethodSignature.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/dispatch/InterfaceMethodSignature.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- InterfaceMethodSignature.java     19 Apr 2004 22:30:46 -0000      1.2
  +++ InterfaceMethodSignature.java     1 Feb 2006 11:50:04 -0000       1.3
  @@ -58,7 +58,8 @@
    *
    * @version $Revision$ $Date$
    */
  -public final class InterfaceMethodSignature implements Serializable {
  +public final class InterfaceMethodSignature implements Comparable, 
Serializable {
  +    private static final long serialVersionUID = -3284902678375161698L;
       private static final String[] NOARGS = {};
       private final String methodName;
       private final String[] parameterTypes;
  @@ -123,10 +124,6 @@
       }
   
       public boolean match(Method method) {
  -//        if (!isCorrectType(method.getDeclaringClass())) {
  -//            return false;
  -//        }
  -
           if(!methodName.equals(method.getName())) {
               return false;
           }
  @@ -143,7 +140,7 @@
       }
   
       public Method getMethod(Class clazz) {
  -        if (clazz == null) { // || !isCorrectType(clazz)) {
  +        if (clazz == null) {
               return null;
           }
   
  @@ -167,7 +164,7 @@
           if (obj == this) {
               return true;
           }
  -        if (obj instanceof InterfaceMethodSignature == false) {
  +        if (!(obj instanceof InterfaceMethodSignature)) {
               return false;
           }
           InterfaceMethodSignature other = (InterfaceMethodSignature) obj;
  @@ -177,6 +174,43 @@
                   Arrays.equals(parameterTypes, other.parameterTypes);
       }
   
  +    public int compareTo(Object object) {
  +        InterfaceMethodSignature methodSignature = 
(InterfaceMethodSignature) object;
  +
  +        // home methods come before remote methods
  +        if (isHomeMethod && !methodSignature.isHomeMethod) {
  +            return -1;
  +        }
  +        if(!isHomeMethod && methodSignature.isHomeMethod) {
  +            return 1;
  +        }
  +
  +        // alphabetic compare of method names
  +        int value = methodName.compareTo(methodSignature.methodName);
  +        if (value != 0) {
  +            return value;
  +        }
  +
  +        // shorter parameter list comes before longer parameter lists
  +        if (parameterTypes.length < methodSignature.parameterTypes.length) {
  +            return -1;
  +        }
  +        if (parameterTypes.length > methodSignature.parameterTypes.length) {
  +            return 1;
  +        }
  +
  +        // alphabetic compare of each parameter type
  +        for (int i = 0; i < parameterTypes.length; i++) {
  +            value = 
parameterTypes[i].compareTo(methodSignature.parameterTypes[i]);
  +            if (value != 0) {
  +                return value;
  +            }
  +        }
  +
  +        // they are the same
  +        return 0;
  +    }
  +
       private static String[] convertParameterTypes(Class[] params) {
           if(params == null || params.length == 0) {
               return NOARGS;
  @@ -188,17 +222,4 @@
           }
           return types;
       }
  -
  -//    private boolean isCorrectType(Class clazz) {
  -//        if (isHomeMethod) {
  -//            if(!EJBHome.class.isAssignableFrom(clazz) && 
!EJBLocalHome.class.isAssignableFrom(clazz)) {
  -//                return false;
  -//            }
  -//        } else {
  -//            if(!EJBObject.class.isAssignableFrom(clazz) && 
!EJBLocalObject.class.isAssignableFrom(clazz)) {
  -//                return false;
  -//            }
  -//        }
  -//        return true;
  -//    }
   }
  
  
  
  1.5       +11 -1     
openejb/modules/core/src/java/org/openejb/dispatch/MethodHelper.java
  
  Index: MethodHelper.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/dispatch/MethodHelper.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MethodHelper.java 8 May 2005 19:37:05 -0000       1.4
  +++ MethodHelper.java 1 Feb 2006 11:50:04 -0000       1.5
  @@ -174,4 +174,14 @@
               return new InterfaceMethodSignature(signature.getMethodName(), 
signature.getParameterTypes(),false);
           }
       }
  +
  +    public static String capitalize(String string) {
  +        if (string == null) throw new NullPointerException("string is null");
  +        if (string.length() == 0) throw new IllegalArgumentException("string 
is empty");
  +
  +        if (string.length() == 1) {
  +            return "" + Character.toUpperCase(string.charAt(0));
  +        }
  +        return Character.toUpperCase(string.charAt(0)) + string.substring(1);
  +    }
   }
  
  
  
  1.3       +31 -2     
openejb/modules/core/src/java/org/openejb/dispatch/MethodSignature.java
  
  Index: MethodSignature.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/dispatch/MethodSignature.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MethodSignature.java      21 Mar 2004 21:26:34 -0000      1.2
  +++ MethodSignature.java      1 Feb 2006 11:50:04 -0000       1.3
  @@ -58,7 +58,7 @@
    *
    * @version $Revision$ $Date$
    */
  -public final class MethodSignature implements Serializable {
  +public final class MethodSignature implements Serializable, Comparable {
       private static final String[] NOARGS = {};
       private final String methodName;
       private final String[] parameterTypes;
  @@ -156,5 +156,34 @@
           }
           MethodSignature other = (MethodSignature) obj;
           return methodName.equals(other.methodName) && 
Arrays.equals(parameterTypes, other.parameterTypes);
  +    }
  +
  +    public int compareTo(Object object) {
  +        MethodSignature methodSignature = (MethodSignature) object;
  +
  +        // alphabetic compare of method names
  +        int value = methodName.compareTo(methodSignature.methodName);
  +        if (value != 0) {
  +            return value;
  +        }
  +
  +        // shorter parameter list comes before longer parameter lists
  +        if (parameterTypes.length < methodSignature.parameterTypes.length) {
  +            return -1;
  +        }
  +        if (parameterTypes.length > methodSignature.parameterTypes.length) {
  +            return 1;
  +        }
  +
  +        // alphabetic compare of each parameter type
  +        for (int i = 0; i < parameterTypes.length; i++) {
  +            value = 
parameterTypes[i].compareTo(methodSignature.parameterTypes[i]);
  +            if (value != 0) {
  +                return value;
  +            }
  +        }
  +
  +        // they are the same
  +        return 0;
       }
   }
  
  
  
  1.6       +29 -28    
openejb/modules/core/src/java/org/openejb/dispatch/SystemMethodIndices.java
  
  Index: SystemMethodIndices.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/dispatch/SystemMethodIndices.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SystemMethodIndices.java  15 Feb 2005 03:24:02 -0000      1.5
  +++ SystemMethodIndices.java  1 Feb 2006 11:50:04 -0000       1.6
  @@ -47,12 +47,13 @@
    */
   package org.openejb.dispatch;
   
  +import javax.ejb.Timer;
  +
   import org.openejb.EJBInstanceContext;
  -import org.openejb.EJBInvocation;
  -import org.openejb.EJBInvocationImpl;
  +import org.openejb.EjbInvocation;
  +import org.openejb.EjbInvocationImpl;
   import org.openejb.EJBInterfaceType;
   import org.openejb.timer.EJBTimeoutInvocationFactory;
  -import org.openejb.timer.TimerImpl;
   
   /**
    *
  @@ -134,52 +135,52 @@
           this.afterCompletion = afterCompletion;
       }
   
  -    public EJBInvocation getEjbActivateInvocation(EJBInstanceContext 
instanceContext) {
  -        return new EJBInvocationImpl(ejbActivate, null, instanceContext);
  +    public EjbInvocation getEjbActivateInvocation(EJBInstanceContext 
instanceContext) {
  +        return new EjbInvocationImpl(ejbActivate, null, instanceContext);
       }
   
  -    public EJBInvocation getEjbLoadInvocation(EJBInstanceContext 
instanceContext) {
  -        return new EJBInvocationImpl(ejbLoad, null, instanceContext);
  +    public EjbInvocation getEjbLoadInvocation(EJBInstanceContext 
instanceContext) {
  +        return new EjbInvocationImpl(ejbLoad, null, instanceContext);
       }
   
  -    public EJBInvocation getEjbPassivateInvocation(EJBInstanceContext 
instanceContext) {
  -        return new EJBInvocationImpl(ejbPassivate, null, instanceContext);
  +    public EjbInvocation getEjbPassivateInvocation(EJBInstanceContext 
instanceContext) {
  +        return new EjbInvocationImpl(ejbPassivate, null, instanceContext);
       }
   
  -    public EJBInvocation getEjbStoreInvocation(EJBInstanceContext 
instanceContext) {
  -        return new EJBInvocationImpl(ejbStore, null, instanceContext);
  +    public EjbInvocation getEjbStoreInvocation(EJBInstanceContext 
instanceContext) {
  +        return new EjbInvocationImpl(ejbStore, null, instanceContext);
       }
   
  -    public EJBInvocation getEJBTimeoutInvocation(Object id, TimerImpl timer) 
{
  -        return new EJBInvocationImpl(EJBInterfaceType.TIMEOUT, id, 
ejbTimeout, new Object[] {timer});
  +    public EjbInvocation getEJBTimeoutInvocation(Object id, Timer timer) {
  +        return new EjbInvocationImpl(EJBInterfaceType.TIMEOUT, id, 
ejbTimeout, new Object[] {timer});
       }
   
  -    public EJBInvocation getEJBCreateInvocation(EJBInstanceContext 
instanceContext) {
  -        return new EJBInvocationImpl(ejbCreate, null, instanceContext);
  +    public EjbInvocation getEJBCreateInvocation(EJBInstanceContext 
instanceContext) {
  +        return new EjbInvocationImpl(ejbCreate, null, instanceContext);
       }
   
  -    public EJBInvocation getEJBRemoveInvocation(EJBInstanceContext 
instanceContext) {
  -        return new EJBInvocationImpl(ejbRemove, null, instanceContext);
  +    public EjbInvocation getEJBRemoveInvocation(EJBInstanceContext 
instanceContext) {
  +        return new EjbInvocationImpl(ejbRemove, null, instanceContext);
   
       }
   
  -    public EJBInvocation getSetContextInvocation(EJBInstanceContext 
instanceContext, Object context) {
  -        return new EJBInvocationImpl(setContext, new Object[] {context}, 
instanceContext);
  +    public EjbInvocation getSetContextInvocation(EJBInstanceContext 
instanceContext, Object context) {
  +        return new EjbInvocationImpl(setContext, new Object[] {context}, 
instanceContext);
       }
   
  -    public EJBInvocation getUnsetContextInvocation(EJBInstanceContext 
instanceContext) {
  -        return new EJBInvocationImpl(unsetContext, null, instanceContext);
  +    public EjbInvocation getUnsetContextInvocation(EJBInstanceContext 
instanceContext) {
  +        return new EjbInvocationImpl(unsetContext, null, instanceContext);
       }
   
  -    public EJBInvocation getAfterBeginInvocation(EJBInstanceContext 
instanceContext) {
  -        return new EJBInvocationImpl(afterBegin, null, instanceContext);
  +    public EjbInvocation getAfterBeginInvocation(EJBInstanceContext 
instanceContext) {
  +        return new EjbInvocationImpl(afterBegin, null, instanceContext);
       }
   
  -    public EJBInvocation getBeforeCompletionInvocation(EJBInstanceContext 
instanceContext) {
  -        return new EJBInvocationImpl(beforeCompletion, null, 
instanceContext);
  +    public EjbInvocation getBeforeCompletionInvocation(EJBInstanceContext 
instanceContext) {
  +        return new EjbInvocationImpl(beforeCompletion, null, 
instanceContext);
       }
   
  -    public EJBInvocation getAfterCompletionInvocation(EJBInstanceContext 
instanceContext, boolean comitted) {
  -        return new EJBInvocationImpl(afterCompletion, new 
Object[]{Boolean.valueOf(comitted)}, instanceContext);
  +    public EjbInvocation getAfterCompletionInvocation(EJBInstanceContext 
instanceContext, boolean comitted) {
  +        return new EjbInvocationImpl(afterCompletion, new 
Object[]{Boolean.valueOf(comitted)}, instanceContext);
       }
   }
  
  
  
  1.2       +3 -3      
openejb/modules/core/src/java/org/openejb/dispatch/VirtualOperation.java
  
  Index: VirtualOperation.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/dispatch/VirtualOperation.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- VirtualOperation.java     1 Mar 2004 07:14:43 -0000       1.1
  +++ VirtualOperation.java     1 Feb 2006 11:50:04 -0000       1.2
  @@ -49,7 +49,7 @@
   
   import org.apache.geronimo.core.service.InvocationResult;
   
  -import org.openejb.EJBInvocation;
  +import org.openejb.EjbInvocation;
   
   /**
    *
  @@ -57,5 +57,5 @@
    * @version $Revision$ $Date$
    */
   public interface VirtualOperation {
  -    InvocationResult execute(EJBInvocation invocation) throws Throwable;
  +    InvocationResult execute(EjbInvocation invocation) throws Throwable;
   }
  
  
  

Reply via email to