2012-12-17 53 views
5

के साथ दृढ़ता और ओआरएम को कॉन्फ़िगर करना मुझे मेरी जेबीपीएम परियोजना पर दृढ़ता का उपयोग करके कुछ परेशानी हो रही है।जेपीए 2

मेरा कॉन्फ़िगरेशन जेबीपीएम 5.4 + हाइबरनेट + जेपीए 2 है, और मैं वर्तमान में persistence.xml के माध्यम से दृढ़ता से डीबी से कनेक्ट करने के लिए प्रक्रिया प्रवाह स्थापित कर रहा हूं। मैं बस अपना कस्टम persistence.xml के साथ डिफ़ॉल्ट डेटा स्रोत से कनेक्ट करने के (एच 2 सर्वर में) कोशिश कर रहा हूँ, लेकिन मैं एक ही त्रुटि प्राप्त हो रही है और फिर से:

Unknown entity: org.jbpm.persistence.processinstance.ProcessInstanceInfo 

मैं मैन्युअल रूप से शामिल कर लिया है मेरी src/META-INF फ़ोल्डर को निम्नलिखित सामग्री JBPMorm-JPA2.xml, लेकिन त्रुटि अभी भी बनी हुई है। क्या कोई मेरी मदद कर सकता है?

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> 

अद्यतन:

इस का समाधान करने के लिए, मेटा में एक ProcessInstanceInfo.hbm.xml बनाने -इनएफ फ़ोल्डर, निम्नलिखित सामग्री के साथ:

<?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> 

यदि कोई जेबीपीएम 5 के लिए दृढ़ता को कॉन्फ़िगर करने पर एक अच्छा ट्यूटोरियल जानता है तो कृपया साझा करें ... यह पागल है!

उत्तर

7

ठीक है, इसलिए यहाँ JBPM में दृढ़ता कॉन्फ़िगर करने के लिए, एक MySQL डेटाबेस और JBoss के रूप में उपयोग करते हुए एक छोटे से ट्यूटोरियल जाता है:

1) अपने src/मुख्य/जावा फ़ोल्डर के अंतर्गत एक META-INF फ़ोल्डर बनाएँ

2) persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
      xmlns="http://java.sun.com/xml/ns/persistence" 
      xmlns:orm="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 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"> 

    <persistence-unit name="your_unit_name" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:/your_data_source_name</jta-data-source>   
     <mapping-file>META-INF/JBPMorm.xml</mapping-file> 
     <mapping-file>META-INF/ProcessInstanceInfo.hbm.xml</mapping-file> 

     <!-- The tables that will be created in your specified sql schema --> 
     <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.default_schema" value="your_schema_name" /> 

      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
      <property name="hibernate.connection.autocommit" value="false" /> 
      <property name="hibernate.max_fetch_depth" value="3"/> 
      <property name="hibernate.hbm2ddl.auto" value="create" /> 
      <property name="hibernate.show_sql" value="false" /> 
      <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" /> 

     </properties>   
    </persistence-unit> 





</persistence> 

3) बनाएं orm.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_1_0.xsd" 
    version="1.0"> 
    <named-query name="ProcessInstancesWaitingForEvent"> 
     <query> 
      select 
      processInstanceInfo.processInstanceId 
      from 
      ProcessInstanceInfo processInstanceInfo 
      where 
      :type in elements(processInstanceInfo.eventTypes) 
      </query> 
    </named-query> 

</entity-mappings> 

4) बनाएं ProcessInstanceInfo.hbm.xml

<?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> 

5 बनाएं) अब आप अपने डेटा स्रोत को परिभाषित करने के लिए है। मैं जेबॉस 5 का उपयोग करता हूं, और जेबॉस का यह संस्करण आपके डेटासोर्स की परिभाषा के रूप में पैटर्न * -ds.xml के साथ किसी भी फाइल को पढ़ेगा। आपको यह फ़ाइल अपने तैनाती फ़ोल्डर में रखना होगा (और आप देख सकते हैं कि वहां पहले से ही एक डेटासॉर फ़ाइल है, लेकिन कोई संघर्ष नहीं होगा)। यदि आप जेबॉस 7 का उपयोग कर रहे हैं, तो डीएस को परिभाषित करने का एक अलग तरीका है - मुझे लगता है कि यह उपयोगी हो सकता है https://community.jboss.org/wiki/DataSourceConfigurationInAS7

<datasources> 
    <local-tx-datasource> 
    <jndi-name>jdbc/your_datasource_name</jndi-name> 
    <connection-url>your_db_url</connection-url> 
    <driver-class>com.mysql.jdbc.Driver</driver-class> 
    <user-name>your_user</user-name> 
    <password>your_pass</password> 
    <min-pool-size>5</min-pool-size> 
    <max-pool-size>20</max-pool-size> 
    <idle-timeout-minutes>5</idle-timeout-minutes> 
    </local-tx-datasource> 
</datasources> 

6) ऊपर दिए गए निर्देशों में कम से कम डेटाबेस में दृढ़ता टेबल बनाने के लिए पर्याप्त हैं:

वैसे भी, यहाँ क्या आपके yourDS-ds.xml कैसा दिखना चाहिए। जब आप अंततः जेबीपीएम में कार्यों का उपयोग शुरू करते हैं, तो इसे Taskorm.xml फ़ाइल बनाने की आवश्यकता हो सकती है (इसे Google, यह बहुत लंबा है)। मुझे यकीन नहीं है कि यह जरूरी है, लेकिन मेरे पास वैसे भी है।

7) अंत में, एंटीटीमेनगर फैक्टरी के माध्यम से जावा में अपनी दृढ़ता इकाई को कॉल करें, अपना वातावरण बनाएं और एक नया सत्र शुरू करें। दृढ़ता डेटा स्वचालित रूप से डीबी में सहेजा जाना चाहिए।

आशा है कि यह सहायक होगा। चीयर्स!

+0

मैं छुट्टी पर था, माफ करना, मैं पहले जवाब नहीं दे सका। आप orm.xml फ़ाइल को मेटा-आईएनएफ फ़ोल्डर में अपने src/main/java फ़ोल्डर के अंतर्गत सहेजते हैं –