djencks 2005/07/21 00:32:11
Modified: modules/openejb-builder/src/java/org/openejb/deployment
OpenEJBModuleBuilder.java SessionBuilder.java
Removed: modules/openejb-builder/src/java/org/openejb/deployment
AxisWebServiceContainerBuilder.java
Log:
GERONIMO-782 step 2. Use WebserviceBuilder interfaces from tomcat builder and
openejb builder. openejb builder still needs cleanup
Revision Changes Path
1.47 +6 -4
openejb/modules/openejb-builder/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java
Index: OpenEJBModuleBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- OpenEJBModuleBuilder.java 20 Jul 2005 00:01:18 -0000 1.46
+++ OpenEJBModuleBuilder.java 21 Jul 2005 04:32:11 -0000 1.47
@@ -80,6 +80,7 @@
import org.apache.geronimo.j2ee.deployment.Module;
import org.apache.geronimo.j2ee.deployment.ModuleBuilder;
import org.apache.geronimo.j2ee.deployment.RefContext;
+import org.apache.geronimo.j2ee.deployment.WebServiceBuilder;
import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext;
import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl;
import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
@@ -142,12 +143,12 @@
private final TransactionImportPolicyBuilder
transactionImportPolicyBuilder;
private final Repository repository;
- public OpenEJBModuleBuilder(URI defaultParentId, ObjectName listener,
Repository repository) {
+ public OpenEJBModuleBuilder(URI defaultParentId, ObjectName listener,
WebServiceBuilder webServiceBuilder, Repository repository) {
this.defaultParentId = defaultParentId;
this.listener = listener;
this.transactionImportPolicyBuilder = new
NoDistributedTxTransactionImportPolicyBuilder();
this.cmpEntityBuilder = new CMPEntityBuilder(this);
- this.sessionBuilder = new SessionBuilder(this);
+ this.sessionBuilder = new SessionBuilder(this, webServiceBuilder);
this.entityBuilder = new EntityBuilder(this);
this.mdbBuilder = new MdbBuilder(this);
this.repository = repository;
@@ -612,11 +613,12 @@
GBeanInfoBuilder infoBuilder = new
GBeanInfoBuilder(OpenEJBModuleBuilder.class, NameFactory.MODULE_BUILDER);
infoBuilder.addAttribute("defaultParentId", URI.class, true);
infoBuilder.addAttribute("listener", ObjectName.class, true);
+ infoBuilder.addReference("WebServiceBuilder",
WebServiceBuilder.class, NameFactory.MODULE_BUILDER);
infoBuilder.addReference("Repository", Repository.class,
NameFactory.GERONIMO_SERVICE);
infoBuilder.addInterface(ModuleBuilder.class);
infoBuilder.addInterface(EJBReferenceBuilder.class);
- infoBuilder.setConstructor(new String[]{"defaultParentId",
"listener", "Repository"});
+ infoBuilder.setConstructor(new String[]{"defaultParentId",
"listener", "WebServiceBuilder", "Repository"});
GBEAN_INFO = infoBuilder.getBeanInfo();
}
1.28 +81 -20
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.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- SessionBuilder.java 20 Jul 2005 02:33:48 -0000 1.27
+++ SessionBuilder.java 21 Jul 2005 04:32:11 -0000 1.28
@@ -49,10 +49,12 @@
import java.net.URI;
import java.net.URL;
+import java.net.MalformedURLException;
import java.security.Permissions;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.HashMap;
import java.util.jar.JarFile;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
@@ -65,6 +67,7 @@
import org.apache.geronimo.j2ee.deployment.EARContext;
import org.apache.geronimo.j2ee.deployment.EJBModule;
import org.apache.geronimo.j2ee.deployment.RefContext;
+import org.apache.geronimo.j2ee.deployment.WebServiceBuilder;
import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext;
import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
import org.apache.geronimo.naming.deployment.ENCConfigBuilder;
@@ -98,11 +101,17 @@
import org.openejb.transaction.TransactionPolicyType;
import org.openejb.xbeans.ejbjar.OpenejbSessionBeanType;
import org.openejb.xbeans.ejbjar.OpenejbTssType;
+import org.openejb.xbeans.ejbjar.OpenejbWebServiceSecurityType;
+import org.openejb.server.axis.WSContainerGBean;
class SessionBuilder extends BeanBuilder {
- public SessionBuilder(OpenEJBModuleBuilder builder) {
+
+ private final WebServiceBuilder webServiceBuilder;
+
+ public SessionBuilder(OpenEJBModuleBuilder builder, WebServiceBuilder
webServiceBuilder) {
super(builder);
+ this.webServiceBuilder = webServiceBuilder;
}
private ObjectName createEJBObjectName(J2eeContext moduleJ2eeContext,
SessionBeanType sessionBean) throws DeploymentException {
@@ -170,20 +179,72 @@
ObjectName sessionObjectName =
createEJBObjectName(moduleJ2eeContext, sessionBean);
assert sessionObjectName != null: "StatelesSessionBean object
name is null";
addEJBContainerGBean(earContext, ejbModule,
componentPermissions, cl, sessionObjectName, sessionBean, openejbSessionBean,
transactionPolicyHelper, policyContextID);
- addWSContainerGBean(earContext, ejbModule, cl,
sessionObjectName, sessionBean, openejbSessionBean, transactionPolicyHelper,
listener);
+ boolean isStateless =
"Stateless".equals(sessionBean.getSessionType().getStringValue().trim());
+ boolean isServiceEndpoint = sessionBean.isSetServiceEndpoint();
+// String serviceEndpointName =
OpenEJBModuleBuilder.getJ2eeStringValue(sessionBean.getServiceEndpoint());
+
+ if (isStateless && isServiceEndpoint) {
+ addWSContainerGBean(earContext, ejbModule, cl,
sessionObjectName, sessionBean, openejbSessionBean, listener);
+ }
}
}
- private void addWSContainerGBean(EARContext earContext, EJBModule
ejbModule, ClassLoader cl, ObjectName sessionObjectName, SessionBeanType
sessionBean, OpenejbSessionBeanType openejbSessionBean, TransactionPolicyHelper
transactionPolicyHelper, ObjectName listener) throws DeploymentException {
- AxisWebServiceContainerBuilder axisWebServiceContainerBuilder = new
AxisWebServiceContainerBuilder();
- axisWebServiceContainerBuilder.addGbean(earContext, ejbModule, cl,
sessionObjectName, listener, sessionBean, openejbSessionBean,
transactionPolicyHelper, openejbSessionBean == null? null:
openejbSessionBean.getWebServiceSecurity());
+ private void addWSContainerGBean(EARContext earContext, EJBModule
ejbModule, ClassLoader cl, ObjectName sessionObjectName, SessionBeanType
sessionBean, OpenejbSessionBeanType openejbSessionBean, ObjectName listener)
throws DeploymentException {
+
+ String ejbName = sessionBean.getEjbName().getStringValue().trim();
+ J2eeContext j2eeContext = earContext.getJ2eeContext();
+ OpenejbWebServiceSecurityType webServiceSecurity =
openejbSessionBean == null ? null : openejbSessionBean.getWebServiceSecurity();
+
+ //todo this should be done all at once, and put in the corrected
port locations map.
+ String location = null;
+ if (openejbSessionBean != null &&
openejbSessionBean.isSetWebServiceAddress()) {
+ location = openejbSessionBean.getWebServiceAddress().trim();
+ }
+
+ JarFile jarFile = ejbModule.getModuleFile();
+ //these should be parameters or fields
+ Map correctedPortLocations = new HashMap();
+ //umm, put them all in
+ correctedPortLocations.put(ejbName, location);
+ URL wsDDUrl = null;
+ try {
+ wsDDUrl = DeploymentUtil.createJarURL(jarFile,
"META-INF/webservices.xml");
+ } catch (MalformedURLException e) {
+ throw new DeploymentException("Could not locate webservices
descriptor", e);
+ }
+ Map portInfoMap =
webServiceBuilder.parseWebServiceDescriptor(wsDDUrl, jarFile, true,
correctedPortLocations);
+
+ //this code belongs here
+ ObjectName linkName = null;
+ try {
+ linkName = NameFactory.getComponentName(null, null, null, null,
null, ejbName, NameFactory.WEB_SERVICE_LINK, j2eeContext);
+ } catch (MalformedObjectNameException e) {
+ throw new DeploymentException("Could not construct web service
link name", e);
+ }
+ //TODO get this from configuration object name
+ GBeanData linkData = new GBeanData(linkName,
WSContainerGBean.GBEAN_INFO);
+
+ Object portInfo = portInfoMap.get(ejbName);
+ webServiceBuilder.configureEJB(linkData, jarFile, portInfo, cl);
+
+ if (webServiceSecurity != null) {
+ linkData.setAttribute("securityRealmName",
webServiceSecurity.getSecurityRealmName().trim());
+ linkData.setAttribute("realmName",
webServiceSecurity.getRealmName().trim());
+ linkData.setAttribute("transportGuarantee",
webServiceSecurity.getTransportGuarantee().toString());
+ linkData.setAttribute("authMethod",
webServiceSecurity.getAuthMethod().toString());
+ }
+ linkData.setReferencePattern("WebServiceContainer", listener);
+ linkData.setReferencePattern("EJBContainer", sessionObjectName);
+
+ GBeanData gBean = linkData;
+
+ earContext.addGBean(gBean);
}
private void addEJBContainerGBean(EARContext earContext, EJBModule
ejbModule, ComponentPermissions componentPermissions, ClassLoader cl,
ObjectName sessionObjectName, SessionBeanType sessionBean,
OpenejbSessionBeanType openejbSessionBean, TransactionPolicyHelper
transactionPolicyHelper, String policyContextID) throws DeploymentException {
String ejbName = sessionBean.getEjbName().getStringValue();
- GBeanData result;
ContainerBuilder builder = null;
ContainerSecurityBuilder containerSecurityBuilder = new
ContainerSecurityBuilder();
Permissions toBeChecked = new Permissions();
@@ -262,12 +323,12 @@
OpenejbTssType tss = openejbSessionBean.getTss();
try {
tssBeanObjectName =
NameFactory.getComponentName(getStringValue(tss.getDomain()),
- getStringValue(tss.getServer()),
- getStringValue(tss.getApplication()),
- getStringValue(tss.getModule()),
- getStringValue(tss.getName()),
- NameFactory.CORBA_TSS,
- earContext.getJ2eeContext());
+ getStringValue(tss.getServer()),
+ getStringValue(tss.getApplication()),
+ getStringValue(tss.getModule()),
+ getStringValue(tss.getName()),
+ NameFactory.CORBA_TSS,
+ earContext.getJ2eeContext());
} catch (MalformedObjectNameException e) {
throw new DeploymentException("Invalid object name for
tss bean", e);
}
@@ -308,19 +369,19 @@
}
WebserviceDescriptionType[] webserviceDescriptions =
webservicesDocument.getWebservices().getWebserviceDescriptionArray();
- for (int i = 0; i < webserviceDescriptions.length && handlers ==
null; i++) {
+ for (int i = 0; i < webserviceDescriptions.length && handlers ==
null; i++) {
- PortComponentType[] portComponents =
webserviceDescriptions[i].getPortComponentArray();
- for (int j = 0; j < portComponents.length && handlers ==
null; j++) {
+ PortComponentType[] portComponents =
webserviceDescriptions[i].getPortComponentArray();
+ for (int j = 0; j < portComponents.length && handlers == null;
j++) {
- EjbLinkType ejbLink =
portComponents[j].getServiceImplBean().getEjbLink();
- if (ejbLink != null &&
ejbLink.getStringValue().trim().equals(ejbName)) {
- handlers = portComponents[j].getHandlerArray();
- }
+ EjbLinkType ejbLink =
portComponents[j].getServiceImplBean().getEjbLink();
+ if (ejbLink != null &&
ejbLink.getStringValue().trim().equals(ejbName)) {
+ handlers = portComponents[j].getHandlerArray();
}
}
+ }
- if (handlers != null){
+ if (handlers != null) {
List handlerInfos =
WSDescriptorParser.createHandlerInfoList(handlers, cl);
return new HandlerChainConfiguration(handlerInfos, new
String[]{});
} else {