Eclipse BIRT项目

 


主持人:接下来最后一位演讲,请王磊介绍Eclipse  BIRT项目,讲完之后,我们会有自由交流的时间。
   
   
王磊:Eclipse很奇怪,起的名字“BIRT”,我以为是鸟,后来发现自己的文盲,与鸟的意思不一样,为什么说它的意义不亚于Eclipse第一次出现。报表在企业开发中是一个重头的内容,在过去很长时间以来,开源软件在企业市场中没有什么作为,不管是谁,在企业市场上它其实都很有限,为什么这样呢?因为它只是一个开源的东西,它少了很多东西,但是BIRT出现以后,为企业市场提供开源的软件报表解决方案,所以BIRT不管对Eclipse还是对KHD都是非常重要的事情。现在BIRT已经到了2.1,今天介绍也是以2.1为主。
   
内容包括简介、应用,其中框架和整合会讲一些技术的东西。最后会有一些思考,会有一些整合的概念。大家拿到BIRT项目,我可以在我的Web服务器上使用,使用的时候注意什么内容呢?比如我们公司做一个项目,我的BIRT怎么用?最后一点,BIRT的思考,有的人用SDI组成一个服务器,BIRT也在这个基础之上,怎么做到服务端报表中心,这个地方也是要思考的。
    BIRT
背后的公司是安迅公司,它是美国一个著名的企业软件公司,它做企业数据服务包括报表,它加入了Eclipse组织,在自己的软件基础上开发了这样一个BIRT程序。它在Eclipse的平台开发的时候也看到一点,RCP的威力,包括安迅这样的大公司,报表公司可以排前十名的公司,它也利用EclipseRCP来做事情,说明RCP的好处,也说明Eclipse平台的好处。这样一个实力雄厚的公司支持BIRT,我们会有什么好处?最大的好处,它有开源的版本,它也体现软件服务的概念,可以花95美元买它的服务,可以减少风险。
   
开放的BIRT,为什么要开放?包括以下几点:第一,BIRT面对的是软件开发商。大家做项目的时候面对最终用户,但是在我们做企业市场的时候,没有哪个报表是面对最终用户的,不可能把人事人拉过来做报表,一般报表面对的始终是开发人员,利用报表工具开发之后给客户用,这就涉及到二次开发,如果客户拿一个报表工具做二次开发,什么都没有,资料都没有,怎么做开发,所提供完善的API。第二,开放数据源。我们都知道企业市场中最重要的一点是数据,但是数据的方式各种各样,比如基于文件的数据库等等,这种数据源非常多,各种数据源可能都会用到,名字叫做Eclipse  ODA,通过这种方式向数据进行访问。第三,开放式的数据集。第四,支持更多的输出格式,报表都给业务人看,国内就是ExcelWord比较多,输出格式比较多,要留有余地。第五,完善的报表控件,包括文本显示,比如表格、图片,如果说一个报表只提供一个文本,什么都没有,那就根本没用。第六,易于扩展,以上所有的东西,如果用户需要二次开发,可以在里面加入我的输出格式,假如我的数据集、数据源。第七,易于整合,不仅是支持跨平台,支持B/SC/S结构。
    BIRT
的数据服务,通过两个扩展点,odadataSource,实现若干个接口,可以提供自己的数据运行,像BIRT默认提供了CDCB数据源,还有文件数据源、等等数据源,以后我们数据可能来源于网络,再比如说我来自于搜索引擎等等,这时候需要提供自己的数据源,提供自己的扩展点。design.ui,需要一个ui界面,提供数据源配置。如果要实现ODA数据源,IDriver,大家看到第一眼JDPdriver,取决于连接,还有IConnection,要取数据集,这个地方IQuery是一个重点,根据用户输入方式,来反馈数据。IResult是反馈数据集。倒过来看一下,为什么设计成这个样子,因为报表数据员源和一般所用的数据源有一个质的区别,所以第一只需要只读,不需要修改数据,或者事务处理。第二,数据源类型多种,有数据库、文件、网络等等。第三,一般是平面型数据。
   
这张图非常简单(见图),它和JDP区别在什么地方,它少了提交,它不需要更改数据,不需要刷新数据,只需要取数据,这是它和一般的GDBC很像,但是和GDBC有质的区别。
   
接下来我们是不是要做数据服务扩展,如果要做数据服务扩展,要做哪些内容?第一,可以使用JNDI数据源,我们在workserver部署了一个JNDI数据源,供多处使用,但是我们report使用的时候,肯定不合适。可以通过这种方式扩展一个JNDI数据源。第二,word早期的版本1.0、或者2.0,有一个冗池,我但是在系统比较大的情况下,每一个BIRT报表的实现,提供一个数据库的连接,一个数据库连接长期使用的时候,会发现数据库很快会爆掉。这时候就要借鉴我们的数据库缓冲池,可以保证自己的性能。第三,可以使用对象作为数据源,比如来源于数据库数据源,来自于文件,比如我拿一个对象的时候,我完全可以把对象作为一个数据源。第四,可以支持ORM,如Hibernate,用Hibernate取来数据。JNDI数据源,如果大家需要的话,可以上Gocom查询。
    BIRT
