在做基于EJB3.0开发的应用中,如果单独启用Jboss作为调试服务器去调试Web应用是一个非常痛苦的等待过程,因为在Jboss中每一次Web应用的发布和启动都会消耗不少的时间。
相对来说,Tomcat是一种这种轻量级Web调试服务器,启动和调试都非常迅速。
如果需要同时启动Tomcat和Jboss,除了Web容器的端口冲突问题需要解决之外,还需要注意配置一下Tomcat的调试环境。否则,在获取运行getInitialContext获取EJB Stub的时候,会抛出异常:
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
出现这种情况,我们需要將%JBOSS_HOME%\client目錄下的jbossall-client.jar拷贝至%TOMCAT_HOME%\lib目錄下。
如果你不想更改Tomcat的配置環境,可以在Eclipse中的Tomcat Launch Configuration界面上,加入这个jbossall_client.jar文件。
建议不要直接将这个jar文件拷贝至web应用的lib目录下,这样造成不必要的文件负担。实际生产环境下,如果要做到Tomcat和Jboss分离运行,也要注意这个jbossall_client.jar文件,將其拷贝至Tomcat的lib目录。