You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2007/01/24 07:15:16 UTC

svn commit: r499274 - in /geronimo/server/trunk/modules: geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/ geronimo-openejb-builder/src/main/java/org/...

Author: dain
Date: Tue Jan 23 22:15:15 2007
New Revision: 499274

URL: http://svn.apache.org/viewvc?view=rev&rev=499274
Log:
Deployments without an ejb-jar.xml file now work

Modified:
    geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARContext.java
    geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
    geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/ejbref/AbstractEjbRefBuilder.java

Modified: geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARContext.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARContext.java?view=diff&rev=499274&r1=499273&r2=499274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARContext.java (original)
+++ geronimo/server/trunk/modules/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARContext.java Tue Jan 23 22:15:15 2007
@@ -48,7 +48,7 @@
 
     private final Map  messageDestinations = new HashMap();
 
-    private final Map generalData = new HashMap();
+    private final Map<Object,Object> generalData = new HashMap<Object,Object>();
 
     public EARContext(File baseDir,
             File inPlaceConfigurationDir,
@@ -172,7 +172,7 @@
         return messageDestinations;
     }
 
-    public Map getGeneralData() {
+    public Map<Object,Object> getGeneralData() {
         return generalData;
     }
 }

Modified: geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java?view=diff&rev=499274&r1=499273&r2=499274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java Tue Jan 23 22:15:15 2007
@@ -21,6 +21,7 @@
 import java.net.URI;
 import java.net.URL;
 import java.net.MalformedURLException;
+import java.net.URLClassLoader;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -83,6 +84,8 @@
 import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlObject;
 import org.apache.xbean.finder.ClassFinder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * Master builder for processing EJB JAR deployments and creating the
