jboss 7.1将ejb调用到jboss 4.2

jboss 7.1将ejb调用到jboss 4.2,jboss,ejb,jboss7.x,Jboss,Ejb,Jboss7.x,所以我的应用程序是在JBossServer7.1.1上开发的,但需要参考JBossServer4.2.3上的Ejb。 我调用EJB的代码是 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.in

所以我的应用程序是在JBossServer7.1.1上开发的,但需要参考JBossServer4.2.3上的Ejb。 我调用EJB的代码是

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应用程序环境中工作得非常好,但在Jboss-7.1.1上,remoteEjb总是返回null


那么你能告诉我我做错了什么吗?

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");
此外,JBoss4.2.3和JBoss7.1中的命名上下文也不同。在Jboss 7.1中,jndi将是: 对于无状态bean:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
ejb://!
对于有状态bean:

ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
ejb://!?有状态
您还可以在日志文件中将ejb服务部署到JBoss 7.1时检查映射名称