¿SessionBeans e Grails?
Una delle qualità di Grails, che personalmente mi piace di più è la sua integrazione con JEE. Dal momento che possiamo utilizzare Grails tag JSP, bean di sessione e EntityBeans come se fossero parte integrante del quadro.
In questo post ci concentreremo su come possiamo invocare SessionBeans se locale o remoto dal nostro codice Grails. Questa possibilità, insieme con la gestione di EntityBeans Grails porta alla flessibilità e scalabilità. Un voglio dire con questo, che essendo pulito si può sviluppare un'intera applicazione in Grails e poi andare a modelli di servizi per Enti e SessionBeans rispettivamente. In questo modo possiamo subito iniziare a sviluppare l'applicazione utilizzando i vantaggi di essere in un ambiente dinamico e poi, quando l'applicazione è più definito e le modifiche non sono comuni allora si può spostare il livello di business di JEE. Questa modifica non influisce qualsiasi altra parte del Graal come i controller e le viste.
Per raggiungere questi ultimi tutto ciò che facciamo è sostituire il codice di imprese di servizi, con delega a la stessa operazione sul SessionBeans creato.
Poi vedremo come Grails è configurato per utilizzare entrambi i EJB3.0 SessionBeans come EJB2.1
Iniezione del SessionBeans
Grails permette di iniezione sia nei servizi e in ogni driver SB come fate con i vostri servizi. Quando si utilizza Grails primavera nella gestione dei suoi componenti è possibile utilizzare tutti i vantaggi di questo all'interno di Grails. Il modo più semplice per impostare gli oggetti da essere iniettato nel driver o servizi, e soprattutto la SB, sta utilizzando il file resources.groovy. Questo file è equivalente alla primavera applicationContext.xml unico file invece di essere un file XML è una classe che utilizza il groove SpringBuilder come DSL per la configurazione. Di default il file di risorse si trovano in grails-app/conf/spring ed ha il seguente contenuto:
/ / Inserire il codice Primavera DSL qui fagioli = { }
All'interno della chiusura è dove si dovrebbe aggiungere le definizioni dei fagioli.
JNDI configurazione del server
Per accedere a qualsiasi componente di un application server deve farlo con JNDI. Per questa primavera offre una classe di utilità che fornisce le operazioni del server, come ricerca del nome JNDI e agisce anche come fornitore di contesto JNDI. A questo si deve aggiungere la seguente definizione di resources.groovy
ejbJndi (org.springframework.jndi.JndiTemplate) { ambiente = [ "Java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory" "Java.naming.provider.url", "JNP: / / http://localhost:1099
Dove:
- ejbJndi
- Il nome del fagiolo, che è di tipo org.springframework.jndi.JndiTemplate. Questo nome può essere qualsiasi cosa. E 'questo il nome che farà riferimento per determinare il nome del server che fornisce l'accesso a un oggetto.
- ambiente
- JndiTempalte è di proprietà di cui è configurato con una mappa che ha le proprietà JNDI
In un file possono essere tante definizioni come JndiTemplate provider JNDI richiedono l'accesso.
AMBIENTE JNDI server di configurazione
E 'molto probabile e necessaria, che richiede diverse configurazione IP del server JNDI e la porta come l'ambiente di sviluppo, la produzione o di test. Per raggiungere questo obiettivo dovrebbe essere aggiunto alla configurazione precedente come segue:
- Luogo il valore della IP e la porta dell 'ambiente JBoss in ciascuno dei Config.groovy.
- Importare il tipo di file ConfigurationHolder resources.groovy
- Sostituire l'ip e la porta della variabile "java.naming.provider.url" addebitate dalla configurazione.
Esempio
Config.groovy
... ambienti { {Sviluppo ... jboss.ip = "10.200.8.173" jboss.port = "1099" ... } produzione { ... jboss.ip = "172.16.2.105" jboss.port = "1099" ... }
Resources.groovy
importazione org.codehaus.groovy.grails.commons .* ... ejbJndi (org.springframework.jndi.JndiTemplate) { ambiente = [ "Java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory" "Java.naming.provider.url", "JNP ://"+ +":"+ ConfigurationHolder.config.jboss.ip ConfigurationHolder.config.jboss.port] }
Configurazione dei componenti EJB 3,0
Per iniettare 3,0 componenti EJB bisogna aggiungere la seguente configurazione:
xXXServices (org.springframework.jndi.JndiObjectFactoryBean) { JndiName = "XXXServices / remote" jndiTemplate = ref ("ejbJndi") }
Dove:
- xXXServices
- È il nome assegnato il riferimento remoto al SB e sarà utilizzato per iniettare questo nel driver e servizi. Qualsiasi driver o servizio che ha una proprietà chiamata è xXXServices iniettare il riferimento alla SB remoto definito con quel nome nel file resources.groovy. X il primo è minuscolo per indicare che per convenzione il nome deve cominciare in minuscolo.
- JndiName
- Nome con il quale individuare il riferimento al server JNDI SB
- jndiTemplate
- Nome del chicco da utilizzare come fornitore per accedere all'oggetto JNDI. È definito nella sezione precedente.
Per utilizzare il SB in un servizio potrebbe essere:
EjemploServices {public class def xXXServices unMetodo void (param1, param2) { xXXServices.invocoMetodoEnEJB (param1, param 2) } }
Configurazione dei componenti EJB 2.1
Al fine di iniettare EJB 2.1 componenti devono aggiungere la seguente configurazione è simile a quello visto per EJB 3.0.
xXXServices (org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean) { JndiName = "EJBXXXServices" businessInterface = "biz.aquait.yyy.ejb.EJBXXXServices" jndiTemplate = ref ("ejbJndi") refreshHomeOnConnectFailure = true lookupHomeOnStartup = false }
Dove:
- xXXServices
- È il nome assegnato il riferimento remoto al SB e sarà utilizzato per iniettare questo nel driver e servizi. Qualsiasi driver o servizio che ha una proprietà con questo nome è xXXServices iniettare il riferimento alla SB remoto definito con quel nome nel file resources.groovy. X il primo è minuscolo per indicare che per convenzione il nome deve cominciare in minuscolo.
- JndiName
- Nome con il quale individuare il riferimento al server JNDI SB
- refreshHomeOnConnectFailure
- Aggiornare la casa quando rileva un errore di connessione, per esempio quando il server si riavvia
- lookupHomeOnStartup
- Rende l'applicazione non fa la ricerca per aumentare, ma di utilizzare servizi di SB.
- jndiTemplate
- Nome del chicco da utilizzare come fornitore per accedere all'oggetto JNDI. È definito nel primo punto.
- businessInterface
- L'interfaccia remota del, SB cioè che si estende EJBObject.
Come utilizzare il SB all'interno di un servizio o di altro componente è la stessa che fa riferimento a SB implementato con EJB 3.0.
Conclusione
Seguendo i passi di cui sopra, possiamo dire che SB configurare Grails da usare è ingombrante e che l'uso di questi, nel quadro è trasparente e usata nello stesso modo che un servizio Grails.

SessionBeans Un progetto potrebbe essere implementato in un web container come Tomcat? O sarebbe necessario utilizzare un server di applicazioni come GlassFish?
Buon post
L'SB statefull o apolide sia bisogno di un container EJB e pertanto devono essere eseguiti all'interno di un application server come GlassFish o JBoss. In Tomcat D'altra parte è solo un server Web e come tale ha un contenitore web in cui i componenti deployer PODES pagine web come JSP, JSF e servlet.
Se non fosse per qualche motivo vuole avere la vostra applicazione in esecuzione in un server di applicazioni Grails potrebbe avere un'architettura distribuita. Questo avrebbe un'applicazione Web che utilizza Tomcat remoto in SB che sono in un Application Server installato su un'altra macchina.