BIRT包含几个引擎。一个引擎是一个提供一个特定领域的功能的一套Java API。例如,数据引擎包含管理数据的API,图表引擎包含生成一个图表的API。一般而言,BIRT包含四个引擎,报表设计引擎(design Engine),报表引擎(report engine),图表引擎(chat engine),数据引擎(data engine)。
a) 关于报表设计引擎
报表设计引擎包含验证一个报表设计文件的有效性和生成一个报表设计文件的API。报表设计引擎被BIRT Report Designer和任何定制的生成一个BIRT报表设计的Java应用程序所使用。生成引擎在创建一个报表文档时也使用报表设计引擎。报表设计引擎包含使用ROM技术规范来验证设计文件的元素和结构的有效性的API。
b) 关于报表引擎
报表引擎包含两部分:生成引擎和展示引擎。BIRT Report Viewer和定制的Java应用程序使用报表引擎来处理一个报表设计并按照设计中指定的格式生成报表。生成引擎包含读取和解释一个报表设计的API。生成引擎使用数据引擎来读取和转换来自由报表设计标识的数据源。生成引擎的输出是一个报表文档,这是一个报表产品中的一个中间文档。展示引擎处理由生成引擎创建的报表文档并按设计中指定的格式产生报表。和生成引擎一样,展示引擎也使用数据引擎。但是,在展示阶段,数据引擎从报表文件而不是数据源中获取数据。展示引擎它需要的任何一个报表发射器按照设计中指定的格式生成一个报表。BIRT有两个标准的发射器,HTML和PDF。BIRT也支持不是HTML和PDF格式的定制的发射器。图表报表项和定制的报表项扩展展示引擎来提供这些报表项的展示功能。
c) 关于图表引擎
图标引擎包含生成图表及将图表与来自数据源的数据关联起来的API。图表引擎的使用不仅限于BIRT应用程序。任何Java程序都可以使用图表引擎来创建和现实一个图表。BIRT Report Viewer 解释报表设计中的图标设计信息并使用图表引擎来生成图表。
d) 关于数据引擎
数据引擎包含获取和转换数据的API。当被生成引擎使用时,数据引擎直接从数据源中获取数据。当被展示引擎使用时,数据引擎从报表文档中获取数据。
1) 关于数据引擎组件
数据引擎包含两个主要组件:数据访问组件和数据转换组件。数据访问组件与ODA框架通信来获取数据。数据引擎的数据转换组件执行像排序、分组、累计和过滤来自数据访问组件的数据的操作。
2) 关于ODA框架
ODA框架管理ODA和本地驱动、装载驱动、打开连接并管理数据请求。ODA框架使用Eclipse Data Tools Platform项目来管理连接。ODA框架包含扩展点,籍此可以添加一个定制的ODA驱动。数据引擎扩展用于数据源的连接方法和驱动。如果有一个BIRT不支持的数据源就需要一个定制的ODA驱动。创建一个定制的ODA驱动时可能不仅需要扩展数据引擎而且还需要扩展BIRT Report Designer。如果数据源需要一个GUI组件来制定数据集,那么还需要一个BIRT Report Designer扩展。
应用开发者只需要了解公用的API,这些API包含在以下的几个包内:
a) org.eclipse.birt.report.model.api:这个包内包含了93个class,两个接口和一个exception,这个包是为那些想要定制report designer的开发者使用的,报表设计引擎包含这个包
b) org.eclipse.birt.report.engine.api:这个包包含了一个类,17个接口和四个exception,是给那些想要定制一个report generator的开发者使用的,报表引擎包含这个包
c) org.eclipse.birt.charthierarchy:这个包是给想定制一个chartgenerator的开发者使用的,图表引擎包含这个包
BIRT报表引擎(BIRT report engine)在几个环境提供了报表生成和翻译服务,包含在以下组件中:
a) Stand-alone engine:这个engine可以让开发者使用一个命令行程序来从一个report design文件(.rptdesign)中得到Html或PDF格式的report
b) BIRT report viewer:BIRT Report Designer使用它来预览report。这个程序是一个web程序,它运行在一个Eclipse内嵌的Tomcat中,这个Tomcat中有一个内嵌的report engine
c) Custom report designer with an embedded engine:一个定制的桌面报表应用集成BIRT report engine来预览报表
d) Web application that embeds the engine:一个类似于BIRT report viewer的Web程序,可以产生基于web的报表。
如下图所示:
另外,用户还能定制报表引擎,除了通常是集成到一个Web应用或者一个独立的Java应用程序外,定制的Java报表生成器质性和BIRT报表生成器相同的功能。和BIRT 报表浏览器Web应用一样,定制的Java报表生成器使用报表引擎的API来读取报表设计文件并生成一个报表。一个定制的业务逻辑来管理安全事宜、控制目录和确定输出的格式。
Report engine的核心engine运行并实施报表,而将其他的环境相关的任务留给运行该引擎的应用程序,比如:URLconstruction, image storage, and design file caching
BIRT report engine的API可以做以下几件事情:
a) 发现一组为报表定义的参数(包括动态参数和级联参数)
b) 获得参数的默认值
c) 产生任务(task)实施操作的应用
d)包含1到2个操作阶段((RunTask 然后 Render Task 或者RunAndRenderTask)
d) 为报表产生图片或chart
e) 产生报表文档
f) 运行报表产生HTML或PDF格式的输出
EngineConfig –设置报表引擎可选的参数.
ReportEngine – 用于运行一到多个报表任务
IReportRunnable –用于打开报表设计文档,并把句柄传给报表任务
IReportDocument – 用于打开报表文档,并把句柄传给报表任务,同时包含很多方法用于获TOC,数据等等
HTMLRenderContext – 定义展示HTML的环境,例如设置HTML图片地址,事件处理
PDFRenderContext – 定义展示PDF的环境,例如设置字体的地址,事件处理
HTMLRenderOption – 用于设置html的可选选项,比如导出时的路径
报表设计引擎(Design Engine)需要完成的事情:
1、用于产生或者修改报表设计文档,报表模板文档,报表库文档
2、有时候报表引擎需要修改报表设计文档,这个时候就需要调用报表设计引擎
3、如果报表引擎在运行时,事件机制和脚本机制中本身就包含修改报表设计的代码,这个时候也要调用报表设计引擎
4、用于获取和设置报表参数
5、可以用于获取报表设计的种种属性和参数
两台主机通信,数据从一台主机传到另一台主机主要有以下三步工作:
1、主机A发送的数据进入线路
2、数据在线路中传输
3、数据从线路的另一端进入主机B中
其实第3步与第1步所做的事正好相反,先来看第1步中数据是怎么流动的?这个过程主要经过了以下步骤:
1、应用程序将要发送的数据写到进程的地址空间(用户态内存区);
2、应用程序通过系统调用将数据从用户态的内存区复制到内核维护的一段内核缓冲区中,由于内核缓冲区通常是有限的,所以这个过程需要排队。内核缓冲区的数据可能来自于多个进程;
3、内核通知网卡控制器来取数据,网卡驱动器根据网卡驱动程序得到内核缓冲的地址,并将数据复制到网卡缓冲区,这个过程按连接两端的内部总线宽度来复制,比如32位总线每次复制32位比特;
4、网卡缓冲区将数据发送到线路中,释放缓冲区准备下一轮复制,这些数据在这步都会转为2进制,因为只有2进制的数字信号才可以在线路中传输。发送时,网卡会根据介质产生各种信号。
数据在线路中的传播速度取决于传播介质,光纤的速度快于铜线,一般接近光速。
并不是进入线路有多少数据,介质中就传播多少数据,这里有出口带宽的限制。众所周知,运营商在所有的基础交换节点上会设置关卡,用于限制数据从主机流入路由器转发队列的速度,只要流入路由器转发队列的数据,都会按路由器的出口带宽,流入其他网络。这种关卡设置实际上限制了你的主机发送数据的速度,也就是限制了主机的出口带宽。所以虽然主机发送数据的速度很快,但由于出口带宽的限制,这些数据要分批发送出去。
这些数据不会直接到达目的地,而是要通过多次排队转发到达目的地,转发之前可能要先排队。如果两主机在同一个城市或者接入的是同一个运营商,转发的次数或许会少一点。如果城市不同,会进入骨干网进行转发;如果接入不同的运营商(电信或者网通),这些数据必须进入骨干网再进入互联互通网络,由互联互通网络的交换机进行转发。
什么是带宽带宽一般指出口带宽或者入口带宽,指的是路由器或者交换机接收数据的能力,往往受运营商控制,价格昂贵。如果拿高速公路来做比喻,带宽类似调整公路的收费站,要知道收费人员也不是免费干活的。
共享带宽与独享带宽共享带宽,顾名思义,多台主机共用一定量的带宽。比如小区共享10M带宽,如果只有一台主机接入,这台主机数据出口速度理论上可达到10Mbit/s,换算成字节是1.25MB/s,即便只有一台主机接入,交换机对于共享带宽也会限制最高峰值的,所以实际速度要低于1.25MB/s。如果多台主机接入,这些主机输出数据之和接近1.25MB/s,这些数据不分你我地夹杂在一起从主机进入路由器,分别前往不同的目的地。
如果使用的是独享带宽,交换机会以这个速度(比如1Mbit/s)来接收来自主机的数据。这个交换机上的数据都来自同一主机,当然这些数据也是要排队的。
互联互通如果把互联网比做高速公路,电信和网络是两条不相连的高速公路,两大运营商早实现了互联互通,但是带宽少得可怜,所以如果你是网通用户在下载资源的时候选择网通服务站点下载,理论上速度会快点。
响应时间响应时间=发送时间+传播时间+处理时间
发送时间取决于带宽=数据量/带宽,比如发送100Mbit的数据,带宽为10Mbit/s,大约需要10s;
传播时间取决于主机间的距离=传播距离/传播速度;
处理时间包括排队转发时间(包括运营商互联互通的排队转发时间,骨干网上的排队转发时间,交换机排队转发时间等)
最近在用单片机做多功能电子钟,在用数码管动态显示时间的时候遇到了重影问题。现在已经解决,正确的步骤应该为:
1、消除重影
如果数码段选端连接P0,则共阴极数码管消除重影为:P0 = 0;
2、数码管位选
如果数码管用138芯片进行位选,代码如下:
// 实现数码管位选 LS138A = (i) & 0x01; LS138B = (i>>1) & 0x01; LS138C = (i>>2) & 0x01;
3、送入段选数据
根据需要利用P0引脚送入段选数据。