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/25 23:30:17 UTC
svn commit: r1139629 - in /openejb/trunk/openejb3/server:
openejb-client/src/main/java/org/apache/openejb/client/JNDIContext.java
openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
Author: djencks
Date: Sat Jun 25 21:30:16 2011
New Revision: 1139629
URL: http://svn.apache.org/viewvc?rev=1139629&view=rev
Log:
OPENEJB-1616 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-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=1139629&r1=1139628&r2=1139629&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 Sat Jun 25 21:30:16 2011
@@ -28,20 +28,9 @@ import java.util.Properties;
import java.util.ArrayList;
import java.util.List;
import java.lang.reflect.Constructor;
-import javax.naming.AuthenticationException;
-import javax.naming.ConfigurationException;
-import javax.naming.Context;
-import javax.naming.InvalidNameException;
-import javax.naming.Name;
-import javax.naming.NameNotFoundException;
-import javax.naming.NameParser;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.OperationNotSupportedException;
-import javax.naming.ServiceUnavailableException;
-import javax.naming.NameClassPair;
-import javax.naming.Binding;
+import javax.naming.*;
import javax.naming.spi.InitialContextFactory;
+import javax.naming.spi.NamingManager;
import javax.sql.DataSource;
/**
@@ -244,7 +233,16 @@ public class JNDIContext implements Init
return subCtx;
case ResponseCodes.JNDI_DATA_SOURCE:
- return createDataSource((DataSourceMetaData) res.getResult());
+ 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);
+ }
+ }
case ResponseCodes.JNDI_WEBSERVICE:
return createWebservice((WsMetaData) res.getResult());
@@ -446,11 +444,11 @@ public class JNDIContext implements Init
}
public NameParser getNameParser(String name) throws NamingException {
- throw new OperationNotSupportedException("TODO: Needs to be implemented");
+ return new SimpleNameParser();
}
public NameParser getNameParser(Name name) throws NamingException {
- return getNameParser(name.toString());
+ return new SimpleNameParser();
}
public String composeName(String name, String prefix) throws NamingException {
@@ -528,5 +526,23 @@ public class JNDIContext implements Init
return createSubcontext(name.toString());
}
+ private static final class SimpleNameParser implements NameParser {
+ private static final Properties PARSER_PROPERTIES = new Properties();
+
+ static {
+ PARSER_PROPERTIES.put("jndi.syntax.direction", "left_to_right");
+ PARSER_PROPERTIES.put("jndi.syntax.separator", "/");
+ }
+
+
+ private SimpleNameParser() {
+ }
+
+ public Name parse(String name) throws NamingException {
+ return new CompoundName(name, PARSER_PROPERTIES);
+ }
+ }
+
+
}
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=1139629&r1=1139628&r2=1139629&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 Sat Jun 25 21:30:16 2011
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.server.ejbd;
+import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
@@ -33,6 +34,7 @@ import javax.naming.NameClassPair;
import javax.naming.NameNotFoundException;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
+import javax.resource.Referenceable;
import javax.sql.DataSource;
import javax.xml.namespace.QName;
@@ -63,6 +65,7 @@ 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;
@@ -202,17 +205,23 @@ class JndiRequestHandler {
return;
} else if (object == null) {
throw new NullPointerException("lookup of '"+name+"' returned null");
- } else if (object instanceof DataSource && object.getClass().getName().equals("org.apache.commons.dbcp.BasicDataSource")){
- try {
- DbcpDataSource cf = new DbcpDataSource(object);
- DataSourceMetaData dataSourceMetaData = new DataSourceMetaData(cf.getDriverClassName(), cf.getUrl(), cf.getUsername(), cf.getPassword());
+ } else if (object instanceof DataSource) {
+ if (object.getClass().getName().equals("org.apache.commons.dbcp.BasicDataSource")) {
+ try {
+ DbcpDataSource cf = new DbcpDataSource(object);
+ DataSourceMetaData dataSourceMetaData = new DataSourceMetaData(cf.getDriverClassName(), cf.getUrl(), cf.getUsername(), cf.getPassword());
+ res.setResponseCode(ResponseCodes.JNDI_DATA_SOURCE);
+ res.setResult(dataSourceMetaData);
+ } catch (Exception e) {
+ res.setResponseCode(ResponseCodes.JNDI_ERROR);
+ res.setResult(new ThrowableArtifact(e));
+ }
+ return;
+ } else if (object instanceof Referenceable) {
res.setResponseCode(ResponseCodes.JNDI_DATA_SOURCE);
- res.setResult(dataSourceMetaData);
- } catch (Exception e) {
- res.setResponseCode(ResponseCodes.JNDI_ERROR);
- res.setResult(new ThrowableArtifact(e));
+ res.setResult(((Referenceable) object).getReference());
+ return;
}
- return;
} else if (object instanceof ConnectionFactory){
res.setResponseCode(ResponseCodes.JNDI_RESOURCE);
res.setResult(ConnectionFactory.class.getName());