【问题标题】:How to call EJB A in EJB B from EJB C?如何从 EJB C 调用 EJB B 中的 EJB A?
【发布时间】:2014-09-10 06:03:52
【问题描述】:

我有 3 个 ejb bean

工厂设备

@Local
public interface FactoryEquip {

    List<Equip> findAll();

}

FactoryGame

@LocalBean
@Stateless
public class FactoryGame {
    @EJB FactoryEquip fEquip;

    public void findAll(){
        List<Equip> eq= fEquip.findAll();
    } 
}

Websocket

@Singleton
@ServerEndpoint("/socket")
public class Websocket {

    @EJB FactoryGame fGame;

    @OnMessage
    public String onMessage(String message, Session session){

             //this code work fine
             fGame.findAll();

             //this code not work (error)
             List<Equip> eq= fGame.fEquip.findAll();

         return "ok";
    }

   //another websocket function ...

websocket收到消息时,会因为NullPointerExceptionerror报错,

fEquip 不为 null 并且在该行中工作正常

fGame.findAll();

但 fEquip 在该行中为空

List<Equip> eq= fGame.fEquip.findAll();

如何解决这个问题?

请原谅我的英语,谢谢

【问题讨论】:

  • 为什么我投了反对票?请在投反对票前说明原因

标签: java jakarta-ee ejb-3.0


【解决方案1】:

不要这样做 - 容器将 EJB 包装到实现相同公共接口但实际上不是您的实际 EJB 类的代理中。这就是您获得 NPE 的原因。永远不要直接访问其他 EJB 的字段,总是使用方法调用。在相关的说明中,chain.calls.like.this() 不是一个好的编程习惯。

【讨论】:

  • 正确的做法是不要像这样访问 EJB。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
相关资源
最近更新 更多