2016-05-16 42 views
2

当我们为远程访问Enterprise Java Bean创建新的InitialContext时,工作完成后,我们是否应该始终通过context.close()关闭context我们是否应该总是关闭JBoss应用程序客户端的javax.naming.InitialContext?

下面是一个代码示例:

// 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(); 
      } 
     } 
    } 

回答

3

从javadocs中:

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

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

相关问题