`
rocye
  • 浏览: 118788 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

初识JBoss5.1相关配置

    博客分类:
  • J2EE
阅读更多

       从事J2EE开发已经有些年了,一直在J2EE轻量级企业架构上奔跑。Struts+Spring+Ibatis/Hibernate 的组合确实有相当强的威力,随着这一组合在实际项目中运用的次数越来越多,不停的对它们进行优化后,发现已经到了需要更进一步的时候,Apache+Tomcat的强大勿用置疑,但毕竟它们的容量都偏“轻量级”。为此我走进了JBoss+EJB,本文将对初识JBoss5.1过程中所碰到的问题及解决的办法做一个记录。

      基本的什么下载安装,需要的JDK环境这里不做说明,你懂的!本人下载的是 jboss-5.1.0.GA 。新建一个Web项目(MyEclipse6.5)本人命名为 JsfTest 。习惯 tomcat 下配置虚拟目录的做法,于是找到两种配置方法(以下是来源于万能的baidu):

1. 编辑  jboss-5.1.0.GA\server\default\deploy\jbossweb.sar\server.xml 文件,在</Host>之前增加:

<Context path="/jsft" docBase="D:/projects/JsfTest/web" debug="0" crosscontext="true" reloadable="false"></Context>

相信大家都知道,这样配置后是不用在 Manage Deployments 中进行发布了。启动 Jboss,花掉了启动同等空项目下tomcat所需时间的N倍后(只能说Jboss比tomcat容积大,加载的内容多,我是这样接受的),我碰到了第一个错误如下:

 

10:25:06,734 ERROR [AbstractKernelController] Error installing to Start: name=WebServer state=Create
org.jboss.xb.binding.JBossXBException: Failed to parse source: Context cannot appear in this position. Expected content of Host is unordered_sequence: Listener* Valve* Alias* Realm? attributes?
 at org.jboss.xb.binding.parser.sax.SaxJBossXBParser.parse(SaxJBossXBParser.java:203)
 at org.jboss.xb.binding.parser.sax.SaxJBossXBParser.parse(SaxJBossXBParser.java:183)
 at org.jboss.xb.binding.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:133)
 at org.jboss.web.tomcat.service.deployers.TomcatService.startService(TomcatService.java:167)
 at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:376)
 at org.jboss.system.ServiceMBeanSupport.pojoStart(ServiceMBeanSupport.java:216)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59)

....

按提示内容是说 unordered_sequence 表示配置文件结点 顺序不对,或少了结点,最终这个问题试过很多次没有解决。

 

2. 如何在JBOSS5.1下建立虚拟路径:1:找到JBOSS的 \jboss-5.1.0.GA\server\default\conf\bootstrap目录下,有个叫profile.xml.在里边找到
<bean name="BootstrapProfileFactory" class="org.jboss.system.server.profileservice.repository.StaticProfileFactory">
      <property name="bindingsURI">${jboss.server.home.url}conf/bindingservice.beans</property>
      <property name="bootstrapURI">${jboss.server.home.url}conf/jboss-service.xml</property>
<property name="deployersURI">${jboss.server.home.url}deployers</property>
<property name="applicationURIs">
<list elementClass="java.net.URI">
<value>${jboss.server.home.url}deploy</value>
<value>file://D:/GBFILE</value>
</list>
</property>
<property name="attachmentStoreRoot">${jboss.server.data.dir}/attachments</property>
<property name="profileFactory"><inject bean="ProfileFactory" /></property>
</bean>

其中:<value>${jboss.server.home.url}deploy</value>
     <value>file://D:/GBFILE</value>
file://D:/GBFILE就是虚拟路径.但是该文件夹下面的文件夹必须以.war命名.
这样在远程访问的时候就可以根据http://ip:port/GBFILE下面的文件夹名称(不包含.war)就可以直接访问了.

 

第二种方法很显然,不是我想要的,因为本人一般为项目WebRoot更名为web,为了直接指向此目录而要加.war,肯定不会这样做。如果不加会报这样的错(我是这样加的<value>file://D:/projects/JsfTest/web</value>):

 

10:37:23,250 ERROR [StandardContext] Error starting static Resources
java.lang.IllegalArgumentException: Document base D:\projects\JsfTest\web\WEB-INF\web.xml does not exist or is not a readable directory
 at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:148)
 at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4021)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4188)
 at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310)
 at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
 at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
 at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
 at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
 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:668)
 at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
 at $Proxy38.start(Unknown Source)
......

 

显然这个路径是存在的,但是它就是报 does not exist or is not a readable directory。

 

OK,以上两种方式我都没找到我想要的结果,没办法,打算从基本做法进行发布,于是打开 Manage Deployments 进行发布,将这个空的项目发布到 JBoss 的 deploy 目录。我想这样不会有问题了吧,这可是最基本的做法。启动JBoss:

 

10:42:01,703 ERROR [[/JsfTest]] Exception sending context initialized event to listener instance of class org.jboss.web.jsf.integration.config.JBossJSFConfigureListener
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! null
 at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:213)
 at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:196)
 at org.jboss.web.jsf.integration.config.JBossJSFConfigureListener.contextInitialized(JBossJSFConfigureListener.java:60)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4393)
 at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310)
 at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
 at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
 at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
 at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
 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:668)
 at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
 at $Proxy38.start(Unknown Source)

....

 

到这里就纳闷了,这也不行,OK,再baidu一下,得到一个关键字 jboss-web.xml  ,提到要在项目 WEB-INF 下面加入这样一个文件,在jboss自带发布的项目中也确实都能找到这个配置文件,于是我复制一个过来做了如下配置:

 

<!DOCTYPE jboss-web PUBLIC
   "-//JBoss//DTD Web Application 5.0//EN"
   "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">
  
<jboss-web>
   <class-loading java2ClassLoadingCompliance="true">
        <loader-repository>
            com.asd:archive=JsfTest
            <loader-repository-config>java2ParentDelegation=true</loader-repository-config>
        </loader-repository>
    </class-loading>
</jboss-web>

 

启动成功: 正常访问 http://localhost:8080/JsfTest 就是那个最基本的页面了 This is my JSP page.
OK,算是第一步走通了,接着这个走,Baidu 一下这个关键字 JBoss 设置 根目录:在上面的 jboss-web.xml  中加一句 <context-root>/</context-root> 即:

 

<jboss-web>
   <class-loading java2ClassLoadingCompliance="true">
        <loader-repository>
            com.asd:archive=JsfTest
            <loader-repository-config>java2ParentDelegation=true</loader-repository-config>
        </loader-repository>
    </class-loading>
    <context-root>/</context-root>
</jboss-web>

 

再次启动JBoss(注:我的所有启动都是通过MyEclipse插件来完成的) 新的错误来了,步步维坚啊:

 

10:56:35,734 ERROR [AbstractKernelController] Error installing to Start: name=jboss.web.deployment:war=/ROOT state=Create mode=Manual requiredState=Installed
org.jboss.deployers.spi.DeploymentException: Web mapping already exists for deployment URL file:/E:/MyWebservers/jboss-5.1.0.GA/server/default/deploy/ROOT.war/
 at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:187)
 at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
 at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
 at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
 at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
 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:668)
 at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
 at $Proxy38.start(Unknown Source)

...

 

看得出好像是与 ROOT.war冲突了,异然删除这个文件夹,再次启动, 成功, 这样我就能访问我想要的地址了吧:

http://localhost:8080  OK 再次得到 This is my JSP page.

 

到这里,应该只能说勉强得到了我想要的结果,实质上还是没有达到我的意愿,对于网上普遍说的解决虚拟目录的配置方法,我想肯定也有依据可寻,只是暂时没找到关键错误点,下回再次分解我想要的配置方法,解决报错。

 

 

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics