JBoss Seam 2.3.1新功能

jboss seam reference 2.3(第4章)

jboss seam reference 2.3 Final   

24.09.2012

 

第四章 从2.2迁移到2.3

在你开始Seam 2.3以前,有一些事情你应该注意。这个过程应该不是太痛苦——如果被卡住了,只是回来参考在Seam分发版中的更新Seam例子即可。

这个迁移指南假设你正在使用Seam2.2,如果你正从Seam 1.2 或 2.0迁移,请看jboss-seam-x.y.z.Final/seam2migration.txt 以及jboss-seam-x.y.z.Final/seam21migration.txt。

4.1  XML架构(Schemas)迁移 

 

4.1.1 Seam架构迁移

 

使用Seam 2.2 XSDs的验证文件的XML架构应该被升级为引用2.3 XSDs,注意版本更改。当前的命名空间模式是 www.jboss.org/schema/seam/*,而schemaLocation URL 被改成了 www.jboss.org/schema/seam/*_-2.3.xsd, *处是Seam模块。

下面是2.2版本的一个组件声明例子的片断:

例子4.1 在Seam components.xml的迁移之前

<?xml version="1.0" encoding="UTF-8"?>

<components xmlns="http://jboss.com/products/seam/components"

xmlns:core="http://jboss.com/products/seam/core"

xmlns:persistence="http://jboss.com/products/seam/persistence"

xmlns:security="http://jboss.com/products/seam/security"

xmlns:theme="http://jboss.com/products/seam/theme"

xmlns:cache="http://jboss.com/products/seam/cache"

xmlns:web="http://jboss.com/products/seam/web"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=

"http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd

http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.2.xsd

http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd

http://jboss.com/products/seam/theme http://jboss.com/products/seam/theme-2.2.xsd

http://jboss.com/products/seam/cache http://jboss.com/products/seam/cache-2.2.xsd

http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.2.xsd

http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd">

最终,2.3版的components.xml迁移声明:

例子4.2 被迁移的components.xml

<?xml version="1.0" encoding="UTF-8"?>

<components xmlns="http://jboss.org/schema/seam/components"

xmlns:core="http://jboss.org/schema/seam/core"

xmlns:persistence="http://jboss.org/schema/seam/persistence"

xmlns:security="http://jboss.org/schema/seam/security"

xmlns:theme="http://jboss.org/schema/seam/theme"

xmlns:cache="http://jboss.org/schema/seam/cache"

xmlns:web="http://jboss.org/schema/seam/web"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=

"http://jboss.org/schema/seam/core http://jboss.org/schema/seam/core-2.3.xsd

http://jboss.org/schema/seam/persistence http://jboss.org/schema/seam/persistence-2.3.xsd

http://jboss.org/schema/seam/security http://jboss.org/schema/seam/security-2.3.xsd

http://jboss.org/schema/seam/theme http://jboss.org/schema/seam/theme-2.3.xsd

http://jboss.org/schema/seam/cache http://jboss.org/schema/seam/cache-2.3.xsd

http://jboss.org/schema/seam/web http://jboss.org/schema/seam/web-2.3.xsd

http://jboss.org/schema/seam/components http://jboss.org/schema/seam/components-2.3.xsd">

接下来剩下的迁移步骤是pages.xml文件,以及仅需要架构被升级的的其他文件。

例子4.3 在Seam pages.xml的迁移之前

<?xml version="1.0" encoding="UTF-8"?>

<pages xmlns="http://jboss.com/products/seam/pages"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.2.xsd">

...

</pages>

例子4.3 在Seam pages.xml的迁移之后

<?xml version="1.0" encoding="UTF-8"?>

<pages xmlns="http://jboss.org/schema/seam/pages"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://jboss.org/schema/seam/pages http://jboss.org/schema/seam/pages-2.3.xsd">

...

</pages>

4.1.2.  Java EE 6架构变化

Seam2.3升级还包括Java EE 6升级,所以你需要升级下面的描述符:

l 为使用JPA 2的persistence.xml

l为使用Servlet 3.0和网页应用程序的web.xml

l为使用企业Java 6应用程序的application.xml

lfaces-config.xml,如果你需要为JSF2指定某些高级配置(这个描述符文件并不是强制的,你不必使用/包括它在你的应用程序中)

用正确的版本改变了头部的例子如下所示:

例子4.5  persistence.xml 

<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">

例子4.6  application.xml 

<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.7  web.xml 

<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.7  faces-config.xml 

<?xml version="1.0" encoding="UTF-8"?>

<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">

4.2.  Java EE 6升级

Seam 2.3能够集成在Java EE (从5到6)中的主要升级。你可以使用JPA 2持久化、EJB 3.1和Bean Validation。几乎所有EE 6技术升级需要改变XML架构声明。请看章节 4.1.2, “Java EE 6架构变化”。

4.2.1. 使用Bean Validation标准,而不是Hibernate Validator

Bean Validation是包含在Java EE 6中作为新技术的一个标准。Seam已经为验证使用了一个参考实现Hibernate Validator。

你需要把使用org.hibernate.validator.*的Hibernate validator注释迁移为javax.validation.constraint.* 对等物。例如Seam例子使用了许多下面的注释,而你可以使用这个列表作为一个帮助器(使用Bean Validation):

org.hibernate.validator.Length 改为 javax.validation.constraint.Size,

org.hibernate.validator.NotNull 改为 javax.validation.constraint.NotNull,

org.hibernate.validator.Pattern 改为 javax.validation.constraint.Pattern.

4.2.2.  JSF 1到JSF 2 Facelets模板的迁移

配置文件faces-config.xml并不需要是在你的应用程序中,所以对于简单地使用JSF2,你只需迁移web.xml。如果你无论如何想使用它,改变XML架构声明,如在例子  4.8,“faces-config.xml”中所述一样。

所有你的应用程序的JSF模板应该只使用facelets技术,因为JSP是过时了。

在facelet模板中,要求分别转换 <head>/<body>标签为<h:head>/<h:body>。

根据你使用的JSF组件,如Richfaces或Icefaces,在升级JSF 1.x 到JSF 2.x时,必定有某些差异。你可能需要升级整个库。有关这些变化,请参考任何组件框架的文档。本迁移并不包含这些迁移的步骤。

4.2.3. 迁移到JPA 2.0

使用JPA 2需要在 persistence.xml中改变版本为2.0,请看例子4.5,“persistence.xml”文件,并且如果你使用EAR,在 application.xml中的版本应该为6——请看例子 4.6,“, “application.xml”,或者,如果你只使用 WAR,在web.xml文件中的版本改为3.0——请看例子4.7,“web.xml”。

对开发人员重要的是,大多数应用程序可能只使用带有EJB3.1的WAR,所以不必打包应用程序员为EAR。

JPA 2.0 是向后兼容JPA 1.0,所以你不必迁移任何JPA注释或类。JPA 2.0是更像增强版的JPA 1.0。

4.2.4.  为资源使用兼容的JNDI

Java EE 6为创建可移植JNDI语法带来了新标准化的全局规则。所以,你必须改变所有JNDI 字符串,从_your_application_/#{ejbName}/local改为 java:app/_application-module-name_/#{ejbName},就如在WEB-INF/components.xml中jndiPattern变化的例子,把:

seam-mail/#{ejbName}/local

改为

java:app/seam-mail-ejb/#{ejbName}

4.3.  JBoss AS 7.1部署

 

4.3.1. 部署变化

 

下一级是你的目标运行时(runtime)的迁移。Seam 2.3使用JBoss AS 7作为默认目标运行时。

如果你正在JBoss AS 7.1中开发或测试默认数据源,你需要在你的persistence.xml中改变数据源,从java:/DefaultDS 和java:jboss/datasources/ExampleDS。

JBoss AS 7有一个重构的类加载模型。绑定的类加载或提供的库可以在jboss-deployment-structure.xml 或在 META-INF/MANIFEST.MF 文件中的Dependencies部分中被管理。本迁移文档更喜欢使用jboss-deployment-structure.xml文件,根据你的应用程序类型,它被放在你的WAR或 EAR应用程序的 META-INF目录中。

对于完整EAR项目, jboss-deployment-structure.xml将会被放在 _your_ear_/META-INF目录中。

对于Web(非ear)项目,jboss-deployment-structure.xml 将会被放在_your_war_/WEB-INF目录中。

基于Seam 2.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>

详情请看JBoss AS 7文档

4.3.2.  数据源迁移

你现在还可以包括任何数据源描述符(*-ds.xml)到你的项目的META-INF目录中,并且当部署到一个JBoss AS 7.1应用程序服务器时,该数据源将会被自动部署。虽然文件结构已经被改变。以前数据源文件是一个基于xml的文件,但是现在是一个基于IronJacamar的文件。 Iron-Jacamar是JBoss的 JCA (Java Connector Architecture)项目。下面的例子 4.9,“简单的Seam 2.2数据源描述符文件”是用于JBoss AS 4/5的旧数据源,而例子 4.10,“Ironjacamar数据源描述符文件”显示使用相同驱动、URL和证书转换到IronJacamar。

例子 4.9,“简单的Seam 2.2数据源描述符文件”

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE datasources

PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"

"http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">

<datasources>

<local-tx-datasource>

<jndi-name>seamdiscsDatasource</jndi-name>

<connection-url>jdbc:hsqldb:.</connection-url>

<driver-class>org.hsqldb.jdbcDriver</driver-class>

<user-name>sa</user-name>

<password></password>

</local-tx-datasource>

</datasources>

例子 4.10,“Ironjacamar数据源描述符文件”

<?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.4.  在测试框架中的变化

SeamTest和JBoss Embedded是遗留组件,并且有许多限制,我们不再像Seam 2.2中那样支持它了。

我们带来Arquillian作为JBoss Embedded的替代,你应该继承extendorg.jboss.seam.mock.JUnitSeamTest,而不是org.jboss.seam.mock.SeamTest,DBUnit 测试由org.jboss.seam.mock.DBJUnitSeamTest提供,而不是 org.jboss.seam.mock.DBUnitSeamTest。 由于TestNG框架和Arquillian的断言问题,我们使用JUnit作为首选测试框架。迁移到Junit和Arquillian进行以下步骤:

1.   添加

@RunWith(Arquillian.class)

注释你的测试类。

2.   你的测试类应该继承org.jboss.seam.mock.JUnitSeamTest,而不是org.jboss.seam.mock.SeamTest。

3.   添加一个方法,像

@Deployment(name="_your_test_name_")

@OverProtocol("Servlet 3.0")

public static org.jboss.shrinkwrap.api.Archive<?> createDeployment(){}

为创建测试部署档案。以下例子取自Registration例子测试套件。它导入了用"mvn package"构建的.ear档案, 添加了测试类给部署,并且用一个特定SeamTest版本替换WEB-INF/web.xml文件。

@Deployment(name="RegisterTest")

@OverProtocol("Servlet 3.0")

public static Archive<?> createDeployment()

{

EnterpriseArchive er = ShrinkWrap.create(ZipImporter.class, "seam-registration.ear").importFrom(new File("../registration-ear/target/seam-registration.ear"))

.as(EnterpriseArchive.class);

WebArchive web = er.getAsType(WebArchive.class, "registration-web.war");

web.addClasses(RegisterTest.class);

// Install org.jboss.seam.mock.MockSeamListener

web.delete("/WEB-INF/web.xml");

web.addAsWebInfResource("web.xml");

return er;

}

4.  创建一个特定SeamTest的 web.xml,包含了org.jboss.seam.mock.MockSeamListener,而不是普通的 org.jboss.seam.servlet.SeamListener。

<?xml version="1.0" ?>

<web-app version="3.0"

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">

<listener>

<listener-class>org.jboss.seam.mock.MockSeamListener</listener-class>

</listener>

</web-app>

5.   为运行Arquillian 测试,添加arquillian.xml文件到你的类路径的根。该文件内容应该指定你的类路径到远程或管理容器,以及为 JVM 或 Arquillian指定某些选项。Arquillian文件的的例子是在jboss-seam-x.y.z.Final/examples/booking/booking-tests/src/test/resources-integration/arquillian.xml:

<?xml version="1.0" encoding="UTF-8"?>

<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://jboss.org/schema/arquillian"

xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

<engine>

<property name="deploymentExportPath">target/</property>

</engine>

<container qualifier="jboss" default="true">

<configuration>

<property name="javaVmArguments">-Xmx1024m -XX:MaxPermSize=512m</property>

<property name="jbossHome">target/jboss-as-${version.jbossas7}</property>

</configuration>

</container>

</arquillian>

详情请看Seam参考文档的章节38.2,“集成测试Seam组件”。

4.5.  使用Maven的依赖变化

如上所述,“提供”平台现在是JBoss AS 7.1.x,因此所有包括在AS 7中Java EE 依赖现在都被标记为提供。

4.5.1.  Seam材料单

材料单是在 <dependencyManagement> 部分中的一组依赖元素,其能够被用来导入到你的应用程序的maven构建中,并且能够声明你希望在你的应用程序中使用那个依赖和它们的版本。关于Seam BOM这种做法的好处是在这儿依赖和它们的版本是与Seam 2.3很好配合工作的推荐依赖。Seam BOM的用法在例子4.11,“Seam BOM用法”中被展示。Seam BOM被部署在JBoss Maven仓库

例子4.11,“Seam BOM用法”

<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>

时间: 2024-12-22 07:14:56

JBoss Seam 2.3.1新功能的相关文章

开源Java EE框架 JBoss Seam 详细介绍

摘要:JBoss Seam是"Java EE 5.0的一个轻量级的框架".这是什么意思?难道Java EE(Enterprise Edition) 5.0本身不是一套"框架吗"?为什么在官方规范之外,还需要另外一个框架?好吧,我们就将seam看作是本应该被包括在Java EE 5.0中的一个"遗漏的框架"吧.它在Java EE 5.0框架的上层,为所有的在企业Web应用中的组件提供了一个统一的.易于理解的编程模型.它同样使基于状态的应用和业务流程

JBOSS EAP 6 系列一 新特性

在项目中,采用的架构是Springmvc+spring+EJB+Jpa等架构,当然服务器是Jboss,本次Jboss我们采用的是JBossEap6.2,Jboss7的新特性与Jboss4.5的大的改变是: 模块申明式容器 JBOSS EAP不再有lib的概念,一切都是module.无论是系统调用的lib,用户编制的lib,或者应用程序引用到的第三方lib都以模块的方式构建起来,并在使用的地方申明具体使用了哪个模块.这就带来两个好处, 按官方的说法提供了一种完全的模块化的类加载系统,JBOSS会根

从JBoss Seam 2.x迁移到JavaEE 7之四:事件机制

为了在Managed Bean之间进行通信,JBoss Seam 2.x和JavaEE 7 CDI都为Managed Bean提供了生成事件对象和捕获事件对象的功能. JBoss Seam 2.x中,事件的类型是String表示.一个事件监听器可以监听多种类型的事件,任何匹配类型的事件产生都将通知事件监听器. JavaEE 7 CDI中,事件是一个对象,其中包括一个有效负载(也是个Java对象)和一组描述符.事件监听器是方法安全的,即一个事件监听器只能监听一种具体的事件.只有事件的有效负载和描述

Atitit.mysql&#160;5.0&#160;5.5&#160;&#160;5.6&#160;5.7&#160;&#160;新特性&#160;新功能

Atitit.mysql 5.0 5.5  5.6 5.7  新特性 新功能 1. MySQL  5.6    5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 memcached API 直接访问 NoSQL2 1.4. 更好的复制2 1.5. Performance Schema2 2. MySQL 5.7.62 2.1. 内建中文全文索引2 2.2. 多主复制2 2.3. other2 3. 参考2 1. MySQL  5.6    5 大新特性 M

酷客多小程序DIY体系全面升级,还加入了这些新功能

在这个追求个性的时代,很多人都不愿追随大流,而是更喜欢DIY.首页模板的DIY功能一直都备受酷客多小粉丝的喜爱,昨晚伴随着扫码点餐一起推出的,还有模板DIY的全新页面.新的DIY界面加入了首页视频.背景.客服三个功能,操作流程相比之前简化了许多,商家只用拖动想要的组件到相应的位置并且链接到相应入口,就能完成模板的设计. 本次新增的DIY首页模板的三个新功能小编逐一介绍一下 1. 首页背景 新增的背景设置功能,商家可以自己设定首页的颜色或者是首页图片,使得小程序首页搭配更和谐,满足大部分追求个性化

卓流应用网新功能推广——ECMALL商城增加微信商城功能

微信商城是基于当前很受欢迎的微信的这种传媒方式中的一种商业运用,微信的当前的火热是一个商机,基于微信的传播速度,及其简便等优点,为商家提供一个平台,在这个更简便的.方便的平台里进行更为现代的电子商务.同时在利用微信的这个平台也可以为商家提供更有效的宣传方式,更有利于商品的推广. 同时尽快实现商业价值是重要的阶段目标,通过微信平台实现在线销售便是一个方向.于是诞生了微信商城这个平台! 微网站一种跨移动平台的营销型网站.它源于WebApp和网站的融合创新,兼容iOS.android.WP等各大操作系

巧用React Fiber中的渲染字符串新功能

虽然React Fiber还没有正式发布,但是我们已经可以预先领教其带来的新的编程模式了. 在React Fiber中,render函数可以直接返回一个字符串了,换言之,一个组件可以直接渲染为一个字符串,而不是必须渲染为一个HTML模样的物体. 举个例子,下面这个控件LongString,显示一个input和一个p,p中文字可以是很长的字符串,相当于一个模板,在input中输入的字符串会用来填补p中的模板面. 代码如下. import React from 'react'; class Long

微软发布了一系列网络安全新功能(关于Windows和Office 365)

微软在旧金山召开的大规模RSA安全会议中发布了一系列新的网络安全功能,Windows和Office 365的新功能旨在帮助企业实现网络安全. 在Windows前端增加了使用Windows Hello的本地Active Directory功能,并允许Windows 10系统登录.微软还推出了新的工具,通过向企业提供将组织策略迁移到云托管的工具来帮助他们更好的使用移动设备来管理产品.(InfoWorld:你需要正确设置Windows 10组策略.新的操作系统:终极Windows 10 Survivo

Docker 1.12.0将要发布的新功能

导读 按计划,6/14 是1.12.0版本的 feature冻结 的日子,再有两个星期Docker 1.12.0也该发布了.这里列出来的新功能,都是已经合并到主分支的功能,不出意外,下一个版本的Docker应该是能体验到了. 下周2016 DockerCon也该开始了,好像也有一场专门来讲Docker新特性的,不过在这之前,我们就可以抢先一步,浏览一下这些新功能.新特性.尤其是前两个,都是比较吸引人的功能. Swarmkit集成 前几天Docker刚刚发布了 Swarmkit ,也就是Swarm