Mam problemy z używaniem trwałości w moim projekcie jBPM.Konfigurowanie trwałości i orm z JPA 2
Moja konfiguracja to jBPM 5.4 + Hibernuj + JPA 2 i obecnie konfiguruję przepływ procesu, aby połączyć się z bazą danych z zachowaniem, poprzez persistence.xml. Po prostu staram się połączyć źródło danych domyślnych (na serwerze H2) z moim niestandardowym persistence.xml, ale wciąż otrzymuję ten sam błąd w kółko:
Unknown entity: org.jbpm.persistence.processinstance.ProcessInstanceInfo
Mam ręcznie dodane do mojego src/META-INF folder JBPMorm-JPA2.xml następujące treści, ale błąd nadal występuje. Czy ktoś może mi pomóc?
JBPMorm-JPA2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
version="2.0">
<named-query name="ProcessInstancesWaitingForEvent">
<query>
select
processInstanceInfo.processInstanceId
from
ProcessInstanceInfo processInstanceInfo join processInstanceInfo.eventTypes eventTypes
where
eventTypes = :type
</query>
</named-query>
<!-- ProcessInstanceInfo mapping (needed for JPA 2) -->
<entity class="org.jbpm.persistence.processinstance.ProcessInstanceInfo"
metadata-complete="true">
<pre-update method-name="update" />
<attributes>
<id name="processInstanceId">
<column name="InstanceId" />
<generated-value strategy="AUTO"/>
</id>
<basic name="processId" access="FIELD" />
<basic name="startDate" access="FIELD" >
<temporal>DATE</temporal>
</basic>
<basic name="lastReadDate" access="FIELD" >
<temporal>DATE</temporal>
</basic>
<basic name="lastModificationDate" access="FIELD" >
<temporal>DATE</temporal>
</basic>
<basic name="state" access="FIELD" />
<basic name="processInstanceByteArray" access="FIELD" >
<lob/>
</basic>
<version name="version" access="FIELD" >
<column name="OPTLOCK" />
</version>
<element-collection name="eventTypes" target-class="java.lang.String" access="FIELD" >
<collection-table name="EventTypes">
<join-column name="InstanceId"/>
</collection-table>
</element-collection>
<transient name="processInstance" />
<transient name="env" />
</attributes>
</entity>
</entity-mappings>
persistence.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence
version="1.0"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="IALPR" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/jbpm-ds</jta-data-source>
<class>org.drools.persistence.info.SessionInfo</class>
<class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
<class>org.drools.persistence.info.WorkItemInfo</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.BTMTransactionManagerLookup"/>
</properties>
</persistence-unit>
</persistence>
UPDATE:
Aby rozwiązać ten problem, należy utworzyć ProcessInstanceInfo.hbm.xml w meta -INF folder o następującej treści:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="org.jbpm.persistence.processinstance">
<!-- access="field" for fields that have no setter methods -->
<class name="ProcessInstanceInfo" table="ProcessInstanceInfo">
<id name="processInstanceId" type="long" column="InstanceId">
<generator class="native" />
</id>
<version name="version" type="integer" unsaved-value="null" access="field">
<column name="OPTLOCK" not-null="false" />
</version>
<property name="processId" access="field" />
<property name="startDate" type="timestamp" access="field" />
<property name="lastReadDate" type="timestamp" access="field" />
<property name="lastModificationDate" type="timestamp" access="field" />
<property name="state" type="integer" not-null="true" access="field" />
<property name="processInstanceByteArray" type="org.hibernate.type.PrimitiveByteArrayBlobType"
column="processInstanceByteArray" access="field" length="2147483647" />
<set name="eventTypes" table="EventTypes" access="field" >
<key column="InstanceId"/>
<element column="element" type="string"/>
</set>
<!-- NOT mapping [processInstance] field because field is transient -->
<!-- NOT mapping [env] field because field is transient -->
</class>
</hibernate-mapping>
Jeśli ktoś zna dobry samouczek dotyczący konfigurowania trwałości dla jBPM5, proszę podziel się ... to jest szalone!
Nie było mnie na urlopie, przepraszam, nie mogłem odpowiedzieć wcześniej. Zapisz plik orm.xml w folderze META-INF w folderze src/main/java –