众所周知,Tomcat、Resin是servlet的容器,反应迅速,启动时间快,配置简单(Resin反应应该更迅速一些),但如果用到EJB工程的的话,它们就不能胜任了,比如seam工程就不能完整的在Tomcat中运行,这个时候就必须借助于一个鼎鼎大名的JBoss(当然Websphere、Weblogic也可以),但用了一段时间的JBoss,真的想说爱你不容易,启动一下竟然要1分多钟,给开发与调试带来极大的不便,而且配置文件一大堆,真是个重量级的Web应用服务器,但目前用的这个seam工程又不能在Tomcat中运行,程序员还是真的伤不起。
接老大的指令,专门花1天的时间来研究下如何将seam工程移入tomcat,翻阅相关在资料,完全无头绪,老大亲自上阵又花了1天时间,发现还是有法可循,国内关于seam的资料还真远远不及hibernate、spring。
1.首先需在soouceforce上下载一个JBoss-embedded的库,包含JBoss的核心类库。下载地址为
http://sourceforge.net/projects/jboss/files/Embedded%20JBoss/Embedded%20JBoss%20Beta%203/
2.将嵌入式JBoss的 bootstrap 和lib目录下的所有文件和目录,除jndi.properties 文件之外,都拷贝到Tomcat的lib目录下。从Tomcat lib目录删除annotations-api.jar 文件。
3.增加嵌入式JBoss侦听器EmbeddedJBossBootstrapListener到Tomcat的conf/server.xml,它必须出现在该文件中所有其他侦听器的后面。
<Listener className="org.jboss.embedded.tomcat.EmbeddedJBossBootstrapListener" />
4.增加WebinfScanner 侦听器到conf/context.xml
<Listener className="org.jboss.embedded.tomcat.WebinfScanner" />
5.更改Tomcat的bin/catalina.bat,在文件顶部注释行下增加一个新行
set JAVA_OPTS=%JAVA_OPTS% -Dsun.lang.ClassLoader.allowArraySyntax=true
然后即OK了。据本人测试,将此tomcat在eclipse下运行seam工程的话还是会有问题,解决办法:在eclipse面板中打开该tomcat选项,在启动参数加上-Dsun.lang.ClassLoader.allowArraySyntax=true。
还会出现servlet不可用的问题,解决办法:seam工程的src/hot目录的classpath默认会在WEB-INF/dev下,这样servlet经常会提示找不到类,将src/hot目录的classpath设置为WEB-INF/classes即OK