在struts2 action中注入EJB?

在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,请做引荐我,因为我发现没有任何与此有关的东西

+1

的CDI插件可能是“最好”的方法,但你也可以做手工,一拉http://longsystemit.com/javablog/ p = 40。 –

您不能在Struts 2操作类中使用传统的依赖项注入,因为操作不受管理。但有一种方法可以通过使用CDI pluginGuice来实现此目的。 您也可以使用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