Apache Geronimo 2:
Mit Eclipse eine Webanwendung erzeugen (JSP + EJB3)

+ andere TechDocs
+ Java EE
+ EJB
+ Apache Geronimo
+


Java EE (Java Platform, Enterprise Edition) ist eine durch Schnittstellen definierte Architektur für Unternehmensanwendungen, bestehend aus verschiedenen Komponenten.

Java-EE-Anwendungen werden auf Java EE Application Servern betrieben. Bekannte Java EE Application Server sind zum Beispiel: GlassFish, JBoss, Oracle WebLogic, IBM WebSphere und Apache Geronimo.



Inhalt

  1. Installation des Apache Geronimo 2
  2. Mit Eclipse eine Webanwendung (JSP + EJB3) erstellen
  3. Verschiedene Deployment-Verfahren
  4. Datasource
  5. Client-Anwendung
  6. Links auf weiterführende Informationen


Installation des Apache Geronimo 2

Java und Eclipse

  1. Installieren Sie ein aktuelles Java SE JDK (mindestens JDK 5, besser JDK 6) und definieren Sie die Umgebungsvariable 'JAVA_HOME' entsprechend, zum Beispiel wie beschrieben unter java-install.htm.

  2. Installieren Sie eine aktuelle Eclipse IDE for Java EE Developers (mindestens Version 3.3 und inklusive WTP), zum Beispiel wie beschrieben unter java-eclipse.htm.

  3. Überprüfen Sie die Eclipse-Einstellungen.

Geronimo

  1. Downloaden Sie Geronimo 2 von http://geronimo.apache.org (z.B. geronimo-tomcat6-jee5-2.0.2-bin.zip).

  2. Entpacken Sie die .zip-Datei ('Alle extrahieren...'):
    Um Probleme mit zu langen Pfaden zu vermeiden, empfiehlt es sich, vor dem Entzippen den Dateinamen der heruntergeladenen .zip-Datei (z.B. geronimo-tomcat6-jee5-2.0.2-bin.zip) stark zu verkürzen (z.B. zu g.zip) und beim Entzippen als Zielverzeichnis ein Verzeichnis direkt in der Root anzugeben.

  3. Im Folgenden wird davon ausgegangen, dass Sie Geronimo unter Windows in das Verzeichnis C:\Geronimo installieren.

  4. Starten Sie Geronimo über:
    \Geronimo\bin\startup.bat (bzw. startup.sh für Linux/Unix).
    Warten Sie bis 'Geronimo Application Server started' erscheint.

  5. Überprüfen Sie die Installation über:
    http://localhost:8080 und http://localhost:8080/console (Username=system, Password=manager)

  6. Stoppen Sie Geronimo über:
    \Geronimo\bin\shutdown.bat (bzw. shutdown.sh für Linux/Unix) (Username=system, Password=manager)

  7. Einige Portnummern können Sie anpassen in:
    \Geronimo\var\config\config-substitutions.properties.

    Weitere Einstellungen finden Sie in:
    \Geronimo\var\config\config.xml.

  8. Benutzer und Gruppen konfigurieren Sie entweder über die Geronimo-Konsole oder über die Dateien im Verzeichnis \Geronimo\var\security.
    In Geronimo-Deployment-Plänen können über das <security>-Element die abstrakten Rollen aus den Java-EE-Deployment-Deskriptoren zu konkreten Rollen des installierten Security Realms zugeordnet werden.

  9. Lesen Sie die Geronimo-Doku.

Geronimo Eclipse Plugin

  1. Starten Sie Eclipse und wählen Sie:
    'File' | 'New' | 'Other...' | '[+] Server' | 'Server' | 'Next >' | 'Download additional server adapters' | 'Geronimo v2.0 Server Adapter' | 'Next >' | 'OK'.

  2. Alternativ können Sie stattdessen auch eine neue Remote Site in Eclipse einrichten, wie beschrieben ist unter: http://geronimo.apache.org/geronimo-eclipse-plugin-installation-instructions.html.

  3. Starten Sie Eclipse neu.

  4. Stellen Sie eine Verbindung zu Ihrer Geronimo-Installation her:
    'File' | 'New' | 'Other...' | '[+] Server' | 'Server' | 'Next >' | '[+] Apache' | 'Apache Geronimo v2.0 Server' | 'Next >'.

  5. Tragen Sie als 'Application Server Installation Directory' Ihr Geronimo-Installationsverzeichnis ein (z.B. 'C:\Geronimo') und betätigen Sie 'Finish'.

  6. Wählen Sie die Java EE Perspective über
    'Window' | 'Open Perspective' | 'Other...' | 'Java EE' | 'OK'
    und klicken Sie unten auf den 'Servers'-Tabulatorreiter. Der 'Apache Geronimo v2.0 Server' wird angezeigt. Entweder mit rechter Maustaste auf diesem Eintrag oder über den grünen Kreis-Button dieses Fensters können Sie Geronimo starten und über das rote Quadrat wieder stoppen.



