代码之家  ›  专栏  ›  技术社区  ›  djna

@EJB注释-什么样的错误处理是合适的?

  •  3
  • djna  · 技术社区  · 17 年前

    @EJB注释可以在“托管客户端”中用于访问EJB。

    可以将此注释放在servlet类中,声明一个成员变量。

    public class MyServlet extends HttpServlet {
         @EJB
         private MyWorkerInterface theWorker;
    }
    

    @EJB注释被扩展为JNDI查找(我假设)在servlet初始化时执行。这些JNDI查找可能会失败:EJB提供程序可以选择修改注释以指定特定的JNDI名称,my@EJB引用将需要指定非默认JNDI名称,否则查找将失败。

    我还认为,由于EJB可以是远程的,因此可能会出现暂时性的、网络故障和服务器跳出错误。

    我的想法:当使用 ,我应该检查一下它的有效性。

      if ( theWorker == null ) {
          // ... etc.
    

    我的问题是:

    和

    3.)初步想法:可能需要显式的、惰性的JNDI查找代码,而不是使用@EJB。评论?

    1 回复  |  直到 17 年前
        1
  •  3
  •   Alexander Torstling    17 年前

    1) 不,除非集装箱弄错了。
    2) 不相关,您的实例将是远程服务的代理,实现远程接口。因此,注射总是成功的。调用代理的方法时会出现错误,因此在使用远程接口时需要准备好处理这些错误。这就是RemoteException的目的,所有错误都应该包装在RemoteException中,以便在出现问题时捕获。如果您让它传播,则tx将回滚,如果您仅操作启用tx的资源,这是一个正常的默认值。
    3) 这通常仅在JNDI查找需要不同的初始上下文属性时才需要,但对于这些情况,我个人会使用DI引擎和另一个注释(例如@EJBFromHost2)。使用显式JNDI查找会变得非常困难,尤其是当您以后想要更改为另一个JNDI实现或设置时(例如,如果您想要集群您的应用程序)。