我尝试将简单的Web应用程序与Drools规则引擎集成,并将其部署在heroku上。在控制器操作中,我正在执行导入和解析DRL文件的方法,并返回结果。我注意到了奇怪的行为。当我按命令play run
启动app时,Drools不想工作(我得到一些规则导入错误和解析知识异常),但是当我通过Eclipse启动我的应用程序时,一切正常。
我已经通过这些不同的方式检查了究竟是什么:
play run
执行:http://pastebin.com/UH1rD7pb 我尝试使用Eclipse执行中存在的额外Java参数运行play run
,但我还没有找到工作组合。
任何想法添加到命令play run
以找到工作解决方案的想法?
提前感谢您的帮助。
堆栈跟踪:
java.lang.IllegalArgumentException:
at drools.RuleEngine.readKnowledgeBase(RuleEngine.java:66)
at drools.RuleEngine.run(RuleEngine.java:28)
at controllers.Application.index(Application.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:546)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:500)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:476)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:471)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:159)
at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:220)
at play.Invoker$Invocation.run(Invoker.java:265)
at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:200)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
答案 0 :(得分:2)
好的,我在这里找到了一个解决方案:https://stackoverflow.com/a/7083303/894060
我在一个jar文件中打包了与Drools相关的类和规则文件,并将该jar放在classpath
中包含的一个目录中 - 它解决了问题。
答案 1 :(得分:1)
我不知道如何制定解决方法/黑客以使其发挥作用。
我做了以下操作来解决问题。我在方法 def getClasspath(self)中将以下行添加到 play \ framework \ pym \ play \ application.py 文件中:
classpath.append(os.path.normpath(os.path.join(os.path.join(self.path, 'tmp'),'classes')))
以上只是添加了他们在游戏中的类tmp> class目录到类路径。
一切正常。
但是我真的不明白游戏是如何能够解决这些引用的,因为Drools没有这样做。