2014-10-11 7 views
7

हाल ही में मैं खोजने योग्य प्लगइन के साथ एक सरल Grails एप्लिकेशन को एकीकृत कर रहा था। जो मैंने पाया है वह खोज योग्य प्लगइन हाइबरनेट 4 लाइब्रेरी के साथ काम नहीं करता है।Grails 2.4 + हाइबरनेट 4 + खोजने योग्य प्लगइन = ClassNotFoundException: org.hibernate.impl.SessionFactoryImpl

runtime ":hibernate4:4.3.5.5" 

निर्भरता, इसे शुरू करने और फेंकता नहीं होते: https://github.com/wololock/grails-searchable-example

जब मैं के साथ इस एप्लिकेशन को चलाने -

यहाँ आप जोड़ा केवल स्वच्छ Grails केवल खोजने-प्लगइन के साथ 2.4 अनुप्रयोग जिसमें एक नमूना आवेदन प्राप्त कर सकते हैं एक अपवाद:

ClassNotFoundException: org.hibernate.impl.SessionFactoryImpl 

क्या मैं पहले से ही पता चला है कि Hibernate4 SessionFactoryImpl में org.hibernate.inte ले जाया गया था है rnal पैकेज और ऐसा लगता कम्पास पुराने स्थान में इस वर्ग के लिए लगता है कि:

2014-10-11 19:41:58,142 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener - Error initializing the application: org/hibernate/impl/SessionFactoryImpl 
Message: org/hibernate/impl/SessionFactoryImpl 
Line | Method 
->> 95 | injectLifecycle in org.compass.gps.device.hibernate.lifecycle.DefaultHibernateEntityLifecycleInjector 

पर वापस स्विच:

runtime ":hibernate:3.6.10.17" 

और DataSource.groovy निराकरण में

cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' 

बदलते समस्या।

मेरा प्रश्न है: क्या हाइबरनेट 4 के साथ खोजने योग्य प्लगइन का उपयोग करने के लिए कोई कामकाज है या हमें कम्पास/खोजने योग्य स्रोत कोड में समस्या का इंतजार या ठीक करना है? आपने अपने Grails एप्लिकेशन में उस समस्या से कैसे निपटारा? मैं आपकी युक्तियों के लिए आभारी रहूंगा।

+0

पाया है यह है कि क्या Grails ... इन सभी शानदार प्लगइन्स, कि Grails के नवीनतम संस्करण के साथ काम कभी नहीं के साथ खूनी दरारें मुझे, तो निराशा का 99% खर्च करने है फिक्स और वर्कअराउंड की तलाश में समय –

उत्तर

10

हाइबरेट 3.x और 4.x के बीच कई पैकेज और क्लास नाम परिवर्तन हुए थे, इसलिए हाइबरनेट 3.x के साथ काम करने वाला कोड दुर्लभ मामलों को छोड़कर 4.x के साथ काम नहीं करेगा। नाम परिवर्तन से परे, चीजें कैसे काम करती हैं, इसमें बड़े आंतरिक परिवर्तन होते थे, इसलिए संकलित कोड आवश्यक रूप से नहीं चलेंगे। ऐप विकल्प # 1 हाइबरनेट 3.x पर डाउनग्रेड करना है। इसके लिए कॉन्फ़िगरेशन सेटिंग्स शामिल हैं और टिप्पणी की गई हैं (BuildConfig.groovy, DataSource.groovy), इसलिए यह एक बहुत तेज़ विकल्प है। स्पष्ट रूप से एक विकल्प नहीं है यदि आप 4.x में जोड़े गए फीचर पर निर्भर करते हैं, और यह तब तक वास्तविक समस्या में देरी करता है जब तक कि आपको हाइबरनेट को अपग्रेड नहीं करना पड़े।

का उपयोग कर हाइबरनेट 3 की जरूरत सभी प्लगइन्स हाइबरनेट 4 समर्थन करने के लिए अद्यतन किया जाना है, या तो एक स्थानापन्न के रूप, या आदर्श समर्थन दोनों कुछ क्रॉस-संकलन चाल या किसी अन्य 3 वां पक्ष लाइब्रेरी का उपयोग। एक प्लगइन विकल्प जो उपयोगकर्ताओं को मानता है कि अंततः 3.x से अपग्रेड होगा, 3.x शाखा बनाने और हाइबरनेट 4 के लिए प्लगइन (मास्टर शाखा में) का एक नया बड़ा संशोधन शुरू करना है और इसे 4 में काम करने के लिए परिवर्तन करना है। एक्स। सुरक्षा अद्यतनों और बहुत मामूली मुद्दों का समर्थन करने के लिए 3.x शाखा का उपयोग करें, लेकिन नई सुविधाओं को न जोड़ें। बहुत सारे प्लगइन लेखक शायद इस मार्ग पर जाएंगे।