的模型ROMBIRT设计模型是怎么设计的,我们可以从中学到什么东西?它包括很多基本元素,比如元素模型,比如标签、文本,每个文本里面可能有一定的属性,比如有附件,它包含很多的属性。
    BIRT
的源代码可以分成两块,第一是实体模型,比如输出标签,包括文本,包括表格包含哪些子标签,接下来模型控制类,提供模型对外的访问接口。下面看一张结构图(见图),在一个报表实体模型中,它一个里面可以被多个模型控制,比如一个表格的模型,可能有若干个模型控制类控制它,这两块加起来成为一个报表模型,我们经常说系统分层,比如分成模型层、视图层、数据库层、服务层,报表模型层包括两部分,实体模型和模型访问类,像我们通常所说的模型,一般是简单的把普通数据库,数据库模型取回来一个实体类或者简单的东西,其实有一点误解,不把相关的操作控制放在里面,我单独提出一个控制类层来处理。这样有什么好处?模型只来表示数据和关系,在控制类,比如保存成其他格式,这种控制类不放在数据模型,这样的设计接耦,还可以把稳定和不稳定的分开,实体模型比较稳定,但控制模型一般不太稳定,通过把自己的模型封装起来,通过API接口,提供外部应用。
    BIRT
报表引擎的结构,数据引擎不包括UI和设计器那一块,通过ODI的扩展,可以拿到一个结构化数据,或者来自于一个数据库、来自于一个文件,等等,这时候数据已经有了,要提供模型。报表的实际模型,从文件或者通过某种方式,得到这样一个模型,现在模型有了,数据也有了,做的是数据的填充,我将拿到的数据和我拿到的模型,根据模型把数据填充到模型里面,生成一个带有完整数据的模型。这个地方也是模型,但是带有完整模型,左边文件解析是描述性模型,右边是实体模型,通过Emmiter输出报表。这张引擎结构是数据、格式、填充、输出。说到输出,它提供了一个emitters,通过这个扩展点,它提供了两个输出,如果真是在项目运用的话,ExcelWord都是需要的。政府一般是用Excel来做报表,如果不提供Excel报表,他们用起来会觉得非常麻烦,或者不乐意使用。以后可能会有一个ODF格式,这是一个很遥远的事情。
    BIRT
的扩展,BIRT提供很多元素,比如标签、图片、表格、数据等等,提供了很多。大家也知道,没有一个东西加二次开发肯定要提供一些特殊的东西,2.1提供数据交叉表支持,比如我提供一个特殊的动态的东西,旋转功能怎么提供?它包括三部分内容,第一,GEFFigureBIRT的设计器是用GEF做的,用来可视化设计。你为了把自己的报表让人看到你需要提供拓展实现,当设计器减轻你的元素的时候,显示在界面上,会调用UI里面的方法去画一张图,这是为设计器提供的。第二,数据模型,要提供一个空间,用来描述数据机关系,要有数据表示,需要提供一个数据模型。第三,数据存取,用来从文本中保存和读取模型,通过一个代码转成自己的模型,这个模型要给UI解释。所以一个报表包括三关:第一要提供报表模型;第二要提供报表模型的存储和读取。第三,UI层要提供一种东西方便用户可视化设计。
   
扩展的控件,已经扩展的控件,图表Chart,可以制成各种图形比如说饼图、柱形图等等,它通过刚才说的三个扩展点扩展出来。还有旋转的文本,比如以后可能扩展一个交叉表。
    BIRT
的图表,Chart作为一个扩展点来处理的,Chart自身提供了相关的扩展点,用来支持更多的图表类,和更多的输出格式。它提供devicerenderers用来扩展输出格式,还有aggregatefunctions功能函数。企业里面各种各样的函数很怪,没有一个功能把所有函数处理掉,但是你系统有特殊处理,你可以在专业代码里处理好然后放进去,或者提供这样一个功能函数,提供这样的功能函数比较容易,不用用户每次写代码。
    BIRT
