dain 2006/02/01 06:50:09
Modified: modules/core/src/java/org/openejb/server/axis
EJBContainerProvider.java WSContainer.java
WSContainerGBean.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.8 +27 -18
openejb/modules/core/src/java/org/openejb/server/axis/EJBContainerProvider.java
Index: EJBContainerProvider.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/server/axis/EJBContainerProvider.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- EJBContainerProvider.java 21 Jun 2005 22:31:35 -0000 1.7
+++ EJBContainerProvider.java 1 Feb 2006 11:50:09 -0000 1.8
@@ -48,9 +48,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
-import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.rpc.holders.IntHolder;
-import javax.xml.rpc.soap.SOAPFaultException;
import javax.xml.soap.SOAPMessage;
import org.apache.axis.AxisFault;
@@ -72,17 +70,18 @@
import org.apache.geronimo.core.service.SimpleInvocationResult;
import org.apache.geronimo.transaction.context.TransactionContext;
import org.apache.geronimo.webservices.MessageContextInvocationKey;
-import org.openejb.EJBContainer;
import org.openejb.EJBInstanceContext;
import org.openejb.EJBInterfaceType;
-import org.openejb.EJBInvocation;
+import org.openejb.EjbDeployment;
+import org.openejb.EjbInvocation;
+import org.openejb.ExtendedEjbDeployment;
import org.xml.sax.SAXException;
public class EJBContainerProvider extends RPCProvider {
- private final EJBContainer ejbContainer;
+ private final EjbDeployment ejbDeployment;
- public EJBContainerProvider(EJBContainer ejbContainer) {
- this.ejbContainer = ejbContainer;
+ public EJBContainerProvider(EjbDeployment ejbDeployment) {
+ this.ejbDeployment = ejbDeployment;
}
public void processMessage(MessageContext msgContext, SOAPEnvelope
reqEnv, SOAPEnvelope resEnv, Object obj) throws Exception {
@@ -90,19 +89,19 @@
RPCElement body = getBody(reqEnv, msgContext);
OperationDesc operation = getOperationDesc(msgContext, body);
- int index = ejbContainer.getMethodIndex(operation.getMethod());
+ int index = ejbDeployment.getMethodIndex(operation.getMethod());
AxisRpcInvocation invocation = new AxisRpcInvocation(operation,
msgContext, index);
invocation.put(MessageContextInvocationKey.INSTANCE, msgContext);
- SOAPMessage message = ((SOAPMessageContext) msgContext).getMessage();
+ SOAPMessage message = msgContext.getMessage();
Object objRes = null;
try {
message.getSOAPPart().getEnvelope();
msgContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
Boolean.FALSE);
- InvocationResult invocationResult =
ejbContainer.invoke(invocation);
+ InvocationResult invocationResult =
ejbDeployment.invoke(invocation);
if (invocationResult.isException()) {
- throw (Throwable) invocationResult.getException();
+ throw invocationResult.getException();
}
objRes = invocationResult.getResult();
} catch (Throwable throwable) {
@@ -117,7 +116,7 @@
}
public Object getServiceObject(MessageContext msgContext, Handler
service, String clsName, IntHolder scopeHolder) throws Exception {
- return ejbContainer;
+ return ejbDeployment;
}
/**
@@ -126,16 +125,18 @@
*
* @see org.apache.axis.providers.java.RPCProvider
*/
- private class AxisRpcInvocation implements EJBInvocation {
+ private class AxisRpcInvocation implements EjbInvocation {
+ // The container that we are invoking, this is set in the container
before sending the invocation to the interceptor stack
+ private ExtendedEjbDeployment ejbDeployment;
+
private int index;
// Valid in server-side interceptor stack once an instance has been
identified
- private transient EJBInstanceContext instanceContext;
+ private EJBInstanceContext instanceContext;
// Valid in server-side interceptor stack once a TransactionContext
has been created
- private transient TransactionContext transactionContext;
+ private TransactionContext transactionContext;
- private InvocationResult result;
private Map attributes = new HashMap();
private OperationDesc operation;
private MessageContext messageContext;
@@ -146,6 +147,14 @@
this.operation = operation;
}
+ public ExtendedEjbDeployment getEjbDeployment() {
+ return ejbDeployment;
+ }
+
+ public void setEjbDeployment(ExtendedEjbDeployment ejbDeployment) {
+ this.ejbDeployment = ejbDeployment;
+ }
+
public int getMethodIndex() {
return index;
}
@@ -163,7 +172,7 @@
}
private Object[] demarshallArguments() throws Exception {
- SOAPMessage message = ((SOAPMessageContext)
messageContext).getMessage();
+ SOAPMessage message = messageContext.getMessage();
messageContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
Boolean.TRUE);
if (message != null) {
message.saveChanges();
1.15 +7 -7
openejb/modules/core/src/java/org/openejb/server/axis/WSContainer.java
Index: WSContainer.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/server/axis/WSContainer.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- WSContainer.java 21 Aug 2005 07:36:30 -0000 1.14
+++ WSContainer.java 1 Feb 2006 11:50:09 -0000 1.15
@@ -53,7 +53,7 @@
import org.apache.geronimo.axis.server.ServiceInfo;
import org.apache.geronimo.gbean.GBeanLifecycle;
import org.apache.geronimo.webservices.SoapHandler;
-import org.openejb.EJBContainer;
+import org.openejb.RpcEjbDeployment;
public class WSContainer implements GBeanLifecycle {
@@ -65,7 +65,7 @@
location = null;
}
- public WSContainer(EJBContainer ejbContainer,
+ public WSContainer(RpcEjbDeployment ejbDeploymentContext,
URI location,
URI wsdlURI,
SoapHandler soapHandler,
@@ -79,20 +79,20 @@
this.soapHandler = soapHandler;
this.location = location;
//for use as a template
- if (ejbContainer == null) {
+ if (ejbDeploymentContext == null) {
return;
}
- RPCProvider provider = new EJBContainerProvider(ejbContainer);
+ RPCProvider provider = new
EJBContainerProvider(ejbDeploymentContext);
SOAPService service = new SOAPService(null, provider, null);
JavaServiceDesc serviceDesc = serviceInfo.getServiceDesc();
service.setServiceDescription(serviceDesc);
- Class serviceEndpointInterface =
ejbContainer.getProxyInfo().getServiceEndpointInterface();
+ Class serviceEndpointInterface =
ejbDeploymentContext.getProxyInfo().getServiceEndpointInterface();
service.setOption("className", serviceEndpointInterface.getName());
serviceDesc.setImplClass(serviceEndpointInterface);
- ClassLoader classLoader = ejbContainer.getClassLoader();
+ ClassLoader classLoader = ejbDeploymentContext.getClassLoader();
AxisWebServiceContainer axisContainer = new
AxisWebServiceContainer(location, wsdlURI, service, serviceInfo.getWsdlMap(),
classLoader);
if (soapHandler != null) {
soapHandler.addWebService(location.getPath(), virtualHosts,
axisContainer, securityRealmName, realmName, transportGuarantee, authMethod,
classLoader);
1.10 +3 -3
openejb/modules/core/src/java/org/openejb/server/axis/WSContainerGBean.java
Index: WSContainerGBean.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/server/axis/WSContainerGBean.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- WSContainerGBean.java 1 Dec 2005 08:34:52 -0000 1.9
+++ WSContainerGBean.java 1 Feb 2006 11:50:09 -0000 1.10
@@ -51,7 +51,7 @@
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
import org.apache.geronimo.webservices.SoapHandler;
-import org.openejb.EJBContainer;
+import org.openejb.RpcEjbDeployment;
public class WSContainerGBean {
@@ -62,7 +62,7 @@
// infoFactory.addOperation("invoke", new
Class[]{WebServiceContainer.Request.class, WebServiceContainer.Response.class});
- infoFactory.addReference("EJBContainer", EJBContainer.class);
+ infoFactory.addReference("EJBContainer", RpcEjbDeployment.class);
infoFactory.addAttribute("location", URI.class, true);
infoFactory.addAttribute("wsdlURI", URI.class, true);
infoFactory.addAttribute("securityRealmName", String.class, true);