论坛首页 Java企业应用论坛

Seam 2.0 升级说明

浏览 3968 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-06  
Seam 2.0 升级向导
========================
在你开始使用Seam2之前你需要对你的代码和配置做一些更改,这个过程是非常简单的,
如果没有升级成功请查阅Seam的升级示例

支持Seam 2.0的容器环境
--------------------------------
Seam 2.0 已经在一下容器中做过测试

* JBoss 4.2 (升级到JSF 1.2 的JBoss 4.0.5)
* Tomcat 6.0 (Tomcat 5.5 不支持 JSF 1.2)
* GlassFish V2
* OC4J 11g Technology Preview

升级到 JSF 1.2
--------------------
Seam 2.0 需要 JSF 1.2. 我们认为现在Sun的官方JSF实现是最成熟的JSF 1.2 实现,
这也是大多数java EE5应用服务器中使用的版本,包括 JBoss 4.2. 为了把你的代码切换到这个版本
你需要对你的web.xml做如下改动,

* 移除 MyFaces 的 StartupServletContextListener监听器
* 移除 Ajax4JSF 过滤器和映射配置
* 把 org.jboss.seam.web.SeamFilter 改名为 org.jboss.seam.servlet.SeamFilter

同时要注意的是对于Sun的JSF实现,客户端状态保存不是必须的

你同时也需要对你的faces-config.xml做一些改动

* 移除 (Tranactional)SeamPhaseListener 声明
* 移除SeamELResolver 声明如果你配置了它
* 把SeamFaceletViewHandler改为com.sun.facelets.FaceletViewHandler

从Seam 1.2开始,你不再需要在你的web.xml中为SeamExceptionFilter
或SeamRedirectFilter做任何声明,你只需要为SeamFilter做一个简单的声明就可以了。

确定你已经做好了上面的改动

代码升级
--------------
为了使Seam的内建组件更加容易学习使用且与具体技术实现隔离开,内建组件进行了重构设计

* 与持久化相关的组件移到了org.jboss.seam.persistence包中
* 与jBPM 相关的组件移动到了org.jboss.seam.bpm包中
* 与JSF相关的组件移动到了org.jboss.seam.faces包中
* Servlet相关的组件移动到了org.jboss.seam.web包中
* 与并发相关的组件移动到了org.jboss.seam.async包中
* 与i18n相关组件移动到org.jboss.seam.international包中
* 与Pageflow相关的组件移动到了org.jboss.seam.pageflow包中
* 与页面导航相关组件移动到了 org.jboss.seam.navigation包中

依赖与这些API的代码需要重新引入这些新包名

Annotations 也进行了重构

* BPM相关的annotations 移动到 org.jboss.seam.annotations.bpm
* JSF相关的annotations 移动到 org.jboss.seam.annotations.faces
* Interceptor相关的annotations 移动到org.jboss.seam.annotations.intercept
* 并发相关的Annotations移动到org.jboss.seam.annotations.async
* @RequestParameter 移动到 org.jboss.seam.annotations.web
* @WebRemote 移动到 org.jboss.seam.annotations.remoting
* @Restrict 移动到 org.jboss.seam.annotations.security
* 异常处理相关的annotations移动到org.jboss.seam.annotations.exception
* 使用@BypassInterceptors代替@Intercept

升级components.xml
---------------------------
seam组件新的包结构给components.xml带来了新的组件命名空间和schemas

如下包中的组件的命名空间
    org.jboss.seam.foobar
   
现在为:

    http://jboss.com/products/seam/foobar
   
同时schema为:

    http://jboss.com/products/seam/foobar-2.0.xsd

你需要升级你的components.xml到新的命名空间和schemas,如果你不知道怎么去做
请参考seam的升级示例

最后,一些声明需要完全移除:

* 从<core:init/>中移除 <conversation-is-long-running-parameter> 
* 移除<core:ejb/>
* 移除<core:microcontainer/>
* 用<transaction:ejb-transaction/>替换<core:transaction-listener/>
* 用<core:resource-loader/>替换 <core:resource-bundle/>
         
注意: Seam 事务管理器现在默认是开启的.如果你想关闭seam事务管理器:
     
      <core:init transaction-management-enabled="false"/>
     
注意: event的action的expression属性不赞成再使用,建议使用execute

      <event type="org.jboss.seam.notLoggedIn">
          <action execute="#{redirect.captureCurrentView}"/>
      </event>

升级到嵌入式 JBoss
--------------------------
不再支持部署到嵌入式JBoss Ejb3和JBoss微容器,通过简单的部署
,新发行的嵌入式JBoss可以提供给你一个完全符合EE标准的APIs

对于测试来说, 你需要把Seam lib/ 目录下的jar包和
bootstrap/ 目录放到你的classpath中. SeamTest会自动启动容器
如果你有问题请参考Seam的示例或seam-gen

部署到Tomcat请按照指南中的介绍。这时候你不再需要任何额外的声明或打包。

注意现在嵌入式的JBoss已经有能力在启动的时候通过一个-ds.xml file参数来
初始化一个数据源,所以不再需要jboss-beans.xml。

升级到JBPM 3.2
---------------------
如果你在你的业务处理中使用了JBPM (不仅仅是pageflows), 你需要添加一个
tx service到你的jbpm.cfg.xml:
  <service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
 
升级到RichFaces 3.1
--------------------------
如果你使用了RichFaces 或 Ajax4jsf,它们的基础代码已经被重构过了.
ajax4jsf.jar和 richfaces.jar已经被一下几个jar包替换掉
richfaces-api.jar (应该放到你的ear的lib目录中)
richfaces-impl.jar和richfaces-ui.jar (放到你的WEB-INF/lib目录中).

s:selectDate不再推荐使用,推荐使用 rich:calendar替代.

要获得更多的改动信息请参考RichFaces的文档

包结构的改动
-----------------
你应该把你在application.xml中声明的modules的所有依赖项放到你的ear的lib目录中,
除了jboss-seam.jar,它应该在application.xml中被声明为一个ejb module

Seam UI的改动
------------------

* s:decorate 成为一个命名容器(naming container). 
  因此组件的编号从fooForm:fooInput 改为了 fooForm:foo:fooInput (假设你的s:decorate有一个foo的ID).

seam-gen的改动
-------------------

从Seam 2.0.0.CR2 开始seam-gen在代码的生成上有一个改动,

旧的代码生成方式:

  src/model/com/domain/projectname/model/EntityName.java
  src/action/com/domain/projectname/model/EntityNameHome.java
  src/action/com/domain/projectname/model/EntityNameList.java

新的代码生成方式:

  src/model/com/domain/projectname/model/EntityName.java
  src/action/com/domain/projectname/action/EntityNameHome.java
  src/action/com/domain/projectname/action/EntityNameList.java

Home和Query 对象是 "动作"型组件,而不是"模型" 组件,所以它们应该被放到action包中.


请记住, model类被分开放置是因为它们不支持热加载(hot reloaded).
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics