在struts2 action中注入EJB?
问题描述:
我正在使用struts2,EJB 3.0 ... 我的需求是从struts2动作类中调用EJB层。 我希望有两种方法实现这一点:在struts2 action中注入EJB?
1.Using @EJB annotation in Action class
2.Using JNDI look up
我都尝试, 但JNDI lookup
问题是沉绵正在使用正确的命名,我得到NameNotFoundException
。所以最终,我的团队转移到其他使用@EJB
注释的方法。
但使用@EJB
注释正在逐渐空出来的我的时候,我觉得它不是注射:
我得到了NullPointerException
代码:
@EJB(mappedName="BeanLocal/local")
BeanLocal bean ;
任何一个可以建议我什么我必须做更多... 如果在SOF中有anylink,请做引荐我,因为我发现没有任何与此有关的东西
答
您不能在Struts 2操作类中使用传统的依赖项注入,因为操作不受管理。但有一种方法可以通过使用CDI plugin或Guice来实现此目的。 您也可以使用JNDI查找,但语法取决于您的服务器。你最好的选择是根据你有什么检查文件(JBoss 7.1,Glassfish ...)
答
我有这个相同的问题,这里是我如何解决它。
正如Shinosha所说,@EJB注释将不起作用,因为动作类是由Struts容器管理的。
为了使用JNDI查找,我必须创建bean @Remote并指定mappedName。然后代码如下(这取决于你所使用的服务器上,在我的情况的Weblogic):
Context ctx = new InitialContext();
MyBean bean= (MyBean) ctx.lookup("MyBeanMappedName#myapp.MyBean");
查找字符串应该是bean的全名。
答
我写了下面的拦截器来解决这个问题。看看和共享任何反馈你可能有:
http://gauravwrites.blogspot.com/2014/11/ejb-injection-in-struts2-interceptor.html
的CDI插件可能是“最好”的方法,但你也可以做手工,一拉http://longsystemit.com/javablog/ p = 40。 –