@@ -91,6 +94,7 @@
  * @version $Revision: 479481 $ $Date: 2006-11-26 16:52:20 -0800 (Sun, 26 Nov 2006) $
  */
 public class EjbModuleBuilder implements ModuleBuilder {
+    private static final Log log = LogFactory.getLog(EjbModuleBuilder.class);
     private static final String OPENEJBJAR_NAMESPACE = XmlUtil.OPENEJBJAR_QNAME.getNamespaceURI();
 
     private final Environment defaultEnvironment;
@@ -143,46 +147,12 @@
 
         // load the ejb-jar.xml
         String ejbJarXml = XmlUtil.loadEjbJarXml(specDDUrl, moduleFile);
-        if (ejbJarXml == null) {
-            // this is not an ejb module
-            URL moduleUrl = null;
-            try {
-                File file = new File(moduleFile.getName());
-                moduleUrl = file.toURL();
-            } catch (MalformedURLException e) {
-                return null;
-            }
-
-            try {
-                final ClassFinder classFinder = new ClassFinder(Thread.currentThread().getContextClassLoader(), moduleUrl);
-
-                // DMB: getting this via reflection is a temporary fix.  Just want to avoid having to
-                // make Geronimo dependent on an xbean snapshot right before we do the release.
-                // afterwards we can clean this up.
-                Map<String, List> annotated = (Map<String, List>) AccessController.doPrivileged(new PrivilegedAction() {
-                    public Object run() {
-                        try {
-                            Field field = ClassFinder.class.getDeclaredField("annotated");
-                            field.setAccessible(true);
-                            return field.get(classFinder);
-                        } catch (Exception e2) {
-                        }
-                        return null;
-                    }
-                });
-
-                List<String> beans = new ArrayList<String>();
-                beans.addAll(annotated.get(javax.ejb.Stateless.class.getName()));
-                beans.addAll(annotated.get(javax.ejb.Stateful.class.getName()));
-                beans.addAll(annotated.get(javax.ejb.MessageDriven.class.getName()));
-                if (beans.size() <= 0){
-                    return null;
-                }
-            } catch (Throwable e) {
-                // how does one log this?
-                return null;
-            }
+        // if there is no ejb-jar.xml and the module does not contain any
+        // classes annotated with ejb annotations, it is not an ejb module
+        if (ejbJarXml == null && !isEjbAnnotatedModule(moduleFile)) {
+            return null;
         }
+
         EjbJar ejbJar = XmlUtil.unmarshal(EjbJar.class, ejbJarXml);
         if (ejbJar == null){
             ejbJar = new EjbJar();
@@ -258,6 +228,48 @@
         }
 
         return new EjbModule(standAlone, moduleName, environment, moduleFile, targetPath, ejbJar, openejbJar, geronimoOpenejb, ejbJarXml, sharedContext);
+    }
+
+    private boolean isEjbAnnotatedModule(JarFile moduleFile) {
+        // this is not an ejb module
+        URL moduleUrl = null;
+        try {
+            File file = new File(moduleFile.getName());
+            moduleUrl = file.toURL();
+        } catch (MalformedURLException e) {
+            return false;
+        }
+
+        try {
+            URLClassLoader tempClassLoader = new URLClassLoader(new URL[]{moduleUrl}, Thread.currentThread().getContextClassLoader());
+            final ClassFinder classFinder = new ClassFinder(tempClassLoader, moduleUrl);
+
+            // DMB: getting this via reflection is a temporary fix.  Just want to avoid having to
+            // make Geronimo dependent on an xbean snapshot right before we do the release.
+            // afterwards we can clean this up.
+            Map<String, List> annotated = AccessController.doPrivileged(new PrivilegedAction<Map<String, List>>() {
+                public Map<String, List> run() {
+                    try {
+                        Field field = ClassFinder.class.getDeclaredField("annotated");
+                        field.setAccessible(true);
+                        return (Map<String, List>) field.get(classFinder);
+                    } catch (Exception e2) {
+                    }
+                    return null;
+                }
+            });
+
+            if (!isEmpty(annotated.get(javax.ejb.Stateless.class.getName()))) return true;
+            if (!isEmpty(annotated.get(javax.ejb.Stateful.class.getName()))) return true;
+            if (!isEmpty(annotated.get(javax.ejb.MessageDriven.class.getName()))) return true;
+        } catch (Throwable e) {
+            log.warn("Error while attempting to determine if a module is an EJB moduel", e);
+        }
+        return false;
+    }
+
+    private static boolean isEmpty(List l) {
+        return l == null || l.isEmpty();
     }
 
     protected static void unmapReferences(EjbJar ejbJar) {

Modified: geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/ejbref/AbstractEjbRefBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/ejbref/AbstractEjbRefBuilder.java?view=diff&rev=499274&r1=499273&r2=499274
==============================================================================
--- geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/ejbref/AbstractEjbRefBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/ejbref/AbstractEjbRefBuilder.java Tue Jan 23 22:15:15 2007
@@ -47,6 +47,7 @@
 import org.apache.openejb.alt.config.JndiEncInfoBuilder;
 import org.apache.openejb.assembler.classic.JndiEncInfo;
 import org.apache.openejb.assembler.classic.JndiEncBuilder;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.OpenEJBException;
 
 /**
@@ -61,8 +62,12 @@
     protected void bindContext(Module module, JndiConsumer jndiConsumer, Map componentContext) throws DeploymentException {
         Map<String, Object> map = null;
         try {
-            EjbModuleBuilder.EarData earData = (EjbModuleBuilder.EarData) module.getEarContext().getGeneralData().get(EjbModuleBuilder.EarData.class);
-            JndiEncInfoBuilder jndiEncInfoBuilder = new JndiEncInfoBuilder(earData.getEjbJars());
+            EjbModuleBuilder.EarData earData = (EjbModuleBuilder.EarData) module.getRootEarContext().getGeneralData().get(EjbModuleBuilder.EarData.class);
+            Collection<EjbJarInfo> ejbJars = Collections.emptySet();
+            if (earData != null) {
+                ejbJars = earData.getEjbJars();
+            }
+            JndiEncInfoBuilder jndiEncInfoBuilder = new JndiEncInfoBuilder(ejbJars);
             JndiEncInfo jndiEncInfo = jndiEncInfoBuilder.build(jndiConsumer, "GeronimoEnc");
             JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(jndiEncInfo);
             map = jndiEncBuilder.buildMap();