You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by dj...@apache.org on 2011/06/26 21:34:45 UTC

svn commit: r1139925 - in /openejb/trunk/openejb3/server: openejb-client/src/main/java/org/apache/openejb/client/ openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/

Author: djencks
Date: Sun Jun 26 19:34:45 2011
New Revision: 1139925

URL: http://svn.apache.org/viewvc?rev=1139925&view=rev
Log:
OPENEJB-1616 Better way to send references for non-dbcp datasources over remote jndi connection

Modified:
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java
    openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ResponseCodes.java
    openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java?rev=1139925&r1=1139924&r2=1139925&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java Sun Jun 26 19:34:45 2011
@@ -233,16 +233,7 @@ public class JNDIContext implements Init
                 return subCtx;
 
             case ResponseCodes.JNDI_DATA_SOURCE:
-                Object o = res.getResult();
-                if (o instanceof DataSourceMetaData) {
-                    return createDataSource((DataSourceMetaData) res.getResult());
-                } else if (o instanceof Reference) {
-                    try {
-                        return NamingManager.getObjectInstance(o, getNameParser(name).parse(name), this, env);
-                    } catch (Exception e) {
-                        throw (NamingException)new NamingException("Could not dereference " + o).initCause(e);
-                    }
-                }
+                return createDataSource((DataSourceMetaData) res.getResult());
 
             case ResponseCodes.JNDI_WEBSERVICE:
                 return createWebservice((WsMetaData) res.getResult());
@@ -255,6 +246,14 @@ public class JNDIContext implements Init
                 }
                 return parseEntry(prop, value);
 
+            case ResponseCodes.JNDI_REFERENCE:
+                Reference ref = (Reference)res.getResult();
+                try {
+                    return NamingManager.getObjectInstance(ref, getNameParser(name).parse(name), this, env);
+                } catch (Exception e) {
+                    throw (NamingException) new NamingException("Could not dereference " + ref).initCause(e);
+                }
+
             case ResponseCodes.JNDI_NOT_FOUND:
                 throw new NameNotFoundException(name + " does not exist in the system.  Check that the app was successfully deployed.");
 

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java?rev=1139925&r1=1139924&r2=1139925&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/JNDIResponse.java Sun Jun 26 19:34:45 2011
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.client;
 
+import javax.naming.Reference;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
@@ -105,6 +106,9 @@ public class JNDIResponse implements Clu
                 ncpe.readExternal(in);
                 result = ncpe;
                 break;
+            case ResponseCodes.JNDI_REFERENCE:
+                result = (Reference)in.readObject();
+                break;
         }
     }
 
@@ -138,8 +142,6 @@ public class JNDIResponse implements Clu
                 m.writeExternal(out);
                 break;
             case ResponseCodes.JNDI_DATA_SOURCE:
-                DataSourceMetaData ds = (DataSourceMetaData) result;
-                ds.writeExternal(out);
                 break;
             case ResponseCodes.JNDI_INJECTIONS:
                 InjectionMetaData imd = (InjectionMetaData) result;
@@ -153,6 +155,10 @@ public class JNDIResponse implements Clu
                 NameClassPairEnumeration ncpe = (NameClassPairEnumeration) result;
                 ncpe.writeExternal(out);
                 break;
+            case ResponseCodes.JNDI_REFERENCE:
+                Reference ref = (Reference) result;
+                out.writeObject(ref);
+                break;
         }
     }
 

Modified: openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ResponseCodes.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ResponseCodes.java?rev=1139925&r1=1139924&r2=1139925&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ResponseCodes.java (original)
+++ openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ResponseCodes.java Sun Jun 26 19:34:45 2011
@@ -45,5 +45,6 @@ public class ResponseCodes {
     public static final int JNDI_INJECTIONS = 23;
     public static final int JNDI_RESOURCE = 24;
     public static final int JNDI_WEBSERVICE = 25;
+    public static final int JNDI_REFERENCE = 26;
 }
 

Modified: openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java?rev=1139925&r1=1139924&r2=1139925&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java (original)
+++ openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java Sun Jun 26 19:34:45 2011
@@ -16,7 +16,6 @@
  */
 package org.apache.openejb.server.ejbd;
 
-import java.io.ObjectInput;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.lang.reflect.Field;
@@ -38,7 +37,7 @@ import javax.resource.Referenceable;
 import javax.sql.DataSource;
 import javax.xml.namespace.QName;
 
