命名上下文在空闲时间后停止工作 JBoss EAP 6.4.0
Naming Context stop working after idle time JBoss EAP 6.4.0
我正在使用 JBoss EAP 6.4 来部署 EJB ear 文件。一切正常,但如果 Swing 应用程序空闲一段时间(1 小时左右)然后尝试从 swing 客户端访问任何功能,客户端会崩溃并出现以下异常:
javax.naming.NamingException: Unable to invoke lookup, status=WAITING
at org.jboss.naming.remote.protocol.v1.Protocol.execute(Protocol.java:98)
at org.jboss.naming.remote.protocol.v1.RemoteNamingStoreV1.lookup(RemoteNamingStoreV1.java:95)
at org.jboss.naming.remote.client.HaRemoteNamingStore.operation(HaRemoteNamingStore.java:275)
at org.jboss.naming.remote.client.HaRemoteNamingStore.namingOperation(HaRemoteNamingStore.java:132)
at org.jboss.naming.remote.client.HaRemoteNamingStore.lookup(HaRemoteNamingStore.java:271)
at org.jboss.naming.remote.client.RemoteContext.lookupInternal(RemoteContext.java:104)
at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:93)
at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:146)
at javax.naming.InitialContext.lookup(Unknown Source)
它无法在客户端解析带有缓存上下文的 jndi。
使用以下属性在客户端中创建的上下文:
table.put("remote.connection.one.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
table.put("remote.connection.one.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS", "JBOSS-LOCAL-USER");
table.put("remote.clusters", "ejb");
table.put("remote.cluster.ejb.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
table.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
table.put("jboss.naming.client.ejb.context", true);
table.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
table.put( Context.SECURITY_PRINCIPAL, System.getProperty( Context.SECURITY_PRINCIPAL));
table.put( Context.SECURITY_CREDENTIALS, System.getProperty( Context.SECURITY_CREDENTIALS));
table.put("jboss.naming.client.remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED","true");
table.put("jboss.naming.client.connect.options.org.xnio.Options.SSL_STARTTLS","true");
table.put("jboss.naming.client.connect.timeout", "3000000");
table.put( Context.PROVIDER_URL,PROVIDER_URL);
context = new javax.naming.InitialContext( table);
请帮我理解为什么在空闲时间后无法查找上下文?
我终于找到了解决办法。在 JBoss EAP 6.4 中,使用旧的 JNDI 方法会产生问题并且不支持 JBoss 功能,例如 HeartBeat_Interval 等
在 Jboss 中查找的最佳方法是使用 EJB 客户端查找方法。这解决了与崩溃等相关的所有问题。
https://docs.jboss.org/author/display/AS71/Remote+EJB+invocations+via+JNDI+-+EJB+client+API+or+remote-naming+project
我正在使用 JBoss EAP 6.4 来部署 EJB ear 文件。一切正常,但如果 Swing 应用程序空闲一段时间(1 小时左右)然后尝试从 swing 客户端访问任何功能,客户端会崩溃并出现以下异常:
javax.naming.NamingException: Unable to invoke lookup, status=WAITING
at org.jboss.naming.remote.protocol.v1.Protocol.execute(Protocol.java:98)
at org.jboss.naming.remote.protocol.v1.RemoteNamingStoreV1.lookup(RemoteNamingStoreV1.java:95)
at org.jboss.naming.remote.client.HaRemoteNamingStore.operation(HaRemoteNamingStore.java:275)
at org.jboss.naming.remote.client.HaRemoteNamingStore.namingOperation(HaRemoteNamingStore.java:132)
at org.jboss.naming.remote.client.HaRemoteNamingStore.lookup(HaRemoteNamingStore.java:271)
at org.jboss.naming.remote.client.RemoteContext.lookupInternal(RemoteContext.java:104)
at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:93)
at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:146)
at javax.naming.InitialContext.lookup(Unknown Source)
它无法在客户端解析带有缓存上下文的 jndi。
使用以下属性在客户端中创建的上下文:
table.put("remote.connection.one.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
table.put("remote.connection.one.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS", "JBOSS-LOCAL-USER");
table.put("remote.clusters", "ejb");
table.put("remote.cluster.ejb.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
table.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
table.put("jboss.naming.client.ejb.context", true);
table.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");
table.put( Context.SECURITY_PRINCIPAL, System.getProperty( Context.SECURITY_PRINCIPAL));
table.put( Context.SECURITY_CREDENTIALS, System.getProperty( Context.SECURITY_CREDENTIALS));
table.put("jboss.naming.client.remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED","true");
table.put("jboss.naming.client.connect.options.org.xnio.Options.SSL_STARTTLS","true");
table.put("jboss.naming.client.connect.timeout", "3000000");
table.put( Context.PROVIDER_URL,PROVIDER_URL);
context = new javax.naming.InitialContext( table);
请帮我理解为什么在空闲时间后无法查找上下文?
我终于找到了解决办法。在 JBoss EAP 6.4 中,使用旧的 JNDI 方法会产生问题并且不支持 JBoss 功能,例如 HeartBeat_Interval 等
在 Jboss 中查找的最佳方法是使用 EJB 客户端查找方法。这解决了与崩溃等相关的所有问题。 https://docs.jboss.org/author/display/AS71/Remote+EJB+invocations+via+JNDI+-+EJB+client+API+or+remote-naming+project