苏格兰风笛

一个人是穷人还是富人,主要取决于"出身、运气和努力",这些因素中最不重要的因素就是努力!

用户操作
[即时聊天] [发私信] [加为好友]
xiaID:xymyeah
140395次访问,排名573好友0人,关注者1
xymyeah的文章
原创 53 篇
翻译 0 篇
转载 283 篇
评论 25 篇
xymyeah的公告
xymyeah@163.com
技术之家圈子http://blog.csdn.net/group/xymyeah欢迎加盟
最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
RickeyShao:不错,整好需要
jack803:假设a = 10000001, a>>>2,a>>2 结果都是32?
jack803:你好,为什么我用计算机运行出来的 >>>2 和 >>2 结果完全一样?谢谢
文章分类
收藏
相册
神话空间
AJAX
ajax特效
icefaces
Java开源 AJAX开发组件
jQuery中文社区
jsf ajax
blog收藏
baggio785的专栏
blueroc收藏
firebody
gembin
Java对Xml进行解析
jdom详解
JFreeChart
langhua opencms
opencms
opencms
干煸四季豆
滴水的能量
电信网管
CORBA
Brief Tutorial on CORBA
CORBA Technology and the Java Platform
EJB3.0
EJB3.0开发指南
EJB3Trail
Enterprise JavaBeans 3.0, 5th Edition
IBM
MyEclipse EJB Project 快速开始
hibernate
hibernate中文网站
hibernate官方网站
xdoclet Hibernate Tags
j2ee
cms4j
cms4j blog
ComponentReference
freemarker
ireport
javaeye tapestry
javatang(ajax等)
Jmesa(分页工具)
open source cms mmbase
quartz
Struts-menu
struts标记库
subersion eclipse
Tapestry中文文档
Tapestry中文文档
老高
J2ME
java application
Java swing tutorial
JViews Telecom Graphic Objects
JavaScript
google个性主页的拖拽效果的js
JavaScript高级教程
Java基础
java jar包下载
java在线API
java线程并发包util.concurrent的研究
NetBeans IDE官方教程
Thinking in Patterns with Java(中文版)
中文版jdk API
文件对比工具
JBOSS
JBoss Web Services
JOSS工具箱
JSF、Groovy、Drools
Drools
JSF in javaeye
JSF中文论坛
Liferay
Liferay Portal 系列文章
Liferay个人收集
Liferay英文站点
liferay论坛
Seam
3-ways-to-easy-ajax-in-seam-jsf-facelets-prelude
JavaEye Jboss Seam
Jboss Seam
JBoss Seam中文站
jboss seam开发
Seam - 无缝集成 JSF
Seam 2.0 Reference中文翻译
SEAM 安装和版本说明
seam-next-gen-web-framework/
Spring
Acegi 扩展开发
acegi官方网站
Acegi文档翻译与笔记
AppFuse
Security Acegi
springside 中文
Spring中文网站
Spring官方网站
Spring开发参考手册
Spring聚集
UML
jude
RUP 学堂
WebServices
AppFuseXFire
Java Technology and Web Services
Java Technology and Web Services - Documentation
Learn technology
SOA
SOA and Web services IBM
SOA专家群
SOA专题
Web Services Code Samples
电信
ctiforum
Essential SNMP, 2nd Edition
openvoip
中国网管联盟
通信专业门户
通信技术
工作流
Jboss JBPM
JBoss jBPM 3.1
JBPM
JBPM Group
jBPM开发入门指南
osworkflow
开源社区
cas
Cindy
数据库
Oracle® Database PL/SQL User's Guide and Reference
PL/SQL User's Guide and Reference
xsb Oracle Blog
甲骨文学(oracle)
网络
Getting Started with JCR
JCR示例项目
JSR 170
NetBios, NetBEUI, NBF, SMB, CIFS Networking
perforce
Slide
项目管理
CMMI ON LINE
CMMI V1.2 中文版
IT项目管理 企业级项目管理
IT项目管理专题
JAVAEYE软件开发和项目管理版
Sunspl技术管理
thoughtworks
如何快速学习CMMI?
开发文档网
项目管理资源网
杂记
opengroup
月光博客
存档
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

