当前位置: 首页 > 工具软件 > Seam Security > 使用案例 >

从Seam2.2升级到2.3

西门京
2023-12-01

Migration from 2.2 to 2.3

 

说明:因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 测试框架。

升级步骤参见 seam 文档

 

Seam 2.3.1.Final Reference Guide

Jboss EAP 6 Migration Guide

RichFaces 3.3.3 and JSF 2.0

Migrate the Seam 2.2 Booking Example to JBoss EAP 6

 类似资料: