Retrive datasource from remote VMs
madghigno Aug 11, 2004 10:58 AMI have the following problem:
I have two servers, one runs JBoss 3.2.5 and one Tomcat 4.1.30.
I configured the datasource in JBoss copying the oracle-ds.xml into the deploy directory and adapting it to my oracle instance.
The drivers (classes12.zip) are in the lib directory.
Now, I want to get a datasource from the tomcat machine via JNDI
try {
Properties pf = new Properties();
File jndiPF = new File("jndi.properties");
InputStream is = (InputStream)new FileInputStream(jndiPF);
pf.load(is);
System.out.println("Property file loaded");
System.out.println("Working on: " + pf.getProperty("java.naming.provider.url"));
Context ctx = new InitialContext(pf);
System.out.println("Context created");
NamingEnumeration ne = ctx.list("java:" + args[0]);
while (ne.hasMore()) {
Object el = ne.next();
System.out.println(" - " + el.toString());
}
DataSource ds = (DataSource)ctx.lookup("java:/jdbc/OracleDS");
System.out.println("Datasource retrived");
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
the jndi.properties file is the following
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=jnp\://appsEJB01\:1099 java.namin.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces #The jnp socket factory class jnp.socketFactory=org.jnp.interfaces.TimedSocketFactory #The TimedSocketFacory connection time out in milliseconds (0 == blocking) jnp.timeout=0 #The TimedSocketFactory read timeout in milliseconds (0 == blocking) jnp.sotimeout=0
the loop on the initial context (java:/) show the following entries:
- HAILConnectionFactory: javax.naming.LinkRef
- jmx: org.jnp.interfaces.NamingContext
- HTTPXAConnectionFactory: org.jboss.mq.SpyXAConnectionFactory
- ConnectionFactory: org.jboss.mq.SpyConnectionFactory
- UserTransactionSessionFactory: $Proxy12
- HTTPConnectionFactory: org.jboss.mq.SpyConnectionFactory
- XAConnectionFactory: org.jboss.mq.SpyXAConnectionFactory
- invokers: org.jnp.interfaces.NamingContext
- UserTransaction: org.jboss.tm.usertx.client.ClientUserTransaction
- UILXAConnectionFactory: javax.naming.LinkRef
- HAILXAConnectionFactory: javax.naming.LinkRef
- UIL2XAConnectionFactory: javax.naming.LinkRef
- queue: org.jnp.interfaces.NamingContext
- topic: org.jnp.interfaces.NamingContext
- console: org.jnp.interfaces.NamingContext
- UIL2ConnectionFactory: javax.naming.LinkRef
- UILConnectionFactory: javax.naming.LinkRef
- UUIDKeyGeneratorFactory: org.jboss.ejb.plugins.keygenerator.uuid.UUIDKeyGeneratorFactory
but when I try to get the datasource I configured it says:
jdbc not bound
Looking in the FAQs (Creating a JDBC datasource) I found this phrase:
. . . DataSource wrappers are bound under the java:/ prefix since they are not usable outside of the server VM.
so if the JNDI datasources are available only if my code is running in the same VM I have to work only with the embedded version of tomcat ? why have I to specify a provider URL if it work only on the same host ? I'm missing something ?
How can I configure a pool available via JNDI from remote VMs ?
thanks in advance
MG