Jboss as 7 远程调用EJB时怎么样通过@EJB注解调用

J2EE 码拜 9年前 (2016-03-19) 1059次浏览
在做一个项目,项目的逻辑部分是通过EJB实现的,部署在JBOSS as 7服务器上(jboss eap 6也可以);
客户端的部分部署在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

20

https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+server+instance
需要使用jboss-ejb-client.xml 将远程ejb注入到平台(jboss支持,tomcat支持不了)

10

对了,你可以试一下在客户端多线程调用remote ejb 竟然需要每个线程都生成一个,反正本人之前遇到过,很变态,当用JMS的时候都无语了。你ejb在客户端可以用单例模式生成一个。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Jboss as 7 远程调用EJB时怎么样通过@EJB注解调用
喜欢 (0)
[1034331897@qq.com]
分享 (0)