`
qtlove
  • 浏览: 16517 次
  • 性别: Icon_minigender_1
  • 来自: Jiangsu, China
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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/

分享到:
评论

相关推荐

    Jboss seam 一个深度集成框架

    ### JBoss Seam:一个深度集成框架 #### 一、JBoss Seam 的产生背景及意义 JBoss Seam 是一款由 JBoss 提供的开源框架,它致力于解决 JavaEE 应用程序开发过程中面临的诸多挑战,尤其是当涉及到多个不同框架时所...

    JBoss Seam

    《JBoss Seam:超越Java EE的简易与强大》是一本深度探索JBoss Seam框架的权威著作,由Michael Yuan和Thomas Heute共同撰写。本书聚焦于JBoss Seam框架,旨在为读者提供一个全面、深入的理解,以掌握其在企业级应用...

    深入浅出JBoss Seam

    Seam不仅仅是一个集成框架,它拥有自己的状态管理机制,允许框架之间通过注解和EL表达式实现深度整合。Seam的开发者对第三方框架有着深刻的理解,因此能够更好地将它们融合在一起,而不仅仅是简单的拼接。例如,Seam...

    jboss-seam2.0文档

    JBoss Seam 是一个开源的企业级开发框架,它旨在简化Java EE应用的开发过程,特别是在Web和富互联网应用程序(Rich Internet Applications, RIA)领域。Seam 2.0是其重要的版本,提供了许多增强的功能和改进,为...

    jboss教程及深入浅出JBoss+Seam

    【JBoss教程及深入浅出JBoss+Seam】是一个针对企业级Java应用服务器JBoss的深度学习资源,其中包含了两个主要部分:JBoss教程和对JBoss与Seam框架结合使用的详细介绍。这两个主题都是Java开发人员在部署和管理企业...

    Practical JBoss Seam Projects

    《实用JBoss Seam项目》是一本深度讲解JBoss Seam框架的书籍,不仅介绍了Seam框架的基础知识和特点,还通过丰富的实战项目案例,让读者能够亲自动手实践,从而深刻理解Seam框架在企业级应用开发中的应用。...

    JBoss Seam--A Deep Integration Framework

    JBoss Seam是一款开源的企业级应用框架,它以其深度集成的能力而闻名。这个框架的设计目标是简化Java EE(现在称为Jakarta EE)开发,通过提供一个统一的环境来整合各种技术和组件,如JavaServer Faces (JSF)、Java ...

    jboss-seam2.0文档.rar

    JBoss Seam 2.0 是一个全面的企业级Java开发框架,旨在简化Java EE(现在称为Java EE)应用程序的构建过程,尤其是在集成各种技术和处理业务逻辑方面。Seam 提供了一个统一的模型,允许开发者用一种更直观的方式来...

    Jboss_seam 中英文文档

    JBoss Seam 是一个开源的Java框架,它旨在简化企业级Java应用程序的开发。Seam 提供了一种整合的开发环境,融合了JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB) 3.1、Contexts ...

    java+架构系列培训课程_JBOSS_SEAM开发

    SEAM还深度集成了JSF,通过Facelets提供了更强大的模板引擎和页面构建机制。 #### 基于Facelets的JSF Facelets作为JSF的视图层技术,极大地简化了页面的构建和布局。以下是一个使用Facelets创建JSF应用的基本步骤...

    seam框架相关知识总结

    Seam框架是一个全面的Java企业级开发框架,它在2005年由JBoss公司推出,主要用于简化Java EE应用的复杂性,特别是整合了JSF(JavaServer Faces)、EJB、CDI(Contexts and Dependency Injection)等技术。Seam框架的...

    Seam 资源

    在Java开发领域,JBoss Seam是一个极具影响力的技术框架,它为开发者提供了简化企业级应用开发的强大工具。"Seam 简洁与力量超越Java EE"这个主题,揭示了Seam如何在Java Enterprise Edition(Java EE)的基础上提供...

    seam介绍

    Seam不仅仅是一个集成框架,它还提供了自己的状态管理机制,通过注解和EL表达式实现与其他框架的深度整合。Seam对ORM(对象关系映射)的支持尤为突出,尤其是在处理持久化上下文的生命周期中,避免了ORM常见的问题,...

    j-seam2.zip

    JBoss Seam 2 是一个全面的、集成的开发框架,主要用于构建企业级Java应用程序。它在Java EE 5平台上运行,旨在简化开发过程,提高开发效率。Seam的核心理念是将各种技术如JavaServer Faces (JSF)、Enterprise ...

    Seam In Action翻译版

    Seam是由JBoss公司开发的一个集成框架,旨在简化Java EE(Java Platform, Enterprise Edition)应用的开发,尤其是在处理会话管理和组件集成方面。这本书的翻译版为中国开发者提供了一种深入理解和掌握Seam技术的...

    深入浅出JBoss_2BSeam

    《深入浅出JBoss_2BSeam》这本书聚焦于企业级Java应用服务器JBoss以及Seam框架的深度解析。JBoss是Red Hat公司开发的一个开源应用服务器,它基于Java EE(Enterprise Edition)标准,提供了丰富的功能和服务,支持...

    Seam in Action

    《Seam in Action》这本书深度探讨了JBoss Seam这一轻量级Java EE 5.0框架,它旨在简化企业级应用程序的开发,提供了一种整合各种技术的强大方式。Seam的核心理念是消除Java EE组件之间的摩擦,使得开发过程更为流畅...

Global site tag (gtag.js) - Google Analytics