2012-09-05 26 views
6

मुझे स्प्रिंग (जेपीए इकाइयों, सत्र फैक्ट्री और डेटा स्रोत परिभाषाओं सहित) में जटिल, कस्टम कॉन्फ़िगर किए गए हाइबरनेट सेटअप मिला है जिसे मैं Grails 2.1 में उपयोग करना चाहता हूं .0। इसके कारण, मैं Grails को sessionFactory और dataSource का संदर्भ देना चाहता हूं जो मेरे पास पहले से है। इसलिए, मैं नहीं चाहता (और वास्तव में, नहीं कर सकता) hibernate.cfg.xml का उपयोग करें जो conf/ में रखा गया है - न ही मैं DataSource.groovy का उपयोग करना चाहता हूं, क्योंकि सभी जटिल कॉन्फ़िगरेशन पहले से ही परीक्षण और कामकाजी कोड से पहले ही हैं और हम सभी स्प्रिंग आधारित।Grails 2.1: कस्टम स्प्रिंग कॉन्फ़िगरेशन से सत्र फ़ैक्टरी और डेटा स्रोत सेट करना

तो, मैं grails run-app पर लोड करने के लिए अपने कस्टम वसंत विन्यास पाने में कामयाब रहे है (resources.groovy में importBeans() के माध्यम से।) लॉग में, मैं db कनेक्शन, स्प्रिंग config देख सकते हैं और ठीक शुरू हाइबरनेट कर सकते हैं, कार्यावधि में तो बीन्स sessionFactory और dataSource पर बनाए गए हैं। अब, मैं Grails को उन लोगों का उपयोग करने के लिए कैसे कॉन्फ़िगर कर सकता हूं और अपना खुद का निर्माण करने की कोशिश नहीं करता?

आदर्श रूप से dataSource = ref('myDataSource') जैसे कुछ अच्छा होगा - और sessionFactory = ref('sessionFactory') या इसी तरह के साथ। मैंने कुछ लोगों को संसाधन.groovy में डाल दिया है, लेकिन यह अभी काम नहीं करता है।

मैं यह भी देखा है:

eventDao(com.JavaClassRequiringDataSource) { dataSource = ref('dataSource') } 

लेकिन यह या तो काम नहीं करता है

कोई मदद काफी सराहना की जाएगी ... मैं पिछले खर्च किया है (यकीन नहीं अगर यह कभी नहीं किया।) काम करने के लिए इसे पाने के लिए 10 घंटे का कोई फायदा नहीं हुआ। मुझे कोई फर्क नहीं पड़ता कि अगर मैं कुछ Grails सुविधाओं को खो देता हूं, जब तक यह काम करता है। तत्काल उद्देश्य जीओआरएम को हमारे पास पहले से मौजूद (~ 200) इकाइयों को देखने और कुछ मचान करने के लिए प्राप्त करना है :)

मुझे यह भी पता है कि इकाइयों को Grails द्वारा नहीं देखा जाता है क्योंकि मैंने BootStrap.groovy को निम्नलिखित जोड़ा है:

// ... 
def grailsApplication 
def init = { servletContext -> 
    println grailsApplication.domainClasses 
} 
// ... 

और यह प्रिंट करता है []।

यदि पैच की आवश्यकता है, तो मुझे केवल एक सामान्य विचार दें कि कहां से शुरू करना है और मैं एक नज़र डालूंगा ... मैं बस यह काम करना चाहता हूं।

धन्यवाद!

अद्यतन 1:

मैं resources.groovy फ़ाइल के कई मंत्र की कोशिश की है, और वर्तमान में यह इस तरह दिखता है:

beans = { 
    importBeans('main-spring-file-for-the-rest.xml') 
    dataSource = ref('dataSource') 
} 

लेकिन जब मैं मचान की कोशिश कर अभी भी मिलती है:

Error 2012-09-06 00:02:00,768 [Thread-9] ERROR plugins.DefaultGrailsPlugin - Cannot generate controller logic for scaffolded class x.y.z.Class. It is not a domain class! 

