La configuration de la persistance et de l'orm avec JPA 2
J'ai un peu de mal à l'aide de la Persistance sur mon jBPM projet.
Ma configuration est jBPM 5.4 + Hibernate + JPA 2, et je suis actuellement à la mise en place du processus de flux pour vous connecter à une base de données avec persistance, à travers persistence.xml. Je suis juste essayer de se connecter à la source de données par défaut (dans le H2 serveur) avec mon custom persistence.xml mais je reçois la même erreur encore et encore:
Unknown entity: org.jbpm.persistence.processinstance.ProcessInstanceInfo
J'ai ajouté manuellement à ma src/répertoire META-INF de l'JBPMorm-JPA2.xml le contenu suivant, mais l'erreur persiste. Quelqu'un peut-il m'aider?
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>
Mise à JOUR:
Pour résoudre ce problème, créez un ProcessInstanceInfo.hbm.xml dans le répertoire META-INF, avec le contenu suivant:
<?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>
Si quelqu'un connait un bon tuto sur la configuration de la persistance pour jBPM5 veuillez faire partager...c'est fou!
OriginalL'auteur Rafael Matos | 2012-12-17
Vous devez vous connecter pour publier un commentaire.
Ok, alors, voici un petit tutoriel pour configurer la persistance dans JBPM, à l'aide d'une base de données MySQL et JBoss as:
1) Créer un répertoire META-INF sous votre répertoire src/main/java dossier
2) Créer persistence.xml
3) Créer orm.xml
4) Créer ProcessInstanceInfo.hbm.xml
5) Maintenant, vous devez définir votre source de données. J'utilise JBoss5, et cette version de JBoss va lire n'importe quel fichier avec le modèle *-ds.xml comme la définition de votre source de données. Vous devez placer ce fichier dans votre dossier de déploiement (et vous remarquerez peut-être il y a déjà une source de données fichier, mais il n'y aura pas de conflits). Si vous utilisez JBoss7, il y a une autre façon de définir le DS - je suppose que cela pourrait être utile https://community.jboss.org/wiki/DataSourceConfigurationInAS7.
De toute façon, voici ce que votre yourDS-ds.xml devrait ressembler à:
6) Les instructions ci-dessus suffisent à créer au moins la persistance des tables dans la base de données. Lorsque vous éventuellement commencer à utiliser des tâches dans JBPM, il peut être nécessaire de créer un Taskorm.xml fichier (google, c'est trop long). Je ne suis pas sûr si c'est nécessaire, mais j'ai de toute façon.
7) Enfin, il suffit d'appeler votre unité de persistance en Java par l'EntityManagerFactory, créer votre environnement et de commencer une nouvelle session. La persistance des données doivent être automatiquement enregistrées dans la bd.
Espère que cela a été utile. Cheers!
OriginalL'auteur Rafael Matos