JBoss 4.2.3 Servlet API 2.5添加了JSF 2.0 Hibernate 3.0支持

时间:2013-10-23 06:42:22

标签: jboss jsf-2.2

在使用Jboss 4.2.3在Redhat 6上部署我的项目时遇到了以下困难,所以我决定将它放在stackoverflow上以便它可以帮助其他人。如果有人可以建议一个好的标题,以便它可以很容易地被搜索,请

问:如何让Jboss 4.2.x忽略旧的JSF库并在项目库中使用它?

问:如何让Jboss扫描WAR文件扫描的特定路径?

问:如何将Jboss与IP地址绑定,而不是localhost?

问:Jboss将爆炸WAR文件放在哪里?

问:Hibernate-annotations与Jboss 4.2.3注释冲突并抛出以下异常。

java.lang.ClassCastException: org.hibernate.validator.event.ValidateEventListener cannot be cast to org.hibernate.event.PreInsertEventListener 

问:如何在JSF 2.0.x上投放JBoss 4.0.x?由于JSF 2.0支持至少Servlet 2.5 API而JBoss的Tomcat 5.x支持最多Servlet 2.4

问:如何更改动态Web项目的Servlet版本?

1 个答案:

答案 0 :(得分:0)

  

问:如何让Jboss扫描WAR文件扫描的特定路径?

  1. 打开$JBOSS_HOME/server/default/conf/jboss-service.xml
  2. 在以下标记中添加逗号之后的战争路径。假设我的战争被粘贴在/Oracle/my-web-apps

    <attribute name="URLs">
       deploy,/Oracle/my-web-apps <as many comma separated path for Jboss to scan war>
    </attribute>
    
  3.   

    问:如何将Jboss与IP地址绑定,而不是localhost?

    使用ip地址绑定JBOSS,以便您可以使用以下命令

    访问IP
    sh /Jboss/bin/run.sh -b 0.0.0.0
    
      问:Jboss放置了WAR文件?

    您的WAR将在/Jboss/server/default/temp/deploy展开,但请注意部署文件夹只有在您运行Jboss服务器时才会显示,因为当您停止Jboss服务器时,它会取消部署所有项目。

      问:如何让Jboss 4.2.x忽略旧的JSF库并在项目库中使用它?

    为此,您不需要在JBoss端更改任何内容,而是在您自己项目的web.xml中。放下context-param以及所有已完成

    <context-param>
       <param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
       <param-value>true</param-value>
    </context-param>
    

    链接:http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/

      

    问:Hibernate-annotations与Jboss 4.2.3注释冲突并抛出以下异常。

    转到/jboss-4.2.3.GA/server/default/lib并复制hibernate-annotations.jar并将其替换为hibernate-annotations jar。然后再次导出和部署项目。问题解决了。 : - )

      

    问:如何在JBoss 4.0.x上运行JSF 2.0.x?由于JSF 2.0至少支持Servlet 2.5 API,而JBoss的Tomcat 5.x最多可以支持Servlet 2.4。

    EL标签只有不同之处在于您没有使用Servlet 3.0的任何高级功能,如异步支持等。请按照以下步骤操作,您可以在Jboss 4.x上运行JSF 2.0

    链接到此问题的原始答案 - &gt; https://stackoverflow.com/a/5998625/185022

    JSF 2.0在很大程度上依赖于EL 2.1,它是Servlet 2.5的一部分,并且是一个重大变化,而不是作为Servlet 2.4的一部分的EL 2.0,但它不依赖于任何特定的Servlet 2.5特定API。 Servlet 2.4应该可以正常工作。所以理论上,如果你在/WEB-INF/lib中提供自己的EL 2.1 API和实现,你可以让JSF 2.0在Servlet 2.4上运行。我在Tomcat 5.5.33上做了一个快速测试,在/WEB-INF/lib中有以下库:

    • el-api.jar文件已从Tomcat 6.0.x
    • lib文件夹中复制
    • jboss-el.jar文件(实现EL 2.1并支持EL 2.2,如带参数的方法调用)
    • 来自Mojarra 2.0.x
    • jsf-api.jarjsf-impl.jar

    声明JBoss EL的Servlet 2.4 web.xml

    <context-param>     
        <param-name>com.sun.faces.expressionFactory</param-name>
        <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
    </context-param>
        <listener>
        <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
    </listener> 
    <context-param>
        <param-name>com.sun.faces.validateXML</param-name>
        <param-value>false</param-value>
    

    一个简单的JSF 2.0 Facelet(不是JSP!),带有一个带有<h:form>的简单<f:ajax>和一个简单@ViewScoped @ManagedBean的按钮,适用于Tomcat 5.5。 33。试试你的JBoss 4.0.5并彻底测试它。

    请注意,您需要至少JDK 1.5,而不是JDK 1.4。另请注意,由于存在Servlet 2.5特定的el-api.jar文件,因此您的应用程序对任何Servlet 3.0容器都不可移植。

      

    问:如何更改动态Web项目的Servlet版本?

    在Eclipse中右键单击一个项目并转到属性,然后单击Project Facet,如下图所示,如果它允许您更改那么它很好,否则有一个hack来执行它。 Project Faced

    如果Eclipse不允许您这样做,那么转到$ProjectWorkSpace/.settings/org.eclipse.wst.common.project.facet.core.xml并将facet="jst.web"的值更改为2.4,同时不要忘记更改Servlet 2.4的XML Schema在您的Web.xml中,如下所示

    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
                                 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">