2011-12-05 4 views
4

Drools 규칙 엔진과 통합 된 간단한 웹 앱을 만들고 heroku에 배포하려고했습니다. 컨트롤러 액션에서 DRL 파일을 가져 와서 파싱하고 결과를 반환하는 메소드를 실행하고 있습니다. 나는 이상한 행동을 알아 냈다. 명령으로 응용 프로그램을 시작할 때 play run Drools에서 일하고 싶지 않습니다 (일부 규칙 가져 오기 오류 및 구문 분석 예외가 발생 함). 그러나 Eclipse를 통해 응용 프로그램을 시작할 때 모든 것이 작동합니다.재생! 프레임 워크 [1.2.4] Drools on Heroku

바로 이러한 여러 가지 방법을 통해 실행되는 것을 나는 확인했습니다

I 추가 자바 play run을 실행하려고했습니다 Eclipse 실행에 기존의 인수가 있지만 작동하는 조합을 찾지 못했습니다.

어떤 아이디어가 명령을 추가하면 어떤 해결책을 찾을 수 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

무엇을 오류? stacktrace? –

+0

어떤 클래스가 이클립스/클래스로 들어갈 예정입니까? –

+0

@szemek iam도 같은 문제에 직면 해 주시기 바랍니다. –

답변

1

내가 어떻게 일을 얻기 위해 해킹/해결 방법을 만드는 아무 생각이 없습니다.

i를 방법으로 파일 플레이 \ 프레임 워크 \의 PYM의 \ 놀이 \의 application.py에 다음 줄을 추가 한 문제 야를 해결하기 위해 다음과 같은 데프 getClasspath (자기) 한 :

 classpath.append(os.path.normpath(os.path.join(os.path.join(self.path, 'tmp'),'classes'))) 

위의 내용은 play tmp> classes 디렉토리에있는 클래스를 클래스 경로에 추가하는 것입니다.

모두 정상적으로 작동합니다.

그러나 나는 Drools가 그렇게하지 못하는 곳에서 이러한 참조를 해결할 수있는 방법을 실제로 이해하지 못했습니다.

+0

좋아, 해결책은 괜찮지 만 heroku에 내 앱을 배포 할 때는 작동하지 않습니다. 내 앱 코드와 구성 만 변경하고 싶습니다. – szemek

2

좋아, 내가 나를 여기에 대한 해결책을 발견 : https://stackoverflow.com/a/7083303/894060 나는 하나 개의 jar 파일에 Drools가 관련 클래스 및 규칙 파일을 포장 한 나는 classpath에 포함 된 하나의 디렉토리에 그 항아리를 넣어 - 그것은 문제를 해결했다.