Concurrent instantiation of Runtime Environments
akoskm Mar 11, 2015 4:23 AMHello!
I have a simple Unit test which I expected to work, but instead I'm getting some unrelated exceptions complaining about TimerService. I don't have any timers in my bpmn file.
The complete files are attached but basically I'm only trying to create two RuntimeEnvironment simultaneously.
Exception in thread "second" java.lang.IllegalStateException: java.lang.reflect.InvocationTargetException at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:164) at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.newKieSession(KnowledgeStoreServiceImpl.java:70) at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.newKieSession(KnowledgeStoreServiceImpl.java:39) at org.kie.internal.persistence.jpa.JPAKnowledgeService.newStatefulKnowledgeSession(JPAKnowledgeService.java:121) at org.jbpm.runtime.manager.impl.factory.JPASessionFactory.newKieSession(JPASessionFactory.java:42) at org.jbpm.runtime.manager.impl.SingletonRuntimeManager.init(SingletonRuntimeManager.java:95) at org.jbpm.runtime.manager.impl.RuntimeManagerFactoryImpl.newSingletonRuntimeManager(RuntimeManagerFactoryImpl.java:71) at com.example.test.jbpm.HTWithConcurrentRuntimesTest$HumanTaskResolver.getRuntimeManager(HTWithConcurrentRuntimesTest.java:90) at com.example.test.jbpm.HTWithConcurrentRuntimesTest$HumanTaskResolver.run(HTWithConcurrentRuntimesTest.java:57) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.drools.persistence.jpa.KnowledgeStoreServiceImpl.buildCommandService(KnowledgeStoreServiceImpl.java:150) ... 9 more Caused by: java.lang.IllegalArgumentException: Timer service 'new org.jbpm.process.core.timer.impl.RegisteredTimerServiceDelegate("exec-2-timerServiceId")' not found at org.drools.core.SessionConfiguration.newTimerService(SessionConfiguration.java:495) at org.drools.core.time.TimerServiceFactory.getTimerService(TimerServiceFactory.java:27) at org.drools.core.impl.StatefulKnowledgeSessionImpl.<init>(StatefulKnowledgeSessionImpl.java:366) at org.drools.core.impl.StatefulKnowledgeSessionImpl.<init>(StatefulKnowledgeSessionImpl.java:278) at org.drools.core.common.PhreakWorkingMemoryFactory.createWorkingMemory(PhreakWorkingMemoryFactory.java:21) at org.drools.core.impl.KnowledgeBaseImpl.newStatefulSession(KnowledgeBaseImpl.java:1304) at org.drools.core.impl.KnowledgeBaseImpl.newStatefulSession(KnowledgeBaseImpl.java:1289) at org.drools.core.impl.KnowledgeBaseImpl.newStatefulKnowledgeSession(KnowledgeBaseImpl.java:292) at org.drools.core.impl.KnowledgeBaseImpl.newKieSession(KnowledgeBaseImpl.java:378) at org.drools.persistence.SingleSessionCommandService.initNewKnowledgeSession(SingleSessionCommandService.java:125) at org.drools.persistence.SingleSessionCommandService.<init>(SingleSessionCommandService.java:92) ... 14 more Caused by: [Error: could not instantiate class: null] [Near : {... new org.jbpm.process.core.timer.im ....}] ^ [Line: 1, Column: 5] at org.mvel2.ast.NewObjectNode.getReducedValue(NewObjectNode.java:307) at org.mvel2.MVELInterpretedRuntime.parseAndExecuteInterpreted(MVELInterpretedRuntime.java:106) at org.mvel2.MVELInterpretedRuntime.parse(MVELInterpretedRuntime.java:49) at org.mvel2.MVEL.eval(MVEL.java:92) at org.drools.core.util.MVELSafeHelper$RawMVELEvaluator.eval(MVELSafeHelper.java:406) at org.drools.core.SessionConfiguration.newTimerService(SessionConfiguration.java:493) ... 24 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at org.mvel2.ast.NewObjectNode.getReducedValue(NewObjectNode.java:278) ... 29 more Caused by: java.lang.IllegalStateException: TimerService with key exec-2-timerServiceId was not found in the registry at org.jbpm.process.core.timer.impl.RegisteredTimerServiceDelegate.<init>(RegisteredTimerServiceDelegate.java:59) ... 34 more
Relevant parts of my code (full sources are attached):
@Test public void humanTaskTest() throws Exception { HumanTaskResolver htr1 = new HumanTaskResolver(1); HumanTaskResolver htr2 = new HumanTaskResolver(2); Thread t1 = new Thread(htr1, "first"); Thread t2 = new Thread(htr2, "second"); t1.start(); t2.start(); t1.join(); t2.join(); }
HumanTaskResolver:
class HumanTaskResolver implements Runnable { private final long pid; public HumanTaskResolver(long pid) { this.pid = pid; } @Override public void run() { RuntimeManager manager = getRuntimeManager("process/humantask/SimpleHumanTask.bpmn"); manager.close(); } private RuntimeManager getRuntimeManager(String process) { Properties properties = new Properties(); properties.setProperty("some_group", ""); UserGroupCallback userGroupCallback = new JBossUserGroupCallbackImpl(properties); // load up the knowledge base KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource(process), ResourceType.BPMN2); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.getDefault() .persistence(true) .entityManagerFactory(emf) .userGroupCallback(userGroupCallback) .knowledgeBase(kbuilder.newKnowledgeBase()) .registerableItemsFactory(new DefaultRegisterableItemsFactory() { @Override public List<TaskLifeCycleEventListener> getTaskListeners() { List<TaskLifeCycleEventListener> defaultListeners = new ArrayList<>(); defaultListeners.add(new JPATaskLifeCycleEventListener()); // add any custom listeners defaultListeners.addAll(super.getTaskListeners()); // add listeners from deployment descriptor defaultListeners.addAll(getTaskListenersFromDescriptor()); return defaultListeners; } }) .get(); return RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment, "exec-" + pid); } }
Sorry for the indentation but your inline code editor makes it unable to edit the code I pasted.
-
SimpleHumanTask.bpmn.zip 1.2 KB