You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2006/11/14 13:29:44 UTC
svn commit: r474765 - in /incubator/openejb/trunk/openejb3:
container/openejb-core/src/main/java/org/apache/openejb/alt/config/
container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/
container/openejb-core/src/main/java/or...
Author: dblevins
Date: Tue Nov 14 04:29:43 2006
New Revision: 474765
URL: http://svn.apache.org/viewvc?view=rev&rev=474765
Log:
reworked deployment again. uses revised ResourceFinder, pulls in all libs from APP-INF/lib or META-INF/lib. hack for castor to allow for beans in different classloaders
Added:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AppModule.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ClientModule.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCMP11_EntityContainer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/JDOManagerBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainerSystemInfo.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainersBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties
incubator/openejb/trunk/openejb3/itests/openejb-itests-app/pom.xml
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AppModule.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AppModule.java?view=auto&rev=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AppModule.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AppModule.java Tue Nov 14 04:29:43 2006
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.alt.config;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.net.URL;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class AppModule implements DeploymentModule {
+ private final List<URL> additionalLibraries = new ArrayList();
+ private final List<ClientModule> clientModules = new ArrayList();
+ private final List<EjbModule> ejbModules = new ArrayList();
+ private final String jarLocation;
+ private final ClassLoader classLoader;
+
+ public AppModule(ClassLoader classLoader, String jarLocation) {
+ this.classLoader = classLoader;
+ this.jarLocation = jarLocation;
+ }
+
+ public ClassLoader getClassLoader() {
+ return classLoader;
+ }
+
+ public List<ClientModule> getClientModules() {
+ return clientModules;
+ }
+
+ public List<EjbModule> getEjbModules() {
+ return ejbModules;
+ }
+
+ public String getJarLocation() {
+ return jarLocation;
+ }
+
+ public List<URL> getAdditionalLibraries() {
+ return additionalLibraries;
+ }
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ClientModule.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ClientModule.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ClientModule.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ClientModule.java Tue Nov 14 04:29:43 2006
@@ -18,6 +18,9 @@
import org.apache.openejb.jee.ApplicationClient;
+import java.util.List;
+import java.util.ArrayList;
+
/**
* @version $Rev$ $Date$
*/
@@ -49,4 +52,5 @@
public String getMainClass() {
return mainClass;
}
+
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationFactory.java Tue Nov 14 04:29:43 2006
@@ -54,6 +54,7 @@
import org.apache.openejb.assembler.classic.TransactionServiceInfo;
import org.apache.openejb.assembler.classic.JndiEncInfo;
import org.apache.openejb.assembler.classic.ClientInfo;
+import org.apache.openejb.assembler.classic.AppInfo;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.Messages;
@@ -65,6 +66,7 @@
import java.util.Properties;
import java.util.Vector;
import java.io.File;
+import java.net.URL;
public class ConfigurationFactory implements OpenEjbConfigurationFactory, ProviderDefaults {
@@ -166,60 +168,96 @@
sys.containerSystem.statefulContainers = sfsbContainers;
sys.containerSystem.statelessContainers = slsbContainers;
- ArrayList<EnterpriseBeanInfo> ejbs = new ArrayList();
- ArrayList<EjbJarInfo> ejbJars = new ArrayList();
+ List<AppInfo> appInfos = new ArrayList();
+ {
+ ArrayList<EjbJarInfo> ejbJars = new ArrayList();
- for (DeploymentModule jar : jars) {
- if (!(jar instanceof EjbModule)) {
- continue;
- }
- EjbModule ejbModule = (EjbModule) jar;
- try {
- EjbJarInfo ejbJarInfo = ejbJarInfoBuilder.buildInfo(ejbModule);
- if (ejbJarInfo == null) {
+ for (DeploymentModule jar : jars) {
+ if (!(jar instanceof EjbModule)) {
continue;
}
- assignBeansToContainers(ejbJarInfo.enterpriseBeans, ejbModule.getOpenejbJar().getDeploymentsByEjbName());
- ejbJars.add(ejbJarInfo);
- ejbs.addAll(Arrays.asList(ejbJarInfo.enterpriseBeans));
- } catch (Exception e) {
- e.printStackTrace();
- ConfigUtils.logger.i18n.warning("conf.0004", ejbModule.getJarURI(), e.getMessage());
+ EjbModule ejbModule = (EjbModule) jar;
+ try {
+ EjbJarInfo ejbJarInfo = ejbJarInfoBuilder.buildInfo(ejbModule);
+ if (ejbJarInfo == null) {
+ continue;
+ }
+ assignBeansToContainers(ejbJarInfo.enterpriseBeans, ejbModule.getOpenejbJar().getDeploymentsByEjbName());
+ ejbJars.add(ejbJarInfo);
+ } catch (Exception e) {
+ e.printStackTrace();
+ ConfigUtils.logger.i18n.warning("conf.0004", ejbModule.getJarURI(), e.getMessage());
+ }
}
- }
- sys.containerSystem.enterpriseBeans = ejbs.toArray(new EnterpriseBeanInfo[]{});
- sys.containerSystem.ejbJars = ejbJars.toArray(new EjbJarInfo[]{});
+ AppInfo appInfo = new AppInfo();
+ appInfo.clients = new ClientInfo[]{};
+ appInfo.libs = new String[]{};
+ appInfo.ejbJars = ejbJars.toArray(new EjbJarInfo[]{});
+ appInfos.add(appInfo);
+ }
- List<ClientInfo> clientInfos = new ArrayList();
for (DeploymentModule module : jars) {
- if (!(module instanceof ClientModule)) {
+ if (!(module instanceof AppModule)) {
continue;
}
- ClientModule clientModule = (ClientModule) module;
+ AppModule appModule = (AppModule) module;
- Map<String, EnterpriseBeanInfo> infos = new HashMap();
- for (EjbJarInfo ejbJarInfo : ejbJars) {
- for (EnterpriseBeanInfo beanInfo : ejbJarInfo.enterpriseBeans) {
- infos.put(beanInfo.ejbName, beanInfo);
+ ArrayList<EjbJarInfo> ejbJars = new ArrayList();
+ for (EjbModule ejbModule : appModule.getEjbModules()) {
+ try {
+ EjbJarInfo ejbJarInfo = ejbJarInfoBuilder.buildInfo(ejbModule);
+ if (ejbJarInfo == null) {
+ continue;
+ }
+ assignBeansToContainers(ejbJarInfo.enterpriseBeans, ejbModule.getOpenejbJar().getDeploymentsByEjbName());
+ ejbJars.add(ejbJarInfo);
+ } catch (Exception e) {
+ e.printStackTrace();
+ ConfigUtils.logger.i18n.warning("conf.0004", ejbModule.getJarURI(), e.getMessage());
}
}
- ApplicationClient applicationClient = clientModule.getApplicationClient();
- ClientInfo clientInfo = new ClientInfo();
- clientInfo.description = applicationClient.getDescription();
- clientInfo.displayName = applicationClient.getDisplayName();
- clientInfo.codebase = clientModule.getJarLocation();
- clientInfo.mainClass = applicationClient.getMainClass();
- clientInfo.moduleId = getClientModuleId(clientModule);
-
- JndiEncInfoBuilder jndiEncInfoBuilder = new JndiEncInfoBuilder(infos);
- JndiEncInfo jndiEncInfo = jndiEncInfoBuilder.build(applicationClient, clientModule.getJarLocation());
- clientInfo.jndiEnc = jndiEncInfo;
- clientInfos.add(clientInfo);
+ List<ClientInfo> clientInfos = new ArrayList();
+ for (ClientModule clientModule : appModule.getClientModules()) {
+ Map<String, EnterpriseBeanInfo> infos = new HashMap();
+ for (EjbJarInfo ejbJarInfo : ejbJars) {
+ for (EnterpriseBeanInfo beanInfo : ejbJarInfo.enterpriseBeans) {
+ infos.put(beanInfo.ejbName, beanInfo);
+ }
+ }
+
+ ApplicationClient applicationClient = clientModule.getApplicationClient();
+ ClientInfo clientInfo = new ClientInfo();
+ clientInfo.description = applicationClient.getDescription();
+ clientInfo.displayName = applicationClient.getDisplayName();
+ clientInfo.codebase = clientModule.getJarLocation();
+ clientInfo.mainClass = applicationClient.getMainClass();
+ clientInfo.moduleId = getClientModuleId(clientModule);
+
+ JndiEncInfoBuilder jndiEncInfoBuilder = new JndiEncInfoBuilder(infos);
+ JndiEncInfo jndiEncInfo = jndiEncInfoBuilder.build(applicationClient, clientModule.getJarLocation());
+ clientInfo.jndiEnc = jndiEncInfo;
+ clientInfos.add(clientInfo);
+ }
+
+ AppInfo appInfo = new AppInfo();
+ appInfo.clients = clientInfos.toArray(new ClientInfo[]{});
+ appInfo.ejbJars = ejbJars.toArray(new EjbJarInfo[]{});
+ appInfo.jarPath = appModule.getJarLocation();
+ List<URL> additionalLibraries = appModule.getAdditionalLibraries();
+ List<String> libs = new ArrayList();
+ for (URL url : additionalLibraries) {
+ File file = new File(url.getPath());
+ libs.add(file.getAbsolutePath());
+ }
+ appInfo.libs = libs.toArray(new String[]{});
+ appInfos.add(appInfo);
}
- sys.containerSystem.clients = clientInfos.toArray(new ClientInfo[]{});
+ sys.containerSystem.applications = appInfos.toArray(new AppInfo[]{});
+
+ sys.containerSystem.clients = new ClientInfo[]{};
SecurityRoleInfo defaultRole = new SecurityRoleInfo();
defaultRole.description = "The role applied to recurity references that are not linked.";
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/DeploymentLoader.java Tue Nov 14 04:29:43 2006
@@ -19,13 +19,19 @@
import org.apache.openejb.OpenEJB;
import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.alt.config.ejb.OpenejbJar;
import org.apache.openejb.alt.config.ejb.EjbDeployment;
+import org.apache.openejb.alt.config.ejb.OpenejbJar;
import org.apache.openejb.alt.config.sys.Deployments;
-import org.apache.openejb.jee.*;
+import org.apache.openejb.jee.Application;
+import org.apache.openejb.jee.ApplicationClient;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.Module;
+import org.apache.openejb.jee.RemoteBean;
import org.apache.openejb.loader.FileUtils;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.Logger;
+import org.apache.xbean.finder.ResourceFinder;
import java.io.BufferedOutputStream;
import java.io.File;
@@ -41,9 +47,9 @@
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.HashMap;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@@ -210,23 +216,29 @@
String pathname = jarsToLoad[i];
- logger.debug("Beginning load: "+pathname);
+ logger.debug("Beginning load: " + pathname);
File jarFile = new File(pathname);
try {
+
ClassLoader classLoader = getClassLoader(jarFile);
URL baseUrl = getFileUrl(jarFile);
- URL appXml = getResource(baseUrl, classLoader, "META-INF/application.xml");
+ ResourceFinder finder = new ResourceFinder("", classLoader, baseUrl);
- if (appXml == null){
- logger.debug("No \"META-INF/application.xml\" found.");
+ Map<String, URL> descriptors = null;
+ try {
+ descriptors = finder.getResourcesMap("META-INF");
+ } catch (IOException e) {
+ throw new OpenEJBException("Unable to determine descriptors in jar: " + baseUrl.toExternalForm(), e);
}
- if (appXml != null) {
+ if (descriptors.containsKey("application.xml")) {
+
+ URL appXml = descriptors.get("application.xml");
jarFile = unpack(appXml, jarFile);
@@ -234,75 +246,116 @@
classLoader = new URLClassLoader(new URL[]{baseUrl}, OpenEJB.class.getClassLoader());
+ finder = new ResourceFinder("", classLoader, baseUrl);
+
try {
+ descriptors = finder.getResourcesMap("META-INF");
+ } catch (IOException e) {
+ throw new OpenEJBException("Unable to determine descriptors in jar: " + baseUrl.toExternalForm(), e);
+ }
- Application application = unmarshal(Application.class, "META-INF/application.xml", classLoader, baseUrl);
-
- String[] files = jarFile.list(new FilenameFilter() {
- public boolean accept(File dir, String name) {
- return name.endsWith(".jar") || name.endsWith(".zip");
- }
- });
+ try {
- List<URL> appUrls = new ArrayList();
- for (String fileName : files) {
- File lib = new File(jarFile, fileName);
- try {
- appUrls.add(lib.toURL());
- } catch (MalformedURLException e) {
- logger.error("Bad resource in classpath. Unable to search for entries. ", e);
- }
+ URL applicationXmlUrl = descriptors.get("application.xml");
+
+ if (applicationXmlUrl == null) {
+ throw new OpenEJBException("META-INF/application.xml" + " not found.");
}
- ClassLoader appClassLoader = new URLClassLoader(appUrls.toArray(new URL[]{}), OpenEJB.class.getClassLoader());
+ Application application = unmarshal(Application.class, "META-INF/application.xml", applicationXmlUrl);
- for (Module module : application.getModule()) {
- if (module.getEjb() != null) {
- try {
- URL ejbUrl = new File(jarFile, module.getEjb()).toURL();
- EjbJar ejbJar = unmarshal(EjbJar.class, "META-INF/ejb-jar.xml", appClassLoader, ejbUrl);
+ List<URL> extraLibs = new ArrayList();
+
+ try {
+ Map<String, URL> libs = finder.getResourcesMap("APP-INF/lib/");
+ extraLibs.addAll(libs.values());
+ } catch (IOException e) {
+ logger.warning("Cannot load libs from 'APP-INF/lib/' : " + e.getMessage(), e);
+ }
+
+ try {
+ Map<String, URL> libs = finder.getResourcesMap("META-INF/lib/");
+ extraLibs.addAll(libs.values());
+ } catch (IOException e) {
+ logger.warning("Cannot load libs from 'META-INF/lib/' : " + e.getMessage(), e);
+ }
+
+ Map<String,URL> ejbModules = new HashMap();
+ Map<String,URL> clientModules = new HashMap();
+ for (Module module : application.getModule()) {
+ try {
+ if (module.getEjb() != null) {
+ URL url = finder.find(module.getEjb());
+ ejbModules.put(module.getEjb(), url);
+ } else if (module.getJava() != null) {
+ URL url = finder.find(module.getJava());
+ clientModules.put(module.getConnector(), url);
+ }
+ } catch (IOException e) {
+ throw new OpenEJBException("Invalid path to module " + e.getMessage(), e);
+ }
+ }
- OpenejbJar openejbJar = null;
+ List<URL> classPath = new ArrayList();
+ classPath.addAll(ejbModules.values());
+ classPath.addAll(clientModules.values());
+ classPath.addAll(extraLibs);
+ ClassLoader appClassLoader = new URLClassLoader(classPath.toArray(new URL[]{}), OpenEJB.class.getClassLoader());
- URL openejbjarUrl = getResource(ejbUrl, appClassLoader, "META-INF/openejb-jar.xml");
- if (openejbjarUrl != null) {
+ AppModule appModule = new AppModule(appClassLoader, jarFile.getAbsolutePath());
+ appModule.getAdditionalLibraries().addAll(extraLibs);
+
+ for (String moduleName : ejbModules.keySet()) {
+ URL ejbUrl = ejbModules.get(moduleName);
+ File ejbFile = new File(ejbUrl.getPath());
+ try {
+ ResourceFinder ejbFinder = new ResourceFinder(ejbUrl);
- openejbJar = unmarshal(OpenejbJar.class, "META-INF/openejb-jar.xml", appClassLoader, ejbUrl);
+ Map<String, URL> ejbDescriptors = null;
+ try {
+ ejbDescriptors = ejbFinder.getResourcesMap("META-INF/");
+ } catch (IOException e) {
+ throw new OpenEJBException("Unable to determine descriptors in jar.", e);
+ }
- }
+ if (!ejbDescriptors.containsKey("ejb-jar.xml")) {
+ throw new OpenEJBException("META-INF/ejb-jar.xml not found.");
+ }
- String jarPath = new File(ejbUrl.getFile()).getAbsolutePath();
+ EjbJar ejbJar = unmarshal(EjbJar.class, "META-INF/ejb-jar.xml", ejbDescriptors.get("ejb-jar.xml"));
- EjbModule ejbModule = new EjbModule(appClassLoader, jarPath, ejbJar, openejbJar);
+ OpenejbJar openejbJar = null;
- deployedJars.add(ejbModule);
-
- } catch (OpenEJBException e) {
- logger.error("Unable to load EJBs from EAR: " + jarFile.getAbsolutePath() + ", module: " + module.getEjb() + ". Exception: " + e.getMessage(), e);
- } catch (MalformedURLException e) {
- logger.error("Bad resource in classpath. Unable to search for entries. ", e);
+ if (ejbDescriptors.containsKey("openejb-jar.xml")) {
+ openejbJar = unmarshal(OpenejbJar.class, "META-INF/openejb-jar.xml", ejbDescriptors.get("openejb-jar.xml"));
}
- } else if (module.getJava() != null) {
- try {
- URL clientUrl = new File(jarFile, module.getJava()).toURL();
- ApplicationClient applicationClient = unmarshal(ApplicationClient.class, "META-INF/application-client.xml", appClassLoader, clientUrl);
+ EjbModule ejbModule = new EjbModule(appClassLoader, ejbFile.getAbsolutePath(), ejbJar, openejbJar);
+ appModule.getEjbModules().add(ejbModule);
+ } catch (OpenEJBException e) {
+ logger.error("Unable to load EJBs from EAR: " + jarFile.getAbsolutePath() + ", module: " + moduleName + ". Exception: " + e.getMessage(), e);
+ }
+ }
+ for (String moduleName : clientModules.keySet()) {
+ URL clientUrl = clientModules.get(moduleName);
+ File clientFile = new File(clientUrl.getPath());
+ try {
+ ResourceFinder clientFinder = new ResourceFinder(clientUrl);
- String jarPath = new File(clientUrl.getFile()).getAbsolutePath();
+ URL appClientXmlUrl = clientFinder.find("META-INF/application-client.xml");
- ClientModule clientModule = new ClientModule(applicationClient, appClassLoader, jarPath, null);
+ ApplicationClient applicationClient = unmarshal(ApplicationClient.class, "META-INF/application-client.xml", appClientXmlUrl);
- deployedJars.add(clientModule);
+ ClientModule clientModule = new ClientModule(applicationClient, appClassLoader, clientFile.getAbsolutePath(), null);
- } catch (OpenEJBException e) {
- logger.error("Unable to load App Client from EAR: " + jarFile.getAbsolutePath() + ", module: " + module.getJava() + ". Exception: " + e.getMessage(), e);
- } catch (MalformedURLException e) {
- logger.error("Bad resource in classpath. Unable to search for entries. ", e);
- }
+ appModule.getClientModules().add(clientModule);
+ } catch (Exception e) {
+ logger.error("Unable to load App Client from EAR: " + jarFile.getAbsolutePath() + ", module: " + moduleName + ". Exception: " + e.getMessage(), e);
}
}
+ deployedJars.add(appModule);
} catch (OpenEJBException e) {
logger.error("Unable to load EAR: " + appXml.toExternalForm(), e);
}
@@ -335,7 +388,7 @@
for (EnterpriseBean b : enterpriseBeans) {
count++;
- System.out.println("<!-- " + b.getEjbName() +" -->");
+ System.out.println("<!-- " + b.getEjbName() + " -->");
if (!(b instanceof RemoteBean)) {
continue;
@@ -352,14 +405,14 @@
EjbDeployment deployment = deployments.get(bean.getEjbName());
String deploymentId = deployment.getDeploymentId();
- if (bean.getHome() != null){
+ if (bean.getHome() != null) {
StringBuilder sb = new StringBuilder();
sb.append(" <ejb-ref>\n");
- sb.append(" <ejb-ref-name>"+deploymentId +"</ejb-ref-name>\n");
- sb.append(" <ejb-ref-type>"+beanType+"</ejb-ref-type>\n");
- sb.append(" <home>"+bean.getHome() +"</home>\n");
- sb.append(" <remote>"+bean.getRemote()+"</remote>\n");
- sb.append(" <ejb-link>"+bean.getEjbName()+"</ejb-link>\n");
+ sb.append(" <ejb-ref-name>" + deploymentId + "</ejb-ref-name>\n");
+ sb.append(" <ejb-ref-type>" + beanType + "</ejb-ref-type>\n");
+ sb.append(" <home>" + bean.getHome() + "</home>\n");
+ sb.append(" <remote>" + bean.getRemote() + "</remote>\n");
+ sb.append(" <ejb-link>" + bean.getEjbName() + "</ejb-link>\n");
sb.append(" </ejb-ref>");
System.out.println(sb.toString());
}
@@ -367,32 +420,22 @@
if (!(bean instanceof org.apache.openejb.jee.SessionBean)) {
continue;
}
- org.apache.openejb.jee.SessionBean sbean = (org.apache.openejb.jee.SessionBean) bean;
+ org.apache.openejb.jee.SessionBean sbean = (org.apache.openejb.jee.SessionBean) bean;
- if (sbean.getBusinessRemote() != null){
+ if (sbean.getBusinessRemote() != null) {
StringBuilder sb = new StringBuilder();
sb.append(" <ejb-ref>\n");
- sb.append(" <ejb-ref-name>"+deploymentId +"BusinessRemote</ejb-ref-name>\n");
- sb.append(" <ejb-ref-type>"+beanType+"</ejb-ref-type>\n");
- sb.append(" <remote>"+sbean.getBusinessRemote()+"</remote>\n");
- sb.append(" <ejb-link>"+sbean.getEjbName()+"</ejb-link>\n");
+ sb.append(" <ejb-ref-name>" + deploymentId + "BusinessRemote</ejb-ref-name>\n");
+ sb.append(" <ejb-ref-type>" + beanType + "</ejb-ref-type>\n");
+ sb.append(" <remote>" + sbean.getBusinessRemote() + "</remote>\n");
+ sb.append(" <ejb-link>" + sbean.getEjbName() + "</ejb-link>\n");
sb.append(" </ejb-ref>");
System.out.println(sb.toString());
}
}
}
- private final Map<Class,JaxbUnmarshaller> unmarshallers = new HashMap();
-
- private <T> T unmarshal(Class<T> type, String descriptor, ClassLoader classLoader, URL jarUrl) throws OpenEJBException {
- URL descriptorUrl = getResource(jarUrl, classLoader, descriptor);
-
- if (descriptorUrl == null) {
- throw new OpenEJBException(descriptor + " not found.");
- }
-
- return unmarshal(type, descriptor, descriptorUrl);
- }
+ private final Map<Class, JaxbUnmarshaller> unmarshallers = new HashMap();
private <T>T unmarshal(Class<T> type, String descriptor, URL descriptorUrl) throws OpenEJBException {
JaxbUnmarshaller unmarshaller = unmarshallers.get(type);
@@ -437,14 +480,14 @@
private ClassLoader getClassLoader(File jarFile) throws OpenEJBException {
ClassLoader classLoader;
// if (jarFile.isDirectory()) {
- try {
- URL[] urls = new URL[]{jarFile.toURL()};
- classLoader = new URLClassLoader(urls, OpenEJB.class.getClassLoader());
- // classLoader = new URLClassLoader(urls, this.getClass().getClassLoader());
- return classLoader;
- } catch (MalformedURLException e) {
- throw new OpenEJBException(ConfigurationFactory.messages.format("cl0001", jarFile.getAbsolutePath(), e.getMessage()));
- }
+ try {
+ URL[] urls = new URL[]{jarFile.toURL()};
+ classLoader = new URLClassLoader(urls, OpenEJB.class.getClassLoader());
+ // classLoader = new URLClassLoader(urls, this.getClass().getClassLoader());
+ return classLoader;
+ } catch (MalformedURLException e) {
+ throw new OpenEJBException(ConfigurationFactory.messages.format("cl0001", jarFile.getAbsolutePath(), e.getMessage()));
+ }
// } else {
// TempCodebase tempCodebase = new TempCodebase(jarFile.getAbsolutePath());
// classLoader = tempCodebase.getClassLoader();
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/EjbJarInfoBuilder.java Tue Nov 14 04:29:43 2006
@@ -133,7 +133,7 @@
try {
File jarFile = new File(jar.getJarURI());
- SystemInstance.get().getClassPath().addJarToPath(jarFile.toURL());
+// SystemInstance.get().getClassPath().addJarToPath(jarFile.toURL());
} catch (Exception e) {
e.printStackTrace();
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCMP11_EntityContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCMP11_EntityContainer.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCMP11_EntityContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/CastorCMP11_EntityContainer.java Tue Nov 14 04:29:43 2006
@@ -64,6 +64,7 @@
import java.util.Collection;
import java.util.Iterator;
import java.util.Enumeration;
+import java.util.List;
import java.net.URL;
import java.net.MalformedURLException;
@@ -232,7 +233,7 @@
try {
- JDOManagerBuilder jdoManagerBuilder = new JDOManagerBuilder(engine, transactionManagerJndiName);
+ JDOManagerBuilder jdoManagerBuilder = new JDOManagerBuilder(engine, transactionManagerJndiName, new JoinedClassLoader(deploys));
// File mappingFile = new File("/Users/dblevins/work/openejb3/container/openejb-core/target/test-classes/conf/default.cmp_mapping.xml");
Collection<URL> urls = mappings.values();
@@ -258,6 +259,24 @@
buildResetMap();
}
+ public static class JoinedClassLoader extends ClassLoader {
+ private final DeploymentInfo[] deploymentInfos;
+
+ public JoinedClassLoader(DeploymentInfo[] deploymentInfos) {
+ this.deploymentInfos = deploymentInfos;
+ }
+
+ protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+ for (DeploymentInfo info : deploymentInfos) {
+ try {
+ ClassLoader classLoader = info.getBeanClass().getClassLoader();
+ return classLoader.loadClass(name);
+ } catch (ClassNotFoundException keepTrying) {
+ }
+ }
+ throw new ClassNotFoundException(name);
+ }
+ }
private TransactionManager getTransactionManager() {
return transactionManager;
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/JDOManagerBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/JDOManagerBuilder.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/JDOManagerBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/containers/castor_cmp11/JDOManagerBuilder.java Tue Nov 14 04:29:43 2006
@@ -57,10 +57,12 @@
private final String engine;
private final String transactionManagerJndiName;
private final List<Mapping> mappings = new ArrayList<Mapping>();
+ private ClassLoader classLoader;
- public JDOManagerBuilder(String engine, String transactionManagerJndiName) {
+ public JDOManagerBuilder(String engine, String transactionManagerJndiName, ClassLoader classLoader) {
this.engine = engine;
this.transactionManagerJndiName = transactionManagerJndiName;
+ this.classLoader = classLoader;
}
public void addMapping(URL location){
@@ -125,7 +127,7 @@
transactionDemarcation.setTransactionManager(transactionManager);
jdoConf.setTransactionDemarcation(transactionDemarcation);
- JDOManager.loadConfiguration(jdoConf);
+ JDOManager.loadConfiguration(jdoConf, null, classLoader);
// Construct a new JDOManager for the database
return JDOManager.createInstance(database.getName());
@@ -204,7 +206,7 @@
jdoConf.setTransactionDemarcation(transactionDemarcation);
- JDOManager.loadConfiguration(jdoConf);
+ JDOManager.loadConfiguration(jdoConf, null, classLoader);
// Construct a new JDOManager for the database
return JDOManager.createInstance(database.getName());
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java?view=auto&rev=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java Tue Nov 14 04:29:43 2006
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class AppInfo extends InfoObject {
+ public String jarPath;
+ public ClientInfo[] clients;
+ public EjbJarInfo[] ejbJars;
+ public String[] libs;
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Tue Nov 14 04:29:43 2006
@@ -19,6 +19,7 @@
import org.apache.openejb.EnvProps;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.Container;
+import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.core.ConnectorReference;
import org.apache.openejb.core.CoreDeploymentInfo;
@@ -36,9 +37,12 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Properties;
import java.util.List;
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.net.URLClassLoader;
+import java.io.File;
public class Assembler extends AssemblerTool implements org.apache.openejb.spi.Assembler {
@@ -224,9 +228,33 @@
JndiBuilder jndiBuilder = new JndiBuilder(containerSystem.getJNDIContext());
- /*[4] Apply method permissions, role refs, and tx attributes ////////////////////////////////////*/
+ HashMap<String, DeploymentInfo> deployments2 = new HashMap();
+ for (AppInfo appInfo : containerSystemInfo.applications) {
+ List<URL> jars = new ArrayList();
+ for (EjbJarInfo info : appInfo.ejbJars) jars.add(toUrl(info.jarPath));
+ for (ClientInfo info : appInfo.clients) jars.add(toUrl(info.codebase));
+ for (String jarPath : appInfo.libs) jars.add(toUrl(jarPath));
+
+ ClassLoader classLoader = new URLClassLoader(jars.toArray(new URL[]{}), org.apache.openejb.OpenEJB.class.getClassLoader());
+
+ EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(classLoader);
+
+ for (EjbJarInfo ejbJar : appInfo.ejbJars) {
+ deployments2.putAll(ejbJarBuilder.build(ejbJar));
+ }
+
+ for (ClientInfo clientInfo : appInfo.clients) {
+ JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(clientInfo.jndiEnc);
+ Context context = jndiEncBuilder.build();
+ containerSystem.getJNDIContext().bind("java:openejb/client/"+clientInfo.moduleId+"/path", clientInfo.codebase);
+ containerSystem.getJNDIContext().bind("java:openejb/client/"+clientInfo.moduleId+"/mainClass", clientInfo.mainClass);
+ containerSystem.getJNDIContext().bind("java:openejb/client/"+clientInfo.moduleId+"/enc", context);
+ }
+ }
+
+
ContainersBuilder containersBuilder = new ContainersBuilder(containerSystemInfo, ((AssemblerTool)this).props);
- List containers = (List) containersBuilder.build();
+ List containers = (List) containersBuilder.buildContainers(deployments2);
for (int i1 = 0; i1 < containers.size(); i1++) {
Container container1 = (Container) containers.get(i1);
containerSystem.addContainer(container1.getContainerID(), container1);
@@ -238,15 +266,6 @@
}
}
- ClientInfo[] clients = containerSystemInfo.clients;
- for (ClientInfo clientInfo : clients) {
- JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(clientInfo.jndiEnc);
- Context context = jndiEncBuilder.build();
- containerSystem.getJNDIContext().bind("java:openejb/client/"+clientInfo.moduleId+"/path", clientInfo.codebase);
- containerSystem.getJNDIContext().bind("java:openejb/client/"+clientInfo.moduleId+"/mainClass", clientInfo.mainClass);
- containerSystem.getJNDIContext().bind("java:openejb/client/"+clientInfo.moduleId+"/enc", context);
- }
-
// roleMapping used later in buildMethodPermissions
AssemblerTool.RoleMapping roleMapping = new AssemblerTool.RoleMapping(configInfo.facilities.securityService.roleMappings);
org.apache.openejb.DeploymentInfo [] deployments = containerSystem.deployments();
@@ -275,6 +294,14 @@
}
return containerSystem;
+ }
+
+ private URL toUrl(String jarPath) throws OpenEJBException {
+ try {
+ return new File(jarPath).toURL();
+ } catch (MalformedURLException e) {
+ throw new OpenEJBException(messages.format("cl0001", jarPath, e.getMessage()));
+ }
}
private void createSecurityService(OpenEjbConfiguration configInfo) throws Exception {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainerSystemInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainerSystemInfo.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainerSystemInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainerSystemInfo.java Tue Nov 14 04:29:43 2006
@@ -19,8 +19,9 @@
public class ContainerSystemInfo extends InfoObject {
public ContainerInfo[] containers;
- public EnterpriseBeanInfo[] enterpriseBeans;
- public ClientInfo[] clients;
+// public EnterpriseBeanInfo[] enterpriseBeans;
+ public AppInfo[] applications;
+ public ClientInfo[] clients;
public EjbJarInfo[] ejbJars;
public EntityContainerInfo[] entityContainers;
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainersBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainersBuilder.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainersBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ContainersBuilder.java Tue Nov 14 04:29:43 2006
@@ -48,39 +48,18 @@
private static final Logger logger = Logger.getInstance("OpenEJB", "org.apache.openejb.util.resources");
private final Properties props;
- private final EjbJarInfo[] ejbJars;
private final ContainerInfo[] containerInfos;
private final String[] decorators;
public ContainersBuilder(ContainerSystemInfo containerSystemInfo, Properties props) {
this.props = props;
- this.ejbJars = containerSystemInfo.ejbJars;
this.containerInfos = containerSystemInfo.containers;
String decorators = props.getProperty("openejb.container.decorators");
this.decorators = (decorators == null) ? new String[]{} : decorators.split(":");
}
- public Object build() throws OpenEJBException {
- URL[] jars = new URL[this.ejbJars.length];
- for (int i = 0; i < this.ejbJars.length; i++) {
- try {
- jars[i] = new File(this.ejbJars[i].jarPath).toURL();
- } catch (MalformedURLException e) {
- throw new OpenEJBException(AssemblerTool.messages.format("cl0001", ejbJars[i].jarPath, e.getMessage()));
- }
- }
-
- ClassLoader classLoader = new URLClassLoader(jars, org.apache.openejb.OpenEJB.class.getClassLoader());
- EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(classLoader);
-
- HashMap<String,DeploymentInfo> deployments = new HashMap();
- for (int i = 0; i < this.ejbJars.length; i++) {
- EjbJarInfo ejbJar = this.ejbJars[i];
-
- deployments.putAll(ejbJarBuilder.build(ejbJar));
- }
-
+ public Object buildContainers(HashMap<String, DeploymentInfo> deployments) throws OpenEJBException {
List containers = new ArrayList();
for (int i = 0; i < containerInfos.length; i++) {
ContainerInfo containerInfo = containerInfos[i];
@@ -95,16 +74,16 @@
Container container = buildContainer(containerInfo, deploymentsList);
container = wrapContainer(container);
- org.apache.openejb.DeploymentInfo [] deploys = container.deployments();
+ DeploymentInfo [] deploys = container.deployments();
for (int x = 0; x < deploys.length; x++) {
- org.apache.openejb.core.CoreDeploymentInfo di = (org.apache.openejb.core.CoreDeploymentInfo) deploys[x];
+ CoreDeploymentInfo di = (CoreDeploymentInfo) deploys[x];
di.setContainer(container);
}
containers.add(container);
}
return containers;
}
-
+
private Container buildContainer(ContainerInfo containerInfo, HashMap deploymentsList) throws OpenEJBException {
String containerName = containerInfo.containerName;
ContainerInfo service = containerInfo;
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java Tue Nov 14 04:29:43 2006
@@ -21,12 +21,15 @@
import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.util.Messages;
import org.apache.openejb.core.CoreDeploymentInfo;
/**
* @version $Revision$ $Date$
*/
public class EjbJarBuilder {
+ protected static final Messages messages = new Messages("org.apache.openejb.util.resources");
+
private final ClassLoader classLoader;
public EjbJarBuilder(ClassLoader classLoader) {
@@ -36,12 +39,15 @@
public HashMap<String, DeploymentInfo> build(EjbJarInfo ejbJar) throws OpenEJBException {
HashMap<String, DeploymentInfo> deployments = new HashMap();
EnterpriseBeanInfo[] ejbs = ejbJar.enterpriseBeans;
- for (int j = 0; j < ejbs.length; j++) {
- EnterpriseBeanInfo ejbInfo = ejbs[j];
- EnterpriseBeanBuilder deploymentBuilder = new EnterpriseBeanBuilder(classLoader, ejbInfo);
- CoreDeploymentInfo deployment = (CoreDeploymentInfo) deploymentBuilder.build();
- deployment.setJarPath(ejbJar.jarPath);
- deployments.put(ejbInfo.ejbDeploymentId, deployment);
+ for (EnterpriseBeanInfo ejbInfo: ejbs) {
+ try {
+ EnterpriseBeanBuilder deploymentBuilder = new EnterpriseBeanBuilder(classLoader, ejbInfo);
+ CoreDeploymentInfo deployment = (CoreDeploymentInfo) deploymentBuilder.build();
+ deployment.setJarPath(ejbJar.jarPath);
+ deployments.put(ejbInfo.ejbDeploymentId, deployment);
+ } catch (Throwable e) {
+ throw new OpenEJBException("Error building bean '"+ejbInfo.ejbName+"'. Exception: "+e.getClass()+": "+e.getMessage(), e);
+ }
}
return deployments;
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java Tue Nov 14 04:29:43 2006
@@ -199,9 +199,28 @@
}
private Class loadClass(String className, String messageCode) throws OpenEJBException {
+ Class clazz = load(className, messageCode);
+ try {
+ clazz.getDeclaredMethods();
+ clazz.getDeclaredFields();
+ clazz.getDeclaredConstructors();
+ clazz.getInterfaces();
+ return clazz;
+ } catch (NoClassDefFoundError e) {
+ if (clazz.getClassLoader() != cl){
+ String message = SafeToolkit.messages.format("cl0008", className, clazz.getClassLoader(), cl, e.getMessage());
+ throw new OpenEJBException(AssemblerTool.messages.format(messageCode, className, bean.ejbDeploymentId, message),e);
+ } else {
+ String message = SafeToolkit.messages.format("cl0009", className, clazz.getClassLoader(), e.getMessage());
+ throw new OpenEJBException(AssemblerTool.messages.format(messageCode, className, bean.ejbDeploymentId, message),e);
+ }
+ }
+ }
+
+ private Class load(String className, String messageCode) throws OpenEJBException {
try {
return cl.loadClass(className);
- } catch (ClassNotFoundException cnfe) {
+ } catch (ClassNotFoundException e) {
String message = SafeToolkit.messages.format("cl0007", className, bean.codebase);
throw new OpenEJBException(AssemblerTool.messages.format(messageCode, className, bean.ejbDeploymentId, message));
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties Tue Nov 14 04:29:43 2006
@@ -85,6 +85,8 @@
cl0005=Error while loading bean class {0} for bean {1}. Received message: {2}
cl0006=Error while loading primary key class {0} for bean {1}. Received message: {2}
cl0007=Cannot locate the class {0} from the codebase [{1}]
+cl0008=Class '{0}' failed to fully resolve. It appears that the class was loaded in a parent classloader '{1}' instead of the expected classloader '{2}' and is missing a required class '{3}'.
+cl0009=Class '{0}' failed to fully resolve. ClassLoader: {1}, Message: {2}.
classNotFound.remote=Error while loading remote interface {0} for bean {1}. Received message: {2}
classNotFound.home=Error while loading home interface {0} for bean {1}. Received message: {2}
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-app/pom.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-app/pom.xml?view=diff&rev=474765&r1=474764&r2=474765
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-app/pom.xml (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-app/pom.xml Tue Nov 14 04:29:43 2006
@@ -25,6 +25,11 @@
</executions>
<configuration>
<modules>
+ <javaModule>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <bundleDir>META-INF/lib</bundleDir>
+ </javaModule>
<ejbModule>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-itests-beans</artifactId>