在我的kjar里面掌握POJO

时间:2014-12-05 14:09:47

标签: drools kie-workbench

我刚刚在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类的句柄而不在客户端应用程序的类路径中?理想情况下,我希望将所有模型保留在工作台中,而无需在客户端应用程序中镜像它们,并能够实例化它们并使用从其余请求接收的值填充它们。这可能吗?

2 个答案:

答案 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之后)发布。