【问题标题】:NULL EJB referece空 EJB 引用
【发布时间】:2015-04-05 03:09:15
【问题描述】:

我有一个用 Eclipse 创建的 EAP,它包含两个模块:一个动态 Web 应用程序和一个 EJB 模块。

EAP的application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd" id="Application_ID" version="7">
  <display-name>JExecuterEAP</display-name>
  <module>
    <ejb>JExecuterEJB.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>JExecuter.war</web-uri>
      <context-root>JExecuter</context-root>
    </web>
  </module>
</application>  

EJB 模块:

package myp;

import javax.ejb.Stateless;

@Stateless
public class ExecutionEngineBean implements IExecutionEngine {

    public ExecutionEngineBean() {

    }

    @Override
    public void test() {
        System.out.println("Test EJB");
    }

}


package myp;

import javax.ejb.Remote;

@Remote
public interface IExecutionEngine {
    public void test();
}

网络应用程序:

import myp.IExecutionEngine;


@ServerEndpoint(value = "/executerendpoint")
public class ExecuterEndpoint {

    @EJB
    IExecutionEngine bean;

    private static final Logger logger =     Logger.getLogger("ExecuterEndpoint");


    @OnOpen
    public void openConnection(Session sesion) {
        logger.log(Level.INFO, "open conection");

        //Here the EJB is NULL

    }

    @OnMessage
    public void onMessage(Session session, String msg) {        
    }

}

我正在 GlassFish 4.1 中进行部署。

【问题讨论】:

    标签: jakarta-ee glassfish ejb ejb-3.0 glassfish-4


    【解决方案1】:

    看起来问题与 EAR 有关。

    如果您将相同的代码放入 WAR 文件中,它应该可以工作,但我不确定原因。

    可能与 Glassfish 自带的 WebSocket 实现 Tyrus 有关。我想缺少了使它在 EAR 中工作所必需的东西。

    看看这个问题:

    答案建议使用@Inject 并查看Tyrus CDI samples & tests,它们包含使用当前版本的 Tyrus 可能实现的示例。有一个名为InjectToStatefulEndpoint.java 的测试通过@Inject 注入一个EJB,但看起来该测试也在WAR 结构中运行。

    我还看到了另一个使用 EAR 并使用 @LocalBean 注释 bean 的工作示例(可以找到源代码 here on GitHub,但我无法在我自己的项目中使用它。

    另见:

    【讨论】:

      【解决方案2】:

      实际上,在尝试了很多事情之后,当我用@Stateless 注释类 ExecuterEndpoint 时,它起作用了。

      如果有人有很好的解释,我真的很感激。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多