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;
}