3

jBPM プロジェクトを永続化しようとしています。したがって、このチュートリアルを使用しました。最初に、必要なすべての追加の jar ファイルをインポートしました (Web サイトによると)。mysql-connector-java-5.1.20-bin.jarmysqlを永続ストレージとして使いたいので追加しました。

その後、「ステートフル」コードをプロジェクトに追加しました。

KnowledgeBase kbase = readKnowledgeBase(name);
StatefulKnowledgeSession ksession = null;
JBPMHelper.startH2Server();
JBPMHelper.setupDataSource();
if(ProcessManager.sessionId == -1){
    ksession = JBPMHelper.newStatefulKnowledgeSession(kbase);
    ProcessManager.sessionId = ksession.getId();
}
else {
ksession = JBPMHelper.loadStatefulKnowledgeSession(
    kbase,
    ProcessManager.sessionId);
}

次にresources/META-INF、ファイルに追加しましたjBPM.properties

persistence.datasource.name=jdbc/jbpm-ds

persistence.datasource.user=テスト

persistence.datasource.password=テスト

persistence.datasource.url=jdbc:mysql://localhost:3306/helpme

persistence.datasource.driverClassName=com.mysql.jdbc.Driver

persistence.enabled=true

persistence.persistenceunit.name=org.jbpm.persistence.jpa

persistence.persistenceunit.dialect=org.hibernate.dialect.MySQLDialect

プロジェクトを実行すると、常に次の例外が発生します ( on ksession = JBPMHelper.newStatefulKnowledgeSession(kbase);):

javax.persistence.PersistenceException: [PersistenceUnit: org.jbpm.persistence.jpa] EntityManagerFactory を構築できません

原因: org.hibernate.HibernateException: データソースが見つかりませんでした

原因: javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

4

1 に答える 1

1

問題の解決策を見つけました。通常、 jBPM はjarJBPMHelperから直接ロードされます。

public static Properties getProperties() {
    Properties properties = new Properties();
    try {
        properties
            .load(JBPMHelper.class.getResourceAsStream("/jBPM.properties"));
    } catch (Throwable t) {
    // do nothing, use defaults
    }

    return properties;
}

ローディングメカニズムを交換したところ、jBPM.properties正しくロードされるようになりました:

public static Properties getProperties() {
    Properties properties = new Properties();
    try {
        InputStream input
            = new FileInputStream("./resources/META-INF/jBPM.properties");
        properties.load(input);
        System.out.println("RPOP"+properties.toString());
    } catch (Throwable t) {
    // do nothing, use defaults
    }

    return properties;
}

(BartoszKP からの回答 - ありがとう)

于 2013-10-08T19:19:06.043 に答える