Author: dblevins
Date: Tue Dec 18 15:50:11 2007
New Revision: 605367

URL: http://svn.apache.org/viewvc?rev=605367&view=rev
Log:
Optimization for simple apps (empty ejb-jar, no cmps)

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/SunConversion.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ListAdapter.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?rev=605367&r1=605366&r2=605367&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
 Tue Dec 18 15:50:11 2007
@@ -345,10 +345,10 @@
     private Class loadClass(String className, String messageCode) throws 
OpenEJBException {
         Class clazz = load(className, messageCode);
         try {
-            clazz.getDeclaredMethods();
-            clazz.getDeclaredFields();
-            clazz.getDeclaredConstructors();
-            clazz.getInterfaces();
+//            clazz.getDeclaredMethods();
+//            clazz.getDeclaredFields();
+//            clazz.getDeclaredConstructors();
+//            clazz.getInterfaces();
             return clazz;
         } catch (NoClassDefFoundError e) {
             if (clazz.getClassLoader() != cl) {

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java?rev=605367&r1=605366&r2=605367&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectionBuilder.java
 Tue Dec 18 15:50:11 2007
@@ -101,10 +101,10 @@
     private Class loadClass(String className) throws OpenEJBException {
         try {
             Class clazz = Class.forName(className, true, classLoader);
-            clazz.getDeclaredMethods();
-            clazz.getDeclaredFields();
-            clazz.getDeclaredConstructors();
-            clazz.getInterfaces();
+//            clazz.getDeclaredMethods();
+//            clazz.getDeclaredFields();
+//            clazz.getDeclaredConstructors();
+//            clazz.getInterfaces();
             return clazz;
         } catch (Throwable e) {
             throw new OpenEJBException("Unable to load class " + className);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java?rev=605367&r1=605366&r2=605367&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
 Tue Dec 18 15:50:11 2007
@@ -32,6 +32,7 @@
 import org.apache.openejb.jee.Relationships;
 import org.apache.openejb.jee.Query;
 import org.apache.openejb.jee.QueryMethod;
+import org.apache.openejb.jee.EnterpriseBean;
 import org.apache.openejb.jee.oejb3.OpenejbJar;
 import org.apache.openejb.jee.oejb3.EjbDeployment;
 import org.apache.openejb.jee.jpa.Basic;
@@ -87,6 +88,9 @@
     )));
 
     public AppModule deploy(AppModule appModule) throws OpenEJBException {
+
+        if (!hasCmpEntities(appModule)) return appModule;
+
         // search for the cmp persistence unit
         PersistenceUnit persistenceUnit = null;
         for (PersistenceModule persistenceModule : 
appModule.getPersistenceModules()) {
@@ -102,6 +106,7 @@
 
         // todo scan existing persistence module for all entity mappings and 
don't generate mappings for them
 
+
         // create mappings
         EntityMappings cmpMappings = appModule.getCmpMappings();
         if (cmpMappings == null) {
@@ -145,6 +150,18 @@
         return appModule;
     }
 
+    private boolean hasCmpEntities(AppModule appModule) {
+        for (EjbModule ejbModule : appModule.getEjbModules()) {
+            for (EnterpriseBean bean : 
ejbModule.getEjbJar().getEnterpriseBeans()) {
+                if (bean instanceof EntityBean) {
+                    EntityBean entityBean = (EntityBean) bean;
+                    if (entityBean.getPersistenceType() == 
PersistenceType.CONTAINER) return true;
+                }
+            }
+        }
+        return false;
+    }
+
     public EntityMappings generateEntityMappings(EjbModule ejbModule) throws 
OpenEJBException {
         AppModule appModule = new AppModule(ejbModule.getClassLoader(), 
ejbModule.getJarLocation());
         appModule.getEjbModules().add(ejbModule);
@@ -171,8 +188,7 @@
         
         for (org.apache.openejb.jee.EnterpriseBean enterpriseBean : 
ejbJar.getEnterpriseBeans()) {
             // skip all non-CMP beans
-            if (!(enterpriseBean instanceof EntityBean) ||
-                    ((EntityBean) enterpriseBean).getPersistenceType() != 
PersistenceType.CONTAINER) {
+            if (!(enterpriseBean instanceof EntityBean) || ((EntityBean) 
enterpriseBean).getPersistenceType() != PersistenceType.CONTAINER) {
                 continue;
             }
             EntityBean bean = (EntityBean) enterpriseBean;

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java?rev=605367&r1=605366&r2=605367&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
 Tue Dec 18 15:50:11 2007
@@ -198,6 +198,35 @@
             urlSet = urlSet.excludeJavaHome();
             urlSet = 
urlSet.excludePaths(System.getProperty("sun.boot.class.path", ""));
             urlSet = urlSet.exclude(".*/JavaVM.framework/.*");
+            urlSet = 
urlSet.exclude(".*/activeio-core-[\\d.]+(-incubator)?.jar(!/)?");
+            urlSet = urlSet.exclude(".*/activemq-(core|ra)-[\\d.]+.jar(!/)?");
+            urlSet = 
urlSet.exclude(".*/annotations-api-6.[01].[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/avalon-framework-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/axis2-jaxws-api-[\\d.]+.jar(!/)?");
+            urlSet = 
urlSet.exclude(".*/backport-util-concurrent-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/catalina-[\\d.]+.jar(!/)?");
+            urlSet = 
urlSet.exclude(".*/commons-(logging|cli|pool|lang|collections|dbcp)-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/derby-[\\d.]+.jar(!/)?");
+            urlSet = 
urlSet.exclude(".*/geronimo-(connector|transaction)-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/geronimo-[^/]+_spec-[\\d.]+.jar(!/)?");
+            urlSet = 
urlSet.exclude(".*/geronimo-javamail_([\\d.]+)_mail-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/hsqldb-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/idb-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/idea_rt.jar(!/)?");
+            urlSet = urlSet.exclude(".*/jaxb-(impl|api)-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/jmdns-[\\d.]+(-RC\\d)?.jar(!/)?");
+            urlSet = urlSet.exclude(".*/juli-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/junit-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/log4j-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/logkit-[\\d.]+.jar(!/)?");
+            urlSet = 
urlSet.exclude(".*/openjpa-(jdbc|kernel|lib|persistence|persistence-jdbc)(-5)?-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/serp-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/servlet-api-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/swizzle-stream-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/wsdl4j-[\\d.]+.jar(!/)?");
+            urlSet = 
urlSet.exclude(".*/xbean-(reflect|naming|finder)-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/xmlParserAPIs-[\\d.]+.jar(!/)?");
+            urlSet = urlSet.exclude(".*/xmlunit-[\\d.]+.jar(!/)?");
             UrlSet prefiltered = urlSet;
             urlSet = urlSet.exclude(exclude);
             urlSet = urlSet.include(includes);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java?rev=605367&r1=605366&r2=605367&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
 Tue Dec 18 15:50:11 2007
@@ -17,6 +17,10 @@
 package org.apache.openejb.config;
 
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.config.sys.ServicesJar;
+import org.apache.openejb.config.sys.ServiceProvider;
+import org.apache.openejb.config.sys.ListAdapter;
+import org.apache.openejb.config.sys.PropertiesAdapter;
 import org.apache.openejb.core.webservices.WsdlResolver;
 import org.apache.openejb.jee.ApplicationClient;
 import org.apache.openejb.jee.Connector;
@@ -51,12 +55,14 @@
 import javax.xml.bind.JAXBException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
+import javax.xml.parsers.ParserConfigurationException;
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.net.URLConnection;
 import java.util.List;
 
 public class ReadDescriptors implements DynamicDeployer {
@@ -336,9 +342,9 @@
     }
 
     public static EjbJar readEjbJar(URL url) throws OpenEJBException {
-        EjbJar ejbJar = null;
         try {
-            ejbJar = (EjbJar) JaxbJavaee.unmarshal(EjbJar.class, 
url.openStream());
+            if (isEmptyEjbJar(url)) return new EjbJar();
+            return (EjbJar) JaxbJavaee.unmarshal(EjbJar.class, 
url.openStream());
         } catch (SAXException e) {
             throw new OpenEJBException("Cannot parse the ejb-jar.xml file: " + 
url.toExternalForm(), e);
         } catch (JAXBException e) {
@@ -348,7 +354,26 @@
         } catch (Exception e) {
             throw new OpenEJBException("Encountered unknown error parsing the 
ejb-jar.xml file: " + url.toExternalForm(), e);
         }
-        return ejbJar;
+    }
+
+    private static boolean isEmptyEjbJar(URL url) throws IOException, 
ParserConfigurationException, SAXException {
+        InputSource inputSource = new InputSource(url.openStream());
+
+        SAXParserFactory factory = SAXParserFactory.newInstance();
+        factory.setNamespaceAware(true);
+        factory.setValidating(false);
+        SAXParser parser = factory.newSAXParser();
+
+        try {
+            parser.parse(inputSource, new DefaultHandler(){
+                public void startElement(String uri, String localName, String 
qName, Attributes att) throws SAXException {
+                    if (!localName.equals("ejb-jar")) throw new 
SAXException(localName);
+                }
+            });
+            return true;
+        } catch (SAXException e) {
+            return false;
+        }
     }
 
     public static Webservices readWebservices(URL url) throws OpenEJBException 
{

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/SunConversion.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/SunConversion.java?rev=605367&r1=605366&r2=605367&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/SunConversion.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/SunConversion.java
 Tue Dec 18 15:50:11 2007
@@ -489,7 +489,7 @@
 
     public void convertModule(EjbModule ejbModule, EntityMappings 
entityMappings) {
         Map<String, EntityData> entities =  new TreeMap<String, EntityData>();
-        for (Entity entity : entityMappings.getEntity()) {
+        if (entityMappings != null ) for (Entity entity : 
entityMappings.getEntity()) {
             entities.put(entity.getDescription(), new 
SunConversion.EntityData(entity));
         }
 

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java?rev=605367&r1=605366&r2=605367&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
 Tue Dec 18 15:50:11 2007
@@ -25,6 +25,7 @@
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
 import org.xml.sax.helpers.XMLFilterImpl;
+import org.xml.sax.helpers.DefaultHandler;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
@@ -51,6 +52,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.List;
 
 public abstract class JaxbOpenejb {
     @SuppressWarnings({"unchecked"})
@@ -124,7 +126,9 @@
             url = finder.find(providerName + "/service-jar.xml");
             in = url.openStream();
 
-            ServicesJar servicesJar = unmarshal(ServicesJar.class, in);
+            ServicesJar servicesJar = parseServicesJar(in);
+
+//            ServicesJar servicesJar = unmarshal(ServicesJar.class, in);
             return servicesJar;
         } catch (MalformedURLException e) {
             throw new OpenEJBException("Unable to resolve service provider " + 
providerName, e);
@@ -138,6 +142,63 @@
                 }
             }
         }
+    }
+
+    private static ServicesJar parseServicesJar(InputStream in) throws 
ParserConfigurationException, SAXException, IOException {
+        InputSource inputSource = new InputSource(in);
+
+        SAXParserFactory factory = SAXParserFactory.newInstance();
+        factory.setNamespaceAware(true);
+        factory.setValidating(false);
+        SAXParser parser = factory.newSAXParser();
+
+        final ServicesJar servicesJar1 = new ServicesJar();
+
+        parser.parse(inputSource, new DefaultHandler(){
+            private ServiceProvider provider;
+            private StringBuilder content;
+
+            public void startDocument() throws SAXException {
+            }
+
+            public void startElement(String uri, String localName, String 
qName, Attributes att) throws SAXException {
+                if (!localName.equals("ServiceProvider")) return;
+
+                provider = new ServiceProvider();
+                provider.setId(att.getValue("","id"));
+                provider.setService(att.getValue("","service"));
+                provider.setFactoryName(att.getValue("","factory-name"));
+                provider.setConstructor(att.getValue("","constructor"));
+                provider.setClassName(att.getValue("","class-name"));
+                String typesString = att.getValue("", "types");
+                if (typesString != null){
+                    ListAdapter listAdapter = new ListAdapter();
+                    List<String> types = listAdapter.unmarshal(typesString);
+                    provider.getTypes().addAll(types);
+                }
+                servicesJar1.getServiceProvider().add(provider);
+            }
+
+            public void characters(char ch[], int start, int length) throws 
SAXException {
+                if (content == null) content = new StringBuilder();
+                content.append(ch, start, length);
+            }
+
+            public void endElement(String uri, String localName, String qName) 
throws SAXException {
+                if (provider == null || content == null) return;
+
+                try {
+                    PropertiesAdapter propertiesAdapter = new 
PropertiesAdapter();
+                    
provider.getProperties().putAll(propertiesAdapter.unmarshal(content.toString()));
+                } catch (Exception e) {
+                    throw new SAXException(e);
+                }
+                provider = null;
+                content = null;
+            }
+        });
+        ServicesJar servicesJar = servicesJar1;
+        return servicesJar;
     }
 
     public static Openejb readConfig(String configFile) throws 
OpenEJBException {

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ListAdapter.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ListAdapter.java?rev=605367&r1=605366&r2=605367&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ListAdapter.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ListAdapter.java
 Tue Dec 18 15:50:11 2007
@@ -27,12 +27,12 @@
  * @version $Rev$ $Date$
  */
 public class ListAdapter extends XmlAdapter<String, List<String>> {
-    public List<String> unmarshal(String s) throws Exception {
+    public List<String> unmarshal(String s) {
         String[] strings = s.split(", *");
         return new ArrayList<String>(Arrays.asList(strings));
     }
 
-    public String marshal(List<String> list) throws Exception {
+    public String marshal(List<String> list) {
         return Join.join(", ", list);
     }
 }


Reply via email to