我目前正在将一个主要使用Seam2、Hibernate和JSF 1.2的较大项目从JBoss4.2.x迁移到jboss7.1,到目前为止,我已经解决了大多数问题。应用程序服务器启动得很好,部署我的EAR项目时没有出现任何错误。JSF 1.2和Seam 2的接缝才能正常启动。
然而,一旦我尝试访问第一个页面(即context/login.seam),浏览器就会加载我的jsp源,而不是渲染的内容。到目前为止,我还不知道该怎么办。是否已经为使用此环境更改了web.xml、faces-config.xml或任何相关的设置文件?
简要总结一下,到目前为止,我对我的项目进行了以下更新:
WAR 中web.xml中的一些行
<context-param>
<param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
<param-value>Mojarra-1.2</param-value>
</context-param>
<listener>
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>
<filter>
<filter-name>Seam Filter</filter-name>
<filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Seam Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Seam Resource Servlet</servlet-name>
<servlet-class>
org.jboss.seam.servlet.SeamResourceServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Seam Resource Servlet</servlet-name>
<url-pattern>/seam/resource/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.seam</url-pattern>
</servlet-mapping>
EAR 中的jboss-deployment-structure.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<exclusions>
<module name="javax.faces.api" slot="main" />
<module name="com.sun.jsf-impl" slot="main" />
</exclusions>
<dependencies>
<!-- Wir brauchen in jedem Fall Java Server Faces v1.2... nicht das aktuelle v2.0! -->
<module name="javax.faces.api" slot="1.2" export="true" />
<module name="com.sun.jsf-impl" slot="1.2" export="true" />
<!-- Seam braucht einige Libraries, die der JBoss teilweise schon mitbringt... -->
<module name="org.apache.commons.beanutils" export="true" />
<module name="org.apache.commons.collections" export="true" />
<module name="org.apache.commons.lang" export="true" />
<module name="org.dom4j" export="true" />
<module name="org.hibernate.validator" export="true" />
</dependencies>
</deployment>
</jboss-deployment-structure>
我还从EAR中剥离了JBossv7.1作为模块附带的所有JAR,并修改了MANIFEST.MF文件。
我用JBoss Logging取代了Log4J,修复了一些过时的FacesMessages代码,并暂时禁用了@Service和@Management类。
此外,我的Oracle数据源已添加到standalone.xml(使用ojdbc6.jar)并成功初始化。
附言:目前无法选择将Seam2替换为Seam3。我还没有尝试使用Seam2-JSF2-分支(https://github.com/heyoulin/seam2jsf2)-在评估备选方案之前,我想了解我目前的问题。
我们在这方面花费了越来越多的时间,但没有取得真正的进展。因此,我决定走另一条路,抛弃Seam,支持CDI和EJB v3.1!我们在Seam v2中使用的大多数东西现在都已经过时了。这是一次巨大的迁移,但我认为它最终会得到回报。它应该可以减少总体内存使用并提高性能。看起来Seam v2和JBoss v7不是一个好主意。。。