EJB3.0的Servlet 2.5注入,全部打包为WAR



我正在努力实现这个目标:部署一个由简单Servlet组成的WAR,该Servlet负责EJB的注入,并在上面调用一个业务方法。

所有这些都是使用由两个组件组成的maven项目完成的:

1) 示例EJB(pom.xml打包为EJB)2) 示例WAR(Servlet,pom.xml打包为WAR.依赖ejb模块)

我首先要告诉大家,我可以用另一种方式来完成这个练习,将WAR和EJB打包到EAR中,但不能用上面提到的方式。任何人都可以告诉我所使用的应用程序服务器(WebLogic 10.3.3)是否有任何限制?

SimpleServlet(WAR)的代码片段:

public class SimpleServlet extends HttpServlet {
@EJB(mappedName="ejb/SimpleSessionBean")
private SimpleSessionRemote simpleSessionBean;

SimpleSession远程接口(EJB)的代码片段:

@Remote
public interface SimpleSessionRemote
{
    String getMessage();
}

SimpleSession Bean类(EJB)的代码片段:

@Stateless(name="SimpleSessionEJB", mappedName="ejb/SimpleSessionBean")
@Remote(SimpleSessionRemote.class) 
public class SimpleSession
{
...

EJB没有weblogic-EJB-jar.xml部署描述符,因此它是完全注释的EJB。

在管理控制台中部署WAR之后,在Servlet中直接注入之后,我得到了一个null引用。

怎么了?我忘了走哪一步了?

谨致问候,Pierluigi Salera

===================================

更新:我自己找到了答案

应用服务器不支持EJB 3.1 是不可能的

事实上,我正在使用的WebLogic支持EJB 3.0,如下所述:

http://docs.oracle.com/cd/E14571_01/web.1111/e14529/compatibility.htm

"

WebLogic Server 11g Release 1(10.3.3)与JEE5兼容

"

Java EE 5支持EJB 3.0,如下所述:

http://download.oracle.com/otn-pub/jcp/javaee-5.0-fr-eval-oth-JSpec/javaee-5_0-fr-spec.pdf?AuthParam=1377598866_1774a69dcb8b920f69c0c2623068e247

我还查看了EJB 3.0规范(JSR220),实际上,其中从未明确提到不可能在.war中封装EJB。我认为,不支持这一点的事实是隐含的。

为了提供一个完整的概述,我最后检查了EJB 3.1规范(JSR318),其中明确指出"

企业bean也可以打包在web应用程序模块中(.war)"

,第20章包装。

因此,我们可以得出结论,我的练习的范围是证明,对于不支持EJB 3.1规范的应用程序服务器,在WAR中打包企业Bean是不可能的。

谨致问候,Pierluigi Salera

Servlet 2.5意味着Java EE 5。WAR中的EJB仅在Java EE 6之后才受支持。

您有两个选项:

  1. 升级至与Java EE 6兼容的容器
  2. 坚持使用JavaEE5并创建一个EAR而不是WAR。EAR可以由EJB JAR和WAR组成

另请参阅:

  • Java EE 6教程-WAR中的EJB
  • JavaEE6WAR与EAR中的EJB封装

最新更新