Author: rmannibucau
Date: Tue Nov 20 19:51:38 2012
New Revision: 1411822
URL: http://svn.apache.org/viewvc?rev=1411822&view=rev
Log:
TOMEE-597 merging (what is possible) of java:comp/env/app and java:app -
probably user usage from JBoss
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.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/TomcatJavaJndiBinder.java
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJndiBuilder.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1411822&r1=1411821&r2=1411822&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
Tue Nov 20 19:51:38 2012
@@ -1308,7 +1308,7 @@ public class ConfigurationFactory implem
return null;
}
- private boolean isResourceType(final String service, final List<String>
types, final String type) {
+ public static boolean isResourceType(final String service, final
List<String> types, final String type) {
return type == null || service != null && types.contains(type);
}
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=1411822&r1=1411821&r2=1411822&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
Tue Nov 20 19:51:38 2012
@@ -18,11 +18,17 @@ package org.apache.tomee.catalina;
import org.apache.catalina.Context;
import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.deploy.ContextResource;
+import org.apache.catalina.deploy.NamingResources;
import org.apache.catalina.deploy.WebXml;
import org.apache.catalina.startup.ContextConfig;
import org.apache.openejb.assembler.classic.ClassListInfo;
+import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
+import org.apache.openejb.assembler.classic.ResourceInfo;
import org.apache.openejb.assembler.classic.WebAppBuilder;
import org.apache.openejb.assembler.classic.WebAppInfo;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.ServiceUtils;
import org.apache.openejb.loader.IO;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.LogCategory;
@@ -35,9 +41,12 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
+import java.util.Properties;
import java.util.Set;
public class OpenEJBContextConfig extends ContextConfig {
@@ -46,6 +55,7 @@ public class OpenEJBContextConfig extend
private static final String MYFACES_TOMEEM_CONTAINER_INITIALIZER =
"org.apache.tomee.myfaces.TomEEMyFacesContainerInitializer";
private static final String TOMEE_MYFACES_CONTEXT_LISTENER =
"org.apache.tomee.myfaces.TomEEMyFacesContextListener";
+ private static final String ADJUST_DATASOURCE_JNDI_NAMES =
SystemInstance.get().getProperty("tomee.resources.adjust-web-xml-jndi-name",
"true");
private TomcatWebAppBuilder.StandardContextInfo info;
private boolean configureStartOk = false;
@@ -65,9 +75,68 @@ public class OpenEJBContextConfig extend
return;
}
super.configureStart();
+
+ adjustDataSourceNameIfNecessary(); // doing it here to potentially
factorize resource id resolution
+
configureStartOk = true;
}
+ private void adjustDataSourceNameIfNecessary() {
+ if (context == null ||
"false".equalsIgnoreCase(ADJUST_DATASOURCE_JNDI_NAMES)) {
+ return;
+ }
+
+ final NamingResources resources = context.getNamingResources();
+ if (resources == null) {
+ return;
+ }
+
+ final ContextResource[] foundResources = resources.findResources();
+ String[] ids = null;
+ if (foundResources != null) {
+ for (ContextResource resource : foundResources) {
+ if ("javax.sql.DataSource".equals(resource.getType())) {
+ String jndiName = (String)
resource.getProperty("mappedName");
+ if (jndiName == null) {
+ jndiName = resource.getName();
+ }
+ if (jndiName == null) {
+ continue;
+ }
+
+ if (ids == null) {
+ final Properties props = new Properties();
+ final OpenEjbConfiguration runningConfig =
SystemInstance.get().getComponent(OpenEjbConfiguration.class);
+ final List<String> resourceIds = new
ArrayList<String>();
+ if (runningConfig != null) {
+ for (final ResourceInfo resourceInfo :
runningConfig.facilities.resources) {
+ if
(ConfigurationFactory.isResourceType(resourceInfo.service, resourceInfo.types,
"javax.sql.DataSource")
+ && ServiceUtils.implies(props,
resourceInfo.properties)) {
+ resourceIds.add(resourceInfo.id);
+ }
+ }
+ }
+ ids = resourceIds.toArray(new
String[resourceIds.size()]);
+ }
+
+ String mostMatchingId = null;
+ for (String id : ids) {
+ if (id.equals(jndiName)) {
+ mostMatchingId = jndiName;
+ break;
+ } else if (jndiName.endsWith("/" + id) &&
mostMatchingId == null) {
+ mostMatchingId = id;
+ }
+ }
+
+ if (mostMatchingId != null) {
+ resource.setProperty("mappedName", "java:" +
mostMatchingId);
+ }
+ }
+ }
+ }
+ }
+
@Override
protected WebXml createWebXml() {
String prefix = "";
Modified:
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJavaJndiBinder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJavaJndiBinder.java?rev=1411822&r1=1411821&r2=1411822&view=diff
==============================================================================
---
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJavaJndiBinder.java
(original)
+++
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatJavaJndiBinder.java
Tue Nov 20 19:51:38 2012
@@ -25,7 +25,7 @@ public class TomcatJavaJndiBinder implem
@Override public void lifecycleEvent(LifecycleEvent event) {
Object source = event.getSource();
if (source instanceof StandardContext) {
- StandardContext context = (StandardContext) source;
+ final StandardContext context = (StandardContext) source;
if (Lifecycle.CONFIGURE_START_EVENT.equals(event.getType())) {
TomcatJndiBuilder.mergeJava(context);
}
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=1411822&r1=1411821&r2=1411822&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
Tue Nov 20 19:51:38 2012
@@ -67,6 +67,7 @@ import org.apache.tomee.common.WsFactory
import org.omg.CORBA.ORB;
import javax.ejb.spi.HandleDelegate;
+import javax.naming.Binding;
import javax.naming.Context;
import javax.naming.LinkRef;
import javax.naming.NamingException;
@@ -82,6 +83,7 @@ import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -292,6 +294,22 @@ public class TomcatJndiBuilder {
// no-op
}
+ // merge comp/env in app if available (some users are doing it, JBoss
habit?)
+ try {
+ final Context app = (Context)
ContextBindings.getClassLoader().lookup("app");
+ final Context ctx = (Context)
ContextBindings.getClassLoader().lookup("comp/env");
+ final List<Binding> bindings =
Collections.list(ctx.listBindings("app"));
+ for (Binding binding : bindings) {
+ try {
+ app.bind(binding.getName(), binding.getObject());
+ } catch (NamingException ne) { // we don't want to rebind
+ // no-op
+ }
+ }
+ } catch (Exception ne) {
+ // no-op
+ }
+
ContextAccessController.setReadOnly(standardContext.getNamingContextListener().getName());
}