我是流口水的新手,所以这个问题可能是基于个人意见。我在我们的独立 Java 应用程序中使用了 drools6.5,但现在想将它添加到我们现有的 Tomcat7(JDK8) 上的/webapps。 Web 应用程序是基于简单的 jsp/servlet/html(主要是手工编码 - 没有 Spring)。
是否有任何示例可以帮助我让 Drools6.5 在我们的 Tomcat/web 应用程序上运行?我已经尝试创建以下结构,希望它能起作用。
网络应用/
网络信息/
|--classes/all_my_classes.class
元信息/
|--maven
|---pom.properties
|--kmodule.xml
|--rules/myrule.drl
但是在调用kSession.insert()时代码产生了一个空指针异常。
DroolsPojoIn message = new DroolsPojoIn();
//## message setters.
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
kSession.insert(message); //Generated NullPointerException.
相同的代码和结构在独立应用程序中运行良好。
谢谢和最好的问候 肖恩
最佳答案
我在下面的网址找到了解决方案
Loading and updating rules from a database in Drools 6
首先我删除了 META-INF 文件夹(没有必要)。然后我在任何函数之外声明了主要的 3 个类变量。我们通过/paths 手动加载 drools 文件比配置环境更容易。
KieServices ks = null;
KieContainer kContainer;
KieSession kSession;
然后我将以下代码添加到 servlet public void init()
函数中。
ks = KieServices.Factory.get();
/* File System Handler */
KieFileSystem kfs = ks.newKieFileSystem();
kfs.write("/data/rules/lesson01.drl", "/data/rules/sample02.drl");
KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll();
Results results = kieBuilder.getResults();
if( results.hasMessages( Message.Level.ERROR ) ){
System.out.println( results.getMessages() );
throw new IllegalStateException( "### errors ###" );
}
kContainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId());
KieBase kieBase = kContainer.getKieBase();
kSession = kContainer.newKieSession();
在 public void doGet()
中,我触发了规则。
DroolsPojo message = new DroolsPojo(); /*My Simple Pojo object*/
message.setMessage("Marketing Strategy");
message.setStatus(DroolsPojo.MARKET);
kSession.insert(message);
kSession.fireAllRules();
如果有更好的方法,请告诉我。
关于java - Tomcat 上的流口水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44559425/