JBoss/JNDI Question.
shailesh_dangi Mar 15, 2002 2:29 PMGuys:
I have a little trouble understanding how the objects are bound and discovered with JNDI in Jboss. Do I specify the JNDI Binding in Jboss.xml file? Does Jboss follow the standard J2EE Naming Conventions to find objects relative to java:comp/env.? Even though I have specified
<jndi-name>interest/Interest</jndi-name> the jboss.xml file why is the object (proxy)
bound against “Interest” name under the root context?
More over I am not able to find resources if I use java:comp/env/jdbc/OraclePoolDS to get Connection objects. This happens no matter what I user “jdbc/OraclePoolDS” or just “OraclePoolDS” or even “java:/jdbc/OracleDBPool”. The built in “java:/DefaultDS” also doesn’t work. Could some one spend some time explaining how to do the bindings?
Secondly, as part of Bean-Container contract, the container provider is mandated to implement enterprise bean's home and component interfaces. Where does JBoss generate and store these implementations?.
I also have a test JNDI program (see below) that looks up jndi.properties from the classpath.
I am printing the env variables and the all the objects bound. There is nothing bound under
“java:”. Weird.
Please help !!!
[INFO,HypersonicDatabase] Database started
[INFO,HypersonicDatabase] Started
[INFO,DefaultDS] Starting
[INFO,DefaultDS] XA Connection pool DefaultDS bound to java:/DefaultDS
[INFO,DefaultDS] Started
[INFO,jdbc/OracleDBPool] Starting
[INFO,jdbc/OracleDBPool] XA Connection pool jdbc/OracleDBPool bound to java:/jdbc/OracleDBPool
[INFO,jdbc/OracleDBPool] Started
.
.
.
******************************************************************************************
Sample JNDI Program
package com.companyname.utils;
import javax.naming.*;
import java.util.*;
public class TestJNDI extends Object {
/**
* Constructor
*/
public TestJNDI() {
}
public static void main(String [] args) throws Exception{
InitialContext jndiContext = new InitialContext();
Hashtable env = jndiContext.getEnvironment();
System.out.println("*****************************************");
for(Enumeration enum = env.keys();enum.hasMoreElements();){
String key = enum.nextElement().toString();
System.out.println(key+"="+env.get(key).toString());
}
System.out.println("*****************************************");
NamingEnumeration enum = jndiContext.list("");
while (enum.hasMore()) {
System.out.println(enum.next());
}
System.out.println("*****************************************");
enum = jndiContext.list("java:/");
while (enum.hasMore()) {
System.out.println(enum.next()); ß This is empty
}
System.out.println("*****************************************");
Object ref = jndiContext.lookup("Interest"); //From example – shouldn’t this be java:comp/env/ejb/
System.out.println(ref.getClass().getName());
System.out.println("*****************************************");
System.out.println("*****************************************");
ref = jndiContext.lookup("java:/DefaultDS”);//From example throws Exception
System.out.println(ref.getClass().getName());
System.out.println("*****************************************");
jndiContext.close();
}
}
******************************************************************************************
Sample JNDI Output
******************************************************************************************
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=NY500-03-164A.bloomberg.com:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
******************************************************************************************
TopicConnectionFactory: javax.naming.LinkRef
jmx: org.jboss.jmx.server.JMXAdaptorImpl
ConnectionFactory: org.jboss.mq.SpyConnectionFactory
UserTransactionSessionFactory: org.jboss.tm.usertx.server.UserTransactionSessionFactoryImpl
Interest: $Proxy2
jmx:ny500-03-164a:rmi: org.jboss.jmx.server.RMIConnectorImpl
XAConnectionFactory: org.jboss.mq.SpyXAConnectionFactory
invokers: org.jnp.interfaces.NamingContext
UserTransaction: org.jboss.tm.usertx.client.ClientUserTransaction
UILXAConnectionFactory: org.jboss.mq.SpyXAConnectionFactory
RMIXAConnectionFactory: org.jboss.mq.SpyXAConnectionFactory
queue: org.jnp.interfaces.NamingContext
topic: org.jnp.interfaces.NamingContext
FwkTab: $Proxy4
UILConnectionFactory: org.jboss.mq.SpyConnectionFactory
servercollector: org.jboss.management.ServerDataCollector
RMIConnectionFactory: org.jboss.mq.SpyConnectionFactory
QueueConnectionFactory: javax.naming.LinkRef
******************************************************************************************
******************************************************************************************
$Proxy0
******************************************************************************************
******************************************************************************************
javax.naming.NameNotFoundException: DefaultDS not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:495)
at org.jnp.server.NamingServer.getBinding(NamingServer.java:503)
at org.jnp.server.NamingServer.getObject(NamingServer.java:509)
at org.jnp.server.NamingServer.lookup(NamingServer.java:282)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:349)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:333)
at javax.naming.InitialContext.lookup(InitialContext.java:350)
at com.companyname.utils.TestJNDI.main(TestJNDI.java:50)
JBOSS.XML
<?xml version="1.0" encoding="UTF-8"?>
<enterprise-beans>
<ejb-name>Interest</ejb-name>
<jndi-name>interest/Interest</jndi-name>
<ejb-name>FwkTab</ejb-name>
<jndi-name>portal/FwkTab</jndi-name>
<resource-ref>
<res-ref-name>jdbc/OracleDBPool</res-ref-name>
<jndi-name>java:/OracleDBPool</jndi-name> <- Not sure.
</resource-ref>
</enterprise-beans>
<resource-managers>
<resource-manager res-class="org.jboss.jdbc.XADataSourceLoader">
<res-name>jdbc/OracleDBPool</res-name>
<res-jndi-name>java:/OracleDBPool</res-jndi-name>
</resource-manager>
</resource-managers>
EJB-JAR.xml
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar>
Portal Application
<display-name>Portal EJB</display-name>
<enterprise-beans>
<ejb-name>Interest</ejb-name>
com.companyname.ejbs.sessionbeans.InterestHome
com.companyname.ejbs.sessionbeans.Interest
<ejb-class>com.companyname.ejbs.sessionbeans.InterestBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
<resource-ref>
Oracle DS
<res-ref-name>jdbc/OracleDBPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
FwkTab
<ejb-name>FwkTab</ejb-name>
com.companyname.ejbs.entitybeans.FwkTabHome
com.companyname.ejbs.entitybeans.FwkTab
<ejb-class>com.companyname.ejbs.entitybeans.FwkTabBean</ejb-class>
<persistence-type>Bean</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
False
<resource-ref>
Oracle DS
<res-ref-name>jdbc/OracleDBPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</enterprise-beans>
</ejb-jar>
Section of jboss.jcml
<!-- ==================================================================== -->
<!-- JDBC -->
<!-- ==================================================================== -->
oracle.jdbc.driver.OracleDriver,org.hsqldb.jdbcDriver
1476
true
default
false
DefaultDS
org.jboss.pool.jdbc.xa.wrapper.XADataSourceImpl
jdbc:hsqldb:hsql://localhost:1476
1200000
sa
10
false
false
false
true
120000
1800000
false
false
1.0
0
oracle.jdbc.driver.OracleDriver,org.hsqldb.jdbcDriver
org.jboss.pool.jdbc.xa.wrapper.XADataSourceImpl
jdbc/OracleDBPool
jdbc:oracle:thin:@crmdev:1521:blpt
apps
apps
2
2
true
20
20
false
false
true
false
false
1800000
1.0
Section of Output from: http://ny500-03-164a.bloomberg.com:8082
DefaultDomain
.
.
service=XADataSource,name=DefaultDS
service=XADataSource,name=jdbc/OracleDBPool
type=Shutdown
.
.
Management
jndiName=FwkTab
jndiName=Interest