我刚刚在tomcat上设置了一个kie-workbench(6.1.0 Final)并创建了一个示例demo-project,其中包含一个drl文件和一个用数据建模器创建的大型平面POJO。 我构建并部署了演示项目,并设法使用以下代码从客户端应用程序激发规则:
String url = "http://yytomcat7kie.domain.com:8080/kie/maven2/gro/up/demoproject/0.0.3/demoproject-0.0.3.jar";
ReleaseIdImpl releaseId = new ReleaseIdImpl("gro.up", "demoproject", "0.0.3");
KieServices ks = KieServices.Factory.get();
KieFileSystem kfs = ks.newKieFileSystem();
UrlResource urlResource = (UrlResource) ResourceFactory.newUrlResource(url);
kfs.write(urlResource);
KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll();
KieContainer kContainer = ks.newKieContainer(releaseId);
KieSession kSession = kContainer.newKieSession();
SessionConfiguration sConf = (SessionConfiguration)kSession.getSessionConfiguration();
MyKiePojo kiePojo = new MyKiePojo();
kiePojo.setField01("blah");
kiePojo.setField02("blahblah");
kiePojo.setField03("blahblahblah");
kSession.insert(kiePojo);
kSession.fireAllRules();
System.out.println(" ALL RULES FIRED ");
System.out.println(kiePojo.getField04());
System.out.println(kiePojo.getField05());
它工作正常但我现在的问题是: 是否有可能获得demoproject.jar中的MyKiePojo类的句柄而不在客户端应用程序的类路径中?理想情况下,我希望将所有模型保留在工作台中,而无需在客户端应用程序中镜像它们,并能够实例化它们并使用从其余请求接收的值填充它们。这可能吗?
答案 0 :(得分:0)
请参阅文档章节"规则语言参考",部分"类型声明"。一个简单的例子:
declare Address
number : int
streetName : String
city : String
end
您可以使用new创建对象,并使用getter和setter等。
您必须对从请求到此对象的转换进行编码。
答案 1 :(得分:0)
与动态模块一起使用时,KieContainer会将所有加载的jar文件保存在隔离的ClassLoader中。因此,您可以将模型放入自己的jar中,并将它们指定为正在部署的项目的maven依赖项。如果您使用的是kie-ci,它将解析传递依赖关系并从中构建一个ClassLoader。
在外部,您可以使用反射来访问该CassLoader中的pojos,或者您可以使用初始化规则来调用静态初始化方法。其中静态初始化方法是jar中的任何类或其中一个从属jar。
我们尚未拥有的是KieContainers和KieSession通过回调自动化某些事物的生命周期。这绝对是我们需要研究的问题,我希望它能够在下一个版本(6.2之后)发布。