在做一个项目,项目的逻辑部分是通过EJB实现的,部署在JBOSS as 7服务器上(jboss eap 6也可以);
客户端的部分部署在tomcat 7 上,
本人之前是通过JNDI查找的方式调用的,调用方法如下,这是成功的。
客户端的部分部署在tomcat 7 上,
本人之前是通过JNDI查找的方式调用的,调用方法如下,这是成功的。
final Hashtable<String, String> jndiProperties = new Hashtable<String, String>(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties); final String appName = ""; final String moduleName = "HelloWorldEJB"; final String distinctName = ""; final String beanName = UserBean.class.getSimpleName(); final String viewClassName = UserManager.class.getName(); try { UserManager um = (UserManager) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName); ...... } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); }
不过每次调用都要这样写一遍,实在是太繁杂了,想要改成通过@EJB的注入的方法调用
尝试了一下一直没成功
本人看了一下jboss官网上的介绍
https://docs.jboss.org/author/display/AS71/Developer+Guide
它通过如下的方式调用,
@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager") private ProductManager productManager;
这样似乎少了之前
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties);这一步?
那么,应该怎么做呢?
解决方案
10
tomcat上ejb支持有限啊
jboss的例子,客户端也是jboss
jboss的例子,客户端也是jboss
20
https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+server+instance
需要使用jboss-ejb-client.xml 将远程ejb注入到平台(jboss支持,tomcat支持不了)
需要使用jboss-ejb-client.xml 将远程ejb注入到平台(jboss支持,tomcat支持不了)
10
对了,你可以试一下在客户端多线程调用remote ejb 竟然需要每个线程都生成一个,反正本人之前遇到过,很变态,当用JMS的时候都无语了。你ejb在客户端可以用单例模式生成一个。