ammulder 2005/07/13 22:34:04
Modified: modules/openejb-builder/src/java/org/openejb/deployment
OpenEJBModuleBuilder.java
Log:
Deployment exception if an EJB configuration block appears in
openejb-jar.xml and there's no matching EJB in ejb-jar.xml
GERONIMO-348
Revision Changes Path
1.45 +50 -5
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.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- OpenEJBModuleBuilder.java 9 Jul 2005 18:46:36 -0000 1.44
+++ OpenEJBModuleBuilder.java 14 Jul 2005 02:34:04 -0000 1.45
@@ -59,6 +59,8 @@
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
import java.util.jar.JarFile;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
@@ -90,6 +92,9 @@
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.EntityBeanType;
+import org.apache.geronimo.xbeans.j2ee.SessionBeanType;
+import org.apache.geronimo.xbeans.j2ee.MessageDrivenBeanType;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.openejb.EJBModuleImpl;
@@ -449,25 +454,66 @@
throw new DeploymentException("A cmp-connection-factory element
must be specified as CMP EntityBeans are defined.");
}
+ EnterpriseBeansType enterpriseBeans = ejbJar.getEnterpriseBeans();
+ Set beans = new HashSet();
+ EntityBeanType[] ebs = enterpriseBeans.getEntityArray();
+ for (int i = 0; i < ebs.length; i++) {
+ beans.add(ebs[i].getEjbName().getStringValue());
+ }
+ SessionBeanType[] sbs = enterpriseBeans.getSessionArray();
+ for (int i = 0; i < sbs.length; i++) {
+ beans.add(sbs[i].getEjbName().getStringValue());
+ }
+ MessageDrivenBeanType[] mbs =
enterpriseBeans.getMessageDrivenArray();
+ for (int i = 0; i < mbs.length; i++) {
+ beans.add(mbs[i].getEjbName().getStringValue());
+ }
+
// create an index of the openejb ejb configurations by ejb-name
Map openejbBeans = new HashMap();
+ List badBeans = new ArrayList();
//TODO NPE if enterprise-beans or session is missing
OpenejbSessionBeanType[] openejbSessionBeans =
openejbEjbJar.getEnterpriseBeans().getSessionArray();
for (int i = 0; i < openejbSessionBeans.length; i++) {
OpenejbSessionBeanType sessionBean = openejbSessionBeans[i];
- openejbBeans.put(sessionBean.getEjbName(), sessionBean);
+ if(beans.contains(sessionBean.getEjbName())) {
+ openejbBeans.put(sessionBean.getEjbName(), sessionBean);
+ } else {
+ badBeans.add(sessionBean.getEjbName());
+ }
}
//TODO NPE as above
OpenejbEntityBeanType[] openejbEntityBeans =
openejbEjbJar.getEnterpriseBeans().getEntityArray();
for (int i = 0; i < openejbEntityBeans.length; i++) {
OpenejbEntityBeanType entityBean = openejbEntityBeans[i];
- openejbBeans.put(entityBean.getEjbName(), entityBean);
+ if(beans.contains(entityBean.getEjbName())) {
+ openejbBeans.put(entityBean.getEjbName(), entityBean);
+ } else {
+ badBeans.add(entityBean.getEjbName());
+ }
}
//TODO NPE as above
OpenejbMessageDrivenBeanType[] openejbMessageDrivenBeans =
openejbEjbJar.getEnterpriseBeans().getMessageDrivenArray();
for (int i = 0; i < openejbMessageDrivenBeans.length; i++) {
OpenejbMessageDrivenBeanType messageDrivenBean =
openejbMessageDrivenBeans[i];
- openejbBeans.put(messageDrivenBean.getEjbName(),
messageDrivenBean);
+ if(beans.contains(messageDrivenBean.getEjbName())) {
+ openejbBeans.put(messageDrivenBean.getEjbName(),
messageDrivenBean);
+ } else {
+ badBeans.add(messageDrivenBean.getEjbName());
+ }
+ }
+
+ if(badBeans.size() > 0) {
+ if(badBeans.size() == 1) {
+ throw new DeploymentException("EJB '"+badBeans.get(0)+"' is
described in OpenEJB deployment plan but does not exist in
META-INF/ejb-jar.xml");
+ }
+ StringBuffer buf = new StringBuffer();
+ buf.append("The following EJBs are described in the OpenEJB
deployment plan but do not exist in META-INF/ejb-jar.xml: ");
+ for (int i = 0; i < badBeans.size(); i++) {
+ if(i>0) buf.append(", ");
+ buf.append(badBeans.get(i));
+ }
+ throw new DeploymentException(buf.toString());
}
TransactionPolicyHelper transactionPolicyHelper;
@@ -485,7 +531,6 @@
earContext.setSecurityConfiguration(securityConfiguration);
}
- EnterpriseBeansType enterpriseBeans = ejbJar.getEnterpriseBeans();
ComponentPermissions componentPermissions = new
ComponentPermissions(new Permissions(), new Permissions(), new HashMap());
//TODO go back to the commented version when possible