转载 JBoss Seam:一个深度集成框架(三)收藏

新一篇: eclipse中jadeclipse插件的安装与配置 | 旧一篇: JBoss Seam:一个深度集成框架(二)

JBoss Seam:一个深度集成框架(三)

作者: Michael Yuan 翻译: Richard 来源: TSS

作者简介: Michael Yuan,技术专家,《JBoss Seam: Simplicity and Power Beyond Java EE》、《Lightweight Java Web Application Development》等书的作者,软件顾问,目前就职于JBoss。

摘要: 本文介绍了JBoss Seam如何集成业务流程、使用iText和任务调度,并且总结了Seam编程模型中的关键要素。

本文是《JBoss Seam:一个深度集成框架》一文的最后一部分。

在Web应用中集成业务流程

大部分企业级应用存在许多业务流程和规则。例如,在一个简单的电子商务网站(以”在线购物”为例)中,客户登录后进行购物流程,商店管理人员登录后进行审批流程,仓库职员登录后进行发货流程。不同的人员站在不同的角度,去执行不同的任务,然而,他们又同时合作完成同一个业务场景。

在企业级应用中,业务分析人员通常定义业务流程和规则。他们使用专业的业务流程软件绘制这些流程和规则,然后应用开发人员实现这些设计。

然而,由于大部分Web应用框架没有集成流行的业务流程和规则引擎,开发人员只能通过自己的方式进行业务流程的整合。这样势必会造成开发人员和业务分析人员工作的脱节,使得业务分析人员很难去审核和验证。

Seam通过jBPM和JBoss Rules(以前的Drools)对业务流程和规则的整合提供了极好的支持。

在Seam应用中,你可以指定UI动作(例如按钮点击)来触发业务流程。你只需要通过@CreateProcess注解来标记UI事件处理方法。业务流程是不同的用户以相应顺序来完成的一系列任务。你可以用@BeginTask和@EndTask标注任务的开始和结束。当前任务结束时,jBPM引擎将自动把进程前移,进行下一个任务。

@Name(”ticketSystem”)

public class TicketSystemAction {

@CreateProcess(definition=”TicketProcess”)

public String newTicket() {

return “home”;

}

@BeginTask

public String reply() {

return “reply”;

}

@EndTask

public String sendAnswer() {

System.out.println(”Answered”);

return “home”;

}

}

Seam让每个用户可以查看他/她的当前任务列表以及完成任务的下一个动作。这些任务列表是基于当前登录的用户角色生成的,并且通过用户认证和授权的方式紧密地整合到Seam安全框架中。

<h1>Assigned Tickets - #{login.user.username}</h1>

<h:dataTable value=”#{taskInstanceList}” var=”task”>

<h:column>#{task.description}</h:column>

<h:column>Title: #{ticket.title}</h:column>

<h:column>

<h:commandLink action=”#{ticketSystem.reply}”>

<h:commandButton value=”Reply”/>

<f:param name=”taskId” value=”#{task.id}”/>

</h:commandLink>

</h:column>

</h:dataTable>

在整合jBPM/JBoss Rules的Seam应用中,开发人员可以直接使用Seam注解和组件驱动业务流程和规则引擎,而不需要单独掌握特定的jBPM和JBoss Rules的Java APIs。

使用iText生成不同的视图

iText库是一套被广泛用于生成PDF文档的开源Java库。然而,使用iText API创建PDF文档是十分耗时的(想想用DOM创建XML文档或者用Swing写UI的经历)。

Seam整洁地整合了iText、JSF和Facelets,开发人员可以通过和生成JSF页面一样简单的方式,将动态的内容生成PDF页面,你甚至可以在PDF页面中使用模板。

Seam为PDF元素创建了特殊的XHTML标记库,然后在生成页面的时候透明地调用iText。下面的示例显示了如何在Seam应用中,生成有数字签名支持的PDF页面。

<p:document … title=”Why Seam” keywords=”mykeyword”

subject=”seam” author=”Seam Team” creator=”Seam PDF example app”>

<p:image alignment=”right” wrap=”true” value=”/jboss.jpg” />

<p:font size=”24″><p:paragraph spacingBefore=”16″ spacingAfter=”40″>

