java - 捕获由 InitialContext.lookup 引起的错误

标签 java error-handling glassfish ejb jndi

我正在开发一个命令行客户端 (Java SE6),它现在需要与 Glassfish 2.1 服务器通信。 建立这个连接的代码是

try {
    final InitialContext context = new InitialContext();
    final String ejbName = GeneratorCancelledRemote.class.getName();
    generatorCancelled = (GeneratorCancelledRemote) context.lookup(ejbName);
}
catch (Throwable t) {
    System.err.println("--> Could not call server:");
    t.printStackTrace(System.err);
    runWithOutEJB = true;
}

我现在在没有运行服务器的情况下测试它,客户端(当从 Eclipse 4.2 运行时)只是炸弹

31.10.2012 10:40:09 com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl 
WARNUNG: "IOP00410201: (COMM_FAILURE) Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700"
org.omg.CORBA.COMM_FAILURE:   vmcid: SUN  minor code: 201  completed: No
    at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2783)
    at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:2804)
    at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.(SocketOrChannelConnectionImpl.java:261)
    at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.(SocketOrChannelConnectionImpl.java:274)
    at com.sun.corba.ee.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:130)
    at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:192)
    at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:184)
    at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:328)
    at org.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:112)
    at org.omg.CosNaming.NamingContextHelper.narrow(NamingContextHelper.java:69)
    at com.sun.enterprise.naming.SerialContext.narrowProvider(SerialContext.java:134)
    at com.sun.enterprise.naming.SerialContext.getCachedProvider(SerialContext.java:259)
    at com.sun.enterprise.naming.SerialContext.getRemoteProvider(SerialContext.java:204)
    at com.sun.enterprise.naming.SerialContext.getProvider(SerialContext.java:159)
    at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:409)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.werkii.latex.generator.Generator.main(Generator.java:344)
Caused by: java.lang.RuntimeException: java.net.ConnectException: Connection refused: connect
    at com.sun.enterprise.iiop.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:347)
    at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.(SocketOrChannelConnectionImpl.java:244)
    ... 14 more
Caused by: java.net.ConnectException: Connection refused: connect
    at sun.nio.ch.Net.connect(Native Method)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:532)
    at com.sun.corba.ee.impl.orbutil.ORBUtility.openSocketChannel(ORBUtility.java:105)
    at com.sun.enterprise.iiop.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:332)
    ... 15 more

没关系。现在(虽然我还在开发中)它会爆炸,但它会反复这样做并且永远不会达到 catch 子句(即使我正在捕获 Throwable) - 消息未打印。

那么在我的程序中如何处理lookup期间的连接错误呢?

最佳答案

由于您正在与 JVM 外部的 EJB 对话,因此您可能希望为初始上下文提供更多详细信息。对于 Glassfish,尝试

Properties props = new Properties();
props.setProperty(“java.naming.factory.initial”, “com.sun.enterprise.naming.SerialInitContextFactory”);
props.setProperty(“java.naming.factory.url.pkgs”, “com.sun.enterprise.naming”);
props.setProperty(“java.naming.factory.state”, “com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl”);
props.setProperty(“org.omg.CORBA.ORBInitialHost”, “127.0.0.1″);
props.setProperty(“org.omg.CORBA.ORBInitialPort”, “3700″);
InitialContext ctx = new InitialContext (props);

关于java - 捕获由 InitialContext.lookup 引起的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13155295/

相关文章:

javascript - 全局错误处理程序,获取错误详细信息

java - 使用 gradle 对带有嵌入式 glassfish 的 jar 进行容器测试失败

node.js - promise nodejs + postgresql 中的错误句柄

java - 如何让 Netbeans 相信我有 JMS?

java - 如何使用 spring 5 响应式(Reactive)存储库以“即发即忘”模式进行保存

java - 不偶尔发送证书

c# - WCF服务如何检测客户端断开连接

java - 使用 j2ee 和 netbeans 的 Glassfish v4 中的 CDI 错误

java - 无法从连接池获取/创建连接

java - 升级到 WAS 8 后 ServletWrapper 未捕获异常