Author: dblevins
Date: Thu Dec 13 22:47:37 2007
New Revision: 604114
URL: http://svn.apache.org/viewvc?rev=604114&view=rev
Log:
Link persistence units during the config phase and simply refer to them during
assembly.
All persistence units will now be bound into jndi and unbound on undeploy
Added:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java
(contents, props changed)
- copied, changed from r602802,
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java
Removed:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
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/JndiEncBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
---
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java
(original)
+++
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatJndiBuilder.java
Thu Dec 13 22:47:37 2007
@@ -30,6 +30,7 @@
import org.apache.naming.factory.Constants;
import org.apache.openejb.Injection;
import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.assembler.classic.EjbLocalReferenceInfo;
import org.apache.openejb.assembler.classic.EjbReferenceInfo;
import org.apache.openejb.assembler.classic.EnvEntryInfo;
@@ -66,6 +67,8 @@
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.transaction.UserTransaction;
+import javax.naming.Context;
+import javax.naming.NamingException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -77,17 +80,15 @@
private final StandardContext standardContext;
private final WebAppInfo webAppInfo;
private final List<Injection> injections;
- private final LinkResolver<EntityManagerFactory> emfLinkResolver;
private final boolean replaceEntry;
private boolean useCrossClassLoaderRef = true;
private NamingContextListener namingContextListener;
- public TomcatJndiBuilder(StandardContext standardContext, WebAppInfo
webAppInfo,List<Injection> injections, LinkResolver<EntityManagerFactory>
emfLinkResolver) {
+ public TomcatJndiBuilder(StandardContext standardContext, WebAppInfo
webAppInfo, List<Injection> injections) {
this.injections = injections;
this.standardContext = standardContext;
this.namingContextListener =
standardContext.getNamingContextListener();
this.webAppInfo = webAppInfo;
- this.emfLinkResolver = emfLinkResolver;
String parameter = standardContext.findParameter("openejb.start.late");
replaceEntry = Boolean.parseBoolean(parameter);
@@ -268,9 +269,12 @@
resource.setProperty(JNDI_NAME, ref.location.jndiName);
resource.setProperty(JNDI_PROVIDER_ID,
ref.location.jndiProviderId);
} else {
- EntityManagerFactory factory =
emfLinkResolver.resolveLink(ref.persistenceUnitName, moduleUri);
- if (factory == null) {
- throw new IllegalArgumentException("Persistence unit " +
ref.persistenceUnitName + " for persistence-context-ref " + ref.referenceName +
" not found");
+ Context context =
SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
+ EntityManagerFactory factory;
+ try {
+ factory = (EntityManagerFactory)
context.lookup("openejb/PersistenceUnit/" + ref.unitId);
+ } catch (NamingException e) {
+ throw new IllegalStateException("PersistenceUnit '" +
ref.unitId + "' not found for EXTENDED ref '" + ref.referenceName + "'");
}
JtaEntityManagerRegistry jtaEntityManagerRegistry =
SystemInstance.get().getComponent(JtaEntityManagerRegistry.class);
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
---
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
(original)
+++
openejb/trunk/openejb3/assembly/openejb-tomcat/src/main/java/org/apache/openejb/tomcat/TomcatWebAppBuilder.java
Thu Dec 13 22:47:37 2007
@@ -42,7 +42,6 @@
import org.apache.openejb.assembler.classic.AppInfo;
import org.apache.openejb.assembler.classic.Assembler;
import org.apache.openejb.assembler.classic.LinkResolver;
-import org.apache.openejb.assembler.classic.UniqueDefaultLinkResolver;
import org.apache.openejb.assembler.classic.WebAppBuilder;
import org.apache.openejb.assembler.classic.WebAppInfo;
import org.apache.openejb.assembler.classic.EjbJarInfo;
@@ -148,7 +147,7 @@
// OpenEJB WebAppBuilder
//
- public void deployWebApps(AppInfo appInfo,
LinkResolver<EntityManagerFactory> emfLinkResolver, ClassLoader classLoader)
throws Exception {
+ public void deployWebApps(AppInfo appInfo, ClassLoader classLoader) throws
Exception {
for (WebAppInfo webApp : appInfo.webApps) {
if (getContextInfo(webApp) == null) {
StandardContext standardContext = new StandardContext();
@@ -167,7 +166,6 @@
contextInfo.appInfo = appInfo;
contextInfo.deployer = deployer;
contextInfo.standardContext = standardContext;
- contextInfo.emfLinkResolver = emfLinkResolver;
deployer.manageApp(standardContext);
}
}
@@ -229,10 +227,8 @@
AppInfo appInfo =
configurationFactory.configureApplication(appModule);
contextInfo.appInfo = appInfo;
- LinkResolver<EntityManagerFactory> emfLinkResolver = new
UniqueDefaultLinkResolver<EntityManagerFactory>();
- assembler.createApplication(contextInfo.appInfo,
emfLinkResolver, standardContext.getLoader().getClassLoader());
+ assembler.createApplication(contextInfo.appInfo,
standardContext.getLoader().getClassLoader());
// todo add watched resources to context
- contextInfo.emfLinkResolver = emfLinkResolver;
} catch (Exception e) {
logger.error("Unable to deploy collapsed ear in war " +
standardContext.getPath() + ": Exception: " + e.getMessage(), e);
}
@@ -259,7 +255,7 @@
List<Injection> injections =
injectionBuilder.buildInjections(webAppInfo.jndiEnc);
// merge OpenEJB jndi into Tomcat jndi
- TomcatJndiBuilder jndiBuilder = new
TomcatJndiBuilder(standardContext, webAppInfo, injections,
contextInfo.emfLinkResolver);
+ TomcatJndiBuilder jndiBuilder = new
TomcatJndiBuilder(standardContext, webAppInfo, injections);
jndiBuilder.mergeJndi();
// add WebDeploymentInfo to ContainerSystem
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
Thu Dec 13 22:47:37 2007
@@ -362,7 +362,7 @@
AppInfo appInfo = new AppInfo();
appInfo.jarPath = ejbJar.jarPath;
appInfo.ejbJars.add(ejbJar);
- createApplication(appInfo, emfLinkResolver, classLoader);
+ createApplication(appInfo, classLoader);
}
public void createClient(ClientInfo clientInfo) throws NamingException,
IOException, OpenEJBException {
@@ -376,7 +376,7 @@
AppInfo appInfo = new AppInfo();
appInfo.jarPath = clientInfo.moduleId;
appInfo.clients.add(clientInfo);
- createApplication(appInfo, null, classLoader);
+ createApplication(appInfo, classLoader);
}
public void createConnector(ConnectorInfo connectorInfo) throws
NamingException, IOException, OpenEJBException {
@@ -390,7 +390,7 @@
AppInfo appInfo = new AppInfo();
appInfo.jarPath = connectorInfo.moduleId;
appInfo.connectors.add(connectorInfo);
- createApplication(appInfo, null, classLoader);
+ createApplication(appInfo, classLoader);
}
public void createWebApp(WebAppInfo webAppInfo) throws NamingException,
IOException, OpenEJBException {
@@ -404,21 +404,17 @@
AppInfo appInfo = new AppInfo();
appInfo.jarPath = webAppInfo.moduleId;
appInfo.webApps.add(webAppInfo);
- createApplication(appInfo, null, classLoader);
+ createApplication(appInfo, classLoader);
}
public void createApplication(AppInfo appInfo) throws OpenEJBException,
IOException, NamingException {
- createApplication(appInfo, null, createAppClassLoader(appInfo));
+ createApplication(appInfo, createAppClassLoader(appInfo));
}
public void createApplication(AppInfo appInfo, ClassLoader classLoader)
throws OpenEJBException, IOException, NamingException {
- createApplication(appInfo, null, classLoader);
- }
-
- public void createApplication(AppInfo appInfo,
LinkResolver<EntityManagerFactory> emfLinkResolver, ClassLoader classLoader)
throws OpenEJBException, IOException, NamingException {
logger.info("Assembling app: "+appInfo.jarPath);
-
+
List<String> used = new ArrayList<String>();
for (EjbJarInfo ejbJarInfo : appInfo.ejbJars) {
for (EnterpriseBeanInfo beanInfo : ejbJarInfo.enterpriseBeans) {
@@ -448,12 +444,11 @@
// JPA - Persistence Units MUST be processed first since they will
add ClassFileTransformers
// to the class loader which must be added before any classes are
loaded
- emfLinkResolver = emfLinkResolver == null? new
UniqueDefaultLinkResolver<EntityManagerFactory>(): emfLinkResolver;
PersistenceBuilder persistenceBuilder = new
PersistenceBuilder(persistenceClassLoaderHandler);
for (PersistenceUnitInfo info : appInfo.persistenceUnits) {
try {
EntityManagerFactory factory =
persistenceBuilder.createEntityManagerFactory(info, classLoader);
- emfLinkResolver.add(info.persistenceUnitRootUrl,
info.name, factory);
+
containerSystem.getJNDIContext().bind("java:openejb/PersistenceUnit/" +
info.id, factory);
} catch (Exception e) {
throw new OpenEJBException(e);
}
@@ -485,7 +480,7 @@
// EJB
EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(props,
classLoader);
for (EjbJarInfo ejbJar : appInfo.ejbJars) {
- HashMap<String, DeploymentInfo> deployments =
ejbJarBuilder.build(ejbJar, emfLinkResolver);
+ HashMap<String, DeploymentInfo> deployments =
ejbJarBuilder.build(ejbJar);
JaccPermissionsBuilder jaccPermissionsBuilder = new
JaccPermissionsBuilder();
PolicyContext policyContext =
jaccPermissionsBuilder.build(ejbJar, deployments);
@@ -569,7 +564,7 @@
// WebApp
WebAppBuilder webAppBuilder =
SystemInstance.get().getComponent(WebAppBuilder.class);
if (webAppBuilder != null) {
- webAppBuilder.deployWebApps(appInfo, emfLinkResolver,
classLoader);
+ webAppBuilder.deployWebApps(appInfo, classLoader);
}
logger.info("Deployed Application(path="+appInfo.jarPath+")");
@@ -647,6 +642,14 @@
} catch (Throwable t) {
undeployException.getCauses().add(new Exception("bean: " +
deploymentID + ": " + t.getMessage(), t));
}
+ }
+ }
+
+ for (PersistenceUnitInfo unitInfo : appInfo.persistenceUnits) {
+ try {
+ globalContext.unbind("openejb/PersistenceUnit/"+unitInfo.id);
+ } catch (Throwable t) {
+ undeployException.getCauses().add(new
Exception("persistence-unit: " + unitInfo.id + ": " + t.getMessage(), t));
}
}
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
Thu Dec 13 22:47:37 2007
@@ -23,7 +23,6 @@
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.util.Messages;
-import javax.persistence.EntityManagerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Properties;
@@ -42,14 +41,14 @@
this.classLoader = classLoader;
}
- public HashMap<String, DeploymentInfo> build(EjbJarInfo ejbJar,
LinkResolver<EntityManagerFactory> emfLinkResolver) throws OpenEJBException {
+ public HashMap<String, DeploymentInfo> build(EjbJarInfo ejbJar) throws
OpenEJBException {
HashMap<String, DeploymentInfo> deployments = new HashMap<String,
DeploymentInfo>();
InterceptorBindingBuilder interceptorBindingBuilder = new
InterceptorBindingBuilder(classLoader, ejbJar);
for (EnterpriseBeanInfo ejbInfo : ejbJar.enterpriseBeans) {
try {
- EnterpriseBeanBuilder deploymentBuilder = new
EnterpriseBeanBuilder(classLoader, ejbInfo, ejbJar.moduleId, new
ArrayList<String>(), emfLinkResolver);
+ EnterpriseBeanBuilder deploymentBuilder = new
EnterpriseBeanBuilder(classLoader, ejbInfo, ejbJar.moduleId, new
ArrayList<String>());
CoreDeploymentInfo deployment = (CoreDeploymentInfo)
deploymentBuilder.build();
interceptorBindingBuilder.build(deployment, ejbInfo);
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=604114&r1=604113&r2=604114&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
Thu Dec 13 22:47:37 2007
@@ -19,6 +19,8 @@
import org.apache.openejb.BeanType;
import org.apache.openejb.Injection;
import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.DeploymentContext;
import org.apache.openejb.core.cmp.CmpUtil;
@@ -28,6 +30,7 @@
import org.apache.openejb.util.Classes;
import javax.naming.Context;
+import javax.naming.NamingException;
import javax.persistence.EntityManagerFactory;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
@@ -45,10 +48,9 @@
private final List<String> defaultInterceptors;
private final BeanType ejbType;
private final ClassLoader cl;
- private final LinkResolver<EntityManagerFactory> emfLinkResolver;
private List<Exception> warnings = new ArrayList<Exception>();
- public EnterpriseBeanBuilder(ClassLoader cl, EnterpriseBeanInfo bean,
String moduleId, List<String> defaultInterceptors,
LinkResolver<EntityManagerFactory> emfLinkResolver) {
+ public EnterpriseBeanBuilder(ClassLoader cl, EnterpriseBeanInfo bean,
String moduleId, List<String> defaultInterceptors) {
this.bean = bean;
this.moduleId = moduleId;
this.defaultInterceptors = defaultInterceptors;
@@ -66,7 +68,6 @@
throw new UnsupportedOperationException("No building support for
bean type: " + bean);
}
this.cl = cl;
- this.emfLinkResolver = emfLinkResolver;
}
public Object build() throws OpenEJBException {
@@ -116,7 +117,7 @@
List<Injection> injections =
injectionBuilder.buildInjections(bean.jndiEnc);
// build the enc
- JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(bean.jndiEnc,
injections, transactionType, emfLinkResolver, moduleId, cl);
+ JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(bean.jndiEnc,
injections, transactionType, moduleId, cl);
Context root = jndiEncBuilder.build();
DeploymentContext deploymentContext = new
DeploymentContext(bean.ejbDeploymentId, cl, root);
@@ -185,8 +186,17 @@
Map<EntityManagerFactory, Map> extendedEntityManagerFactories =
new HashMap<EntityManagerFactory, Map>();
for (PersistenceContextReferenceInfo info :
statefulBeanInfo.jndiEnc.persistenceContextRefs) {
if (info.extended) {
- EntityManagerFactory entityManagerFactory =
emfLinkResolver.resolveLink(info.persistenceUnitName, moduleId);
- extendedEntityManagerFactories.put(entityManagerFactory,
info.properties);
+// EntityManagerFactory entityManagerFactory =
emfLinkResolver.resolveLink(info.persistenceUnitName, moduleId);
+// extendedEntityManagerFactories.put(entityManagerFactory,
info.properties);
+
+ try {
+ ContainerSystem containerSystem =
SystemInstance.get().getComponent(ContainerSystem.class);
+ Object o =
containerSystem.getJNDIContext().lookup("openejb/PersistenceUnit/" +
info.unitId);
+
extendedEntityManagerFactories.put((EntityManagerFactory) o, info.properties);
+ } catch (NamingException e) {
+ throw new OpenEJBException("PersistenceUnit '" +
info.unitId + "' not found for EXTENDED ref '" + info.referenceName + "'");
+ }
+
}
}
deployment.setExtendedEntityManagerFactories(new
Index<EntityManagerFactory, Map>(extendedEntityManagerFactories));
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
Thu Dec 13 22:47:37 2007
@@ -18,6 +18,7 @@
import org.apache.openejb.Injection;
import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.core.CoreUserTransaction;
import org.apache.openejb.core.ivm.naming.CrossClassLoaderJndiReference;
import org.apache.openejb.core.ivm.naming.IntraVmJndiReference;
@@ -28,7 +29,6 @@
import org.apache.openejb.core.ivm.naming.NameNode;
import org.apache.openejb.core.ivm.naming.ParsedName;
import org.apache.openejb.core.ivm.naming.PersistenceContextReference;
-import org.apache.openejb.core.ivm.naming.PersistenceUnitReference;
import org.apache.openejb.core.ivm.naming.Reference;
import org.apache.openejb.core.ivm.naming.SystemComponentReference;
import org.apache.openejb.core.ivm.naming.URLReference;
@@ -83,17 +83,14 @@
private final List<Injection> injections;
private final ClassLoader classLoader;
- // JPA factory indexes
- private final LinkResolver<EntityManagerFactory> emfLinkResolver;
-
private boolean useCrossClassLoaderRef = true;
private boolean client = false;
public JndiEncBuilder(JndiEncInfo jndiEnc, List<Injection> injections,
String moduleId, ClassLoader classLoader) throws OpenEJBException {
- this(jndiEnc, injections, null, null, moduleId, classLoader);
+ this(jndiEnc, injections, null, moduleId, classLoader);
}
- public JndiEncBuilder(JndiEncInfo jndiEnc, List<Injection> injections,
String transactionType, LinkResolver<EntityManagerFactory> emfLinkResolver,
String moduleId, ClassLoader classLoader) throws OpenEJBException {
+ public JndiEncBuilder(JndiEncInfo jndiEnc, List<Injection> injections,
String transactionType, String moduleId, ClassLoader classLoader) throws
OpenEJBException {
this.jndiEnc = jndiEnc;
this.injections = injections;
beanManagedTransactions = transactionType != null &&
transactionType.equalsIgnoreCase("Bean");
@@ -103,7 +100,6 @@
} catch (URISyntaxException e) {
throw new OpenEJBException(e);
}
- this.emfLinkResolver = emfLinkResolver;
this.classLoader = classLoader;
}
@@ -174,7 +170,7 @@
// bind TimerService
bindings.put("java:comp/TimerService", new TimerServiceWrapper());
-
+
for (EjbReferenceInfo referenceInfo : jndiEnc.ejbReferences) {
Reference reference = null;
@@ -285,7 +281,7 @@
String jndiName = "java:comp/WebServiceContext";
linkRef = new LinkRef(jndiName);
bindings.put(normalize(referenceInfo.resourceEnvRefName),
linkRef);
- continue;
+ continue;
} else if (TimerService.class.equals(type)) {
String jndiName = "java:comp/TimerService";
linkRef = new LinkRef(jndiName);
@@ -312,41 +308,36 @@
}
}
- if (emfLinkResolver != null) {
- for (PersistenceUnitReferenceInfo referenceInfo :
jndiEnc.persistenceUnitRefs) {
- if (referenceInfo.location != null){
- Reference reference =
buildReferenceLocation(referenceInfo.location);
- bindings.put(normalize(referenceInfo.referenceName),
reference);
- continue;
- }
-
- EntityManagerFactory factory =
emfLinkResolver.resolveLink(referenceInfo.persistenceUnitName, moduleUri);
- if (factory == null) {
- throw new IllegalArgumentException("Persistence unit " +
referenceInfo.persistenceUnitName + " for persistence-unit-ref " +
- referenceInfo.referenceName + " not found");
- }
-
- Reference reference = new PersistenceUnitReference(factory);
+ for (PersistenceUnitReferenceInfo referenceInfo :
jndiEnc.persistenceUnitRefs) {
+ if (referenceInfo.location != null){
+ Reference reference =
buildReferenceLocation(referenceInfo.location);
bindings.put(normalize(referenceInfo.referenceName),
reference);
+ continue;
}
- for (PersistenceContextReferenceInfo contextInfo :
jndiEnc.persistenceContextRefs) {
- if (contextInfo.location != null){
- Reference reference =
buildReferenceLocation(contextInfo.location);
- bindings.put(normalize(contextInfo.referenceName),
reference);
- continue;
- }
-
- EntityManagerFactory factory =
emfLinkResolver.resolveLink(contextInfo.persistenceUnitName, moduleUri);
- if (factory == null) {
- throw new IllegalArgumentException("Persistence unit \"" +
contextInfo.persistenceUnitName + "\" for persistence-context-ref " +
- contextInfo.referenceName + " not found");
- }
+ String jndiName = "java:openejb/PersistenceUnit/" +
referenceInfo.unitId;
+ Reference reference = new IntraVmJndiReference(jndiName);
+ bindings.put(normalize(referenceInfo.referenceName), reference);
+ }
- JtaEntityManager jtaEntityManager = new
JtaEntityManager(jtaEntityManagerRegistry, factory, contextInfo.properties,
contextInfo.extended);
- Reference reference = new
PersistenceContextReference(jtaEntityManager);
+ for (PersistenceContextReferenceInfo contextInfo :
jndiEnc.persistenceContextRefs) {
+ if (contextInfo.location != null){
+ Reference reference =
buildReferenceLocation(contextInfo.location);
bindings.put(normalize(contextInfo.referenceName), reference);
+ continue;
}
+
+ Context context =
SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
+ EntityManagerFactory factory;
+ try {
+ factory = (EntityManagerFactory)
context.lookup("openejb/PersistenceUnit/" + contextInfo.unitId);
+ } catch (NamingException e) {
+ throw new OpenEJBException("PersistenceUnit '" +
contextInfo.unitId + "' not found for EXTENDED ref '" +
contextInfo.referenceName + "'");
+ }
+
+ JtaEntityManager jtaEntityManager = new
JtaEntityManager(jtaEntityManagerRegistry, factory, contextInfo.properties,
contextInfo.extended);
+ Reference reference = new
PersistenceContextReference(jtaEntityManager);
+ bindings.put(normalize(contextInfo.referenceName), reference);
}
for (ServiceReferenceInfo referenceInfo : jndiEnc.serviceRefs) {
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
Thu Dec 13 22:47:37 2007
@@ -20,6 +20,6 @@
import javax.persistence.EntityManagerFactory;
public interface WebAppBuilder {
- void deployWebApps(AppInfo appInfo, LinkResolver<EntityManagerFactory>
emfLinkResolver, ClassLoader classLoader) throws Exception;
+ void deployWebApps(AppInfo appInfo, ClassLoader classLoader) throws
Exception;
void undeployWebApps(AppInfo appInfo) throws Exception;
}
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=604114&r1=604113&r2=604114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
Thu Dec 13 22:47:37 2007
@@ -200,7 +200,7 @@
// Explicitly check if we messed up the "if there's only one,
// that's what you get" rule by adding our "cmp" unit.
Collection<PersistenceUnit> cmpUnits = persistenceUnits.values("cmp");
- if (cmpUnits.size() > 0 && persistenceUnits.values().size() -
cmpUnits.size() == 1) {
+ if (unit == null && cmpUnits.size() > 0 &&
persistenceUnits.values().size() - cmpUnits.size() == 1) {
// We did, there is exactly one non-cmp unit. Let's find it.
for (PersistenceUnit persistenceUnit : persistenceUnits.values()) {
if (!persistenceUnit.getName().equals("cmp")){
Copied:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java
(from r602802,
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java?p2=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java&p1=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java&r1=602802&r2=604114&rev=604114&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/PersistenceUnitRefTest.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java
Thu Dec 13 22:47:37 2007
@@ -17,76 +17,32 @@
package org.apache.openejb.assembler.classic;
import java.util.Map;
+import java.net.URI;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityManager;
import junit.framework.TestCase;
-import org.apache.openejb.persistence.JtaEntityManagerRegistry;
-import org.apache.openejb.loader.SystemInstance;
-public class PersistenceUnitRefTest extends TestCase {
+public class LinkResolverTest extends TestCase {
+
public void test() throws Exception {
- SystemInstance.get().setComponent(JtaEntityManagerRegistry.class, new
JtaEntityManagerRegistry(null));
+ LinkResolver<Thing> resolver = new LinkResolver<Thing>();
+
+ resolver.add("my/module.jar", "one", Thing.ONE);
+ resolver.add("some/other.jar", "two", Thing.TWO);
- JndiEncInfo jndiEncInfo = new JndiEncInfo();
+ URI moduleUri = URI.create("my/module.jar");
- PersistenceContextReferenceInfo referenceInfo = new
PersistenceContextReferenceInfo();
- referenceInfo.referenceName = "one";
- referenceInfo.persistenceUnitName = "one";
- jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
- referenceInfo = new PersistenceContextReferenceInfo();
- referenceInfo.referenceName = "two";
- referenceInfo.persistenceUnitName = "two";
- jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
- referenceInfo = new PersistenceContextReferenceInfo();
- referenceInfo.referenceName = "#one";
- referenceInfo.persistenceUnitName = "#one";
- jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
- referenceInfo = new PersistenceContextReferenceInfo();
- referenceInfo.referenceName = "module.jar#one";
- referenceInfo.persistenceUnitName = "module.jar#one";
- jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
- referenceInfo = new PersistenceContextReferenceInfo();
- referenceInfo.referenceName = "dotdot/my/module.jar#one";
- referenceInfo.persistenceUnitName = "../my/module.jar#one";
- jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
- referenceInfo = new PersistenceContextReferenceInfo();
- referenceInfo.referenceName = "dotdot/my/dot/module.jar#one";
- referenceInfo.persistenceUnitName = "../my/./module.jar#one";
- jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
- referenceInfo = new PersistenceContextReferenceInfo();
- referenceInfo.referenceName = "dotdot/some/dot/other.jar#two";
- referenceInfo.persistenceUnitName = "../some/./other.jar#two";
- jndiEncInfo.persistenceContextRefs.add(referenceInfo);
-
- LinkResolver<EntityManagerFactory> emfLinkResolver = new
LinkResolver<EntityManagerFactory>();
- emfLinkResolver.add("my/module.jar", "one", new
MockEntityManagerFactory());
- emfLinkResolver.add("some/other.jar", "two", new
MockEntityManagerFactory());
+ assertEquals(Thing.ONE, resolver.resolveLink("one", moduleUri));
+ assertEquals(Thing.ONE, resolver.resolveLink("module.jar#one",
moduleUri));
+ assertEquals(Thing.ONE, resolver.resolveLink("../my/module.jar#one",
moduleUri));
+ assertEquals(Thing.ONE, resolver.resolveLink("../my/./module.jar#one",
moduleUri));
- JndiEncBuilder jndiEncBuilder = new JndiEncBuilder(jndiEncInfo, null,
null, emfLinkResolver, "my/module.jar", getClass().getClassLoader());
- jndiEncBuilder.build();
+ assertEquals(Thing.TWO, resolver.resolveLink("two", moduleUri));
+ assertEquals(Thing.TWO,
resolver.resolveLink("../some/./other.jar#two", moduleUri));
}
- private static class MockEntityManagerFactory implements
EntityManagerFactory {
- public EntityManager createEntityManager() {
- return null;
- }
-
- public EntityManager createEntityManager(Map bindings) {
- return null;
- }
-
- public void close() {
- }
-
- public boolean isOpen() {
- return false;
- }
+ private static enum Thing {
+ ONE, TWO
}
}
Propchange:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/LinkResolverTest.java
------------------------------------------------------------------------------
svn:keywords = Date Rev Author Id Revision HeadURL