Mit Eclipse eine Webanwendung (JSP + EJB3) erstellen

Im Folgenden wird etwas verkürzt die Anleitung unter http://cwiki.apache.org/GMOxSAMPLES wiedergegeben, bei der mit Eclipse eine Webanwendung (JSP + EJB3) für Geronimo erzeugt wird.

Bitte achten Sie genau darauf, dass Sie die Kürzel 'ejb', 'ear' und 'war' nicht verwechseln.

Projektanlage und Geronimo-Deployment-Plan für EAR (Enterprise Application Project)

  1. Starten Sie Eclipse und wählen Sie:
    'File' | 'New' | 'Project...' | '[+] J2EE' | 'Enterprise Application Project' | 'Next >'.

  2. Tragen Sie ein:

    Project name: SampleEAR
    Use default: Ja
    Target Runtime: Apache Geronimo v2.0
    Configurations: Default Configuration for Apache Geronimo v2.0

    'Next >' | 'Next >'

  3. Aktivieren Sie die Checkbox 'Generate Deployment Descriptor' und betätigen Sie 'Next >'.

  4. Tragen Sie im 'Geronimo Deployment Plan' ein:

    Group Id: sampleear
    Artifact Id: sample-ear
    Version: 1.0
    Artifact Type: ear

    'Finish'.
    Ignorieren Sie die Fehlermeldung 'cvc-complex-type.2.4.b: The content of element 'application' is not complete...'.

Projektanlage und Geronimo-Deployment-Plan für EJB (Enterprise Java Bean)

  1. Öffnen Sie den EJB Project Wizard:
    'File' | 'New' | 'Project...' | '[+] EJB' | 'EJB Project' | 'Next >'.

  2. Tragen Sie ein:

    Project name: SampleEJB
    Use default: Ja
    Configurations: Default Configuration for Apache Geronimo v2.0
    Add project to an EAR: Ja
    EAR Project Name: SampleEAR

    'Next >'

  3. Im Project Facets Dialog muss bei 'Java' mindestens '5.0' eingetragen sein.
    'Next >' | 'Next >'

  4. Tragen Sie im 'Geronimo Deployment Plan' ein:

    Group Id: sampleear
    Artifact Id: sample-ear
    Version: 1.0
    Artifact Type: ejb

    'Finish'

Projektanlage und Geronimo-Deployment-Plan für WAR (Web Application Project)

  1. 'File' | 'New' | 'Project...' | '[+] Web' | 'Dynamic Web Project'.

  2. Tragen Sie ein:

    Project name: SampleWAR
    Use default: Ja
    Target Runtime: Apache Geronimo v2.0
    Configurations: Default Configuration for Apache Geronimo v2.0
    Add project to an EAR: Ja
    EAR Project Name: SampleEAR

    'Next >'

  3. Im Project Facets Dialog muss bei 'Java' mindestens '5.0' eingetragen sein.
    'Next >' | 'Next >'

  4. Tragen Sie im 'Geronimo Deployment Plan' ein:

    Group Id: sampleear
    Artifact Id: sample-war
    Version: 1.0
    Artifact Type: war

    'Finish'

Remote Interface

  1. Klicken Sie im Eclipse Project Explorer mit der rechten Maustaste auf den 'SampleEJB'-Projektnamen, wählen Sie 'New' | 'Interface' und tragen Sie ein:.

    Package: sampleear
    Name: RemoteBusinessInterface

    'Finish'

  2. Ändern Sie den Inhalt von RemoteBusinessInterface.java zu:

    package sampleear;
    
    import javax.ejb.Remote;
    
    @Remote
    public interface RemoteBusinessInterface
    {
      public String sayHello( String name );
    }
    

