我尝试使用jBPM创建进程,我使用Jboss 7.1服务器,我为eclipse Kepler安装了jbpm插件,并添加了jar。现在我创建一个简单的hello world项目,但总是出错:
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 :(得分:1)
我有同样的问题,我解决了!
如果您关注RuntimeEnvironmentBuilder source code ,您会注意到方法 Factory.get()会抛出您获取的错误 RuntimeEnvironmentBuilderFactory < / b>是空的!
但它如何构建该实例? 它使用此类 org.jbpm.runtime.manager.impl.RuntimeEnvironmentBuilder 因此,在类路径中没有此类,实例无法构造并保持为空。
您可以在jbpm-runtime-manager-6.4.0.Final.jar或您选择的任何其他jar中找到此类。
希望这有帮助!