Order #{currentOrder.orderId}

</p:paragraph></p:font>

<p:paragraph>Dear #{currentOrder.customerName},</p:paragraph>

<p:paragraph>… </p:paragraph>

<p:barCode type=”code128″ code=”My BarCode” />

<p:signature field=”My Signature” size=”200 200 400 400″ />

</p:document>

通过代码,我们可以看到整合是无缝的,页面不依赖于iText。实际上,将iText替换成其他的商业PDF库,页面仍然可以工作,这就是Seam整合的魅力。

高级任务调度程序

在许多企业级应用中,对自动重复任务的支持是相当重要的。在标准的EJB中,你可以使用EJB Timer API在固定的时间间隔内调度重复的事件。然而,在实际的应用中,我们需要比固定的时间间隔触发更高级的调度服务。

目前流行的开源Java调度库是Quartz库。但是如果要使用Quartz的话,开发人员仍需要自己写”胶水”代码来整合Quartz特定的APIs和对象模型。

Seam整合了Quartz,用于调度异步重复任务。你只需要在重复工作的方法上添加@Asynchronous注解。你可以传入任务的开始/结束时间、间隔或者克龙表达式(cron string)的字符串作为参数,也可以在方法定义中注解这些特定目的的参数。指定的方法将返回QuartzTriggerHandler对象,你可以稍后使用这个QuartzTriggerHandler对象暂停或取消任务,你也可以将这个QuartzTriggerHandler对象保存到数据库,以供稍后使用。

@Asynchronous

public QuartzTriggerHandle schedulePayment(

@Expiration Date when,

@IntervalCron String cron,

@FinalExpiration Date stoptime

… any other call parameters …) {

// do the repeating or long running task

}

下面的例子中,schedulePayment()方法设定在下午2点10分和三月每个星期三的下午2点44分运行。你可以在Web UI事件处理方法中加入这段调用的代码,这样当按钮按下时,重复事件将被安排到调度程序中。

QuartzTriggerHandle handle =

processor.schedulePayment(payment.getPaymentDate(),

“0 10,44 14 ? 3 WED”,

payment.getPaymentEndDate(),

payment);

payment.setQuartzTriggerHandle( handle );

// Save payment to DB

// later …

// Retrieve payment from DB

// Cancel the remaining scheduled tasks

payment.getQuartzTriggerHandle().cancel();

从例子可以看出,开发人员不需要手动启动Quartz调度程序、创建Quartz触发器和任务,而只需要使用Seam注解POJOs就可以了。

统一的编程模型

目前为止,我们已经介绍了很多Seam通过一致的编程模型整合不同框架的例子。除了上面介绍的这些,还有许多其他的框架。但是限于篇幅,我们不可能介绍所有的框架。下面我们将总结一下Seam整合这些框架的方法。Seam编程模型中关键的三要素是:

注解POJOs:Seam应用中所有的Java组件都是注解的POJO类。Seam通过双向依赖注入管理它们之间的交互。除此之外,Seam中没有其他的组件模型。

XHTML显示页面:所有视图(UI)页面都是通过XHTML文件显示出来,除去标准JSF标签,Seam还定义了许多自己的UI标签,包括PDF UI标签等。Seam同时也加入了Ajax JSF库,比如Ajax4jsf、RichFaces和IceFaces。

表达式语言:XHTML页面通过JSF表达式语言(EL)引用Seam中的Java组件。Seam增强了标准的EL语法,使它支持方法参数等,并且使EL可以用于所有的XML配置文件和测试脚本。

有了这些Cool的特性,Seam的编程模型将变成异常简便。只要有一些JSF基础,你的学习曲线将非常平坦。

下载Seam,看看实例,快乐地编写Seam代码,一切就这样简单!

审校:骆驼

原创文章如转载,请注明:转载自JBoss Seam中文站
[ http://www.jbossseam.com/ ]
本文链接地址:http://www.jbossseam.com/2007/11/05/introduction-to-jboss-seam-part3/

 

发表于 @ 2007年12月17日 11:54:00|评论(loading...)|编辑

新一篇: eclipse中jadeclipse插件的安装与配置 | 旧一篇: JBoss Seam:一个深度集成框架(二)

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © xymyeah