1,Component 不需要了解调度、工作流、其他Component。它只需要关注执行作业所需的代码的实现。
2,当用户请求Solution Engine去执行一个action 序列时,相应的Component就会被调用执行。BI Component相当于action 序列的执行结果。
BI Components are executed as a result of someone or something requesting the Pentaho Solution Engine to execute an action sequence.
自定义好的action 序列可以通过调度器、Web Service、工作流引擎或者JAVA API调用执行。
Action sequences can be executed by users, schedulers, web services, workflow engines and API calls.
BI Component并不缓存它与Solution Engine之间的调用,一个Component必须是线程安全的。如果Component需要创建全局资源或者调用静态的初始化方法,需要创建一个实现IPentahoSystemListener接口的实现类,并把它注册到 system/pentaho.xml文件中(新版本的在systemListener.xml文件中)。
每一个Component都需要了解执行任务时所需要的参数,比如脚本Component需要提供待执行的脚本,报表Component需要提供报表模板。
比如,在Pentaho Data Integration设计好一个转换之后,会生成一个.ktr文件。先用Design Studio设计好一个solution,保存为.xaction文件,该文件中定义了若干actions(引用 .ktr 执行DI中的转换)。由于Pentaho Data Integration对应的Component是 App Integration,那么先由BI的Solution Engine解析定义的solution,再交给 App Integration去调用的Pentaho Data Integration的lib 库执行.ktr文件。
(BI Server 中包含的Pentaho Data Integration(Kettle)的lib库)
3,如何创建 BI Component?
有四种方法创建 BI Component:
①从头开始。②将一个现有的类转化成BI Component。③继承org.pentaho.plugin.ComponentBase类。④继承org.pentaho.plugin.core.SimpleComponent。
①从头开始。②将一个现有的类转化成BI Component。③继承org.pentaho.plugin.ComponentBase类。④继承org.pentaho.plugin.core.SimpleComponent。
要想成为BI Component,JAVA 对象必须实现 org.pentaho.plugin.core.IComponent接口,IComponent接口又extends org.pentaho.core.audit.IAuditable 和 org.pentaho.util.logging.ILogger 接口。
继承ComponentBase类:
如果Component需要验证输入或者系统设置或者需要执行初始化工作以及清除工作,那么就可以继承org.pentaho.plugin.ComponentBase类
基类Component提供的一些方法如下:
①done方法:让Component有机会执行一些必要的清除操作
This method is called to give the component the opportunity to perform any cleanup operations that are necessary.
②executeAction方法:当Component执行它的功能时,该方法被调用。在这个方法里面可以调用其他的内部API来获得输入值、资源、请求参数、获得输出流。一般而言,在执行这个方法期间,Component会做如下处理:
a) 获得输入值。这些值可能是参数或者Component的配置。如果输入值不完整,Component会停止执行并给用户提示信息。
b)获取资源。资源可能是模板或者定义文件(definition files)
c)获得输出流
d)生成输出内容
e)返回执行的状态结果
③getLogger方法:这个方法为Component创建一个日志对象
④init方法:该方法在执行executeAction方法之前被调用,用来进行初始化操作。
⑤validateAction方法:该方法用来验证Component执行时的输入及资源。若返回false,则Component将会停止执行。该方法只能用来检查输入是否可用,但它不能检查输入的值。比如Component需要检查模板文件之类的资源是否在action 序列中定义好了,可以调用isDefinedResource()方法实现。
再比如:Component需要一个名为“employee-id"的输入,可以通过调用isDefinedInput("employee-id")来进行检查。
If your component needs an input called 'employee-id', you can check that it has been defined in the action sequence by calling isDefinedInput() with "employee-id" as the argument.
同理:如果Component需要输出,也可以通过调用isDefinedOutput("输出名")进行检查 。
⑥vaildateSystemSettings方法
该方法允许Component验证系统设置从而保证集合操作的正确性。比如说,Kettle的Component会检查系统中是否设置了基于文件或者RDBMS的资源库;再比如Email Component会检查连接EMail服务器的系统设置。
系统范围内的设置必须以XML文件的形式保存在 Pentaho Solution 的 system 目录下,系统设置对每一个Component实例都是一样的,且在应用程序
运行期间不会改变。
在system 目录下,会有一些 kettle、quartz、smtp-email等子目录。如果你自己开发的Component需要系统设置,你可以在system目录下创建一个自定义的目录,并将XML配置文件放在该目录下,XML文件可以任意命名,在XML配置文件中也可以以任何格式排列设置。
比如对于Email Component而言,可以通过PentahoSystem.getSystemSetting("config-xml-filename.xml") 来获得相关的配置。
getSystemSetting方法找到一个符合的entry,并将之返回给Component,Component并不需要知道系统的配置文件存储的位置。