Stateless Session Bean

  1. Klicken Sie im Eclipse Project Explorer mit der rechten Maustaste auf den 'SampleEJB'-Projektnamen, wählen Sie 'New' | 'Class' und tragen Sie ein:

    Package: sampleear
    Name: MyStatelessSessionBean
    Interfaces Add...: sampleear.RemoteBusinessInterface

    'Finish'

  2. Ändern Sie den Inhalt von MyStatelessSessionBean.java zu:

    package sampleear;
    
    import javax.ejb.Stateless;
    
    @Stateless
    public class MyStatelessSessionBean implements RemoteBusinessInterface
    {
      public String sayHello( String name )
      {
        return getClass().getName() + " says hello to " + name + ".";
      }
    }
    

JSP (JavaServer Page)

  1. Klicken Sie im Eclipse Project Explorer mit der rechten Maustaste auf den 'SampleWAR'-Projektnamen und wählen Sie 'New' | 'JSP' | 'File name' = 'index.jsp' | 'Finish'.

  2. Ändern Sie den Inhalt von index.jsp zu:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Geronimo Sample Enterprise Application</title>
      </head>
      <body>
        <form action="${pageContext.request.contextPath}/sayHello">
          <input type="text" name="name" />
          <input type="submit" value="Press me!" />
        </form>
      </body>
    </html>
    
  3. Klicken Sie im Eclipse Project Explorer mit der rechten Maustaste auf den 'SampleWAR'-Projektnamen und wählen Sie 'Properties' | 'J2EE Module Dependencies' | 'J2EE Modules'. Wählen Sie den Radio-Button 'Allow both' und aktivieren Sie die Checkbox vor dem 'JAR/Module' 'SampleEJB.jar'. 'OK'.

Servlet

  1. Klicken Sie im Eclipse Project Explorer mit der rechten Maustaste auf den 'SampleWAR'-Projektnamen, wählen Sie 'New' | 'Servlet' und tragen Sie ein:

    Java Package: sampleear
    Class name: MyServlet

    'Next >'

  2. Tragen Sie ein:

    URL Mappings: /sayHello

    'Finish'

  3. Ändern Sie den Inhalt von MyServlet.java zu:

    package sampleear;
    
    import java.io.IOException;
    import javax.ejb.EJB;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class MyServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet
    {
      static final long serialVersionUID = 1L;
    
      @EJB
      RemoteBusinessInterface remoteBusinessIntf;
    
      protected void doGet( HttpServletRequest request, HttpServletResponse response )
      throws ServletException, IOException
      {
        String name = request.getParameter( "name" );
        if( name == null || name.length() == 0 ) {
            name = "anonymous";
        }
        response.getWriter().write( remoteBusinessIntf.sayHello( name ) );
      }
    }
    

Projektverzeichnisstruktur

  1. Das Projektverzeichnis sieht jetzt so aus:

    [<MeinWorkspace>]
      |- [SampleEAR]
      |    |- [.settings]
      |    |    '- org.eclipse...
      |    |- [EarContent]
      |    |    '- [META-INF]
      |    |         |- application.xml
      |    |         '- geronimo-application.xml
      |    '- .project
      '- [SampleEJB]
      |    |- [.settings]
      |    |    '- org.eclipse...
      |    |- [build]
      |    |    '- [classes]
      |    |         |- [META-INF]
      |    |         |    '- MANIFEST.MF
      |    |         '- [sampleear]
      |    |              |- MyStatelessSessionBean.class
      |    |              '- RemoteBusinessInterface.class
      |    |- [ejbModule]
      |    |         |- [META-INF]
      |    |         |    '- MANIFEST.MF
      |    |         '- [sampleear]
      |    |              |- MyStatelessSessionBean.java
      |    |              '- RemoteBusinessInterface.java
      |    |- .classpath
      |    '- .project
      '- [SampleWAR]
           |- [.settings]
           |    '- org.eclipse...
           |- [build]
           |    '- [classes]
           |         '- [sampleear]
           |              '- MyServlet.class
           |- [src]
           |    '- [sampleear]
           |         '- MyServlet.java
           |- [WebContent]
           |    |- [META-INF]
           |    |    '- MANIFEST.MF
           |    |- [WEB-INF]
           |    |    |- [lib]
           |    |    |- geronimo-web.xml
           |    |    '- web.xml
           |    '- index.jsp
           |- .classpath
           '- .project
    

