FUSE驼峰+ KIE执行服务器集成POC

时间:2015-08-24 16:09:52

标签: jboss apache-camel fuse kie

最近,我开始考虑使用Fuse Camel,Drools WB和Kie Execution Server Integration进行新项目,我遇到了以下问题。

我正在使用Fuse 6.2,Drool 6.2.Final for WB and Kie Server。

这就是我所做的:

1)从Drools-WB中的Fuse示例创建Person Drink流口水规则,并使用我自己的容器:myCheese在Kie Execution Server上部署。

2)在Fuse Camel中,我没有调用内部Kie-Camel服务器,而是使用一个bean来设置Comel-jetty的标头来触发规则:

public void populateRestHeader(Exchange exchange) {

   // hard code the message for time being because   BatchExecutionHelperd doesn't work. please see below. 
 String myMessage = "<batch-execution lookup=\"ksession1\"> "
    + "<insert out-identifier=\"person\" > <org.drools.camel.example.Person> <name>john</name> "
    + "<age>51</age> </org.drools.camel.example.Person> </insert> "
    + "<fire-all-rules/> </batch-execution>";

   // setup the login token
    exchange.getIn().setHeader("Authorization", basicToken);
   // POST so I can send XML.  GET works fine !
    exchange.getIn().setHeader(Exchange.HTTP_METHOD, "POST");
   // the content
    exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/xml");
    exchange.getIn().setBody(myMessage);
}

3)使用jetty将命令发布到远程Kie-Server:

jetty:http://my-server/services/rest/server/containers/myCheese

4)在Kie-Server日志中,我得到了:

15:19:33,140 WARN [org.jboss.resteasy.core.ExceptionHandler](默认任务-114)无法执行:javax.ws.rs.NotSupportedException:无法使用内容类型 在org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:380)[resteasy-jaxrs-3.0.10.Final.jar:] 在org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:114)[resteasy-jaxrs-3.0.10.Final.jar:]

“内容类型”设置不正确还是未发送正文?

5)我尝试使用相同的方法执行GET,这很好用!

收到:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><response type="SUCCESS" msg="Info for container myCheese"><kie-container container-id="myCheese" status="STARTED"><release-id><artifact-id>mycheese</artifact-id><group-id>com.markit</group-id><version>1.0</version></release-id><resolved-release-id><artifact-id>mycheese</artifact-id><group-id>com.markit</group-id><version>1.0</version></resolved-release-id><scanner status="DISPOSED"/></kie-container></response>

6)使用SoapUI执行命令没有任何问题。

<response type="SUCCESS" msg="Container myCheese successfully called.">
<results><![CDATA[<execution-results>
  <result identifier="person">
    <org.drools.camel.example.Person>
      <name>john</name>
      <age>51</age>
      <canDrink>true</canDrink>
      <alive>false</alive>
      <sex></sex>
      <happy>false</happy>
    </org.drools.camel.example.Person>
  </result>
  <fact-handle identifier="person" external-form="0:1:866416565:866416565:1:DEFAULT:NON_TRAIT"/>
</execution-results>]]></results>
</response>

问题:

a)任何想法为什么会出错?将Exchange.Body设置为POST的DATA是否正确? b)不是使用Came-Jetty将命令发布到Kie-Server,因为Kie-Server将其声明为REST,我可以使用CXFRS来执行此操作吗?另外,我认为Kie-Server也支持SOAP,但它的WSDL是什么?还有其他选择吗?

c)对于BatchExecutionCommands,我打算使用以下内容:

public String createCommand() {
    BatchExecutionCommandImpl command = new BatchExecutionCommandImpl();
    final List<GenericCommand<?>> commands = command.getCommands();

    Person person = createTestPerson();

    commands.add(new InsertObjectCommand(person, "myPerson"));
    commands.add(new FireAllRulesCommand());
    command.setLookup("ksession1");

    String myXMLMessage =     BatchExecutionHelper.newXStreamMarshaller().toXML(command);
    return myXMLMessage;
}

但是我在Fuse日志中得到了Exception:

引起:org.kie.internalapi [281]找不到java.lang.ClassNotFoundException:org.drools.core.runtime.help.impl.BatchExecutionHelperProviderImpl   在org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1556)   在org.apache.felix.framework.BundleWiringImpl.access $ 400(BundleWiringImpl.java:77)   在org.apache.felix.framework.BundleWiringImpl $ BundleClassLoader.loadClass(BundleWiringImpl.java:1993)

好像Kie-Internal Package无法访问Drools-Core捆绑包?

感谢任何建议或帮助。

非常感谢

亚历

1 个答案:

答案 0 :(得分:0)

Arr ..得到了答案的一半。

我需要设置

Exchange.ContentType =&#34; application / xml&#34; !

现在可以在Fuse服务器和远程Kie-server之间很好地工作。但是,我仍然遇到BatchExecutionHelper Exception的问题。