Seam初体验
从本文开始,我将会开始一个全新系列的文章——《Seam系列》。如果有关心我的博客的朋友,应该知道早前一年多的时间我都使用Seam使用开发项目,可以算得上是略有小成。因此,我很希望与大家分享一下Seam的经验。
为什么要使用Seam
这个问题Seam的官方文档以经做了很好的回答。为了方便不喜欢看文档的朋友(不过,可以负责任地告诉你“这不是一种好习惯!” :-),如果你希望完整地了解一门技术,反复阅读文档是必不可少的。甚至可能需要查看源代码,当然这是对开源的技术而言),我将其中一些要点抽取出来:
- 只有一种“工具” Seam中的表现层组件和业务逻辑组件之间并没有区别。 你可以根据你设计的任何架构给应用程序进行分层,而不是强制将你的应用程序逻辑硬塞进一个由你目前在使用的任何框架组合所强加给你的不适当的分层配置中。
- 将JSF与EJB 3.0整合 Seam将JSF和EJB3的组件模型合二为一,消除了胶合代码,使得开发者专注于业务问题。
- 集成AJAX Seam支持两个最好的、开源的基于JSF的AJAX解决方案:JBoss RichFaces和ICEfaces。
- 将业务流程作为首要的基础建筑 Seam可以选择通过jBPM提供透明的业务流程管理。
- 声明式状态管理 声明式应用程序状态管理通过Seam定义的丰富的context model(上下文模型)而成为可能。Bijection(双向注入) Bijection(双向注入)和IoC的不同之处在于它是动态的、语境相关的以及双向的。
- 工作区(Workspace )管理和多窗口浏览 Seam应用程序让用户自由地在多个浏览器窗口中切换,每个窗口都与一个不同的、安全隔离的对话关联。
- 多些注解(Annotation),少些XML 这让你摆脱了对繁琐的JSF managed bean(JSF受管bean)的配置,减少了所需的XML,只剩下那些真正属于XML的信息(JSF导航规则)。
- 集成测试轻而易举 Seam组件作为POJO,天生就是可以进行单元测试的。
- 规范也非尽善尽美 在规范中有许多漏洞(例如,GET请求的JSF生命周期中的局限性),Seam修正了这些漏洞。
- Web应用程序不只是服务HTML页面 Seam为持久化集成了JPA和Hibernate 3,为轻量化的异步性集成了EJB Timer Service和Quartz,为工作流集成了jBPM,为业务规则集成了JBoss规则,为电子邮件集成了Meldware Mail,为完整的文本搜索集成了Hibernate Search和Lucene,为消息集成了JMS,以及为页面片断捕捉集成了JBoss Cache。
准备开发环境
要方便地编写Seam应用,我要做一些准备工作。
- 下载Seam框架 大家可以通过以下链接下载http://seamframework.org/Download 。建议大家下载最新的2.1.1.GA 版本。解压到本地目录,如d:/SeamDev/。
- 下载JBoss应用服务器 大家可以通过以下链接下载http://www.jboss.org/jbossas/downloads/ 。建议大家下载最新5.0.1.GA 的版本。解压到本地目录,如d:/SeamDev/。
- 下载Ecplise开发环境 大家可以通过以下链接下载http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR2/eclipse-jee-ganymede-SR2-win32.zip 。解压到本地目录,如d:/SeamDev/。
- 下载JBoss Tools插件 大家可以通过以下链接下载http://sourceforge.net/project/downloading.php?groupname=jboss&filename=JBossTools-ALL-win32-3.0.0.CR2-R200901280154.zip&use_mirror=biznetnetworks 。解压到本地目录,如d:/SeamDev/。因为这是一个RC版本,大家可以通过LINK的方式将其安装到Eclispe,这样可以方便大家升级到正式版(将文件夹替换即可)。具体步骤:
- 开打Eclipse下的links文件夹,如d:/SeamDev/eclipse/links。
- 新建后缀名为*.link的文件,如JBossTools.link。
- 向文件加入内容如path=d:/SeamDev/JBossTools-3.0.0.CR2,保存并关闭文件。
第一个Seam应用
在完成上述的准备工作后,大家就可以通过Eclipse的向导生成一个简单的应用啦。
- 运行Eclipse,选择菜单Window->Perferences,在出现对话框中在左上角的输入框中输入“seam”,如图所示:
- 点击“Add”,在出现的“New Seam Runtime”的对话框中,点击“Browse”,选择Seam的解压路径如:D:/SeamDev/jboss-seam-2.1.1.GA,在“Version”下拉菜单中选择“2.1”,点击“Finish”。
- 点击“Perferences”对话框中的"OK",关闭对话框。
- 点击菜单“File->New->Project”,在输入框中输入“Seam”,点击“Seam Web Project”,点击“Next”,如下图所示:
- 在“Project Name:”输入“Hello”,点击“Target Runtime”中的“New”。
- 在出现的“New Server Runtime Environment”对话框中,展开“JBoss, a division of Red Hat”,选择“JBoss 5.0 Runtime”,点击“Next”,如下图所示:
- 在出现的对话框中,点击“Browse”,选择JBoss解压的路径,点击“Finish”。
- 回到“New Seam Project”对话框,点击“Target Server”中的“New”。
- 在出现的对话框中,选择“JBoss AS 5.0”,点击“Finish”。如图所示:
- 再次回到“New Seam Project”,在“Configuration”中的下拉菜单中选择“Dynamic Web Project with Seam 2.0(technical preview)”,点击“Next”,如下图所示:
- 在“Web Module”对话框,再点击“Next”。
- 在“JSF Capabilities”对话框,再点击“Next”。
- 在“Seam Facet”对话框中的“Deploy As”中选择“EAR”,在“Connection Profile”中点击“New”。
- 在“Connection Profile Types”中选择“HSQLDB”,修改“Name”为“HelloDB”,点击“Next”。
- 在出现的对话框中,点击图标
。
- 在出现的对话框中,选择“HSQLDB JDBC Driver”,如下图所示:
- 点击“Jar List”,选择“hsqldb.jar”,点击“Remove JAR/Zip”。
- 点击“Add JAR/Zip”,在文件选择对话框中选择Seam文件夹下的“lib”下的“hsqldb.jar”,路径如:d:/SeamDev/jboss-seam-2.1.1.GA/lib/hsqldb.jar,点击“OK”。
- 在“Database”输入框中输入“HelloDB”,选择“DB Location”,路径如:“F:/Workspace/BlogJava/HSQLDB/HelloDB”,可以点击“Test Connection”,如果设置正确应该会出现“Success”对话框,点击“OK”,再点击“Finish”。
- 回到“New Web Project”对话框,如进行下图所示设置后,点击“Finish”。
- 在可能出现的切换对话框中,点击“OK”。
- 通过上述步骤,我们已经新建一个Seam工程。在Eclipse的“Project Explorer”窗口中,你可能见到有红色的交叉提示错误,点击屏幕下方的“Problems”窗口,双击错误提示,打开pages.xml文件,如下图所示:
- 点击垂直滚动条右边的红色错误提示,定位到出错内容,如下图所示:
- 将出错的“log-level”改为“logLevel”,即可消除错误,保存文件。
- 点击屏幕下方的“JBoss Server View”,开启JBoss服务器,如下图所示:
- 打开浏览器,键入http://localhost:8080/hello/ ,你将会看到如下图所示页面:
- 点击“Login”,在“Username”键入“admin”,再点击“Login”,可以成功登陆。
小结
通过上述的步骤,我们已经创建了一个简单Seam应用。这个应用正所谓是“麻雀必小五脏俱全”,包括WEB的常用的布局、图片,样式表和简单的登陆实现、错误处理等。
原文地址:http://www.blogjava.net/max/archive/2009/03/12/259253.html