Start der Anwendung

  1. Klicken Sie im Eclipse Project Explorer mit der rechten Maustaste auf den 'SampleEAR'-Projektnamen und wählen Sie 'Run As' | 'Run on Server'.

  2. Falls ein entsprechender Dialog erscheint: Aktivieren Sie die Checkbox 'Always use this server when running this project'. 'Finish'.

  3. Klicken Sie unten auf den 'Servers'-Tabulatorreiter und starten Sie Geronimo (rechte Maustaste auf Geronimo-Eintrag oder über den grünen Kreis-Button). Im Console-Fenster erscheint u.a.:
    'Module ... sampleear/sample-ear/1.0/ear'.

  4. Laden Sie:
    http://localhost:8080/SampleWAR

  5. Geben Sie einen Namen ein und betätigen Sie 'Press me!'.

Deployment-Exception mit openejb-jar.xml

  1. Falls Sie beim Deployen eine Fehlermeldung ähnlich zu:
    ERROR [Deployer] Deployment failed due to org.apache.geronimo.common.DeploymentException: Failed parsing descriptors for module ...
    Caused by: org.apache.openejb.OpenEJBException: Cannot unmarshall the openejb-jar.xml ...
    Caused by: javax.xml.bind.UnmarshalException: unexpected element ...

    erhalten, löschen Sie in Eclipse im Project-Explorer im <MeinWorkspace>\SampleEJB\ejbModule\META-INF-Verzeichnis die Datei 'openejb-jar.xml'.

  2. Achten Sie darauf, dass 'openejb-jar.xml' auch im Verzeichnis <MeinWorkspace>\SampleEJB\build\classes\META-INF entfernt wurde.

  3. Stoppen Sie Geronimo und führen Sie die oben unter 'Start der Anwendung' genannten Schritte erneut aus.

Ergebnis

  1. Überprüfen Sie die Logging-Dateien im Verzeichnis '\Geronimo\var\log', insbesondere 'geronimo.log'.

  2. Sie finden zu der von Ihnen deployten EAR den Eintrag '<module name="sampleear/sample-ear/1.0/ear"/>' am Ende von '\Geronimo\var\config\config.xml'.

    Einige der im EAR enthaltenen Datein werden ausgepackt im Verzeichnis: '\Geronimo\repository\sampleear'.

  3. Sehen Sie sich auch die Informationen in der Geronimo-Konsole zu Ihrer EAR an unter http://localhost:8080/console (Username=system, Password=manager),
    zum Beispiel unter:
    'Server' | 'Server Logs',
    'Applications' | 'Application EARs',
    'Security' | 'Console Realm',
    'Debug Views' | 'JNDI Viewer' | '[+] Enterprise Applications' | '[+] sampleear/sample-ear/1.0/ear',
    'Debug Views' | 'Dependency Viewer' | '[+] Enterprise Applications' | '[+] sampleear/sample-ear/1.0/ear'



Verschiedene Deployment-Verfahren

  1. Wenn Sie sowieso in einer IDE wie Eclipse entwickeln, ist es am bequemsten, hierüber zu deployen, wie im obigen Beispiel beschrieben ist.

  2. Die einfachste Alternative ist das Hot Deployment: Hierbei wird die Java-EE-Komponente (.jar-, .war- oder .ear-Datei) einfach in das Geronimo-Hot-Deployment-Verzeichnis C:\Geronimo\deploy kopiert. Wenige Sekunden später deployt Geronimo die kopierte Datei.
    Beim Hot Deployment müssen die von Geronimo benötigten "Deployment-Pläne" als XML-Dateien in den Jar-Archiven enthalten sein.

  3. Alternativ kann per Kommandozeile deployt werden, zum Beispiel so:

    cd \Geronimo\bin

    deploy.bat --user system --password manager deploy meineJeeKomponente [deployPlan.xml]

    'meineJeeKomponente' könnte zum Beispiel 'sampleear.ear' sein. Der Geronimo-Deployment-Plan '[deployPlan.xml]' muss nur angegeben werden (ohne die eckigen Klammern), wenn er nicht in der Java-EE-Komponente enthalten ist.

    Das Deployer-Tool bietet viele weitere Optionen, siehe:

    cd \Geronimo\bin

    java -jar deployer.jar help [command]

  4. Als weitere Alternative können Sie Java-EE-Komponenten natürlich auch über die Geronimo-Konsole http://localhost:8080/console deployen, undeployen und managen.

  5. Die Deployment-Pläne müssen folgendermaßen benannt werden:

    Java-EE-Komponente Archivdatei Deployment-Plan
    Webanwendung .war WEB-INF/geronimo-web.xml
    Enterprise Application .ear META-INF/geronimo-application.xml
    EJB-Komponente .jar META-INF/openejb-jar.xml
    Serverseitiger Geronimo-Client .jar META-INF/geronimo-client.xml
    Konnektoren, Ressourcen .rar META-INF/geronimo-connector.xml

    Die Schema-Definitionen zu diesen Deployment-Plänen finden Sie im \Geronimo\schema-Verzeichnis.



