2012-09-05 10 views
6

Ho una configurazione di Hibernate configurata su misura nella primavera (comprese le entità JPA, la factory di sessione e le definizioni dell'origine dati) che desidero utilizzare in Grails 2.1 .0. Per questo motivo, voglio dare a Grails un riferimento allo sessionFactory e allo che ho già. Quindi, non voglio (e infatti non posso) usare lo hibernate.cfg.xml inserito in conf/ - né voglio usare DataSource.groovy, poiché tutta la configurazione complessa è già gestita dal codice collaudato e funzionante che abbiamo già ed è tutto Primavera-based.Grails 2.1: impostazione sessionFactory e dataSource dalla configurazione Spring personalizzata

Così, sono riuscito a ottenere la mia configurazione di Spring personalizzato da caricare sul grails run-app (attraverso importBeans() in resources.groovy.) Nei registri, posso vedere il collegamento di db, config primavera e Hibernate avvio più che bene, quindi in fase di esecuzione del fagioli a sessionFactory e allo dataSource vengono creati. Ora, come posso configurare Grails per utilizzarli e non provare a crearne uno proprio?

Idealmente qualcosa come dataSource = ref('myDataSource') da qualche parte sarebbe grande - e lo stesso con sessionFactory = ref('sessionFactory') o simile. Ho visto alcune persone metterlo in resources.groovy, ma semplicemente non funziona.

Ho visto anche questo:

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

ma non funziona neanche

Qualsiasi aiuto sarebbe enormemente apprezzato ... Ho passato l'ultimo (non so se abbia mai fatto.) 10 ore cercando di farlo funzionare senza successo. Non mi dispiace se perdo alcune funzionalità di Grails, a patto che funzioni. L'obiettivo immediato è ottenere GORM per vedere le entità (~ 200) che abbiamo già e fare alcune impalcature :)

So anche che le entità non sono viste da Grails perché ho aggiunto quanto segue a BootStrap.groovy:

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

E stampa [].

Se è richiesta una patch, dammi un'idea generale di dove iniziare e darò un'occhiata ... voglio solo farlo funzionare.

Grazie!

Update 1:

Ho provato diversi incantesimi del file resources.groovy, e attualmente sembra che questo:

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

Ma quando si cerca di patibolo ho ancora ottenere:

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! 

(riga di registro modificata: ha sostituito il nome effettivo della classe con x.y.z.Class.) Come ho mostrato prima e, l'elenco delle entità è vuoto, e posso vedere alcun modo di impostare il Hibernate sessionFactory - per esempio

sessionFactory = ref('sessionFactory') 

Non funziona.

Aggiornamento 2:

Con i fagioli e le entità di carico a partire dalla primavera, ma non in uso o visto da GORM, sono stato in grado di forzare la conversione delle entità utilizzando un'utility integrata in Grails e un nuovo bean , configurato da resources.groovy così:

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' 
    } 
} 

Ora i soggetti sono visti da Grails ma impalcature non funziona perché gli oggetti di dominio aumentata sembrano mancare i metodi di Gorm (.list() e così via.) Ci si aspetterebbe GrailsHibernateUtil.configureHibernateDomainClasses() aggiungere quei metodi quando crea tutte le classi GrailsHibernateDomainClass, ma o sta fallendo in silenzio o mi manca qualcosa (forse non funziona abbastanza presto? non sono sicuro.) Qualsiasi aiuto molto apprezzato.

+1

Sto leggendo la fonte ma non sono sicuro che questa funzionalità sia esposta. Prova a cercare qui il DataSource: https://github.com/grails/grails-core/blob/master/grails-plugin-datasource/src/main/groovy/org/codehaus/groovy/grails/plugins/datasource/ DataSourceGrailsPlugin.groovy # L55 E qui per la sessioneFactory: https://github.com/grails/grails-core/blob/master/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/plugins /orm/hibernate/HibernatePluginSupport.groovy – Raphael

+0

Puoi pubblicare le tue risorse.groovy? Ho una definizione personalizzata di data source e funziona alla grande qui. –

+0

Aggiornato con queste informazioni. Grazie per i commenti, guarderò anche alla fonte. –

risposta

1

Hai provato il contrario utilizzando il plug-in db-reverse-engineer? Abbiamo avuto un grande successo con la migrazione di un'applicazione Spring a Grails piuttosto complessa (circa 90 entità).

+0

Non vogliamo migrare le entità del modello in gorm. Abbiamo diversi altri progetti che dipendono dalla configurazione di Hibernate che abbiamo già, che è stata testata e funziona molto bene. Sicuramente non vogliamo ripeterci ogni volta che qualcosa cambia, né la nostra applicazione principale è scritta in Grails o Groovy. –

Problemi correlati