运用Ruby纤程进行异步I/O:NeverBlock和Revactor
Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。

作者 Jason Weathersby译者 张龙 发布于 2008年1月30日 下午10时42分
Eclipse的商业智能和报表工具(BIRT)项目是一个基于当今流行的Eclipse IDE的开源项目,用于在Java或者J2EE环境下构建和部署报表。该项目提供的主要下载项中包括以下内容:
BIRT项目于2005年夏天发布了第一个主版本并且到目前为止已经拥有了超过100万的下载量。请访问http://www.eclipse.org/birt来更多地了解BIRT项目,这上面有关于BIRT项目的介绍,指南,下载以及使用的例子。我们将以对BIRT设计器的介绍作为本文的开始,并且以对BIRT查看器的讨论作为本文的结束。其中,BIRT设计器用来进行报表的设计,而BIRT查看器则用来部署设计以及产生最终的报表。
BIRT 2.2 Collage
在BIRT的中间位置是由一系列Eclipse插件组成的报表设计器,这些插件构成了一个提供拖拽能力以快速设计报表的设计透视图。报表是以XML格式创建和存储的。
Figure 1 - Eclipse BIRT Designer
此Eclipse透视图包含了很多视图,这些视图提供了创建报表的功能。我们将在后面对此进行阐述。
报表编辑器用来构建报表并且扮演着一个画布的角色来定位和格式化报表元素。在该视图中有很多标签页,例如布局,母板页,脚本,XML源以及预览。
Figure 2 - BIRT Preview
在构建报表之前,我们通常都要建立数据源。BIRT提供了数据浏览视图以简化该任务。
Figure 3 - Data Explorer View
Eclipse视图允许设计者向报表设计器中添加数据源和数据集。本质上,一个数据源仅仅就是数据连接。数据集可以被理解为一个可执行的查询以及该查询所返回的特定的列。
BIRT提供了对JDBC,XML,flat file(译者注:falt file是一个只能连续的读写的计算机文件。它包含一条或多条记录,每个记录包含一个或多个字段,http://en.wikipedia.org/wiki/Flat_file)和脚本化的数据源的驱动。随着BIRT2.2的发布,BIRT还提供了一个Web Service数据源和一个改进的flat file驱动,现在该驱动已经支持CSV,TSV,SSV以及PSV文件格式。
BIRT还提供了一个叫做联合数据集(Joint Data Set )的特殊数据集以使用内外连接来整合现存的数据集。当从不同的数据源中整合数据集时该特性的作用就显得尤为明显。除此之外,现在BIRT数据源具备导入或者链接本地连接配置文件的能力以此来达到跨报表的连接共享的目的。
在增加报表参数和数据体时我们也会使用数据浏览视图。报表参数将呈现给报表的最终用户并且经常用来为特定的用户进行报表的个性化定制。例如:报表参数可以依赖数据集参数来修改查询,我们可以在BIRT的JavaScript表达式中用此来改变报表元素的样式和可见性,或者在脚本事件中基于选择的输出格式来定制内容。
报表参数可以是静态或者动态的。静态参数允许用户选择预先定义好的值集或者在文本框中输入一个值。动态参数可以是绑定到现存的BIRT数据集的一些数据。例如,用户可以从一个数据集提供的客户列表中选择一个客户。
此外,BIRT支持级联参数,它可以显示多个下拉列表,并且一个下拉列表显示的内容会随着前一个列表的内容的改变而动态改变。例如,一个级联参数可以在第一个列表中显示客户列表,在第二个列表中显示选中客户的订单。
Figure 4 - Cascaded Parameter
现在BIRT2.2的动态参数可以支持使用JavaScript表达式来显示文本和参数值。这个改进使得参数列表以一种更符合逻辑的方式呈现给最终用户。例如,在开发一个详细订单的报表时,你可能希望展示一个所有订单的动态参数列表。表达式使得你可以为每个订单增加相应的客户姓名。图5显示了一个动态参数列表。
Figure 5 - Dynamic Parameter Expression
数据浏览视图也支持数据体的创建。这是BIRT2.2的新特性,且与新的交叉报表元素联合使用。BIRT数据体是多维的,基于一个或多个BIRT数据集,使用新的跨标签数据立方构建器(Cross Tab Cube Builder)来构建的。请参见下面的图表。
Figure 6 - Cross Tab Cube Builder
除了上面提到的特性,BIRT现在提供两个新的项目类型使得Java开发者可以创建更多的数据源。这些数据源基于Open Data Access(ODA)框架,该框架由Eclipse Data Tools Platform(DTP)项目提供。我们构建图形界面时需要使用ODA设计器插件,该插件是报表开发者使用相应的驱动时所需要的。当开发你自己驱动的运行时部分时,需要利用ODA运行时驱动的插件项目。该插件通常部署在一个运行时环境中,主要负责处理对数据源的调用和结果的获取。
Figure 7 - BIRT Projects
BIRT调色板视图用来向报表画布中添加报表条目。调色板视图包含了一些报表元素,这些元素用来显示从数据浏览视图中获得的数据。仅仅是简单地从调色板视图中拖拽报表到报表编辑器中就可以使用该报表了。BIRT报表元素支持所有可在属性编辑器视图中配置且可被BIRT的报表对象模型(Report Object Model)描述的属性。
Figure 8 - Palette View
调色板支持以下报表项
dataSetRow["contactLastName"] + ", " + dataSetRow["contactFirstName"]
Figure 9 - Aggregation element
Figure 10 - Chart Wizard
Figure 11 - BIRT Cross Tab element
库资源管理器视图具有拖放功能,使得用户可以从现存的报表库中拖放组件到当前报表中。 BIRT中的库是一些可被其他报表使用的高效报表XML片段。这些库被使用它们的报表所引用,这意味着库的改动会自动地反映到所有使用它们的报表中去。一个很好的示例是使用一个报表库存储公司标识(logo)。如果公司标识改变了,只需要更新库就可以了,而不用更新引用它的报表。库被引用的位置是相对于资源文件夹的,在设计阶段通过设计器,在运行阶段通过Web查看器都可以配置该资源文件夹。
Figure 12 - Library Explorer
属性编辑器视图用来对增加到报表上的报表元素设置属性。视图中显示何种条目将决定于报表编辑器中所选的元素类型。属性窗口中显示一些通用设置,例如样式,宽度和字体信息。此外,大多数报表元素支持可视化的属性设置,这样就可以动态地隐藏内容了。在属性标签的右侧,视图具有如下特性:排序,分组,映射,高亮和过滤页。
大多数功能都是自说明的,映射标签页允许动态构建(使用表达式构建器),以使得报表元素的显示值可以动态改变。例如,如果月份行的值是“1”,你可能想显示“January”。高亮标签页根据条件来动态地应用不同的样式,例如以红色来显示低销售量。大多数功能都允许在一个条目上应用多个条件或者关键字。一个条件可能改变字体颜色,而另一个条件可能改变字体大小。一个排序关键字可以按字母顺序列出结果,而另一个排序关键字却将“Jones”放在列表的最上面。
Figure 13 - Property Editor
此外,在BIRT2.2中,当使用高亮时,报表开发者可以指定样式而不必手动地去设置样式属性。
Figure 14 - Style Highlighting
大纲视图展示了报表设计的图形化继承体系,同时说明了报表元素与容器的关系。我们可以直接在大纲视图中选择报表元素,当报表设计非常复杂时,这个功能非常有用。此外,在BIRT2.2中,大纲视图可用来导入或者链接外部样式,也可用来查看实现了脚本事件处理器的报表元素。
Figure 15 - Outline View
导入一个样式表会将该样式表的值复制到报表XML中。使用一个外部样式表允许你链接到BIRT资源文件夹中的样式表。
BIRT2.2还提供了两个新视图。一个视图显示example报表,另一个视图显示example图表并且提供了Java代码以产生图表。当在Java应用中使用图表引擎时会使用到该视图。
Figure 16 - Example Views
一旦报表开发完成了,我们就可以使用BIRT的example Web查看器部署它们。在BIRT2.2中该查看器已经得到了改进,它是一个基于AJAX的J2EE应用,说明了如何使用BIRT引擎来产生和渲染报表内容。
Web查看器可用来产生和渲染报表,同时也支持更多的交互性特征,例如内容表格,以多种格式导出报表内容,客户端和服务器端打印以及报表分页。利用查看器导航和工具栏使得这些特征成为可能。下图展示了使用查看器的一个示例。
Figure 17 - Example Web Viewer
Toolbar
查看器的工具栏有很多图标,他们可以完成内容表格的显示,重新运行报表,导出数据,以多种格式导出报表以及客户端和服务器端打印等任务。一个内容表格是基于报表设计而自动产生的。通过修改报表的分组片段可以定制内容表格。要从example查看器中访问内容表格,请选择该图标
Figure 18 - Example Table of Contents
Figure 19 - Example report parameter dialog containing cascaded parameter
一个改进的数据导出对话框在BIRT2.2中首次出现。可以通过图标
激活该对话框。
Figure 20 - Example Export Data Dialog
结果集被显示在一个下拉列表中,该下拉列表包含了报表中所有数据绑定控件。这些结果集并不是BIRT的数据集,但却包含了数据容器中绑定的列,而该数据容器中的数据则来自于一个数据集。这些可用的列显示在左边的列表框中,而对话框控制着这些列的导出。数据导出分隔符也已经得到了改进以支持更多的分隔符,例如制表符,分号,冒号,垂直线。此外,数据可以用用户指定的编码导出。
查看器同样支持以多种格式导出报表。利用导出报表对话框就可以完成报表的导出,我们可以通过选择图标
来访问该对话框。
Figure 21 - Example Export Report Dialog
该对话框允许报表用户将报表导出为Word,PowerPoint,PDF,PostScript和XLS 格式。此外,用户可以选择导出所有页面或者指定范围的页面。
BIRT中的客户端打印是在example查看器中完成的,这是通过用户选择图标
将报表转换为PDF格式实现的。用户可以利用标准的PDF功能打印或者保存报表。
Figure 22 - Client Print Example
BIRT2.2的example查看器也提供了服务器端打印功能。该特性可以通过在web.xml中做如下设置而禁用。
<context-param>
<param-name>BIRT_VIEWER_PRINT_SERVERSIDE</param-name>
<param-value>OFF</param-value>
</context-param>
可以通过选择图标
来访问服务器端打印功能。
Figure 23 - Example Server Side Print Dialog
该对话框将列出可用的服务器端打印机以及影响打印结果的各种设置
Viewer Navigation Bar
当显示一个多页的报表时我们将使用查看器导航条。分页是由报表元素和分组的分页符属性来决定的。这些属性就像使用前后分页符或者分页符间隔那样简单,而分页符间隔则指定了将一个分页符插入到产生的HTML中之前一个容器元素要处理多少行。当通过Servlet映射来使用查看器时,其默认行为是加载首页且使得导航条控件可用。导航条包含了可以向前向后或者直接定位页面的控件。
利用Web Tools Platform项目(WTP)的一部分,BIRT2.2现在可以支持Web项目。该项目类型会将example查看器自动部署到你所选择的应用服务器中。此外,新的BIRT标签库也会被部署进去。通过新建项目,在Business Intelligence and Reporting Tools类别下面选择Web项目,我们可以使用该项目类型。
Figure 24 - Web Project
现在Web查看器包含了一个标签库,该标签库可被用来定制查看器的行为。我们可以通过两种方式部署该标签库,其一是按照通常方式部署查看器;其二是利用BIRT的Web项目部署向导。此外,如果你想将BIRT部署在一个上下文中,并且将标签库放置在一个单独的上下文中,你可以通过复制birt.tld到你的WEB-INF\tlds目录下并且从查看器库目录中复制coreapi.jar,modelapi.jar,viewerservlets.jar和com.ibm.icu_3.6.1v20070417.jar到目录:新上下文/web-inf/lib下来实现。将下面的代码添加到你的web.xml文件中:
<jsp-config>
<taglib>
<taglib-uri>/birt.tld</taglib-uri>
<taglib-location>/WEB-INF/tlds/birt.tld</taglib-location>
</taglib>
</jsp-config>
在这种方式下,报表将通过BIRT查看器被引用,而不是新的上下文。
查看器标签库包含5个标签:param,paramDef,parameterPage,report和viewer。每个标签都有多个属性来控制查看器的行为。

Figure 25 - BIRT Tag Library
这篇文章介绍了BIRT2.2的一些新特性。请访问BIRT的网站和BIRT 新闻组 来了解更多信息。
查看英文原文:An Introduction to the Eclipse Business Intelligence and Reporting Tools
译者简介:张龙,同济大学软件工程硕士,现就职于理光软件研究所。主要从事文档工作流和办公自动化解决方案的研发工作。热衷于Java轻量级框架的研究,对敏捷方法很感兴趣。曾有若干年的J2EE培训讲师经历。参与InfoQ中文站内容建设,请邮件至china-editorial@infoq.com。
Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。
InfoQ中文站有幸与Google中国的产品经理杨巍先生在一起探讨了OpenSocial的相关话题,包括OpenSocial的初衷、构成要素、实现方式、以及要实现它的技术储备等等。
Ryan Cooper对Amr Elssamadisy的新书发表了评价,并认为书中提供了一种为实施敏捷量身定做的框架。本书并没有给出一种人人可用的敏捷方法,而是为读者提供一些模式和工具,用以找出哪些敏捷实践可以最有效地达到该组织机构的特定目标。
这个由业界主要专家们参加的座谈会探究了在使应用程序具备尽可能好的伸缩性及性能的过程中所面临的挑战和思考过程。
本视频主要对OpenSocial进行了分析,并对实现的方式进行了介绍。其中包括:OpenSocial的开发经验、Container Provider的技术准备、平台的构成要素、具体的规范、以及对未来的展望。
Memcached在大型网站被应用得越来越广泛,但是Java客户端并不多,本文作者基于现有的开源客户端进行了封装优化,并翔实记录了这一过程。
在他们文章的第二部分,作者探讨了动态业务应用的架构并介绍了资源容器的概念。他们示范了如何在JEE之上构建这个架构,以及它如何影响实现生产力。
ClickOnce让WinForms应用程序的部署轻而易举。David Cooksey演示了如何在ASP.NET中编写一个HttpHandler来实现对ClickOnce部署的版本细分。
3 条回复
回复