Herzlich willkommen auf dem Blog der exensio GmbH

exensio ist ein unabhängiges Software-Unternehmen von erfahrenen IT Beratern und Architekten. Zu unseren Kunden zählen namhafte deutsche Großunternehmen.

exensio verbessert das Kommunikations- und Informationsmanagement von Unternehmen. Auf Basis sinnvoller und zweckmäßiger Technologien erarbeiten wir flexible und übergreifende Lösungen für webbasierte Informationssysteme. Abhängig von den Kundenanforderungen realisieren wir Web Applikationen sowie Lösungen auf Basis von Web Content Management- und Portalsystemen. Integrativ, wirtschaftlich und anwenderfreundlich!

Hier gelangen Sie zur exensio GmbH.

Montag, 30. Januar 2012

Grails : JNDI Werte im Embedded Tomcat setzen

JNDI eignet sich sehr gut, um einer Web-Applikation von außen (über den Tomcat) Parameter zur Verfügung zu stellen. Die JNDI Einstellungen werden in Tomcat in der context.xml vorgenommen. Entwickelt man in Grails (beispielsweise mit IntelliJ), so läuft der Tomcat jedoch im Embedded Mode. Dies bedeutet, dass keine context.xml vorhanden ist, die editierbar wäre. In den folgenden Code-Beispielen möchte ich zeigen, wie ein JNDI Wert ausgelesen und im Embedded Tomcat gesetzt werden kann. Dies ist beispielsweise zum Testen sehr nützlich.

So würde das Setzen eines JNDI Parameters in der Context.xml (auf dem Produktionsserver) aussehen:

  ...
  
  ...
  

In der Grails Test-Umgebung werden dann in der Datei _Events.groovy die JNDI Werte gesetzt. Hier muss beachtet werden, dass MyWebAppName durch den richtigen Namen der Web Applikation ersetzt wird. In dem Beispiel unten ist es nicht nötig, das Grails Tomcat Plugin zu modifizieren, wie es in den Grails Mailing-Listen diskutiert wurde:
eventConfigureTomcat = {tomcat ->
    println "### Start Tomcat configuration"

    try {
        def environment = tomcat.class.classLoader.loadClass('org.apache.catalina.deploy.ContextEnvironment').newInstance()
    
        environment.name = 'jnditest'
        environment.type = 'java.lang.String'
        environment.value = 'Grails JNDI Test String'
        environment.override = Boolean.TRUE
    
        def context = tomcat.host.findChild('/MyWebAppName')
        context.namingResources.addEnvironment environment
    }
    catch (Exception e)
    {
        e.printStackTrace()
    }
    println "### End Tomcat configuration"
}
Auslesen in der resources.groovy. So funktioniert es sowohl in der Test- als auch in der Produktions-Umgebung. In dem Beispiel unten wird jedoch überprüft, ob Grails im Entwicklungsmodus läuft:
import org.springframework.web.servlet.i18n.SessionLocaleResolver

// Place your Spring DSL code here
beans = {
    localeResolver(SessionLocaleResolver) {       
        Locale.setDefault(Locale.GERMAN)
    }
    
    if (grails.util.GrailsUtil.environment.equals('development')) {
        jnditest(org.springframework.jndi.JndiObjectFactoryBean) {
            jndiName = 'java:/comp/env/jnditest'
        }
    }
}

Links:
[1] http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Environment Entries

Keine Kommentare:

Kommentar veröffentlichen