2010-10-28 12 views
5

के साथ मैं टॉमकैट 5.5.26 में एम्बेडेड ओपनईजेबी 3.1.3 का उपयोग कर रहा हूं और मैं जेपीए प्रदाता के रूप में हाइबरनेट 3.6 का उपयोग करता हूं।ओपनईजेबी टॉमकैट और हाइबरनेट और जेपीए

@Stateless 
public class MapSearchManager implements MapSearchLocal, MapSearchRemote { 
    @PersistenceContext 
    private EntityManager em; 
... 
    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public int queryDataSelectionNumRecords(MapSearchParamBean paramBean) { 
     Criteria c = createCriteria(paramBean); 
     c.setProjection(Projections.rowCount()); 

     List l = c.list(); 
... 
    } 
... 
} 

जब मैं OpenEJB और उस में मेरे ऐप युद्ध अभिलेखागार के साथ बिल्ला चलाने के लिए, तैनाती अपवाद स्टैक ट्रेस के साथ विफल:

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

    <persistence-unit name="manager1" transaction-type="JTA"> 

    <!-- provider is optional if you work with only 1 JPA provider --> 
    <!-- 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    --> 

    <jta-data-source>java:/DefaultDS</jta-data-source> 

<!-- 
    <properties> 
     <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml" /> 
    </properties> 
--> 

    </persistence-unit> 

</persistence> 

यहाँ मेरी कोड है:

यहाँ मेरी persistence.xml है:

2010-10-27 18:13:35,374 - ERROR - Unable to deploy collapsed ear in war /wma: Exception: Creating application failed: C:\apache-tomcat-5.5.26\webapps\wma: javax/persistence/spi/ProviderUtil 
org.apache.openejb.OpenEJBException: Creating application failed: C:\apache-tomcat-5.5.26\webapps\wma: javax/persistence/spi/ProviderUtil 
     at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:666) 
     at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:449) 
     at org.apache.openejb.tomcat.catalina.TomcatWebAppBuilder.start(TomcatWebAppBuilder.java:249) 
     at org.apache.openejb.tomcat.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:58) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4148) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544) 
     at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926) 
     at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) 
     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022) 
     at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) 
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) 
     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
     at org.apache.catalina.core.StandardService.start(StandardService.java:448) 
     at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) 
     at org.apache.catalina.startup.Catalina.start(Catalina.java:552) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) 
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) 
Caused by: java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil 
     at java.lang.Class.getDeclaredConstructors0(Native Method) 
     at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
     at java.lang.Class.getConstructor0(Class.java:2699) 
     at java.lang.Class.newInstance0(Class.java:326) 
     at java.lang.Class.newInstance(Class.java:308) 
     at org.apache.openejb.assembler.classic.PersistenceBuilder.createEntityManagerFactory(PersistenceBuilder.java:179) 
     at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:489) 
     ... 27 more 

खोज करने पर, मैंने पाया वर्ग javax/persistence/spi/ProviderUtil Jav का हिस्सा है एक ईई 6/जेपीए 2.0 spec, जो OpenEJB द्वारा समर्थित नहीं है। लेकिन मैं अपने ऐप में नहीं सोचता कि मैं किसी भी जेपीए 2.0 का उपयोग करता हूं। मैं विशेष रूप से 1.0 के persistence.xml में उल्लेख करते हैं। मुझे पता है कि हाइबरनेट 3.6 जेपीए 2.0 का समर्थन करता है। मुझे नहीं पता कि हाइबरनेट की मानदंड एपीआई जेपीए 2.0 का हिस्सा है, लेकिन समस्या का कारण नहीं बनना चाहिए क्योंकि मैंने विशेष रूप से persistence.xml में 1.0 का उल्लेख किया है।

आपकी मदद के लिए धन्यवाद।

सादर

विल

उत्तर

4

खोज करने पर, मैं कक्षा javax/जावा ईई 6/जेपीए 2.0 कल्पना

का हिस्सा हठ/एसपीआई/ProviderUtil है यह सही है पाया।

जो ओपनईजेबी द्वारा समर्थित नहीं है।

अभी तक नहीं। यह OPENEJB-1236 द्वारा ट्रैक किया जाता है।