कुछ मामलों में अभी तक एक और विकल्प सबसे अधिक समझ में आता है - कुछ भी मत करो। यह खोजने योग्य पर लागू होता है। खोजने योग्य उपयोग http://www.compass-project.org/ जो प्रभावी रूप से मर चुका है - इसकी अंतिम रिलीज 4 साल पहले थी। शै बैनन अब http://www.elasticsearch.org/ का सीटीओ है मेरा मानना ​​है कि शै ने कम्पास पर काम करना बंद कर दिया और एलैस्टिकसेर्च शुरू किया क्योंकि यह एक सर्वर से परे कम्पास स्केल करने के लिए अव्यवहारिक है। डेटाबेस में ल्यूसीन इंडेक्स को स्टोर करना संभव है, लेकिन यह आपको एक केंद्रीकृत एकल लेखक और एक या अधिक (डीबी क्लस्टरिंग या इसी तरह के) केंद्रीकृत पाठक के साथ, कस्टम प्रोटोकॉल के साथ एक अनुकूलित खोज सर्वर इत्यादि देता है। अधिक समझ

Solr भी आम सहमति है कि लोचदार खोज को प्राथमिकता दी जाती है। सोलर ग्रेल्स प्लगइन को 3 वर्षों में अपडेट नहीं किया गया है, और Elasticsearch plugin भी मोल्ड हो रहा था, लेकिन हाल ही में नोएम टेने ने प्लगइन लीड के रूप में अपना लिया और बहुत सारे काम किए हैं और पिछले कुछ महीनों में उन्होंने कई रिलीज किए हैं। ध्यान दें कि पुराना elasticsearch और elasticsearch-gorm प्लगइन्स विलय और नए elasticsearch प्लगइन बनाने के लिए अपडेट किए गए थे।

फिर भी एक और विकल्प हैबर्ननेट के अपने उत्पाद, Hibernate Search का उपयोग करना है। a plugin for that है लेकिन इसे 2012 से अपडेट नहीं किया गया है। स्वार्थी रूप से यह आपके लिए मेरी व्यक्तिगत वरीयता है - इस विकल्प को चुनें, प्लगइन ले लें (सकारात्मक उत्तर देने या मूल लेखकों से कोई प्रतिक्रिया नहीं) और इसे नवीनतम के साथ संगत होने के लिए अपडेट करें हाइबरनेट 4.x प्लगइन। इससे हमें लोचदार खोज के लिए एक अच्छा विकल्प मिल जाएगा।

इसे छोड़कर, मुझे लगता है कि लोचदार खोज आपका सबसे अच्छा विकल्प है।

+1

बहुत वर्णनात्मक उत्तर बर्ट के लिए धन्यवाद। मुझे लगता है कि यह बहुत से लोगों की मदद करेगा, जो एक ही समस्या के साथ संघर्ष करेंगे, ताकि उनकी जरूरतों के अनुरूप सर्वोत्तम समाधान चुन सकें। –

+0

इस पुराने को कुछ अपडेट जोड़ने के लिए लेकिन अच्छा जवाब: हाइबरनेट खोज अब भी लोचदार खोज के साथ एकीकृत है। और सोलर रोडमैप पर भी है। http://in.relation.to/2016/05/24/ElasticsearchintegrationReachesBeta1/ देखें – Sanne

3

बर्ट ने बहुत अच्छा विवरण दिया। इसके लिए धन्यवाद।

मैं बस छोटा संकेत जोड़ना चाहता हूं। इस समय खोज योग्य प्लगइन हाइबरनेट 4.X.X के साथ काम नहीं करता है। DataSource.groovy में

जोड़ें/हटाएं निम्नलिखित: 3.xx करने के लिए परियोजना में अपनी हाइबरनेट डाउनग्रेड करने का प्रयास करें (हाइबरनेट: 3.6.10.18)

तो आप की आवश्यकता होगी

कैश। region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'

और/टिप्पणी को हटाना:

cache.region.factory_c लड़की = 'org.hibernate.cache.ehcache.EhCacheRegionFactory'

BuildConfig.groovy में

: ": हाइबरनेट: 3.6.10.18"

यह साथ मेरी मशीन पर काम करता है

परिवर्तन निर्भरता को हाइबरनेट परिवर्तन।

उम्मीद है कि यह किसी की मदद करेगा।

(मैं इस सवाल का जवाब यहाँ http://tiku.io/questions/4052527/does-the-searchable-plugin-work-with-grails-2-0-0-i-argue-no

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