您的位置:首页 > 理论基础 > 计算机网络

JBOSS相关 如何设置JBOSS通过IP网络访问,如何自动启动/关闭JBoss

2013-12-07 15:58 746 查看
这篇文章挺好的,转载自http://blog.csdn.net/hemin1003/article/details/7062876

一、启动JBoss:

启动的话,直接运行run.bat文件就可以了!至于启动这点,本人建议把JAVA_HOME设置在run.bat文件中,如打开run.bat文件,在开始行写入set JAVA_HOME=JDK的安装目录,呵呵.

补充一点知识:JBOSS 4.2以上版本服务启动,如果不加任何参数的话,只能监听127.0.0.1,就是说只能用127.0.0.1或者localhost访问,用本机的对外 地址访问不了,也就是同一网络内别的机子没有办法访问你机器上的服务器。除非你用参数-b ip地址 来绑定监听的地址才可以。这和以前版本的JBOSS不一样,以前版本的不加任何参数是监听本机所有的IP地址,现在必须使用参数-b 0.0.0.0才可以监听全部地址。

如:启动JBOSS的时候输入:run -b xxx.xxx.xxx.xxx,其中xxx.xxx.xxx.xxx为本机的IP地址。

或者使用另外一种方式:JBOSS_HOME\server\default\deploy\jboss-web.deployer \server.xml 把Connector (修改两个地方,一个是http中的,一个AJP中的)下面的address 改成对应的 IP 或者 0.0.0.0 就可以用IP访问了。(用0.0.0.0代表本机IP地址)

二、关闭JBoss:

首先,默认不改任何配置,如果直接运行shutdown.bat文件是不能停止JBoss服务的,必须要带选项-操作....(usage: shutdown [options] <operation>),以下是JBoss shutdown.bat常用的参数与操作(其实进入JBOSS_HOME\bin\目录运行shutdown.bat就可以得到这样信息了):

options:

-h, --help Show this help message (default)

-D<name>[=<value>] Set a system property

-- Stop processing options

-s, --server=<url> Specify the JNDI URL of the remote server

-n, --serverName=<url> Specify the JMX name of the ServerImpl

-a, --adapter=<name> Specify JNDI name of the MBeanServerConnection to use

-u, --user=<name> Specify the username for authentication

-p, --password=<name> Specify the password for authentication

operations:

-S, --shutdown Shutdown the server

-e, --exit=<code> Force the VM to exit with a status code

-H, --halt=<code> Force the VM to halt with a status code

从上面这些参数可以知道,用-S(大写)可以停止服务,所以我就运行了如下命令:

JBOSS_HOME\bin\shutdown.bat -S

谁知道报了一大堆错误信息,如下:

Exception
in thread "main" javax.naming.CommunicationException: Could not obtain
connection to any of these urls: localhost:1099 [Root exception is
javax.naming

.CommunicationException: Failed to connect to server localhost:1099
[Root exception is javax.naming.ServiceUnavailableException: Failed to
connect to server loc

alhost:1099 [Root exception is java.net.ConnectException: Connection refused: connect]]]

at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1562)

at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634)

at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)

at javax.naming.InitialContext.lookup(InitialContext.java:392)

at org.jboss.Shutdown.main(Shutdown.java:214)

Caused by: javax.naming.CommunicationException: Failed to connect to server loca

lhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed t

o connect to server localhost:1099 [Root exception is java.net.ConnectException:

Connection refused: connect]]

at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:274)

at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1533)

... 4 more

Caused by: javax.naming.ServiceUnavailableException: Failed to connect to server

localhost:1099 [Root exception is java.net.ConnectException: Connection refused

: connect]

at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:248)

... 5 more

Caused by: java.net.ConnectException: Connection refused: connect

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)

at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

at java.net.Socket.connect(Socket.java:519)

at java.net.Socket.connect(Socket.java:469)

at java.net.Socket.<init>(Socket.java:366)

at java.net.Socket.<init>(Socket.java:267)

at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory

.java:84)

at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory

.java:77)

at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:244)

... 5 more

从上面信息得知,连接JBOSS命名服务不可达,也就是JNDI连接不上,换句话说,是要通过停止JNDI端口来停止JBOSS服务!

