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);
}
}