-1

我刚刚在 tomcat 上设置了一个 kie-workbench (6.1.0 Final) 并创建了一个示例演示项目,其中包含一个 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 类的句柄?理想情况下,我希望将所有模型保留在工作台中,而不必在客户端应用程序中镜像它们,并且能够实例化它们并使用从休息请求中收到的值填充它们。这可能吗?

4

2 回答 2

0

请参阅文档章节“规则语言参考”,“类型声明”部分。从那里采取的一个简单的例子:

declare Address
   number : int
   streetName : String
   city : String
end

您可以使用 new 创建对象并使用 getter 和 setter 等。

您必须对从请求到此对象的转换进行编码。

于 2014-12-05T16:09:48.077 回答
0

当与动态模块一起使用时,KieContainer 将它加载的所有 jar 保存在一个隔离的 ClassLoader 中。因此,您可以将模型放入它们自己的 jar 中,并将它们指定为正在部署的项目的 maven 依赖项。如果您使用的是 kie-ci,它将解决传递依赖关系并从它们构建一个 ClassLoader。

在外部,您可以使用反射来访问该 CassLoader 中的 pojo,或者您可以使用调用静态初始化方法的初始化规则。该静态初始化方法是 jar 中的任何类或依赖 jar 之一。

我们还没有 KieContainers 和 KieSession 的生命周期来通过回调自动化某些事情。这绝对是我们需要研究的东西,我希望它会出现在下一个(6.2 之后)版本中。

于 2014-12-12T02:28:06.350 回答