Datasource

Das Einrichten von Datasourcen erfolgt zu den bekannteren Datenbanken am einfachsten über die Geronimo-Konsole http://localhost:8080/console. Dabei kann der passende JDBC-Treiber direkt übers Internet geladen und in das Geronimo-Repository-Verzeichnis kopiert werden.

Falls die gewünschte Datenbank nicht in der Datenbank-Auswahlliste enthalten ist, kann ein geeigneter Datenbank-Deployment-Plan erstellt und zum Beispiel folgendermaßen deployt werden:

deploy.bat --user system --password manager deploy meinDatenbankDeployPlan.xml tranql-connector-1.1.rar

Der passende JDBC-Treiber muss eventuell umbenannt werden, damit die Versionsnummer im Dateinamen enthalten ist, und muss manuell mit der korrekten Unterverzeichnisstruktur in das Geronimo-Repository-Verzeichnis \Geronimo\repository kopiert werden. Für MySQL kann das zum Beispiel so aussehen:
\Geronimo\repository\mysql\mysql-connector-java\mysql-connector-java-3.1.12.jar.

Beachtet werden muss, dass Geronimo für Datasourcen verschiedene Sichtbarkeiten vorsieht: serverweit, applikationsweit und clientweit.



Client-Anwendung

Um externe Client-Anwendungen (z.B. eine Swing-Anwendung) mit im EJB-Container betriebenen EJBs zu verbinden, wird in der Client-Anwendung Java-Code ähnlich zu folgendem Beispielfragment benötigt:

Context ctx = new InitialContext();
Object  ref = ctx.lookup( "MeinEjbJndiName" );
MeinEjbInterface meinEjbObject = (MeinEjbInterface) PortableRemoteObject.narrow( ref, MeinEjbInterface.class );

Im CLASSPATH der Client-Anwendung muss sich eine 'jndi.properties'-Datei befinden, die für Geronimo folgenden Inhalt haben muss:

java.naming.provider.url=127.0.0.1:4201
java.naming.factory.initial=org.openejb.client.RemoteInitialContextFactory
java.naming.security.principal=meinAppSrvBenutzername
java.naming.security.credentials=meinAppSrvKennwort

(Alternativ können Sie die Parameter im Java-Code in einer 'HashTable' dem 'InitialContext()'-Konstruktor übergeben.)

Falls sich der Client auf einem anderen Rechner als Geronimo befindet, müssen Sie bei 'java.naming.provider.url=127.0.0.1:4201' die Geronimo-URL eintragen.
Das funktioniert allerdings nur, wenn Sie im Geronimo externe Zugriffe gestatten (in Geronimo 1.2 über 'allowHosts' in 'j2ee-server-plan.xml').

Außerdem benötigt die Client-Anwendung bestimmte Bibliotheken. Dies können zum Beispiel 'openejb-client-3.0-...jar' und 'geronimo-ejb_3.0_spec-...jar' sein, die Sie in den Verzeichnissen 'Geronimo\repository\org\apache\openejb\openejb-client' und 'Geronimo\repository\org\apache\geronimo\specs\geronimo-ejb_3.0_spec' finden.

Der Versuch, die im JNDI registrierten Bezeichnungen über 'ctx.list()' zu erfragen, wird mit den genannten Libs und mit Geronimo 2.02 leider mit der Fehlermeldung 'javax.naming.OperationNotSupportedException: TODO: Needs to be implemented' quittiert.



Links auf weiterführende Informationen





Weitere Themen: andere TechDocs | JSP | Java EE | EJB | SQL
© 1998-2008 Torsten Horn, Aachen