2012-11-06 86 views
2

因此,我的应用程序是在Jboss-server 7.1.1 final上开发的,但需要在Jboss-server 4.2.3上引用Ejb。 我调用EJB代码jboss 7.1将ejb调用到jboss 4.2

String IP = "X.X.X.X"; 
String Port = "1234"; 
String Lookup = "dummy/dummy/dummy"; 

    Properties props = new Properties(); 
    props.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); 
    props.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); 
    String ejbServiceURL = "jnp://"+IP +":"+Port; 
    props.put("java.naming.provider.url", ejbServiceURL); 

    try { 
     log.debug("looking up ejb by servie url:"+ejbServiceURL); 
     remoteEjb = (EjbRemote) new InitialContext(props).lookup(Lookup);    
     log.debug("found ejb from context returning it."); 
    } catch (NamingException e) { 
     log.error("exception operating on ejb bean:" + e, e); 
    } 

这工作完全正常的JBoss的4.2.3应用环境,但remoteEjb总是返回null回报JBoss的7.1.1最终

所以u能表明我是什么我做错了吗?

回答

6

EJB JNDI查找与JBoss 4.2.3和Jboss 7.1不同。 您上面发布的代码对于JBoss 4.2.3是正确的,但对于JBoss 7.1不是。 到JBoss 7.1,你必须设置以下的事情:

Hashtable jndiProperties = new Hashtable(); 
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); 

Context context = new InitialContext(jndiProperties); 

现在,你可以做起来,通过调用一下:

context.lookup("ejb-jndi-name-here"); 

此外,命名上下文也是JBoss的4.2有所不同。 3和JBoss 7.1。在JBoss中7.1中,JNDI将是: 对于无状态的bean:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface> 

对于状态bean:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful 

您还可以查看映射名称当EJB服务日志中被部署到JBoss 7.1文件。