Java 对雄猫流口水

Java 对雄猫流口水,java,tomcat,web-applications,tomcat7,drools,Java,Tomcat,Web Applications,Tomcat7,Drools,我不太会流口水,所以这个问题可能是基于观点。我在我们的独立Java应用程序中使用了drools6.5,但现在想将其添加到Tomcat7(JDK8)上现有的/webapps中。webapps基于简单的jsp/servlet/html(大部分是手工编码的,没有Spring) 有没有任何例子可以帮助我让Drools6.5在我们的Tomcat/webapps上工作?我尝试创建以下结构,希望它能工作。 网络应用/ WEB-INF/ |--班级/所有我的班级 META-INF/ |--马文 |---聚甲醛

我不太会流口水,所以这个问题可能是基于观点。我在我们的独立Java应用程序中使用了drools6.5,但现在想将其添加到Tomcat7(JDK8)上现有的/webapps中。webapps基于简单的jsp/servlet/html(大部分是手工编码的,没有Spring)

有没有任何例子可以帮助我让Drools6.5在我们的Tomcat/webapps上工作?我尝试创建以下结构,希望它能工作。

网络应用/
WEB-INF/
|--班级/所有我的班级
META-INF/
|--马文
|---聚甲醛性能
|--kmodule.xml
|--规则/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.
同样的代码和结构在独立应用程序中运行良好

谢谢并致以最良好的问候
Shawn

我在以下URL中找到了解决方案

首先,我删除了META-INF文件夹(这不是必需的)。然后我在任何函数之外声明了主要的3个类变量。对我们来说,通过/路径手动加载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();
公共void doGet()
中,我启动了规则

DroolsPojo message = new DroolsPojo(); /*My Simple Pojo object*/
message.setMessage("Marketing Strategy");
message.setStatus(DroolsPojo.MARKET);
kSession.insert(message);
kSession.fireAllRules();

如果有更好的方法,请告诉我。

如果堆栈转储从这一行开始,则kSession为null,否则“相同的代码”将无法工作。如何创建此对象?我刚刚添加了示例代码。kSession在前面的行中初始化。。但它仍然会生成一个空指针。不要在答案中提问。现在还不清楚为什么这会修复NPE。