说明:因seam 2.3不支持JSF 1.x,如果要在Jboss EAP 6中使用seam 2.2/Richfaces 3,需将org.jboss.seam.transaction.Transaction换为seam 2.3的(原因是Jboss JNDI命名规则改变)。
1. Maven 依赖
Seam BOM 的 pom 文件中包含了seam 2.3 的推荐依赖和版本,可以在 maven pom 文件中引用。用法如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.seam</groupId>
<artifactId>bom</artifactId >
<version>2.3.1.Final</version >
<type>pom</type >
<scope>import</ scope >
</dependency>
...
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.seam</groupId>
<artifactId>jboss-seam</artifactId>
<type>ejb</type>
<dependency>
...
</dependencies>
2. 升级 XML Schema
2.1 升级 Seam Schema
涉及的文件有components.xml和page.xml。
除将版本号由“ 2.2 ”改为“ 2.3 ”外,注意 seam2.3 的 namespace 不同于 2.2 ,由“ jboss.com/products/seam/ ” 改成了“ jboss.org/schema/seam ”。
所有使用seam标签的xhtml页面也需要修改。
2.2 修改 Java EE 6 Schema
涉及的文件有:
1) persistence.xml
升级为 JPA2 。
<persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
2) application.xml
使用 Java EE 6 。
<application xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version ="6">
3) Web.xml
使用 servlet3.0 。
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
4) faces-config.xml
<faces-config version="2.1"xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">
3. 升级 Jave EE 6
Seam2.3 支持 Java EE 6 ,支持JSF2、JPA2 、 EJB3.1 和 Bean Validation。
3.1 升级JPA 2.0
Seam 2.3仅支持hibernate 4,JPA2.0 是向后兼容的,因此不必升级任何注解和类。
3.2 使用 Bean Validation 取代 Hibernate Validator
Bean Validation 是 Java EE 6 中的一个新技术标准( JSR-303 ), Hibernate Validator 4.x 是它的一个参考实现。要对原来的 hibernate 注解进行替换,如:
• org.hibernate.validator.Length 改为 javax.validation.constraint.Size
• org.hibernate.validator.NotNull 改为 javax.validation.constraint.NotNull
• org.hibernate.validator.Pattern 改为 javax.validation.constraint.Pattern
3.3 Facelets从 JSF 1 升级到 JSF 2
Seam 2.3仅支持JSF2, 页面中的 <head>/<body> 标签要转换为 <h:head>/<h:body> 。
Richfaces 升级为 4 (也可使用richfaces 3.3,参见后面链接)。
3.4 使用兼容的 JNDI
Java EE 6 定义新的JNDI语法规则。
components.xml 中的 jndi-pattern 需从“your_application/#{ejbName}/local ”,修改为“ java:app/ application-moule-name /#{ejbName} ”。
在components.xml中添加:
<component class="org.jboss.seam.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam-2.3.1.Final/EjbSynchronizations"/>
<component class="org.jboss.seam.async.TimerServiceDispatcher" jndi-name="java:app/jboss-seam-2.3.1.Final/TimerServiceDispatcher"/>
注意: jndi-name要与Jboss启动时,日志中输出的名字一致,即seam包名要与使用的一致。
persistence.xml 中的 JNDI 数据源,如使用了Jboss 默认数据源,要由“ java:/DefaultDS ”改为“ java:jboss/datasources/DefaultDS”。
4. 部署到 Jboss EAP 6
4.1 部署 META-INF 目录或 WAR 的 WEB-INF 目录中新增 jboss-deployment-structure.xml 文件。 Seam2.3 的最小基本配置如下:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<dependencies>
<module name="org.dom4j" export="true" />
<module name="org.apache.commons.collections" export="true" />
<module name="javax.faces.api" export="true" /> <!-- keep there only if you use JSF
as view technology -->
</dependencies>
</deployment>
</jboss-deployment-structure>
4.2 升级 Datasource
以前的数据源文件 ( *-ds.xml) 是简单的 xml 文件,现在可以使用Iron-Jacamar ( Iron-Jacamar 是 Jboss 的 JCA 项目)文件,将其放到EAR 的 META-INF 目录或 WAR 的 WEB-INF 目录中。
Iron-Jacamar 文件样例:
<?xml version="1.0" encoding="UTF-8"?>
<datasources xmlns="http://www.jboss.org/ironjacamar/schema">
<datasource jndi-name="java:/jboss/seamdiscsDatasource"
enabled="true" use-java-context="true" pool-name="seamdiscs">
<connection-url>jdbc:hsqldb:.</connection-url>
<driver>org.hsqldb.jdbcDriver</driver>
<security>
<user-name>sa</user-name>
<password></password>
</security>
</datasource>
</datasources>
Iron-Jacamar文件已过期,推荐在standalone.xml/domain.xml中配置数据源。
4.3 EAP 6不再支持jboss-app.xml文件,删除即可。
5. 测试框架的变化
使用 Arquillian 取代了嵌入式 Jboss ,使用 JunitSeamTest 替代 SeamTest ,使用 DBJUnitSeamTest 替代 DBUnitSeamTest 进行 DBUnit 测试。由于使用 TestNG 和 Arquillian 有断言问题,因此首选 Junit 测试框架。