tos*_*hah 2 jboss ejb jboss7.x
所以我的应用程序是在Jboss-server 7.1.1 final上开发的,但需要在Jboss-server 4.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);
}
Run Code Online (Sandbox Code Playgroud)
在Jboss-4.2.3应用程序环境中工作得很好,但remoteEjb总是在Jboss-7.1.1 Final上返回null返回
所以你能告诉我我做错了什么吗?
小智 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);
Run Code Online (Sandbox Code Playgroud)
现在,你可以通过调用来查找:
context.lookup("ejb-jndi-name-here");
Run Code Online (Sandbox Code Playgroud)
此外,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>
Run Code Online (Sandbox Code Playgroud)
对于有状态的bean:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
Run Code Online (Sandbox Code Playgroud)
在日志文件中将ejb服务部署到JBoss 7.1时,您还可以检查映射名称.