1、 升级 XML Schema
1.1 升级 Seam Schema
涉及的文件有 components.xml 和 page.xml 。
除将版本号由“ 2.2 ”改为“ 2.3 ”外,注意 seam2.3 的 namespace 不同于 2.2 ,由“ jboss.com/products/seam/ ” 改成了“ jboss.org/schema/seam ”。
1.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) 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" >
3) 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" >
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" >
2、 升级 Jave EE 6
Seam2.3 支持 Java EE 6 ,可以 JPA2 、 EJB3.1 和 Bean Validation 。
2.1 使用 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
2.2 Facelets 模板从 JSF 1 升级到 JSF 2
模板中的 <head>/<body> 标签转换为 <h:head>/<h:body> 。
Richfaces 升级为 4 。
2.3 升级到 JPA 2.0
JPA2.0 是向后兼容的,因此不必升级任何注解或类。
2.4 使用兼容的 JNDI
Java EE 6 定义了 JNDI 语法新的标准规则。因此应将所有 JNDI 字符串从“ your_application/#{ejbName}/local ”,改为“ java:app/application-module-name/#{ejbName} ”。如 components.xml 中的 jndi-pattern 需修改为“ java:app/ application-module-name /#{ejbName} ”。
3 、部署到 Jboss AS 7.1
3.1 部署的变化
修改 persistence.xml 中的 JNDI 数据源,如 Jboss 默认数据源由“ java:/DefaultDS ”,改为“ java:jboss/datasources/ExampleDS ”。
在 EAR 的 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 >
3.2 升级 Datasource
以前的数据源文件 ( *-ds.xml) 是简单的 xml 文件,现在是 Iron-Jacamar ( Iron-Jacamar 是 Jboss 的 JCA 项目)文件。
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 >
4、 测试框架的变化
使用 Arquillian 取代了嵌入式 Jboss ,使用 JunitSeamTest 替代 SeamTest ,使用 DBJUnitSeamTest 替代 DBUnitSeamTest 进行 DBUnit 测试。由于使用 TestNG 和 Arquillian 有断言问题,因此首选 Junit 测试框架。
升级步骤参见 seam 文档。
5、 Maven 依赖变化
Seam BOM 的 pom 文件中包含了 seam2.3 的推荐依赖和版本,可以在 maven pom 文件中引用。用法如下:
< dependencyManagement >
< dependencies >
< dependency >
< groupId > org.jboss.seam </ groupId >
< artifactId > bom </ artifactId >
< version > 2.3.0.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 >