作者: 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/
分享到:
相关推荐
### JBoss Seam:一个深度集成框架 #### 一、JBoss Seam 的产生背景及意义 JBoss Seam 是一款由 JBoss 提供的开源框架,它致力于解决 JavaEE 应用程序开发过程中面临的诸多挑战,尤其是当涉及到多个不同框架时所...
《JBoss Seam:超越Java EE的简易与强大》是一本深度探索JBoss Seam框架的权威著作,由Michael Yuan和Thomas Heute共同撰写。本书聚焦于JBoss Seam框架,旨在为读者提供一个全面、深入的理解,以掌握其在企业级应用...
Seam不仅仅是一个集成框架,它拥有自己的状态管理机制,允许框架之间通过注解和EL表达式实现深度整合。Seam的开发者对第三方框架有着深刻的理解,因此能够更好地将它们融合在一起,而不仅仅是简单的拼接。例如,Seam...
JBoss Seam 是一个开源的企业级开发框架,它旨在简化Java EE应用的开发过程,特别是在Web和富互联网应用程序(Rich Internet Applications, RIA)领域。Seam 2.0是其重要的版本,提供了许多增强的功能和改进,为...
【JBoss教程及深入浅出JBoss+Seam】是一个针对企业级Java应用服务器JBoss的深度学习资源,其中包含了两个主要部分:JBoss教程和对JBoss与Seam框架结合使用的详细介绍。这两个主题都是Java开发人员在部署和管理企业...
《实用JBoss Seam项目》是一本深度讲解JBoss Seam框架的书籍,不仅介绍了Seam框架的基础知识和特点,还通过丰富的实战项目案例,让读者能够亲自动手实践,从而深刻理解Seam框架在企业级应用开发中的应用。...
JBoss Seam是一款开源的企业级应用框架,它以其深度集成的能力而闻名。这个框架的设计目标是简化Java EE(现在称为Jakarta EE)开发,通过提供一个统一的环境来整合各种技术和组件,如JavaServer Faces (JSF)、Java ...
JBoss Seam 2.0 是一个全面的企业级Java开发框架,旨在简化Java EE(现在称为Java EE)应用程序的构建过程,尤其是在集成各种技术和处理业务逻辑方面。Seam 提供了一个统一的模型,允许开发者用一种更直观的方式来...
JBoss Seam 是一个开源的Java框架,它旨在简化企业级Java应用程序的开发。Seam 提供了一种整合的开发环境,融合了JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB) 3.1、Contexts ...
SEAM还深度集成了JSF,通过Facelets提供了更强大的模板引擎和页面构建机制。 #### 基于Facelets的JSF Facelets作为JSF的视图层技术,极大地简化了页面的构建和布局。以下是一个使用Facelets创建JSF应用的基本步骤...
Seam框架是一个全面的Java企业级开发框架,它在2005年由JBoss公司推出,主要用于简化Java EE应用的复杂性,特别是整合了JSF(JavaServer Faces)、EJB、CDI(Contexts and Dependency Injection)等技术。Seam框架的...
在Java开发领域,JBoss Seam是一个极具影响力的技术框架,它为开发者提供了简化企业级应用开发的强大工具。"Seam 简洁与力量超越Java EE"这个主题,揭示了Seam如何在Java Enterprise Edition(Java EE)的基础上提供...
Seam不仅仅是一个集成框架,它还提供了自己的状态管理机制,通过注解和EL表达式实现与其他框架的深度整合。Seam对ORM(对象关系映射)的支持尤为突出,尤其是在处理持久化上下文的生命周期中,避免了ORM常见的问题,...
JBoss Seam 2 是一个全面的、集成的开发框架,主要用于构建企业级Java应用程序。它在Java EE 5平台上运行,旨在简化开发过程,提高开发效率。Seam的核心理念是将各种技术如JavaServer Faces (JSF)、Enterprise ...
Seam是由JBoss公司开发的一个集成框架,旨在简化Java EE(Java Platform, Enterprise Edition)应用的开发,尤其是在处理会话管理和组件集成方面。这本书的翻译版为中国开发者提供了一种深入理解和掌握Seam技术的...
《深入浅出JBoss_2BSeam》这本书聚焦于企业级Java应用服务器JBoss以及Seam框架的深度解析。JBoss是Red Hat公司开发的一个开源应用服务器,它基于Java EE(Enterprise Edition)标准,提供了丰富的功能和服务,支持...
《Seam in Action》这本书深度探讨了JBoss Seam这一轻量级Java EE 5.0框架,它旨在简化企业级应用程序的开发,提供了一种整合各种技术的强大方式。Seam的核心理念是消除Java EE组件之间的摩擦,使得开发过程更为流畅...