You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/11/17 23:46:44 UTC
svn commit: r1410800 - in /openejb/trunk/openejb:
container/openejb-core/src/main/java/org/apache/openejb/config/
tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/
Author: rmannibucau
Date: Sat Nov 17 22:46:43 2012
New Revision: 1410800
URL: http://svn.apache.org/viewvc?rev=1410800&view=rev
Log:
OPENEJB-1939 trying to keep tomcat resources and not throw an exception when openejb doesnt find it
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1410800&r1=1410799&r2=1410800&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java Sat Nov 17 22:46:43 2012
@@ -850,7 +850,7 @@ public class AutoConfig implements Dynam
// Resource reference
for (ResourceRef ref : bean.getResourceRef()) {
- processResourceRef(ref, ejbDeployment, appResources, ejbModule.getClassLoader());
+ processResourceRef(ref, ejbDeployment, appResources, ejbModule);
}
// Resource env reference
@@ -1084,7 +1084,13 @@ public class AutoConfig implements Dynam
private void processResourceRef(ResourceRef ref,
EjbDeployment ejbDeployment,
AppResources appResources,
- ClassLoader classLoader) throws OpenEJBException {
+ EjbModule ejbModule) throws OpenEJBException {
+ final Collection<String> ignoredResources = PROVIDED_RESOURCES.get();
+ String ignoredResourcesPrefix = PROVIDED_RESOURCES_PREFIX.get();
+ if (ignoredResourcesPrefix == null) {
+ ignoredResourcesPrefix = "";
+ }
+
// skip destinations with lookup name
if (ref.getLookupName() != null) {
return;
@@ -1096,7 +1102,7 @@ public class AutoConfig implements Dynam
}
String refName = ref.getName();
- String refType = getType(ref, classLoader);
+ String refType = getType(ref, ejbModule.getClassLoader());
// skip references such as URLs which are automatically handled by the server
if (ignoredReferenceTypes.contains(refType)) {
@@ -1104,7 +1110,7 @@ public class AutoConfig implements Dynam
}
try {
- final Class<?> clazz = classLoader.loadClass(refType);
+ final Class<?> clazz = ejbModule.getClassLoader().loadClass(refType);
if (clazz.isAnnotationPresent(ManagedBean.class)) {
return;
}
@@ -1116,6 +1122,13 @@ public class AutoConfig implements Dynam
ResourceLink link = ejbDeployment.getResourceLink(refName);
if (link == null) {
String id = (mappedName.length() == 0) ? ref.getName() : mappedName;
+ if (ignoredResources != null && (ignoredResources.contains(id) || ignoredResources.contains(correctedId(ignoredResourcesPrefix, id)))) {
+ final String correctedId = ignoredResourcesPrefix + correctedId(ignoredResourcesPrefix, id);
+ ref.setLookupName(correctedId);
+ ref.setName(correctedId);
+ return;
+ }
+
if (id.startsWith("java:")) {
id = id.substring("java:".length());
}
@@ -1138,6 +1151,25 @@ public class AutoConfig implements Dynam
}
}
+ private static String correctedId(final String ignoredResourcesPrefix, final String id) {
+ String newId = id;
+ String ignoredId = ignoredResourcesPrefix;
+
+ // first unify beginning of the jndi name (we can get this / after java:)
+ if (newId.startsWith("java:/")) {
+ newId = "java:" + newId.substring("java:/".length());
+ }
+ if (ignoredResourcesPrefix.startsWith("java:/")) {
+ ignoredId = "java:" + ignoredResourcesPrefix.substring("java:/".length());
+ }
+
+ // remove prefix if necessary
+ if (newId.startsWith(ignoredId)) {
+ return newId.substring(ignoredId.length());
+ }
+ return newId;
+ }
+
private void processResourceEnvRef(JndiReference ref,
EjbDeployment ejbDeployment,
AppResources appResources,
Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java?rev=1410800&r1=1410799&r2=1410800&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java Sat Nov 17 22:46:43 2012
@@ -48,6 +48,7 @@ public class OpenEJBContextConfig extend
private static final String TOMEE_MYFACES_CONTEXT_LISTENER = "org.apache.tomee.myfaces.TomEEMyFacesContextListener";
private TomcatWebAppBuilder.StandardContextInfo info;
+ private boolean configureStartOk = false;
// processAnnotationXXX is called for each folder of WEB-INF
// since we store all classes in WEB-INF we will do it only once so use this boolean to avoid multiple processing
@@ -59,6 +60,15 @@ public class OpenEJBContextConfig extend
}
@Override
+ public void configureStart() {
+ if (configureStartOk) {
+ return;
+ }
+ super.configureStart();
+ configureStartOk = true;
+ }
+
+ @Override
protected WebXml createWebXml() {
String prefix = "";
if (context instanceof StandardContext) {
Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java?rev=1410800&r1=1410799&r2=1410800&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java Sat Nov 17 22:46:43 2012
@@ -68,7 +68,6 @@ import org.omg.CORBA.ORB;
import javax.ejb.spi.HandleDelegate;
import javax.naming.Context;
-import javax.naming.InitialContext;
import javax.naming.LinkRef;
import javax.naming.NamingException;
import javax.naming.RefAddr;
@@ -83,7 +82,6 @@ import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -132,7 +130,7 @@ public class TomcatJndiBuilder {
this.useCrossClassLoaderRef = useCrossClassLoaderRef;
}
- public void mergeJndi() throws OpenEJBException {
+ public void mergeJndi(final Collection<String> tomcatResources) throws OpenEJBException {
NamingResources naming = standardContext.getNamingResources();
@@ -159,6 +157,17 @@ public class TomcatJndiBuilder {
mergeRef(naming, ref, moduleUri);
}
for (ResourceReferenceInfo ref : webAppInfo.jndiEnc.resourceRefs) {
+ String id = ref.referenceName;
+ if (id == null) {
+ id = ref.resourceID;
+ }
+ if (id != null && id.startsWith("comp/env/")) {
+ id = id.substring("comp/env/".length());
+ }
+ if (id != null && tomcatResources != null && tomcatResources.contains(id)) {
+ continue;
+ }
+
mergeRef(naming, ref);
}
for (ResourceEnvReferenceInfo ref : webAppInfo.jndiEnc.resourceEnvRefs) {
@@ -202,6 +211,16 @@ public class TomcatJndiBuilder {
}
}
+ final TomcatWebAppBuilder builder = (TomcatWebAppBuilder) SystemInstance.get().getComponent(WebAppBuilder.class);
+ TomcatWebAppBuilder.ContextInfo contextInfo = null;
+ if (builder != null) {
+ contextInfo = builder.getContextInfo(standardContext);
+ }
+ Collection<String> ignoreNames = null;
+ if (contextInfo != null) {
+ ignoreNames = contextInfo.resourceNames;
+ }
+
if (webContext != null && webContext.getBindings() != null && root != null) {
for (Map.Entry<String, Object> entry : webContext.getBindings().entrySet()) {
try {
@@ -210,7 +229,11 @@ public class TomcatJndiBuilder {
continue;
}
- final Object value = normalize(entry.getValue());
+ Object value = normalize(entry.getValue());
+ if (ignoreNames.contains(removeCompEnv(key))) {
+ continue;
+ }
+
Contexts.createSubcontexts(root, key);
root.rebind(key, value);
} catch (NamingException e) {
@@ -272,6 +295,13 @@ public class TomcatJndiBuilder {
ContextAccessController.setReadOnly(standardContext.getNamingContextListener().getName());
}
+ private static String removeCompEnv(final String key) {
+ if (key.startsWith("comp/env/")) {
+ return key.substring("comp/env/".length());
+ }
+ return key;
+ }
+
/**
* LinkRef addresses need to be prefixed with java: or they won't resolve
*
Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1410800&r1=1410799&r2=1410800&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Sat Nov 17 22:46:43 2012
@@ -124,6 +124,7 @@ import java.lang.reflect.Field;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -904,11 +905,21 @@ public class TomcatWebAppBuilder impleme
//Look for context info, maybe context is already scanned
ContextInfo contextInfo = getContextInfo(standardContext);
ClassLoader classLoader = standardContext.getLoader().getClassLoader();
- if (contextInfo == null) {
- final Collection<String> tomcatResources = getResourcesNames(standardContext.getNamingResources());
- AutoConfig.PROVIDED_RESOURCES.set(tomcatResources);
- AutoConfig.PROVIDED_RESOURCES_PREFIX.set("java:/comp/env/");
+ final LifecycleListener[] listeners = standardContext.findLifecycleListeners();
+ if (listeners != null) { // force init of tomcat resources
+ for (LifecycleListener listener : listeners) {
+ if (OpenEJBContextConfig.class.isInstance(listener)) {
+ ((OpenEJBContextConfig) listener).configureStart();
+ }
+ }
+ }
+
+ final Collection<String> tomcatResources = getResourcesNames(standardContext.getNamingResources());
+ AutoConfig.PROVIDED_RESOURCES.set(tomcatResources);
+ AutoConfig.PROVIDED_RESOURCES_PREFIX.set("java:/comp/env/");
+
+ if (contextInfo == null) {
final AppModule appModule = loadApplication(standardContext);
if (appModule != null) {
try {
@@ -941,6 +952,7 @@ public class TomcatWebAppBuilder impleme
} else {
contextInfo.standardContext = standardContext;
}
+ contextInfo.resourceNames = tomcatResources;
final String id = getId(standardContext);
@@ -1000,7 +1012,7 @@ public class TomcatWebAppBuilder impleme
final TomcatJndiBuilder jndiBuilder = new TomcatJndiBuilder(standardContext, webAppInfo, injections);
NamingUtil.setCurrentContext(standardContext);
try {
- jndiBuilder.mergeJndi();
+ jndiBuilder.mergeJndi(tomcatResources);
} finally {
NamingUtil.setCurrentContext(null);
}
@@ -1878,6 +1890,7 @@ public class TomcatWebAppBuilder impleme
public HostConfig deployer;
public Host host;
public LinkResolver<EntityManagerFactory> emfLinkResolver;
+ public Collection<String> resourceNames = Collections.emptyList();
@Override
public String toString() {