2011-09-01 8 views
5

में हाइबरनेट संस्करण को अपग्रेड करें मेरे ईएआर के अंदर हीबर्नेट के अपने संस्करण (और जो कि जेबॉस डिफ़ॉल्ट रूप से लाता है) के अंदर जहाज भेजने की कोशिश करते समय मुझे कठिन समय हो रहा है।जेबीएसएस

<jboss-app> 
    <loader-repository> 
    com.example:archive=unique-archive-name 
    <loader-repository-config> 
    java2ParentDelegation=false 
    </loader-repository-config> 
    </loader-repository> 
</jboss-app> 

और, हमेशा की तरह, मैं करने के लिए दृढ़ता इकाई में मेरे हठ प्रदाता की घोषणा:

तब मैं अपने तैनाती "स्कोप" निम्नलिखित युक्त एक jboss-app.xml फ़ाइल EAR में शामिल करके बनाया निम्नानुसार हाइबरनेट बनें:

<persistence> 
    <persistence-unit name="myapp"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    ... 

लेकिन फिर, सबसे खराब होता है। तैनाती पर, सर्वर एक ClassCastException फेंकता है जब यह जेपीए इंटरफ़ेस javax.persistence.spi.PersistenceProvider (जो HibernatePersistence द्वारा implimented है) करने के लिए org.hibernate.ejb.HibernatePersistence से कास्ट करने के लिए कोशिश करता है।

यह एक प्रकार का WEIRD है, क्योंकि मैं अपने ईएआर में जेपीए एपीआई भी भेज रहा हूं, इसलिए, ईएआर के वर्गों को जेबॉस के लिए प्राथमिकता है, इसे हाइबरनेट पेर्सिस्टेंस से पर्सिस्टेंसप्रोवाइडर तक कास्टिंग करते समय कोई समस्या नहीं होनी चाहिए, चूंकि वे एक ही कक्षा लोडर पर "होना चाहिए"।

यदि मैं अपना खुद का जेपीए एपीआई नहीं भेजता, तो तैनाती क्लास नॉटफाउंड अपवाद के साथ विफल हो जाती है जब जेबॉस कुछ जेपीए कक्षा खोजने की कोशिश करता है।

इस कास्टिंग में असफल होने का कोई विचार क्यों है?

मैं जेबॉस 5.1.0 का उपयोग कर रहा हूं, और हाइबरनेट 3.5.6 का उपयोग करने की कोशिश कर रहा हूं। जेपीए एपीआई संस्करण एक नियंत्रित हाइबरनेट संस्करण द्वारा पारगमन रूप से आयात किया जाता है।

उत्तर

1

क्या आपने हाइबरनेट-entitymanager.jar भी शामिल किया है?

अन्यथा आप 3.5.6 संस्करण के साथ सामान्य/lib में हाइबरनेट कोर जार को बदलने का प्रयास कर सकते हैं।

+0

धन्यवाद। हां, दोनों हाइबरनेट-कोर और हाइबरनेट-इकाई प्रबंधक भेज दिए जाते हैं। सामान्य/lib में हाइबरनेट जार रखने के लिए एक विकल्प नहीं है, हाइबरनेट भेज दिया जाना चाहिए (और यह संभव होना चाहिए ...)। – edutesoy

2

आप कान नियोक्ता के माध्यम से कक्षा स्कोपिंग चालू करने का प्रयास कर सकते हैं। के लिए JBoss 5.x संपादित करें:

jboss/सर्वर/[विन्यास] /deployers/ear-deployer-jboss-beans.xml

और परिवर्तन:

<bean name="EARClassLoaderDeployer" class="org.jboss.deployment.EarClassLoaderDeployer"> 
     <property name="isolated">false</property> 
    </bean> 

सच करने के लिए पृथक वातावरण।

1

जेबॉस सर्वर में हाइबरनेट के साथ क्लास लोडिंग समस्याओं को हल करने के लिए आपको jboss-classloading.xmlWEB-INF अपने वेब एप्लिकेशन के फ़ोल्डर में जोड़ें। इन कॉन्फ़िगरेशन सेटिंग्स here के बारे में और पढ़ें।

<classloading xmlns="urn:jboss:classloading:1.0" 
domain="pentaho.ear" 
export-all="NON_EMPTY" 
import-all="true" 
parent-first="false"> 
</classloading>