dain 2004/04/06 14:41:46
Modified: modules/core/src/java/org/openejb/deployment
EJBConfigBuilder.java TransactionPolicyHelper.java
Log:
Added an assembly module
Fixed remaining not serializable bugs
Added configuration files for itests to deploy into new assembly
Revision Changes Path
1.5 +65 -28
openejb/modules/core/src/java/org/openejb/deployment/EJBConfigBuilder.java
Index: EJBConfigBuilder.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/deployment/EJBConfigBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EJBConfigBuilder.java 6 Apr 2004 00:43:07 -0000 1.4
+++ EJBConfigBuilder.java 6 Apr 2004 18:41:46 -0000 1.5
@@ -65,8 +65,8 @@
import java.util.jar.JarOutputStream;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
-import javax.transaction.UserTransaction;
import javax.naming.NamingException;
+import javax.transaction.UserTransaction;
import org.apache.geronimo.common.xml.XmlBeansUtil;
import org.apache.geronimo.deployment.ConfigurationBuilder;
@@ -85,20 +85,20 @@
import org.apache.geronimo.xbeans.j2ee.EjbJarDocument;
import org.apache.geronimo.xbeans.j2ee.EjbJarType;
import org.apache.geronimo.xbeans.j2ee.EnterpriseBeansType;
-import org.apache.geronimo.xbeans.j2ee.EnvEntryType;
-import org.apache.geronimo.xbeans.j2ee.SessionBeanType;
import org.apache.geronimo.xbeans.j2ee.EntityBeanType;
-import org.apache.geronimo.xbeans.j2ee.ResourceRefType;
+import org.apache.geronimo.xbeans.j2ee.EnvEntryType;
import org.apache.geronimo.xbeans.j2ee.ResourceEnvRefType;
+import org.apache.geronimo.xbeans.j2ee.ResourceRefType;
+import org.apache.geronimo.xbeans.j2ee.SessionBeanType;
import org.apache.xmlbeans.SchemaTypeLoader;
import org.apache.xmlbeans.XmlBeans;
import org.apache.xmlbeans.XmlObject;
-import org.openejb.EJBModule;
import org.openejb.ContainerBuilder;
-import org.openejb.sfsb.StatefulContainerBuilder;
+import org.openejb.EJBModule;
import org.openejb.entity.bmp.BMPContainerBuilder;
import org.openejb.entity.cmp.CMPContainerBuilder;
+import org.openejb.sfsb.StatefulContainerBuilder;
import org.openejb.slsb.StatelessContainerBuilder;
import org.apache.geronimo.transaction.UserTransactionImpl;
import org.openejb.xbeans.ejbjar.OpenejbEntityBeanType;
@@ -108,6 +108,8 @@
import org.openejb.xbeans.ejbjar.OpenejbOpenejbJarDocument;
import org.openejb.xbeans.ejbjar.OpenejbOpenejbJarType;
import org.openejb.xbeans.ejbjar.OpenejbSessionBeanType;
+import org.openejb.xbeans.ejbjar.OpenejbDependencyType;
+import org.openejb.xbeans.ejbjar.impl.OpenejbOpenejbJarDocumentImpl;
/**
*
@@ -140,16 +142,35 @@
moduleBase = new URL("jar:" + module.toString() + "!/");
}
XmlObject plan = XmlBeansUtil.getXmlObject(new URL(moduleBase,
"META-INF/openejb-jar.xml"), OpenejbOpenejbJarDocument.type);
-// todo should be able to deploy a naked EAR
-// if (plan == null) {
-// plan = getPlan(new URL(moduleBase, "META-INF/ejb-jar.xml"),
EjbJarDocument.type);
-// }
+ if (plan == null) {
+ URL ejbJarXml = new URL(moduleBase, "META-INF/ejb-jar.xml");
+ return createDefaultPlan(ejbJarXml);
+ }
return plan;
} catch (MalformedURLException e) {
return null;
}
}
+ private OpenejbOpenejbJarDocument createDefaultPlan(URL module) {
+ EjbJarDocument ejbJarDoc = (EjbJarDocument)
XmlBeansUtil.getXmlObject(module, EjbJarDocument.type);
+ if (ejbJarDoc == null) {
+ return null;
+ }
+
+ EjbJarType ejbJar = ejbJarDoc.getEjbJar();
+
+ OpenejbOpenejbJarDocument doc = new
OpenejbOpenejbJarDocumentImpl(OpenejbOpenejbJarDocument.type);
+ OpenejbOpenejbJarType openejbEjbJar = doc.addNewOpenejbJar();
+ openejbEjbJar.setParentId("org/apache/geronimo/Server");
+ String ejbModuleName = ejbJar.getId();
+ if(ejbModuleName != null) {
+ openejbEjbJar.setConfigId(ejbModuleName);
+ } else {
+ openejbEjbJar.setConfigId("unnamed/ejbmodule/" +
System.currentTimeMillis());
+ }
+ return doc;
+ }
public void buildConfiguration(File outfile, File module, XmlObject plan)
throws IOException, DeploymentException {
if (module.isDirectory()) {
@@ -184,6 +205,11 @@
}
context.addStreamInclude(URI.create("ejb.jar"), module);
+ OpenejbDependencyType[] dependencies =
openejbEjbJar.getDependencyArray();
+ for (int i = 0; i < dependencies.length; i++) {
+ context.addDependency(getDependencyURI(dependencies[i]));
+ }
+
buildGBeanConfiguration(context, openejbEjbJar);
context.close();
@@ -269,7 +295,6 @@
SessionBeanType sessionBean = sessionBeans[i];
String ejbName = sessionBean.getEjbName().getStringValue();
OpenejbSessionBeanType openejbSessionBean =
(OpenejbSessionBeanType)openejbBeans.get(ejbName);
- TransactionPolicySource txPolicySource =
transactionPolicyHelper.getTransactionPolicySource(ejbName);
ObjectName sessionObjectName = createSessionObjectName(
sessionBean,
@@ -278,7 +303,7 @@
"null",
ejbModuleName);
- GBeanMBean sessionGBean = createSessionBean(sessionObjectName,
sessionBean, openejbSessionBean, txPolicySource, cl);
+ GBeanMBean sessionGBean = createSessionBean(sessionObjectName,
sessionBean, openejbSessionBean, transactionPolicyHelper, cl);
context.addGBean(sessionObjectName, sessionGBean);
}
@@ -289,7 +314,6 @@
EntityBeanType entityBean = entityBeans[i];
String ejbName = entityBean.getEjbName().getStringValue();
OpenejbEntityBeanType openejbEntityBean =
(OpenejbEntityBeanType)openejbBeans.get(ejbName);
- TransactionPolicySource txPolicySource =
transactionPolicyHelper.getTransactionPolicySource(ejbName);
ObjectName entityObjectName = createEntityObjectName(
entityBean,
@@ -298,12 +322,12 @@
"null",
ejbModuleName);
- GBeanMBean entityGBean = createEntityBean(entityObjectName, entityBean,
openejbEntityBean, txPolicySource, cl);
+ GBeanMBean entityGBean = createEntityBean(entityObjectName, entityBean,
openejbEntityBean, transactionPolicyHelper, cl);
context.addGBean(entityObjectName, entityGBean);
}
}
- public GBeanMBean createSessionBean(Object containerId, SessionBeanType
sessionBean, OpenejbSessionBeanType openejbSessionBean, TransactionPolicySource
transactionPolicySource, ClassLoader cl) throws DeploymentException {
+ public GBeanMBean createSessionBean(Object containerId, SessionBeanType
sessionBean, OpenejbSessionBeanType openejbSessionBean, TransactionPolicyHelper
transactionPolicyHelper, ClassLoader cl) throws DeploymentException {
String ejbName = sessionBean.getEjbName().getStringValue();
ContainerBuilder builder = null;
@@ -328,6 +352,7 @@
builder.setTransactionPolicySource(TransactionPolicyHelper.StatelessBMTPolicySource);
} else {
userTransaction = null;
+ TransactionPolicySource transactionPolicySource =
transactionPolicyHelper.getTransactionPolicySource(ejbName);
builder.setTransactionPolicySource(transactionPolicySource);
}
@@ -361,7 +386,7 @@
return createEJBObjectName(type, domainName, serverName, applicationName,
moduleName, ejbName);
}
- public GBeanMBean createEntityBean(Object containerId, EntityBeanType
entityBean, OpenejbEntityBeanType openejbEntityBean, TransactionPolicySource
transactionPolicySource, ClassLoader cl) throws DeploymentException {
+ public GBeanMBean createEntityBean(Object containerId, EntityBeanType
entityBean, OpenejbEntityBeanType openejbEntityBean, TransactionPolicyHelper
transactionPolicyHelper, ClassLoader cl) throws DeploymentException {
String ejbName = entityBean.getEjbName().getStringValue();
ContainerBuilder builder = null;
@@ -378,13 +403,14 @@
builder.setRemoteInterfaceName(getJ2eeStringValue(entityBean.getRemote()));
builder.setLocalHomeInterfaceName(getJ2eeStringValue(entityBean.getLocalHome()));
builder.setLocalInterfaceName(getJ2eeStringValue(entityBean.getLocal()));
+ TransactionPolicySource transactionPolicySource =
transactionPolicyHelper.getTransactionPolicySource(ejbName);
builder.setTransactionPolicySource(transactionPolicySource);
try {
ReadOnlyContext compContext = buildComponentContext(entityBean,
openejbEntityBean, null, cl);
builder.setComponentContext(compContext);
} catch (Exception e) {
- throw new DeploymentException("Unable to create EJB jndi environment:
ejbName" + ejbName, e);
+ throw new DeploymentException("Unable to create EJB jndi environment:
ejbName=" + ejbName, e);
}
try {
@@ -393,7 +419,7 @@
gbean.setReferencePatterns("trackedConnectionAssociator",
Collections.singleton(new ObjectName("*:type=ConnectionTracker,*")));
return gbean;
} catch (Exception e) {
- throw new DeploymentException("Unable to initialize EJBContainer GBean:
ejbName" + ejbName, e);
+ throw new DeploymentException("Unable to initialize EJBContainer GBean:
ejbName=" + ejbName, e);
}
}
@@ -550,15 +576,26 @@
return configID;
}
-// private byte[] getBytes(InputStream is) throws IOException {
-// byte[] buffer = new byte[4096];
-// ByteArrayOutputStream baos = new ByteArrayOutputStream();
-// int count;
-// while ((count = is.read(buffer)) > 0) {
-// baos.write(buffer, 0, count);
-// }
-// return baos.toByteArray();
-// }
+ private URI getDependencyURI(OpenejbDependencyType dep) throws
DeploymentException {
+ URI uri;
+ if (dep.isSetUri()) {
+ try {
+ uri = new URI(dep.getUri());
+ } catch (URISyntaxException e) {
+ throw new DeploymentException("Invalid dependency URI " +
dep.getUri(), e);
+ }
+ } else {
+ // @todo support more than just jars
+ String id = dep.getGroupId() + "/jars/" + dep.getArtifactId() + '-' +
dep.getVersion() + ".jar";
+ try {
+ uri = new URI(id);
+ } catch (URISyntaxException e) {
+ throw new DeploymentException("Unable to construct URI for
groupId=" + dep.getGroupId() + ", artifactId=" + dep.getArtifactId() + ", version=" +
dep.getVersion(), e);
+ }
+ }
+ return uri;
+ }
+
private String getJ2eeStringValue(org.apache.geronimo.xbeans.j2ee.String
string) {
if (string == null) {
1.5 +4 -4
openejb/modules/core/src/java/org/openejb/deployment/TransactionPolicyHelper.java
Index: TransactionPolicyHelper.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/deployment/TransactionPolicyHelper.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TransactionPolicyHelper.java 1 Apr 2004 22:36:52 -0000 1.4
+++ TransactionPolicyHelper.java 6 Apr 2004 18:41:46 -0000 1.5
@@ -103,16 +103,16 @@
}
public TransactionPolicySource getTransactionPolicySource(String ejbName)
throws DeploymentException {
- return new TransactionPolicySourceImpl((SortedSet)
ejbNameToTransactionAttributesMap.get(ejbName));
+ return new TransactionPolicySourceImpl(ejbName, (SortedSet)
ejbNameToTransactionAttributesMap.get(ejbName));
}
private static class TransactionPolicySourceImpl implements
TransactionPolicySource {
private final SortedSet transactionPolicies;
- public TransactionPolicySourceImpl(SortedSet transactionPolicies) throws
DeploymentException {
+ public TransactionPolicySourceImpl(String ejbName, SortedSet
transactionPolicies) throws DeploymentException {
//To allow more lenient spec interpretations, with default of Requires,
substitute an empty sorted set here.
if (transactionPolicies == null) {
- throw new DeploymentException("You must specify transaction
attributes, see ejb 2.1 spec 17.4.1");
+ throw new DeploymentException("You must specify transaction
attributes, see ejb 2.1 spec 17.4.1: ejbName=" + ejbName);
}
this.transactionPolicies = transactionPolicies;
}