Drools - YUHAO-ZX/StudyCollection GitHub Wiki
官方文档解读:http://docs.jboss.org/drools/release/6.2.0.Final/drools-docs/html_single/index.html
类功能划分
1.KIE将扫描类路径中找到所有与它kmodule.xml JAR文件。每找到JAR由KieModule接口表示。
2.kmodule.xml文件是选择资源,知识库和配置的基础知识和会话描述符(描述kbase,ksession的配置信息,具体配置解读见文档)
3. KieContainer 用于创建kiesession,kiebase的容器
4. KieServices 用于提供kie服务的总对象(is the interface from where it possible to access all the Kie building and runtime facilities),可以创建KieContainer
5. KieBase 特别是KieBase是应用程序的所有知识定义的存储库。它将包含的规则,过程,功能,和类型的模型。本身不包含数据,创建成本高,可创建kiesession
6. KieSession KieSession在运行时数据存储并执行。它是从创建KieBase或更容易,可直接建立从 KieContainer它是否已在
ksession.execute(...)
7.可为KieSession创建监听:ruleRuntimeEventListener,agendaEventListener和processEventListener
8.由于纪伊项目也是一个Maven项目在pom.xml文件中声明的groupId,artifactId和version用来生成一个ReleaseId唯一标识您的应用程序内的项目。这使得从项目中的新KieContainer的创建通过传递它ReleaseId的KieServices。
9. KieFileSystem KieModule.xml 也可以不用声明和创建,可以通过KieFileSystem来创建
10. KieModuleModel 用于没有KieModule.xml文件声明,使用KieFileSystem来动态定义kbase,ksession配置
11. KieBuilder 所有资源最后最后通过KieFileSystem抽象到KieBuilder
12. KieRepository KieModule的容器,这里放着KieFileSystem中的KieModule
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = ...
kieServices.newKieBuilder( kfs ).buildAll();
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().
13.检查编译是否出错
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
assertEquals( 0, kieBuilder.getResults().getMessages( Message.Level.ERROR ).size() );
14. KieScanner 可以监控是否有新的kie项目部署,如果有,可以检查变化
KieServices kieServices = KieServices.Factory.get();
ReleaseId releaseId = kieServices.newReleaseId( "org.acme", "myartifact", "1.0-SNAPSHOT" );
KieContainer kContainer = kieServices.newKieContainer( releaseId );
KieScanner kScanner = kieServices.newKieScanner( kContainer );
// Start the KieScanner polling the Maven repository every 10 seconds
kScanner.start( 10000L );
15. KieRuntime 提供规则和执行过程的方法
16.全局
global java.util.List list
List list = new ArrayList();
ksession.setGlobal("list", list);
可以设置对象为全局,相当于static
17. RuleRuntimeEventManager 允许添加和除去监听,所以,对于工作记忆和日程事件可以听取
例如
ksession.addEventListener( new DefaultAgendaEventListener() {
public void afterMatchFired(AfterMatchFiredEvent event) {
super.afterMatchFired( event );
System.out.println( event );
}
});
18. KieRuntimeEvent 事件类型
目前支持的
MatchCreatedEvent
MatchCancelledEvent
BeforeMatchFiredEvent
AfterMatchFiredEvent
AgendaGroupPushedEvent
AgendaGroupPoppedEvent
ObjectInsertEvent
ObjectDeletedEvent
ObjectUpdatedEvent
ProcessCompletedEvent
ProcessNodeLeftEvent
ProcessNodeTriggeredEvent
ProcessStartEvent
19. KieRuntimeLogger 日志
20. 规则执行可返回
StatelessKieSession ksession = kbase.newStatelessKieSession();
ExecutionResults bresults =
ksession.execute( CommandFactory.newSetGlobal( "stilton", new Cheese( "stilton" ), true);
Cheese stilton = bresults.getValue( "stilton" );
21. StatelessKieSession
22. KieMarshallers 用于编组kiesessioin和取消kiesession编组
23. 事务,除了代码层面,还有具体的数据源和事务配置,具体见文档
KieServices kieServices = KieServices.Factory.get();
Environment env = kieServices.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
Persistence.createEntityManagerFactory( "emf-name" ) );
env.set( EnvironmentName.TRANSACTION_MANAGER,
TransactionManagerServices.getTransactionManager() );
// KieSessionConfiguration may be null, and a default will be used
KieSession ksession =
kieServices.getStoreServices().newKieSession( kbase, null, env );
int sessionId = ksession.getId();
UserTransaction ut =
(UserTransaction) new InitialContext().lookup( "java:comp/UserTransaction" );
ut.begin();
ksession.insert( data1 );
ksession.insert( data2 );
ksession.startProcess( "process1" );
ut.commit();