(लॉग लाइन संपादित: x.y.z.Class के साथ कक्षा के वास्तविक नाम को प्रतिस्थापित किया गया है।) जैसा कि मैंने दिखाया है ई, संस्थाओं की सूची खाली है, और मैं हाइबरनेट sessionFactory स्थापित करने का कोई रास्ता नहीं देख सकते हैं - उदाहरण के

sessionFactory = ref('sessionFactory') 

काम नहीं करता है।

अद्यतन 2:

सेम और वसंत से लोड हो रहा है संस्थाओं लेकिन नहीं के साथ इस्तेमाल किया या GORM ही देख रहे हैं, मैं एक उपयोगिता Grails में बनाया गया है और एक नया सेम का उपयोग कर संस्थाओं के रूपांतरण के लिए मजबूर कर रहा था , resources.groovy thusly से कॉन्फ़िगर किया गया:

public class TestFix implements ApplicationContextAware { 
    SessionFactory sessionFactory 
    ApplicationContext applicationContext 
    GrailsApplication grailsApplication 

    def init() { 
     GrailsHibernateUtil.configureHibernateDomainClasses(sessionFactory, "sessionFactory", grailsApplication) 

    } 
} 

beans = { 
    importBeans('main-spring-file-for-the-rest.xml') 

    myBean(TestFix) { bean -> 
     sessionFactory = ref('sessionFactory') 
     grailsApplication = ref(GrailsApplication.APPLICATION_ID) 
     bean.initMethod = 'init' 
    } 
} 

अब संस्थाओं Grails द्वारा देखा जाता है लेकिन मचान काम नहीं करता क्योंकि संवर्धित डोमेन वस्तुओं GORM विधियों (.list() और इस तरह के।) आप GrailsHibernateUtil.configureHibernateDomainClasses() उम्मीद करेंगे की कमी करने लगते हैं जब यह crea में उन तरीकों को जोड़ने के लिए सभी GrailsHibernateDomainClass वर्गों को टेस करता है, लेकिन या तो यह चुपचाप विफल रहा है या मुझे कुछ याद आ रहा है (शायद पर्याप्त जल्दी नहीं चल रहा है? यकीन नहीं है।) किसी भी मदद की बहुत सराहना की।

+1

मैं स्रोत पढ़ रहा हूं लेकिन मुझे यकीन नहीं है कि यह कार्यक्षमता उजागर हो गई है। डेटासोर्स के लिए यहां देखने का प्रयास करें: https://github.com/grails/grails-core/blob/master/grails-plugin-datasource/src/main/groovy/org/codehaus/groovy/grails/plugins/datasource/ DataSourceGrailsPlugin.groovy # L55 और यहां सत्र के लिए फैक्टरी: https://github.com/grails/grails-core/blob/master/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/plugins /orm/hibernate/HibernatePluginSupport.groovy – Raphael

+0

क्या आप अपने संसाधन.groovy पोस्ट कर सकते हैं? मेरे पास एक कस्टम डेटा स्रोत परिभाषा है और यहां बहुत अच्छा काम कर रहा है। –

+0

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

उत्तर

1

क्या आपने डीबी-रिवर्स-इंजीनियर प्लगइन का उपयोग करके अन्य तरीकों की कोशिश की है? हमें काफी जटिल स्प्रिंग एप्लिकेशन को grails (लगभग 90 इकाइयों) में माइग्रेट करने में बड़ी सफलता मिली थी।

+0

हम अपने मॉडल इकाइयों को गोर में माइग्रेट नहीं करना चाहते हैं। हमारे पास पहले से मौजूद हाइबरनेट कॉन्फ़िगरेशन के आधार पर कई अन्य परियोजनाएं हैं, जिनका परीक्षण किया जाता है और बहुत अच्छी तरह से काम करता है। हम निश्चित रूप से हर बार कुछ बदलावों को दोहराना नहीं चाहते हैं, न ही हमारा मुख्य आवेदन Grails या Groovy में लिखा गया है। –