¿SessionBeans und Grails?
Eine der Qualitäten von Grails, die persönlich Ich mag die meisten ist die Integration mit JEE. Da können wir Grails tags JSP, Session Beans und EntityBeans, als ob sie ein integraler Bestandteil des Rahmens wurden.
In diesem Beitrag konzentrieren wir uns auf, wie wir SessionBeans berufen, ob lokal oder remote von unseren Code Grails. Diese Möglichkeit, gemeinsam mit dem Management von EntityBeans Grails bringt die Anpassungsfähigkeit und Skalierbarkeit. A Ich will damit sagen, dass sein ordentlich können wir eine komplette Anwendung in Grails entwickeln und dann später zu gehen und Service-Modelle to Entities und SessionBeans jeweils. Auf diese Weise können wir schnell starten die Entwicklung Ihrer Anwendung mit dem Vorteil, dass sie in einem dynamischen Umfeld und dann, wenn die Anwendung mehr definiert ist und die Änderungen werden nicht häufig dann haben wir die Business-Schicht auf JEE bewegen können. Diese Änderung wirkt sich nicht auf irgendeinem anderen Teil der Grails wie Controller oder Ansichten.
Um letzteres zu erreichen, was wir tun, ist ersetzen Sie den Code der Dienstleistungen durch Delegation an den gleichen Vorgang auf der SessionBeans erstellt.
Dann werden wir sehen, wie Grails konfiguriert ist, dass sowohl EJB3.0 SessionBeans als EJB2.1 verwenden
Injektion der SessionBeans
Grails erlaubt Injektion sowohl in den Dienstleistungen und in jedem SB-Piloten wie Sie mit Ihren Leistungen. Wenn Grails verwendet Frühling in der Verwaltung ihrer Komponenten ist möglich, alle Vorteile dieses innerhalb von Grails nutzen. Der einfachste Weg, um die Objekte in den Treiber oder Dienste, und vor allem die SB injiziert werden gesetzt, wird mit Hilfe der Datei resources.groovy. Diese Datei ist gleichbedeutend mit dem Frühling applicationContext.xml einzige Datei anstatt einer XML-Datei ist eine Klasse, die SpringBuilder groovy wie DSL verwendet für die Konfiguration. Standardmäßig wird die Datei Ressourcen in grails-app/conf/spring gefunden und hat folgenden Inhalt:
/ / Stellen Sie Ihren Frühlings-DSL-Code hier Bohnen = { }
Innerhalb der Schließung ist, wo Sie die Definitionen der Bohnen sollte hinzufügen.
JNDI-Server-Konfiguration
Für den Zugriff auf jede Komponente in einer Anwendung-Server muss dies mit JNDI. Aus diesem Frühjahr bietet eine Utility-Klasse, die eine Server-Operationen wie JNDI name lookup liefert und es fungiert auch als JNDI Kontext-Provider. Zu diesem müssen wir die folgende Definition in resources.groovy
ejbJndi (org.springframework.jndi.JndiTemplate) { Umwelt = [ "Java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory" "Java.naming.provider.url", "JNP: / / http://localhost:1099
Wo:
- ejbJndi
- Der Name der Bohne, die vom Typ org.springframework.jndi.JndiTemplate ist. Dieser Name kann alles sein. Es ist dieser Name, der bezogen auf die Name-Server, die Zugriff auf ein Objekt bietet zu bestimmen sein wird.
- Umwelt
- JndiTempalte ist die Eigenschaft, von denen mit einer Karte, dass die JNDI-Eigenschaften konfiguriert ist
In einer Datei könnte so viele Definitionen wie JndiTemplate JNDI-Provider den Zugang erfordern.
JNDI-Server-Konfiguration UMWELT
Es ist sehr wahrscheinlich und notwendig, das erfordert andere Konfiguration JNDI-Server IP und Port wie die Umwelt die Entwicklung, Produktion oder Tests. Um dies zu erreichen, um die vorherige Konfiguration wie folgt zu verwenden:
- Setzen Sie den Wert der IP und den Port des JBoss-Umgebung in jedem Config.groovy.
- Importieren Sie die Datei-Typ resources.groovy ConfigurationHolder
- Ersetzen Sie die IP und Port der Variable "java.naming.provider.url" durch die Konfiguration berechnet.
Beispiel
Config.groovy
... Umgebungen { {Entwicklung ... jboss.ip = "10.200.8.173" jboss.port = "1099" ... } Produktion { ... jboss.ip = "172.16.2.105" jboss.port = "1099" ... }
Resources.groovy
org.codehaus.groovy.grails.commons .* importieren ... ejbJndi (org.springframework.jndi.JndiTemplate) { Umwelt = [ "Java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory" "Java.naming.provider.url", "JNP ://"+ +":"+ ConfigurationHolder.config.jboss.ip ConfigurationHolder.config.jboss.port] }
Konfigurieren EJB 3.0-Komponenten
Um injizieren EJB 3.0-Komponenten müssen Sie die folgende Konfiguration hinzu:
xXXServices (org.springframework.jndi.JndiObjectFactoryBean) { jndiName = "XXXServices / remote" jndiTemplate = ref ("ejbJndi") }
Wo:
- xXXServices
- Ist der Name, den Sie dem Remote-Verweis auf die SB und wird verwendet, um diese in die Treiber und Dienste zu injizieren. Jeder Fahrer oder eine Dienstleistung, eine benannte Eigenschaft hat, ist xXXServices spritzen sie den Verweis auf die Remote-SB mit diesem Namen in der Datei resources.groovy definiert. Der erste x ist Kleinbuchstaben um anzuzeigen, dass per Konvention den Namen muss in Kleinbuchstaben beginnen.
- jndiName
- Name, mit dem der Verweis auf die JNDI-Server SB finden
- jndiTemplate
- Name der Bohne als Anbieter für die JNDI-Objekt zugreifen verwendet werden. Ist die im vorherigen Abschnitt definiert.
Zur Verwendung des SB in einem Dienst wäre:
EjemploServices {public class def xXXServices unMetodo void (param1, param2) { xXXServices.invocoMetodoEnEJB (param1, param 2) } }
Konfigurieren EJB 2.1-Komponenten
Um injizieren EJB 2.1-Komponenten müssen fügen Sie die folgende Konfiguration ist ähnlich wie bei EJB 3.0 zu sehen.
xXXServices (org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean) { jndiName = "EJBXXXServices" businessInterface = "biz.aquait.yyy.ejb.EJBXXXServices" jndiTemplate = ref ("ejbJndi") refreshHomeOnConnectFailure = true lookupHomeOnStartup = false }
Wo:
- xXXServices
- Ist der Name, den Sie dem Remote-Verweis auf die SB und wird verwendet, um diese in die Treiber und Dienste zu injizieren. Jeder Fahrer oder eine Dienstleistung, eine Eigenschaft mit diesem Namen hat, ist xXXServices spritzen sie den Verweis auf die Remote-SB mit diesem Namen in der Datei resources.groovy definiert. Der erste x ist Kleinbuchstaben um anzuzeigen, dass per Konvention den Namen muss in Kleinbuchstaben beginnen.
- jndiName
- Name, mit dem der Verweis auf die JNDI-Server SB finden
- refreshHomeOnConnectFailure
- Aktualisieren Sie die Heimat, wenn es eine Verbindung Fehler erkennt, z. B. wenn der Server neu gestartet
- lookupHomeOnStartup
- Es macht die Anwendung nicht tun die Suche zu erhöhen, sondern nutzen Dienstleistungen von SB.
- jndiTemplate
- Name der Bohne als Anbieter für die JNDI-Objekt zugreifen verwendet werden. Ist in den ersten Punkt definiert.
- businessInterface
- Das Remote-Interface des SB, dh, dass EJBObject erstreckt.
Wie die SB innerhalb eines Dienstes oder einer anderen Komponente ist die gleiche Art und Weise, die Verweise auf SB mit EJB 3.0 implementiert.
Abschluss
Nach der oben dargestellten Schritte können wir sagen, dass SB Grails zu konfigurieren ist umständlich und dass die Nutzung dieser im Rahmen ist transparent und in der gleichen Weise, dass eine Grails-Service.

SessionBeans Ein Projekt könnte in einem Web-Container wie Tomcat eingesetzt werden? oder wäre es notwendig, einen Applikationsserver GlassFish wie benutzen?
Gute Post
Die SB statefull oder Staatenlose benötigen entweder ein EJB-Container und müssen daher innerhalb eines Applikationsservers wie GlassFish oder JBoss ausgeführt werden. Auf der anderen Seite Tomcat ist nur ein Web-Server und hat als solche eine Web-Container, in denen Komponenten Deployer PODES Webseiten wie JSP, JSF und Servlets.
Wenn aus irgendeinem Grund nicht wollen, dass Ihre Anwendung läuft in einer Grails-Anwendung verfügt möglicherweise über eine verteilte Architektur. Dies hätte einen Tomcat Web Application aus der Ferne benutzt in SB, die in einem Application Server auf einem anderen Rechner installiert sind.