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/12/12 23:10:06 UTC

svn commit: r1421015 - in /openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina: TomcatResourceFactory.java TomcatWebAppBuilder.java

Author: rmannibucau
Date: Wed Dec 12 22:10:05 2012
New Revision: 1421015

URL: http://svn.apache.org/viewvc?rev=1421015&view=rev
Log:
TOMEE-647 using Reference object as first parameter for contextresource defined in context.xml

Modified:
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatResourceFactory.java
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatResourceFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatResourceFactory.java?rev=1421015&r1=1421014&r2=1421015&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatResourceFactory.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatResourceFactory.java Wed Dec 12 22:10:05 2012
@@ -18,15 +18,21 @@ package org.apache.tomee.catalina;
 
 import org.apache.openejb.assembler.classic.WebAppBuilder;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
 
 import javax.naming.CompositeName;
 import javax.naming.NamingException;
+import javax.naming.Reference;
 import javax.naming.spi.ObjectFactory;
 
 public class TomcatResourceFactory {
+    private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, TomcatResourceFactory.class);
+
     private String jndiName;
     private String appName;
     private String factory;
+    private Reference reference;
 
     public void setJndiName(final String jndiName) {
         this.jndiName = jndiName;
@@ -40,6 +46,10 @@ public class TomcatResourceFactory {
         this.factory = factory;
     }
 
+    public void setReference(final Reference reference) {
+        this.reference = reference;
+    }
+
     public Object create() throws NamingException {
         final TomcatWebAppBuilder.ContextInfo info = ((TomcatWebAppBuilder) SystemInstance.get().getComponent(WebAppBuilder.class))
                 .getContextInfo(appName);
@@ -60,11 +70,11 @@ public class TomcatResourceFactory {
                 if (instance instanceof ObjectFactory) {
                     // not really used as expected but it matches a bit more than before
                     // context is null since it can't be used at this moment (see TomcatWebAppBuilder lifecycle)
-                    return ((ObjectFactory) instance).getObjectInstance(null, new CompositeName(jndiName), null, null);
+                    return ((ObjectFactory) instance).getObjectInstance(reference, new CompositeName(jndiName), null, null);
                 }
             }
         } catch (Exception e) {
-            // no-op
+            LOGGER.error("Can't create resource " + jndiName, e);
         } finally {
             Thread.currentThread().setContextClassLoader(loader);
         }

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=1421015&r1=1421014&r2=1421015&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 Wed Dec 12 22:10:05 2012
@@ -57,6 +57,7 @@ import org.apache.catalina.startup.SetNe
 import org.apache.catalina.users.MemoryUserDatabase;
 import org.apache.naming.ContextAccessController;
 import org.apache.naming.ContextBindings;
+import org.apache.naming.ResourceRef;
 import org.apache.openejb.AppContext;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.ClassLoaderUtil;
@@ -113,6 +114,8 @@ import javax.el.ELResolver;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
+import javax.naming.Reference;
+import javax.naming.StringRefAddr;
 import javax.servlet.ServletContext;
 import javax.servlet.SessionTrackingMode;
 import javax.servlet.jsp.JspApplicationContext;
@@ -961,6 +964,11 @@ public class TomcatWebAppBuilder impleme
                         newResource.getProperties().setProperty("jndiName", newResource.getId());
                         newResource.getProperties().setProperty("appName", getId(standardContext));
                         newResource.getProperties().setProperty("factory", (String) resource.getProperty("factory"));
+
+                        final Reference reference = createReference(resource);
+                        if (reference != null) {
+                            newResource.getProperties().put("reference", reference);
+                        }
                         appModule.getResources().add(newResource);
                     }
                 }
@@ -1105,6 +1113,26 @@ public class TomcatWebAppBuilder impleme
         }
     }
 
+    private static Reference createReference(final ResourceBase resource) {
+        if (resource instanceof ContextResource) {
+            final ContextResource cr = (ContextResource) resource;
+            final Reference ref = new ResourceRef
+                    (resource.getType(), resource.getDescription(),
+                            cr.getScope(), cr.getAuth(),
+                            cr.getSingleton());
+
+            final Iterator<String> params = resource.listProperties();
+            while (params.hasNext()) {
+                String paramName = params.next();
+                String paramValue = (String) resource.getProperty(paramName);
+                StringRefAddr refAddr = new StringRefAddr(paramName, paramValue);
+                ref.add(refAddr);
+            }
+            return ref;
+        }
+        return null;
+    }
+
     private static void updateInjections(final Collection<Injection> injections, final ClassLoader classLoader, final boolean keepInjection) {
         final Iterator<Injection> it = injections.iterator();
         final List<Injection> newOnes = new ArrayList<Injection>();