लेकिन मैं अपने अनुप्रयोग में लगता है कि न मैं किसी भी जेपीए 2,0

चाहे आप जेपीए 2.0 सुविधाओं या नहीं का उपयोग करें, विभिन्न इंटरफेस में कुछ बदलाव कंटेनरों से स्पष्ट समर्थन की आवश्यकता का उपयोग करें।

मैं विशेष रूप से 1.0 का persistence.xml में उल्लेख करता हूं।

इससे कोई फर्क नहीं पड़ता है, कंटेनर अभी भी एक जेपीए 2.0 कार्यान्वयन लोड करने का प्रयास कर रहा है।

अगर हाइबरनेट की मानदंड एपीआई जेपीए 2,0

का हिस्सा है जेपीए 2.0 मैं नहीं जानता कि एक नया मानदंड एपीआई लेकिन हाइबरनेट की मानदंड एपीआई की ... हाइबरनेट भाग है। जो मैं देख सकता हूं, आप हाइबरनेट एपीआई का उपयोग कर रहे हैं और मेरा सुझाव इस प्रकार अपने जेपीए 1.0 कार्यान्वयन का उपयोग करना है - यानी हाइबरनेट एंटिटी मैनेजर 3.4.0.जीए और इसकी निर्भरताएं, जो इस एपीआई को प्रदान करती हैं। वैसे भी आपको जेपीए 2.0 की आवश्यकता नहीं है।


वहाँ हाइबरनेट-जेपीए मिलान संस्करणों के बारे में नेट पर ज्यादा जानकारी नहीं है। तो क्या आपका मतलब है कि हाइबरनेट एंटिटी मैनेजर और एनोटेशन प्रोजेक्ट जेपीए 1.0 विनिर्देशन के कार्यान्वयन हैं, और हाइबरनेट कोर प्रोजेक्ट में कोर हाइबरनेट (गैर-जेपीए इम्प्लायर) और जेपीए 2.0 इम्प्लाइट शामिल है?

हाइबरनेट एंटिटी मैनेजर वह परियोजना है जो जेपीए कार्यान्वयन प्रदान करती है।

  • हाइबरनेट EntityManager 3.4.0.GA एक जेपीए 1.0 कार्यान्वयन
  • Hiberante EnittyManager 3.5+ एक जेपीए 2.0 कार्यान्वयन

यह हाइबरनेट कोर पर निर्भर करता है (और कुछ अन्य पुस्तकालयों) है। हाइबरनेट EntityManager 3.4.0.GA उपयोग करने के लिए, आपको निम्न की आवश्यकता होगी:

 
org.hibernate:hibernate-entitymanager:jar:3.4.0.GA:compile 
+- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile 
+- org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA:compile 
+- org.hibernate:hibernate-annotations:jar:3.4.0.GA:compile 
+- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile 
| +- antlr:antlr:jar:2.7.6:compile 
| \- commons-collections:commons-collections:jar:3.1:compile 
+- org.slf4j:slf4j-api:jar:1.5.10:compile 
+- dom4j:dom4j:jar:1.6.1:compile 
| \- xml-apis:xml-apis:jar:1.0.b2:compile 
+- javax.transaction:jta:jar:1.1:compile 
\- javassist:javassist:jar:3.4.GA:compile 

मैं Maven उपयोग कर रहा हूँ तो मैं बस हाइबरनेट-entitymanager पर निर्भरता घोषित करने के लिए है, लेकिन यदि आप नहीं करते हैं, एक मिल bundle from SourceForge

+0

धन्यवाद पास्कल। नेट पर हाइबरनेट-जेपीए संस्करण मिलान के बारे में ज्यादा जानकारी नहीं है। तो क्या आपका मतलब है कि हाइबरनेट एंटिटी मैनेजर और एनोटेशन प्रोजेक्ट जेपीए 1.0 विनिर्देशन के कार्यान्वयन हैं, और हाइबरनेट कोर प्रोजेक्ट में कोर हाइबरनेट (गैर-जेपीए इम्प्लायर) और जेपीए 2.0 इम्प्लाइट शामिल है? एक बार फिर धन्यवाद। –

संबंधित मुद्दे