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

时间:2013-08-26 14:57:46

标签: java servlets maven-3 ejb-3.0 weblogic-10.x

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

全部使用由两个组成部分组成的maven项目:

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

我首先要说的是,我能够以另一种方式进行此练习,将WAR和EJB打包在EAR中,但不包括上面提到的。任何人都可以告诉我使用的Application Server(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中直接注入后,我得到一个空引用。

怎么了?我忘记了任何一步吗?

此致 Pierluigi Salera

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

更新:我自己找到了答案

App Server不支持EJB 3.1

我确实使用的WebLogic支持EJB 3.0,如下所述:

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

  

WebLogic Server 11g第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规范的Application Server无法在WAR中打包Enterprise Bean。

亲切的问候, Pierluigi Salera

1 个答案:

答案 0 :(得分:2)

Servlet 2.5意味着Java EE 5. WAR中的EJB仅受Java EE 6支持。

你有两个选择:

  1. 升级到兼容Java EE 6的容器。
  2. 坚持使用Java EE 5并创建一个EAR而不是WAR。 EAR可以包含EJB JAR和WAR。
  3. 另见: