Java 当异常传播到ServerImpl.doStart()时,如何在容器初始化期间快速失败JBoss(即System.exit()) 具体地,考虑JBOST在代码> Service EnBeBeAsvest[/Cuff>(RMI)初始化]期间在1099打开一个套接字的情况,但是端口1099已经被占用。p>

Java 当异常传播到ServerImpl.doStart()时,如何在容器初始化期间快速失败JBoss(即System.exit()) 具体地,考虑JBOST在代码> Service EnBeBeAsvest[/Cuff>(RMI)初始化]期间在1099打开一个套接字的情况,但是端口1099已经被占用。p>,java,jboss,Java,Jboss,当前的行为是异常为system.err'd,JBoss继续初始化。稍后,在应用程序运行时,jndi查找会导致执行线程挂起——这并不好,而且比失败的容器初始化更难诊断 所以问题是,如何在初始化异常时快速失败JBoss 以下是跟踪: java.net.BindException: Address already in use: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.PlainSocke

当前的行为是异常为system.err'd,JBoss继续初始化。稍后,在应用程序运行时,jndi查找会导致执行线程挂起——这并不好,而且比失败的容器初始化更难诊断

所以问题是,如何在初始化异常时快速失败JBoss

以下是跟踪:

java.net.BindException: Address already in use: JVM_Bind
 at java.net.PlainSocketImpl.socketBind(Native Method)
 at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
 at java.net.ServerSocket.bind(ServerSocket.java:319)
 at java.net.ServerSocket.<init>(ServerSocket.java:185)
 at javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:170)
 at org.jnp.server.Main.initBootstrapListener(Main.java:331)
 at org.jnp.server.Main.start(Main.java:282)
 at org.jboss.naming.NamingService.startService(NamingService.java:236)
 at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
 at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
 at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
 at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
 at $Proxy0.start(Unknown Source)
 at org.jboss.system.ServiceController.start(ServiceController.java:417)
 at org.jboss.system.ServiceController.start(ServiceController.java:435)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
 at $Proxy4.start(Unknown Source)
 at org.jboss.deployment.SARDeployer.start(SARDeployer.java:302)
 at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1007)
 at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:808)
 at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:771)
 at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:755)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
 at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
 at $Proxy5.deploy(Unknown Source)
 at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)
 at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)
 at org.jboss.Main.boot(Main.java:200)
 at org.jboss.Main$1.run(Main.java:464)
java.net.BindException:地址已在使用中:JVM\u Bind
位于java.net.PlainSocketImpl.socketBind(本机方法)
位于java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
位于java.net.ServerSocket.bind(ServerSocket.java:319)
位于java.net.ServerSocket。(ServerSocket.java:185)
在javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:170)上
位于org.jnp.server.Main.initBootstrapListener(Main.java:331)
位于org.jnp.server.Main.start(Main.java:282)
位于org.jboss.naming.NamingService.startService(NamingService.java:236)
位于org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
位于org.jboss.system.servicembansupport.jbossInternalLifecycle(servicembansupport.java:245)
位于sun.reflect.GeneratedMethodAccessor3.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
位于org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
位于org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
位于org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
位于org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
位于org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
位于org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
位于org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
位于org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
在$Proxy0.start(未知源)
位于org.jboss.system.ServiceController.start(ServiceController.java:417)
位于org.jboss.system.ServiceController.start(ServiceController.java:435)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
位于org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
位于org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
位于org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
位于org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
在org.jboss.mx.util.mbeanproxyet.invoke(mbeanproxyet.java:210)上
在$Proxy4.start(未知源)
位于org.jboss.deployment.SARDeployer.start(SARDeployer.java:302)
位于org.jboss.deployment.MainDeployer.start(MainDeployer.java:1007)
位于org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:808)
位于org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:771)
位于org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:755)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
位于org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
位于org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
位于org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
位于org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
位于org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
位于org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
位于org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
在org.jboss.mx.util.mbeanproxyet.invoke(mbeanproxyet.java:210)上
位于$Proxy5.deploy(未知源)
位于org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)
位于org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)
位于org.jboss.Main.boot(Main.java:200)
位于org.jboss.Main$1.run(Main.java:464)

据我所知,你不能,但你是对的,这样做很烦人


如果您在*nix上运行这个程序,我的建议是编写一个bash脚本,提前检查端口可用性,并且只有在可用的情况下才启动JBoss。也许你可以在windows上用cygwin做一些类似的事情。

据我所知,你做不到,但你是对的,当它这样做时很烦人


如果您在*nix上运行这个程序,我的建议是编写一个bash脚本,提前检查端口可用性,并且只有在可用的情况下才启动JBoss。也许你可以在windows上用cygwin做一些类似的事情。

我也同意jboss可能会失败,就像ApacheHTTPD一样

预检查脚本可能检测不到在检查之后、JBoss抓取端口之前,另一个进程抓取了该端口。也许这是一种罕见的情况,但也有可能,而且很难发现

由于JBoss不提供在无法打开端口时失败,因此我建议监视日志记录。将log4j配置为通过邮件| SNMP |发出警报可能会很有帮助,无论发生什么情况,并且物业管理可以直接启动