2

我正在使用 struts2、EJB 3.0 ...我的要求是从 struts2 操作类调用 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 中有任何链接,请参考我,因为我没有发现与此相关的内容

4

3 回答 3

2

我有同样的问题,这就是我解决它的方法。

正如 Shinosha 所说,@EJB 注释将不起作用,因为动作类由 Struts 容器管理。

为了使用 JNDI 查找,我必须创建 bean @Remote 并指定一个 mappedName。然后代码如下(这取决于您使用的服务器,在我的情况下为 Weblogic):

Context ctx = new InitialContext();
MyBean bean= (MyBean) ctx.lookup("MyBeanMappedName#myapp.MyBean");

查找字符串应该是 bean 的完全限定名称。

于 2012-08-30T12:49:45.413 回答
2

您不能在 Struts 2 动作类中使用传统的依赖注入,因为动作不受管理。然而,有一种方法可以通过使用CDI 插件Guice来实现。您也可以使用 JNDI 查找,但语法取决于您的服务器。您最好的选择是根据您所拥有的(JBoss 7.1Glassfish ...)检查文档

于 2012-08-29T14:10:45.423 回答
0

我写了以下拦截器来解决这个问题。看看并分享您可能有的任何反馈:

http://gauravwrites.blogspot.com/2014/11/ejb-injection-in-struts2-interceptor.html

于 2014-11-12T01:43:03.673 回答