2015-05-29 84 views
0

我想创建一个使用jBPM的进程,我使用的是Jboss 7.1服务器,并且我安装了用于eclipse Kepler的jbpm插件并添加了罐子。现在我创建一个简单的hello世界项目,但我总是有一个错误:jBPM与日食错误java.lang.RuntimeException

java.lang.RuntimeException: RuntimeManagerFactory was not initialized, see previous errors 
    at org.kie.api.runtime.manager.RuntimeManagerFactory$Factory.get(RuntimeManagerFact  ory.java:112) 
at org.jbpm.test.JbpmJUnitBaseTestCase.<init> (JbpmJUnitBaseTestCase.java:119) 
    at org.jbpm.test.JbpmJUnitBaseTestCase.<init> (JbpmJUnitBaseTestCase.java:157) 
    at com.sample.ProcessTest.<init>(ProcessTest.java:54) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

请帮忙吗?

这是主要的代码:

import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import org.jbpm.test.JBPMHelper; 
import org.kie.api.KieBase; 
import org.kie.api.KieServices; 
import org.kie.api.runtime.KieContainer; 
import org.kie.api.runtime.KieSession; 
import org.kie.api.runtime.manager.RuntimeEngine; 
import org.kie.api.runtime.manager.RuntimeEnvironmentBuilder; 
import org.kie.api.runtime.manager.RuntimeManager; 
import org.kie.api.runtime.manager.RuntimeManagerFactory; 
import org.kie.api.task.TaskService; 
import org.kie.api.task.model.TaskSummary; 

public class ProcessMain { 

public static void main(String[] args) { 
    KieServices ks = KieServices.Factory.get(); 
    KieContainer kContainer = ks.getKieClasspathContainer(); 
    KieBase kbase = kContainer.getKieBase("kbase"); 

    RuntimeManager manager = createRuntimeManager(kbase); 
    RuntimeEngine engine = manager.getRuntimeEngine(null); 
    KieSession ksession = engine.getKieSession(); 
    TaskService taskService = engine.getTaskService(); 

    ksession.startProcess("com.sample.bpmn.hello"); 

    // let john execute Task 1 
    List<TaskSummary> list = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK"); 
    TaskSummary task = list.get(0); 
    System.out.println("John is executing task " + task.getName()); 
    taskService.start(task.getId(), "john"); 
    taskService.complete(task.getId(), "john", null); 

    // let mary execute Task 2 
    list = taskService.getTasksAssignedAsPotentialOwner("mary", "en-UK"); 
    task = list.get(0); 
    System.out.println("Mary is executing task " + task.getName()); 
    taskService.start(task.getId(), "mary"); 
    taskService.complete(task.getId(), "mary", null); 

    manager.disposeRuntimeEngine(engine); 
    System.exit(0); 
} 

private static RuntimeManager createRuntimeManager(KieBase kbase) { 
    JBPMHelper.startH2Server(); 
    JBPMHelper.setupDataSource(); 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa"); 
    RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory.get() 
     .newDefaultBuilder().entityManagerFactory(emf) 
     .knowledgeBase(kbase); 
    return RuntimeManagerFactory.Factory.get() 
     .newSingletonRuntimeManager(builder.get(), "com.sample:example:1.0"); 
} 

    } 
+0

你能告诉你如何得到'RuntimeManager'或者产生错误的完整例子吗? –

+0

我更新我的问题,并显示主代码 – sad

回答

0

我有同样的问题,我解决它!

如果您在RuntimeEnvironmentBuilder source code获得的眼睛,你会发现,该方法Factory.get()抛出你得到,如果RuntimeEnvironmentBuilderFactory的一个实例是空的错误!

但它是如何构建该实例? 它使用这个类org.jbpm.runtime.manager.impl.RuntimeEnvironmentBuilder 因此,因为您在类路径中没有此类,所以无法构造该实例并保持为空。

您可以在jbpm-runtime-manager-6.4.0.Final.jar或您选择的任何其他jar中找到此类。

希望这会有所帮助!