【问题标题】:Interrupting EJB lookup中断 EJB 查找
【发布时间】:2013-07-22 16:29:45
【问题描述】:

是否可以中断挂起的InitialContext.lookup 通话?

原因:我在 Glassfish 服务器上部署了一个 EJB jar。当我尝试从客户端(通过 java web start 启动)进行远程 EJB 查找时,当服务器无法访问时(例如服务器关闭或客户端未连接到 Internet),查找将永远挂起。因此,我需要有可能中断进行查找的线程,否则线程将永远运行。

我尝试设置ORBTCPConnectTimeouts,但它似乎被InitialContext 忽略了。

编辑

InitialContext ctx = new InitialContext();
ctx.lookup("EJBName"); // Here it hangs when server not reachable

【问题讨论】:

    标签: java glassfish ejb


    【解决方案1】:

    根据我的经验,当JNDI服务不可用时,客户端会立即异常,我的意思是你不需要设置一个timeOut值来处理这种情况。当服务器离线时,您确定没有出现异常吗?可能是你没有正确处理它。


    如果您不指定任何 JNDI 属性,它将假定客户端与服务器在同一台机器上运行。

    当客户端是远程的时候,你需要指明一些属性来允许客户端连接到JNDI服务器。您需要指出的最直观的属性是 IP 和 PORT。不然怎么知道服务器位置?

    这些属性是键/值对列表,主要可以通过两种不同的方式定义:使用 jndi.properties 文件或直接在客户端代码中使用其他签名:InitialContext(Hashtable environment)。

    这些 JNDI 属性取决于供应商,link 提供了一个示例。

    您还需要将文件 gf-client.jar 添加到客户端的类路径中。

    您会注意到,当客户端正确实现时,不需要设置超时。

    【讨论】:

    • 我更新了我的问题。没有抛出异常,它只是在查找时挂起。也许这只是查找的 Glassfish 实现,它会一直挂起,直到 JNDI 服务可以访问?
    • 使用了哪些 JNDI 属性?
    • 我没有指定任何 JNDI 属性。我尝试为ORBTCPConnectTimeout 指定一个值,但没有成功
    • 感谢您的解释。我应该提到客户端是通过 java web start 启动的。使用java web start时还需要指定JNDI属性吗?
    • 是的,它是必需的。看看stackoverflow.com/questions/11087951/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2011-03-25
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多