我的JBoss使用笔记
一、JBOSS安装
1)
直接解压到无空格的目录路径下即可。
例如:
D:\C\Java\jboss-5.0.1.GA\
JBOSS的文件夹说明:
\bin 不解释
\server 主目录,下面分成default、all、minimal等几个“用户”
常用的是:\server\default\
该目录下,发布项目的目录是:\server\default\deploy\
2)
配置WINDOWS环境变量:
新建JBOSS_HOME,内容为jboss的安装路径,例如D:\C\Java\jboss-5.0.1.GA
然后将:%JBOSS_HOME%/bin 添加到Path变量中。
3)
验证安装是否成功:
运行\bin\run.bat即可启动。默认是8080端口,输入http://localhost:8080即可出现JBOSS的页面
关闭时,不要直接点击shutdown.bat,应该在cmd窗口运行如下指令:
进入\bin目录,输入shutdown -S
4)安装Eclipse的JBOSS插件
用JBoss Tools,地址如下:
和其他Eclipse插件的安装方法一样,有安装说明。
5)在Eclipse下new一个JBOSS Application Server,然后在Server名称上双击,打开设置。
二、JBOSS配置
1)修改HTTP端口号
例如要修改default用户的端口号:
找到\server\default\deploy\jbossweb.sar\server.xml修改即可。
2)修改JVM参数
找到\bin\run.bat
从末尾开始找,找到如下:
set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1024m -XX:MaxPermSize=256m
三、问题解决
1)启动后报错: invalid console appender config detected,Spring Bean无法初始化。
log4j问题,
在\server\default\conf\jboss-service.xml找到Log4jService,并增加<attribute name="CatchSystemOut">false</attribute>,如下:
<mbean code="org.jboss.logging.Log4jService" name="jboss.system:type=Log4jService,service=Logging"> <attribute name="ConfigurationURL">resource:log4j.xml</attribute> <attribute name="CatchSystemOut">false</attribute> <attribute name="Log4jQuietMode">true</attribute> </mbean>
注意,该设置并不会关闭日志的打印。
2)java.lang.RuntimeException: mapped-name is required for MethodCacheAfterAdvi
我项目的web.xml里面有如下一段:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>zollty</param-value>
</context-param>
删了貌似就行了。不过未测试,不知是不要这个原因,仅是猜测。
3)Linux命令行启动后,关闭窗口不停止服务器的方法
执行: nohup ./run.sh
Linux下JBOSS的配置与启动
1、安装JDK
(略),可以不设置环境变量,直接解压出目录即可。
2、给JBOSS指定JDK_HOME
在run.conf中修改:
#
# Specify the location of the Java home directory. If set then $JAVA will
# be defined to $JAVA_HOME/bin/java, else $JAVA will be "java".
#
JAVA_HOME="/opt/java/jdk1.6.0_45"
#
# Specify the exact Java VM executable to use.
#
#JAVA=""
3、给JBOSS指定JBOSS_HOME
修改/bin/run.sh文件,在前面加上如下两行
export JBOSS_HOME=/opt/app/jboss-5.1.0.GA
export PATH=$PATH:$JBOSS_HOME/bin
### $Id: run.sh 88978 2009-05-16 18:18:45Z alex.loubyansky@jboss.com $ ###
export JBOSS_HOME=/opt/app/jboss-5.1.0.GA
export PATH=$PATH:$JBOSS_HOME/bin
DIRNAME=`dirname $0`
PROGNAME=`basename $0`
GREP="grep"
JBOSS技术原理和常见问题解决方案
1、classLoader 类的加载问题
JBOSS的类加载策略 和 Tomcat是不一样的,所以可能导致 Tomcat下可以运行的程序,到JBOSS下面运行报错。
以Servlet init方法为例:
有以下代码:
ClassLoader cl0 = ClassLoader.getSystemClassLoader();
// 为 sun.misc.Launcher$AppClassLoader
System.out.println("00"+cl0);
System.out.println("=====================================");
ClassLoader cl1 = this.getClass().getClassLoader(); // 为Web Server 定义的 ClassLoader,用于加载 class 等资源
System.out.println("11"+cl1);
System.out.println("=====================================");
ClassLoader cl2 = Thread.currentThread().getContextClassLoader(); // 为Web Server 定义的 ClassLoader,用于启动Servlet服务
System.out.println("22"+cl2);
System.out.println("=====================================");
ClassLoader cl3 = Thread.currentThread().getClass().getClassLoader();
// 为 null
System.out.println("33"+cl3);
System.out.println("=====================================");
得到的classLoader,在JBOSS下面为
00sun.misc.Launcher$AppClassLoader@182f0db
=====================================
11BaseClassLoader@1a7b1af{vfszip:/D:/C/Java/jboss-5.0.1.GA/server/default/deploy/servlet-01EAR.ear/servlet-01.war/} // 全称为 org.jboss.classloader.spi.base.BaseClassLoader
=====================================
22org.jboss.web.tomcat.service.WebCtxLoader$ENCLoader@1ed7aba // 经测试,WebCtxLoader 为 BaseClassLoader 的子类
=====================================
11BaseClassLoader@1a7b1af{vfszip:/D:/C/Java/jboss-5.0.1.GA/server/default/deploy/servlet-01EAR.ear/servlet-01.war/} // 全称为 org.jboss.classloader.spi.base.BaseClassLoader
=====================================
22org.jboss.web.tomcat.service.WebCtxLoader$ENCLoader@1ed7aba // 经测试,WebCtxLoader 为 BaseClassLoader 的子类
=====================================
33null
=====================================
在Tomcat下面为:
00sun.misc.Launcher$AppClassLoader@ad3ba4
=====================================
11WebappClassLoader
context: /servlet-01
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@182bcde
=====================================
22WebappClassLoader
context: /servlet-01
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@182bcde
=====================================
33null
=====================================
=====================================
11WebappClassLoader
context: /servlet-01
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@182bcde
=====================================
22WebappClassLoader
context: /servlet-01
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@182bcde
=====================================
33null
=====================================