的缺陷,第一,PDP的输出速度。对国内用户影响不是很大,对国外用户影响非常大。我做过测试,一个400页的PDF的输出,在奔腾2.4G的基础上,大概要15分钟到20分钟,如果这样处理,系统什么事也不要干了。这是比较严重的问题。我上次统计的数字在400兆到500兆左右,占的空间非常大,前两天做了一个额外OS的测试,输入PDF也是用AITX,它输到一半的时候把我的机器搞死了,所以PDF输出是一个很大的问题。第二,不支持Excel输出。为什么这样说呢?企业、政府都用惯了Excel。第三,报表库支持不足。如果报表库提供很多的空间,报表支持不好,因为很多不足的地方,我可以单独写文章描述这一块。第四,缺少统一的数据源进行部署。我每一个报表有一个数据源,比如这这个报表设计了连到管理机器上的数据源,第二张报表也是连到管理机器上的数据源,但是真正运行的时候,还是两个连接,尽管是同一数据源,但是它不认为你是同一数据源。第五,缺少服务端支持。现在看它可视化设计、看它转化、输出都非常好,但是不知道服务端,你会非常吃力,为什么会非常吃力?包括它的核心,我们用炸包的方式,如果你不出意外,会很头疼。第二,你的报表什么地方,怎么取,你的报表库放在什么地方,怎么可以让你的报表程序可以访问你的报表库,你的数据源怎么办,如果你有一百张报表没有统一数据源,要花100200个连接,这样你的系统什么事情也不要做了。
   
整合BIRT到小应用系统中,我在系统中如果用它要做哪些事情?还有大企业系统,每天有500人看东西,每天生成报表。首先,说一下BIRT小应用整合,作为一个方便的查询控件使用,大家做查询的时候,进入查询条件,后来又各种组件会帮助你查询,但是BIRT本身也可以起这样的作用,你可以做一个查询控件,自己会分页,翻阅非常快,你可以当做一个很方便的查询控件使用。第二,小数量的并发访问,所以整合BIRT小应用系统问题不大,对方访问量的非常小,一次访问十次八次,连十次八次的库然后释放也没有关系。所以,整合BIRT小应用系统是比较容易的。
   
整合BIRT到大众企业应用系统,第一,一个公司有上千人,每天有几百人访问,每张报表都起一个数据库文件,估计两天下来,数据库管理人员就把你吃掉了。第一地方要支持JDBC数据源问题,不可能每个报表都连这个数据库,而是把报表统一到一个数据库上,至少若干个数据源用一个缓冲池处理它。第二,企业做得的业务系统,数据来源是很广泛的,如Hibernate,对象等。文件型数据分析起来很烦,真的是这样,大众企业运行系统,它的数据是几年积累下来的,各种数据源都要支持。第二,监控功能,大企业对兼容性等很多方面要求都很高,你要提供缓存,还有日志,我要知道你在什么时候做的表表,还有安全,哪些人可以访问这个报表,哪些人不可以问这个报表。企业中的年度报表、月报表、周报表,每周六、周日的时候送一张报表,还有任务,计划任务要做实。第三,性能的调整,系统伸缩性。公司要你做PDF的格式,怎么办?一个用户五分钟生成400页的文档,十个用户系统就是40分钟做不了事情。你们公司有一百人,一个系统一天什么事不能干了。要做什么事情,性能少不了,做PDF输出,要考虑到伸缩性。第四,多种输出格式支持,比如ExcelWord
    BIRT
带来的思考,BIRT是一个企业应用软件,它包括两部分,第一部分,UI设计器。第二,输出引擎。第一有ODF扩展数据源,第二输出格式用扩展点,也就是说,plugin能不能在服务端用起来,如果在服务端不能用Plugin,输出扩展用不上,如果你载入不了它的扩展点,你怎么拿数据源,这时候它是Eclipse第一个把Plugin应用到Server端,我们今天如果加一个Word输出,我只要把Plugin拷进去,所有的运行系统都有这样的功能,组件化。第二点是开放性、易扩展。第四点,还有就是可靠性,这是微内核带来的好处。WindowsLinux比哪个更可靠,很显然Linux更可靠,Linux从结构的角度讲是一个微内核。BIRT带来的最大思考,它第一次把Eclipse技术引用大Server端,我说如果有一天出现一种什么样的软件,我只有一个OSGI,如果用户需要Web服务器,插一个,如果用户不需要,就插其他的东西。总之,我需要什么买什么。
    Eclipse  BIRT
相关资料,一个是BIRT的网站,一个是我们公司的网站,上面文章很多,大家可以阅读。
   
大家有什么问题可以问一下。
   
提问:现在报表工具里面有两个功能应该算是比较重要的,一个就是Group,里面又分的很细。还有一个就是条件查询,BIRT能实现吗?
   
王磊:BIRT组表是支持的,比如在做group表,在里面可以放置自己的查询软件,自己可以写脚本,计算函数。第二,Eclipse的输入参数非常全,它有一个报表参数,可以定义报表参数是什么格式,你输入格式是什么,是用文本的格式还是用java的格式,你可以取得这些参数,在你的界面上输出这些参数。
   