好吧,那就去看下服务器配置的JNDI端口是什么(默认端口为1099),找到JBOSS_HOME\server\default\conf\jboss-service.xml,找到

<mbean code="org.jboss.naming.NamingService"

name="jboss:service=Naming"

xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">

<!-- The call by value mode. true if all lookups are unmarshalled using

the caller's TCL, false if in VM lookups return the value by reference.

-->

<attribute name="CallByValue">false</attribute>

<!-- The listening port for the bootstrap JNP service. Set this to -1

to run the NamingService without the JNP invoker listening port.

-->

<attribute name="Port">2099</attribute>

<!-- The bootstrap JNP server bind address. This also sets the default

RMI service bind address. Empty == all addresses

-->

原来公司以前的人把端口改成2099了,好了,现在再来运行shutdown.bat来关闭jboss(这时候-s是小写),运行如下命令:

shutdown.bat -s localhost:2099,会报如下的错误,

Exception
in thread "main" java.lang.SecurityException: Failed to authenticate
principal=null, securityDomain=jmx-console at
org.jboss.jmx.connector.invoker.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:97)

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.invocation.jrmp.server.JRMPProxyFactory.invoke(JRMPProxyFac

tory.java:180)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.

java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces

sorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:585)

at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatch

er.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.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke

(JRMPInvoker.java:818)

at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:

419)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.

java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces

sorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:585)

at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)

at sun.rmi.transport.Transport$1.run(Transport.java:153)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.Transport.serviceCall(Transport.java:149)

at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:4

60)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport

.java:701)

at java.lang.Thread.run(Thread.java:595)

at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Stream

RemoteCall.java:247)

at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:

223)

at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)

at org.jboss.invocation.jrmp.server.JRMPInvoker_Stub.invoke(Unknown Sour

ce) at org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JRMPInvo

kerProxy.java:133) at org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerIntercep

tor.java:365) at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.jav

a:197) at org.jboss.jmx.connector.invoker.client.InvokerAdaptorClientIntercepto

r.invoke(InvokerAdaptorClientInterceptor.java:66) at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:7

0) at org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodIntercepto

r.java:74)

at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)

at $Proxy0.invoke(Unknown Source)

at org.jboss.Shutdown$ServerProxyHandler.invoke(Shutdown.java:266)

at $Proxy1.shutdown(Unknown Source)

at org.jboss.Shutdown.main(Shutdown.java:237)

哇唔,报错了,真好,只有在错误中才能成长,呵呵!

好了,根据错误信息,可以定位到是由于要设置jmx-console的用户名和密码来通过验证才能关闭的,

出现这个问题的原因是:

是因为在deploy目录下的jmx-invoker-service.xml中有下面这么一句:

<!-- Interceptor to require authenticated users -->

<interceptor code="org.jboss.jmx.connector.invoker.AuthenticationInterceptor"

securityDomain="java:/jaas/jmx-console"/>

这个拦截器在jboss4.x中默认是关闭的(我公司配置是开启了),也
就是说默认不需要设置jmx-console的用户名和密码,然后用shutdown.bat -s localhost:1099
关闭 ,嘿嘿! 当然,如果想安全管理JBoss,可以释放这个拦截器, 并且用shutdown.bat -s locahost:1099 -u
admin -p admin才能关闭(-u -p
后面的就是jmx-console的用户名和密码)

那在哪里设置jmx-console-users用户和密码呢?

找到JBOSS_HOME\server\default\conf\props\jmx-console-users.properties,添加一个用户名和密码,如:admin=admin

这样后,重启JBOSS服务器后,就可以使用shutdown.bat -s localhost:2099 -u admin
-p admin关闭服务器了,或者加入window系统计划任务中让它自动定时启动与关闭了...或者可以使用这样的命令(shutdown.bat
-s jnp://localhost:2099 -u admin -p
admin等同于上面所有的关闭命令操作),以上所有的操作同样适用于unix/linux环境!

但是还有一个小问题没有完善,什么问题呢?就是自动启动关闭时,dos窗口始终不能关闭,提示“按任意键继续”,嘿嘿,这个问题好办!

那怎么解决呢?更改两个地方,找到JBOSS_HOME\bin\run.bat和shutdown.bat两个文件,打开后,找到if "%NOPAUSE%" == "" pause这样一行代码,把它注释掉或直接删除,这样窗口就关闭了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: