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.
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
Puoi pubblicare le tue risorse.groovy? Ho una definizione personalizzata di data source e funziona alla grande qui. –
Aggiornato con queste informazioni. Grazie per i commenti, guarderò anche alla fonte. –