我的JBoss使用笔记
2014年02月09日

一、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)在Eclipsenew一个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 的子类

===================================== 
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
=====================================