玩!框架[1.2.4]与Heroku上的Drools

时间:2011-12-05 22:51:07

标签: heroku playframework drools

我尝试将简单的Web应用程序与Drools规则引擎集成,并将其部署在heroku上。在控制器操作中,我正在执行导入和解析DRL文件的方法,并返回结果。我注意到了奇怪的行为。当我按命令play run启动app时,Drools不想工作(我得到一些规则导入错误和解析知识异常),但是当我通过Eclipse启动我的应用程序时,一切正常。

我已经通过这些不同的方式检查了究竟是什么:

我尝试使用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)

2 个答案:

答案 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没有这样做。