2013-07-22 34 views
3

我们最近从JBoss 7.1.3-Final升级到7.2.0-Final。由于我们升级了其中一个使用Java CLI公共API的应用程序,因此每次通过CLI API终止连接时都会引发NullPointerException。在终止连接时JBoss AS 7.2 CLI API中的异常

下面是我们的代码建立和关闭连接到JBoss CLI:

private CommandContext ctx; 
private ModelControllerClient client; 

public JBossCLITool() { 
    try { 
     ctx = CommandContextFactory.getInstance().newCommandContext(); 
    } catch(CliInitializationException e) { 
     throw new IllegalStateException("Failed to initialize CLI context", e); 
    } 
} 

public void establishConnection() { 
    try { 
     ctx.connectController("localhost", 9999); 
     client = ctx.getModelControllerClient(); 
    } catch (CommandLineException e) { 
     LOG.debug(e.toString()); 
    } 
} 

public void terminateConnection() { 
    try { 
     if (!ctx.isTerminated()){ 
      ctx.terminateSession(); 
     } 
    } catch (Exception e) { 
     LOG.debug(e.toString()); 
    } 
} 
调用ctx.terminateSession()以下异常被抛出时

13:46:58,691 ERROR [org.jboss.remoting.handler-errors] (Remoting "cli-client" read-1) Close handler threw an exception: java.lang.NullPointerException 
at org.jboss.as.cli.impl.CommandContextImpl.handleClose(CommandContextImpl.java:1206) [org-jboss-as-jboss-as-cli-7.2.0.Final.jar:7.2.0.Final] 
at org.jboss.as.cli.impl.CLIModelControllerClient$4.handleClose(CLIModelControllerClient.java:156) [org-jboss-as-jboss-as-cli-7.2.0.Final.jar:7.2.0.Final] 
at org.jboss.as.cli.impl.CLIModelControllerClient$4.handleClose(CLIModelControllerClient.java:153) [org-jboss-as-jboss-as-cli-7.2.0.Final.jar:7.2.0.Final] 
at org.jboss.remoting3.spi.SpiUtils.safeHandleClose(SpiUtils.java:54) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.spi.AbstractHandleableCloseable$CloseHandlerTask.run(AbstractHandleableCloseable.java:501) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.spi.AbstractHandleableCloseable.runCloseTask(AbstractHandleableCloseable.java:406) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.spi.AbstractHandleableCloseable.closeComplete(AbstractHandleableCloseable.java:277) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.ConnectionImpl.access$000(ConnectionImpl.java:38) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.ConnectionImpl$1.handleClose(ConnectionImpl.java:55) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.ConnectionImpl$1.handleClose(ConnectionImpl.java:53) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.spi.SpiUtils.safeHandleClose(SpiUtils.java:54) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.spi.AbstractHandleableCloseable$CloseHandlerTask.run(AbstractHandleableCloseable.java:501) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.spi.AbstractHandleableCloseable.runCloseTask(AbstractHandleableCloseable.java:406) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.spi.AbstractHandleableCloseable.closeComplete(AbstractHandleableCloseable.java:277) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.remote.RemoteConnectionHandler.handleConnectionClose(RemoteConnectionHandler.java:117) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.remote.RemoteReadListener.handleEvent(RemoteReadListener.java:78) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.jboss.remoting3.remote.RemoteReadListener.handleEvent(RemoteReadListener.java:45) [org-jboss-remoting3-jboss-remoting-3.2.14.GA.jar:3.2.14.GA] 
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:72) [org-jboss-xnio-xnio-api-3.0.7.GA.jar:3.0.7.GA] 
at org.xnio.channels.TranslatingSuspendableChannel.handleReadable(TranslatingSuspendableChannel.java:189) [org-jboss-xnio-xnio-api-3.0.7.GA.jar:3.0.7.GA] 
at org.xnio.channels.TranslatingSuspendableChannel$1.handleEvent(TranslatingSuspendableChannel.java:103) [org-jboss-xnio-xnio-api-3.0.7.GA.jar:3.0.7.GA] 
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:72) [org-jboss-xnio-xnio-api-3.0.7.GA.jar:3.0.7.GA] 
at org.xnio.channels.TranslatingSuspendableChannel.handleReadable(TranslatingSuspendableChannel.java:189) [org-jboss-xnio-xnio-api-3.0.7.GA.jar:3.0.7.GA] 
at org.xnio.ssl.JsseConnectedSslStreamChannel.handleReadable(JsseConnectedSslStreamChannel.java:180) [org-jboss-xnio-xnio-api-3.0.7.GA.jar:3.0.7.GA] 
at org.xnio.channels.TranslatingSuspendableChannel$1.handleEvent(TranslatingSuspendableChannel.java:103) [org-jboss-xnio-xnio-api-3.0.7.GA.jar:3.0.7.GA] 
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:72) [org-jboss-xnio-xnio-api-3.0.7.GA.jar:3.0.7.GA] 
at org.xnio.nio.NioHandle.run(NioHandle.java:90) [org-jboss-xnio-xnio-nio-3.0.7.GA.jar:3.0.7.GA] 
at org.xnio.nio.WorkerThread.run(WorkerThread.java:187) [org-jboss-xnio-xnio-nio-3.0.7.GA.jar:3.0.7.GA] 

使用7.1.3 API和JBoss AS相同的代码工作正常。即使使用7.2,连接似乎也会被正确关闭(在调用terminateSession()之后,直到我建立一个新连接时,才可以进一步调用CLI)。

我在JBoss社区问过同样的问题,只是重复听到希望别人看到它。这里的链接:https://community.jboss.org/message/828608

回答

0

那么,我有同样的问题。

严肃的说,我没有详细分析。似乎它与组合DMR的​​执行有关 - 可能与需要重新加载的组合有关。

CommandContext类中的parsedCommandLine为null。这不是由关闭处理程序方法检查的。

作为第一种解决方法,我在关闭上下文之前添加了非侵入式命令。我说在我的close方法如下行:

// Workaround for a strange NPE by jboss-cli I do not completely understand... 
if (cmdCtx.getParsedCommandLine() == null 
    || cmdCtx.getParsedCommandLine().getFormat() == null) { 
    cmdCtx.handle("/:read-attribute(name=launch-type)"); 
} 
if (!cmdCtx.isTerminated()) { 
    cmdCtx.terminateSession(); 
} 

也许不是最好的解决方案,但是其在第一次尝试......

+0

为了更精确:getParsedCommandLine()的getFormat()为null。 –