提问:报表工具里面还有一个非常重要的问题,就是Cim输入?
   
王磊:有两种方式,我们先假设第一种情况,报表设计的文件自己做的,输入或者不输入BIRT处理不了,如果把Cim放在设计文件里面,这是没有办法处理的。第二种情况,是参数,可以强迫用户,在界面上输入cim语言来查询结果。但有一个问题,这个输入BIRT不管,BIRT只负责查询,安全处理是由程序员自己处理。它的数据源和普通的数据库的数据源不一样,它占用一个接口,在这样的环境下没有注入的概念,因为它支持文本,在这种情况下,它不可能针对数据库提供一个通用接口,所以只能交给自己来处理。
   
提问:听到最后,前面听你讲的,好象BIRT现在不能用到服务器端?假如我设计一个报表,它怎么存储?
   
王磊:设计的时候分成两块,服务器端和客户端,……这个设计文件准确地表述了这个报表包含的模型,你把报表文件读取这个东西。
   
提问:刚才你讲BIRT,我现在分不清它哪些部分在服务器端,哪些部分在客户端?
   
王磊:因为包括拖拉,包括可视化设计,一般在客户端做不出这种效果。
   
张龙:没有关系。展现的是一个标准的
   
王磊:它可以在服务端应用,通过扩展点支持输出格式,,所以必须有一个Plugin。它在服务端也是用Plugin技术。
   
提问:我在做报表的时候,假如我做了一堆报表,数据源固定写在XML文件中,有没有办法统一部署?
   
王磊:你要提供一个数据源扩展点,在网上有一个JNDI例子。
   
提问:即使是JNDI…
   
王磊:你可以在此基础上扩展,比如那个地方设定一个参数,或者你有一个报表库,大家都用,你愿意扩展数据源解决问题,最好的办法通过一个ID号,服务器端和客户端可以是一致的的。第二种方式,你把所有数据源放在一个Laber里面,这种方式也可以解决问题。
   
提问:因为好多的报表报头报尾都是可变的,假如BIRT直接在B/S结构来定义报表,能不能在服务器上
   
王磊:我不知道修改是什么意思,显示结构是可以的,假如这个地方是一个表格,定义成普元公司,输入参数。我可以定为一个参数,当B/S结构用这张报表的时候需要用这个参数,他会认为参数替代里面的内容,文件没有改,但是通过在B/S结构上输入来
   
提问:假如原来显示的是5列,现在我在B/S结构显示是3列。
   
王磊:这有两种办法,还是选参数,在你的程序例写一段Jarspron的代码,根据情况隐藏或者显示这个链,有一个条件改天,当你满足条件的时候可以隐藏这个链,通过外部参数,控制代码读取外部参数,这个时候你没有修改报表文件,但是达到了一样的效果,外边还是参数,里面放一个控制代码,控制代码和参数出来报表。
   
提问:等于表的结构在服务器端是没有改变的?
   
王磊:限定文件改了,输出改不了,通过这样的控制改的,我也不太提议在服务端改设计文件,如果你要把设计文件改了,别人怎么办?在不同条件下才变,如果把设计文件改了,在大于10的条件下是4行,小于10的条件是3行,如果把设计条件改了,就麻烦了,别人看了有的时候是3行,有的时候是4行。
   
  
主持人:我们安排了一个集中的时间,这一段的演讲就到这里,慢慢一下午的时间安排的非常满,大家拿到的资料袋也是厚厚一叠,我们虽然做了充分的准备,但是大家可能还有意犹未尽的地方,希望大家能够仔细填写这张反馈表,这张反馈表会知道我们做下一次主题的规划,凭这张完整的反馈表,今天可以领三样东西,第一是US的光盘,可以看一下US是在Studio都用了哪些技术,自己感兴趣都可以和我们架构师来交流,我们很愿意和大家一块儿分享相关的知识。第二样东西,我们会送给大家一本书,这本书是我们CEO刚刚出版的一本书,《构件中国面向构件方法的实践》,如果大家关注技术方法的话,现在国际上推的构件标准叫SCA,去年刚刚发布0.9,普元前一段时间刚刚加入这个国际组织,是作为亚洲唯一一家中国的公司来加入这样一个国际标准组织,大家关注这个标准的话,可以感受到IBMBEA、甲骨文等等大公司在推动这样一个标准建设,SCA是推动SOA发展的一个重量级的标准,它代表了未来的技术发展方向,大家也可以上我们网站和那本书里了解构建技术的内涵。第三样东西,我们有一个Gocom精美的T恤衫,每个人可以凭反馈表来领取这三样东西。
   
今天一下午主要还是由我们核心架构师跟大家分享这些知识,通过交流,更能擦出思想的火花。接下来大家休息十分钟。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值