-import org.apache.openejb.AppContext;
+import org.apache.activemq.filter.PrefixDestinationFilter;
 import org.apache.openejb.BeanContext;
 import org.apache.openejb.Injection;
 import org.apache.openejb.ProxyInfo;
@@ -65,7 +64,6 @@ import org.apache.openejb.core.webservic
 import org.apache.openejb.core.webservices.PortAddressRegistry;
 import org.apache.openejb.core.webservices.PortRefData;
 import org.apache.openejb.core.webservices.ServiceRefData;
-import org.apache.openejb.jee.JavaXmlTypeMapping;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.util.LogCategory;
@@ -133,11 +131,11 @@ class JndiRequestHandler {
             if (req.getRequestString().startsWith("/")) {
                 req.setRequestString(req.getRequestString().substring(1));
             }
-            Context context = getContext(req);
+            String prefix = getPrefix(req);
 
             switch(req.getRequestMethod()){
-                case RequestMethodConstants.JNDI_LOOKUP: doLookup(req, res, context); break;
-                case RequestMethodConstants.JNDI_LIST: doList(req, res, context); break;
+                case RequestMethodConstants.JNDI_LOOKUP: doLookup(req, res, prefix); break;
+                case RequestMethodConstants.JNDI_LIST: doList(req, res, prefix); break;
             }
 
         } catch (Throwable e) {
@@ -161,25 +159,25 @@ class JndiRequestHandler {
         }
     }
 
-    private Context getContext(JNDIRequest req) throws NamingException {
-        Context context;
+    private String getPrefix(JNDIRequest req) throws NamingException {
+        String prefix;
         String name = req.getRequestString();
 
         if (name.startsWith("openejb/Deployment/")) {
-            context = rootContext;
+            prefix = "";
         } else if (req.getModuleId() != null && req.getModuleId().equals("openejb/Deployment")){
-            context = deploymentsJndiTree;
+            prefix = "openejb/Deployment/";
         } else if (req.getModuleId() != null && req.getModuleId().equals("openejb/global")){
-            context = globalJndiTree;
+            prefix = "openejb/global/";
         } else if (req.getModuleId() != null && clientJndiTree != null) {
-            context = (Context) clientJndiTree.lookup(req.getModuleId());
+            prefix = "openejb/client/" + req.getModuleId() + "/";// + (Context) clientJndiTree.lookup(req.getModuleId());
         } else {
-            context = ejbJndiTree;
+            prefix = "openejb/remote/";
         }
-        return context;
+        return prefix;
     }
 
-    private void doLookup(JNDIRequest req, JNDIResponse res, Context context) {
+    private void doLookup(JNDIRequest req, JNDIResponse res, String prefix) {
         Object object;
         String name = req.getRequestString();
 
@@ -188,7 +186,7 @@ class JndiRequestHandler {
             if (name.equals("info/injections")) {
 
                 //noinspection unchecked
-                List<Injection> injections = (List<Injection>) context.lookup(name);
+                List<Injection> injections = (List<Injection>) rootContext.lookup(prefix + name);
                 InjectionMetaData metaData = new InjectionMetaData();
                 for (Injection injection : injections) {
                     metaData.addInjection(injection.getTarget().getName(), injection.getName(), injection.getJndiName());
@@ -197,7 +195,7 @@ class JndiRequestHandler {
                 res.setResult(metaData);
                 return;
             } else {
-                object = context.lookup(name);
+                object = rootContext.lookup(prefix + name);
             }
 
             if (object instanceof Context) {
@@ -218,7 +216,7 @@ class JndiRequestHandler {
                     }
                     return;
                 } else if (object instanceof Referenceable) {
-                    res.setResponseCode(ResponseCodes.JNDI_DATA_SOURCE);
+                    res.setResponseCode(ResponseCodes.JNDI_REFERENCE);
                     res.setResult(((Referenceable) object).getReference());
                     return;
                 }
@@ -464,10 +462,10 @@ class JndiRequestHandler {
         clusterableRequestHandler.updateServer(proxyInfo.getBeanContext(), req, res);
     }
 
-    private void doList(JNDIRequest req, JNDIResponse res, Context context) {
+    private void doList(JNDIRequest req, JNDIResponse res, String prefix) {
         String name = req.getRequestString();
         try {
-            NamingEnumeration<NameClassPair> namingEnumeration = context.list(name);
+            NamingEnumeration<NameClassPair> namingEnumeration = rootContext.list(prefix + name);
             if (namingEnumeration == null){
                 res.setResponseCode(ResponseCodes.JNDI_OK);
                 res.setResult(null);