java - EJB3.0的Servlet 2.5注入(inject),全部打包为WAR

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

我正在尝试实现这个目标:部署一个由简单 Servlet 组成的 WAR,该 Servlet 会注入(inject) 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 远程接口(interface) (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 中直接注入(inject)后,我得到一个空引用。

怎么了?我忘记了什么步骤吗?

问候, PIL 路易吉·萨莱拉

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

更新:我自己找到了答案

应用服务器不支持 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) is JEE5 compatible

"

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),实际上,其中从未明确提到不可能将 ejb 打包到 .war 中。我认为,这一点不受支持的事实已被暗示。

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

Enterprise beans can also be packaged within a web application module (.war)"

,第 20 章包装。

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

亲切的问候, PIL 路易吉·萨莱拉

最佳答案

Servlet 2.5 意味着 Java EE 5。仅从 Java EE 6 开始才支持 WAR 中的 EJB。

您有 2 个选择:

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

另请参阅:

关于java - EJB3.0的Servlet 2.5注入(inject),全部打包为WAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18447113/

相关文章:

java - 接口(interface)是类吗?

hadoop - Cloudera中的Hive Server快速入门

java - 如何在 Maven 构建过程中调用 ruby​​ 脚本?

java - 如何更改音频文件的播放速率?

java - 从我的应用程序中注销 Google

java - 如何将表单输入值从jsp页面传递到java类?

java - 将图像文件发送回浏览器

maven-3 - 如何使用 exec 插件运行 maven 编译两次?

Maven如何为父pom设置绝对路径

java - Java 调试时的变量值(哈希)