【问题标题】:Should we always close javax.naming.InitialContext at client side of JBoss app?我们应该总是在 JBoss 应用程序的客户端关闭 javax.naming.InitialContext 吗?
【发布时间】:2016-05-16 16:16:47
【问题描述】:

当我们创建一个新的InitialContext 用于远程访问Enterprise Java Beans 时,工作完成后,我们是否应该总是通过context.close() 关闭context

这是一个代码示例:

// Client side method
private void doSomeActionMethod() {
    RouteTransactionFacadeBeanRemote remote = null;
    final Hashtable jndiProperties = new Hashtable();
    jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    Context context = null;
    try {
        context = new InitialContext(jndiProperties);
        remote = (RouteTransactionFacadeBeanRemote) context
                 .lookup("ejb:EJBEAR/EJBServer//RouteTransactionFacadeBean!facade.RouteTransactionFacadeBeanRemote");

        //DO SOMETHING WITH REMOTE EJB

        } catch (NamingException e) {
            e.printStackTrace();
        } finally {
            try {
                // Should we always do this?
                if (context != null) context.close();
            } catch (NamingException ex) {
                ex.printStackTrace();
            }
        }
    }

【问题讨论】:

    标签: java jakarta-ee jboss ejb initial-context


    【解决方案1】:

    来自 javadocs:

    关闭此上下文。此方法释放此上下文的资源 立即,而不是等待它们自动释放 由垃圾收集器。这个方法是幂等的:在一个 已经关闭的上下文没有效果。调用任何其他 不允许在封闭上下文中使用方法,并导致未定义 行为。

    虽然垃圾收集器会收集它们,但不是等待gc,而是应该通过提供的函数close。所以,我的回答是,是的,你应该关闭它以及应该关闭的任何其他资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 2011-10-26
      • 2016-04-25
      相关资源
      最近更新 更多