JNDI-lookup returns
happy_robot Jun 5, 2009 9:36 AMhi all,
i'm developing an application under JBoss 5.0.0 with EJB3.
I'm using stateful EJBs, what works really fine inside the AS (i'm calling them from a deployed web-app).
All JNDI lookups from the webapp do return Proxy-interfaces as expected.
I also try to get my EJBs from an J2SE-client.
But here i get only references to "javax.naming.Reference"-objects.
Where's my fault?
Output of my J2SE-application:
Context <javax.naming.InitialContext@6d632c2d> >>>> jndi.properties java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=localhost:1099 java.naming.factory.url.pkgs=org.jnp.interfaces <<<<< Proxy</CSDatabase/ServerWebClientRemote/remote> class<javax.naming.Reference>
JNDI-View (Extract):
java:comp namespace of the component jboss.j2ee:ear=CSDatabase.ear,jar=CSDatabaseEJB.jar,name=ServerWebClientRemote,service=EJB3 : +- EJBContext (class: javax.ejb.EJBContext) +- TransactionSynchronizationRegistry[link -> java:TransactionSynchronizationRegistry] (class: javax.naming.LinkRef) +- UserTransaction (class: org.jboss.ejb3.tx.UserTransactionImpl) +- env (class: org.jnp.interfaces.NamingContext) | +- entityManager (class: org.jboss.jpa.tx.TransactionScopedEntityManager) | +- de.myapplication.general.database.server.services.ServerWebClientRemote (class: org.jnp.interfaces.NamingContext) | | +- entityManager (class: org.jboss.jpa.tx.TransactionScopedEntityManager) +- ORB[link -> java:/JBossCorbaORB] (class: javax.naming.LinkRef) Global JNDI Namespace +- CSDatabase (class: org.jnp.interfaces.NamingContext) | +- ServerWebClientRemote (class: org.jnp.interfaces.NamingContext) | | +- remote (class: Proxy for: de.myapplication.general.database.server.services.IServerWebClientRemote) | | +- remote-de.myapplication.general.database.server.services.IServerWebClientRemote (class: Proxy for: de.myapplication.general.database.server.services.IServerWebClientRemote)
J2SE-Clientapp (see jndi.properties in Output above):
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
public class JNDITest {
private Context context = null;
private Properties contextProperties = null;
public JNDITest() {
}
public void connect() throws Exception {
if(context == null) {
context = contextProperties == null ? new InitialContext() : new InitialContext(contextProperties);
System.out.println("Context <"+context+">");
System.out.println(">>>> jndi.properties");
for(Object key : context.getEnvironment().keySet()) {
System.out.println(key+"="+context.getEnvironment().get(key));
}
System.out.println("<<<<<");
System.out.println("");
}
}
public Object loadBean(String key) throws Exception {
Object proxy = null;
try {
proxy = context.lookup(key);
} catch(Exception excp) {
System.out.println("Key<"+key+"> Proxy<"+proxy+"> Exception<"+excp.getMessage()+">");
throw excp;
}
System.out.println("Proxy<"+key+"> class<"+proxy.getClass().getName()+">");
return proxy;
}
public static void main(String[] args) throws Exception {
JNDITest test = new JNDITest();
test.connect();
test.loadBean("/CSDatabase/ServerWebClientRemote/remote");
}
}
Additional information:
- My EAR does not use JBoss-specific JARs (i want to stay portable).
hibernate-annotations.jar (for setting indexes) log4j.jar commons-beanutils-1.8.0.jar javaee.jar jsf-impl.jar jsf-api.jar jstl-1.2.jar
- My J2SE client only imports the necessary jars
jnp-client.jar commons-logging.jar jboss-logging-spi.jar log4j.jar slf4j-jboss-logging.jar jboss-messaging-client.jar jboss-javaee.jar jboss-aop-client.jar jboss-mdr.jar
Thanks in advance