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.
Downloaden Sie WebSphere Application Server V6.1 von http://www.ibm.com/developerworks/websphere/downloads (z.B. 'was.cd.6100.trial.base.windows.ia32.zip').
Entpacken Sie die .zip-Datei, starten Sie das Installationsprogramm 'launchpad.exe' und führen Sie die Installationsschritte durch.
In der folgenden Beschreibung wird davon ausgegangen, dass Sie in das Verzeichnis 'C:\IbmWebSphere' installieren.
Starten Sie WebSphere über folgenden Kommandozeilenbefehl:
cmd.exe /c "C:\IbmWebSphere\AppServer\profiles\AppSrv01\bin\startServer.bat" server1 -profileName AppSrv01
Stoppen Sie WebSphere über folgenden Kommandozeilenbefehl:
cmd.exe /c "C:\IbmWebSphere\AppServer\profiles\AppSrv01\bin\stopServer.bat" server1 -profileName AppSrv01
(Passen Sie jeweils die Pfade an.)
Überprüfen Sie die Installation.
Rufen Sie die während der Installation genannten Testanwendungen auf, zum Beispiel:
http://localhost:9080/ivt/ivtserver?parm2=ivtservlet
Überprüfen Sie die Dateien in den Verzeichnissen:
C:\IbmWebSphere\AppServer\profiles\AppSrv01\logs\server1 und
In 'C:\IbmWebSphere\AppServer\profiles\AppSrv01\logs\AboutThisProfile.txt' finden Sie Definitionen und Port-Belegung, zum Beispiel folgendermaßen:
Profilname: | AppSrv01 |
Knotenname: | MeinPcNode01 |
Hostname: | MeinPc |
Port für Administrationskonsole: | 9060 |
Sicherer Port für Administrationskonsole: | 9043 |
Port für HTTP-Transport: | 9080 |
Port für HTTPS-Transport: | 9443 |
Bootstrap-Port: | 2809 |
SOAP-Connector-Port: | 8880 |
Weitere Ports finden Sie in 'C:\IbmWebSphere\AppServer\profiles\AppSrv01\properties\portdef.props'.
Überprüfen Sie die WebSphere-Administrationskonsole über folgende URLs:
Starten Sie die WebSphere-Administrationskonsole über:
http://localhost:9060/ibm/console
Klicken Sie in der linken Spalte auf: '[+] Ressourcen' | '[+] JDBC' | 'JDBC-Provider'.
Wählen Sie unter '[+] Geltungsbereich' zum Beispiel 'cells:localhostNode01Cell' und klicken Sie auf 'Neu'.
Geben Sie ein:
Datenbanktyp: | Benutzerdefiniert |
Name der Implementierungsklasse: |
com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource |
Name und Beschreibung: | MeinMySqlJdbcProvider |
'Weiter' | |
Klassenpfad: | C:\IbmWebSphere\lib\mysql-connector-java-5.1.16-bin.jar [Pfad anpassen!] |
'Weiter', 'Fertig stellen' |
Wenn Sie wollen, können Sie die bisherigen Einstellungen 'speichern'.
Klicken Sie in der linken Spalte auf:
'[+] Ressourcen' | '[+] JDBC' | 'JDBC-Provider'.
Rechts in der Liste sehen Sie Ihren neu erzeugten JDBC-Provider-Eintrag 'MeinMySqlJdbcProvider'.
Klicken Sie darauf.
Klicken Sie unter 'Weitere Merkmale' auf 'Datenquellen'.
Wählen Sie 'Neu'.
Geben Sie ein:
Name der Datenquelle: | MeineMySqlDatenquelle |
JNDI-Name: | jdbc/MeinDatasourceJndiName |
'Weiter': | |
Name der Helper-Klasse für Datenspeicher: |
com.ibm.websphere.rsadapter.ConnectJDBCDataStoreHelper |
'Weiter', 'Fertig stellen': |
Klicken Sie in der linken Spalte auf:
'[+] Ressourcen' | '[+] JDBC' | 'Datenquellen'.
Rechts in der Liste sehen Sie Ihren neu erzeugten JDBC-Provider-Eintrag 'MeineMySqlDatenquelle'.
Klicken Sie darauf.
Klicken Sie unter 'Weitere Merkmale' auf 'Benutzerdefinierte Merkmale'.
Fügen Sie der Eigenschaftenliste weitere Name/Werte-Paare hinzu, indem Sie jeweils einzeln zuerst 'Neu' betätigen, einen 'Namen' und den dazu gehörenden 'Wert' eingeben, den 'Typ' auf 'java.lang.String' setzen und 'OK' betätigen:
Name | Wert | |
factory | = | com.mysql.jdbc.jdbc2.optional.MysqlDataSourceFactory |
serverName | = | localhost [DB-Server-Adresse anpassen!] |
port | = | 3306 |
databaseName | = | MeineDb?autoReconnect=true [Database-Name anpassen!] |
user | = | root |
password | = | mysqlpwd |
Klicken Sie zuletzt auf den nach unten zeigenden Pfeil hinter 'Wert' um die Einträge zu kontrollieren.
Wichtig: Klicken Sie auf 'speichern'.
Klicken Sie in der linken Spalte auf:
'[+] Ressourcen' | '[+] JDBC' | 'Datenquellen'.
Klicken Sie in der Liste auf Ihren JDBC-Provider-Eintrag 'MeineMySqlDatenquelle'.
Klicken Sie auf 'Verbindung testen'.
JNDI (Java Naming and Directory Interface) bietet einen Namens- und Verzeichnisdienst, über den Objekte und Dienste gefunden und verfügbar gemacht werden.
Besonders zu Beginn kann es sehr hilfreich sein, die genauen Namen aller JNDI-Einträge anzeigen zu lassen. Zum Beispiel der Name für das 'UserTransaction'-Objekt heißt bei den verschiedenen Java EE Application Servern unterschiedlich.
Führen Sie hierfür das Testprogramm unter jee-jndi.htm#Auslesen-Namen-im-JNDI aus.
Installieren Sie sowohl ein aktuelles Java SE JDK (z.B. JDK 6) als auch Ant, zum Beispiel wie beschrieben unter java-install.htm.
Legen Sie für eine Projektverzeichnisstruktur folgende in eckigen Klammern dargestellten Verzeichnisse an:
[\MeinWorkspace] '- [MeineWebApp] |- [lib] | '- servlet.jar |- [src] | |- [meinjavabeanpkg] | '- [meinservletpkg] '- [webapp] '- [WEB-INF] '- [lib] '- ivtEJB.jar
Kopieren Sie die 'servlet.jar'-Lib aus dem WebSphere-Verzeichnis
'C:\IbmWebSphere\AppServer\deploytool\itp\plugins\org.eclipse.tomcat_4.1.30.1'
in das '<Projektverzeichnis>\lib'-Verzeichnis
und die 'ivtEJB.jar' aus dem WebSphere-Verzeichnis
'C:\IbmWebSphere\AppServer\profiles\AppSrv01\installedApps\<MeinPc>Node01Cell\ivtApp.ear'
in das '<Projektverzeichnis>\webapp\WEB-INF\lib'-Verzeichnis.
Speichern Sie im Verzeichnis '<Projektverzeichnis>\src\meinjavabeanpkg' die folgende JavaBean-Datei 'MeineJavaBean.java':
package meinjavabeanpkg; import java.text.SimpleDateFormat; import java.util.Date; public class MeineJavaBean { public String getDateString() { return (new SimpleDateFormat("yyyy-MM-dd, HH:mm:ss")).format(new Date()) + " h"; } }
Speichern Sie im Verzeichnis '<Projektverzeichnis>\src\meinservletpkg' die folgende Servlet-Datei 'MeinServlet.java':
package meinservletpkg; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MeinServlet extends HttpServlet { public void doGet( HttpServletRequest requ, HttpServletResponse resp ) throws ServletException, IOException { resp.setContentType( "text/html" ); PrintWriter out = resp.getWriter(); out.println( "<html>" ); out.println( "Hallo, mein erstes Servlet meldet sich." ); out.println( "</html>" ); out.close(); } }
Speichern Sie im Verzeichnis '<Projektverzeichnis>\webapp' die folgende Start-Index-Datei 'index.jsp':
<html> <head><title>Meine Start-Seite</title></head> <body> <h1>Meine Start-Seite (index.jsp)</h1> <p><a href="helloservlet">helloservlet</a></p> <p><a href="HelloJSP.jsp">HelloJSP.jsp</a></p> <p><a href="HelloJavaBean.jsp">HelloJavaBean.jsp</a></p> <p><a href="HelloEJB.jsp">HelloEJB.jsp</a></p> <p><a href="HelloDB.jsp">HelloDB.jsp</a></p> </body> </html>
Speichern Sie im Verzeichnis '<Projektverzeichnis>\webapp' die folgende JSP-Datei 'HelloJSP.jsp':
<%@ page import="java.text.SimpleDateFormat" %> <%@ page import="java.util.Date" %> <html> <head><title>Hello JSP</title></head> <body> <h2>Hallo, meine erste JSP-Seite meldet sich.</h2> <%= request.getRemoteHost() %>, <%= (new SimpleDateFormat("yyyy-MM-dd, HH:mm:ss")).format(new Date()) + " h" %> </body> </html>
Speichern Sie im Verzeichnis '<Projektverzeichnis>\webapp' die folgende JSP-Datei 'HelloJavaBean.jsp':
<%@ page import="meinjavabeanpkg.MeineJavaBean" %> <html> <head><title>Hello JavaBean</title></head> <body> <h2>Hallo, meine JSP-Seite mit JavaBean meldet sich.</h2> <%= request.getRemoteHost() %><br> <% MeineJavaBean jb = new MeineJavaBean(); out.println( jb.getDateString() ); %> </body> </html>
Speichern Sie im Verzeichnis '<Projektverzeichnis>\webapp' die folgende JSP-Datei 'HelloEJB.jsp':
<%@ page import="java.util.*" %> <%@ page import="javax.naming.*" %> <%@ page import="com.ibm.websphere.ivt.ivtEJB.*" %> <html> <head><title>Hello EJB</title></head> <body> <h2>Hallo, meine JSP-Seite mit EJB-Zugriff meldet sich.</h2> <% Context ctx = new InitialContext(); Object ref = ctx.lookup( "ejb/ivtEJBObject" ); ivtEJBHome home = (ivtEJBHome) javax.rmi.PortableRemoteObject.narrow( ref, ivtEJBHome.class ); ivtEJBObject ivtEJB = home.create(); ivtEJB.addItem( "Mein Test-Item" ); Vector v = ivtEJB.getContents(); for( int i=0; v!=null && i<v.size(); i++ ) { out.println( v.get( i ) ); } %> </body> </html>
(Bezüglich EJB und 'ctx.lookup' siehe: jee-ejb2.htm und jee-jndi.htm.)
Voraussetzung für die folgende JSP-Seite ist die Einrichtung einer DataSource in WebSphere, zum Beispiel so wie oben beschrieben.
Speichern Sie im Verzeichnis '<Projektverzeichnis>\webapp' die folgende JSP-Datei 'HelloDB.jsp':
<%@ page import="java.sql.*" %> <%@ page import="java.util.*" %> <%@ page import="javax.naming.*" %> <%@ page import="javax.sql.DataSource" %> <%@ page import="javax.transaction.*" %> <html> <head><title>Hello DB</title></head> <body> <h2>Hallo, meine JSP-Seite mit Datenbank-Zugriff meldet sich.</h2> <% Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup( "jdbc/MeinDatasourceJndiName" ); Connection cn = null; Statement st = null; ResultSet rs = null; try { cn = ds.getConnection(); st = cn.createStatement(); rs = st.executeQuery( "Select * from MeineTestTabelle" ); if( rs.next() ) out.println( "Ergebnis: " + rs.getString( 1 ) + "<br>" ); out.println( cn.getMetaData().getDatabaseProductName() + ", " ); out.println( cn.getMetaData().getDatabaseProductVersion() + "<br>" ); } finally { try { if( null != rs ) rs.close(); } catch( Exception ex ) {/*ok*/} try { if( null != st ) st.close(); } catch( Exception ex ) {/*ok*/} try { if( null != cn ) cn.close(); } catch( Exception ex ) {/*ok*/} } %> </body> </html>
Passen Sie 'MeinDatasourceJndiName' 'MeineTestTabelle' an Ihre DataSource an.
Speichern Sie im Verzeichnis '<Projektverzeichnis>\webapp\WEB-INF' die folgende Webanwendungs-Konfigurations-Datei 'web.xml':
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'> <web-app> <display-name>Meine WebApp</display-name> <servlet> <servlet-name>MeinServletName</servlet-name> <servlet-class>meinservletpkg.MeinServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MeinServletName</servlet-name> <url-pattern>/helloservlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
Speichern Sie im Verzeichnis '<Projektverzeichnis>' die folgende Ant-Datei 'build.xml':
<project name="MeinWebAppProjekt" default="Usage"> <!-- <property file="build.properties" /> --> <property name="app.name" value="MeineWebApp" /> <property name="deploy.dir" value="dist" /> <property name="dist.dir" value="dist" /> <property name="lib.dir" value="lib" /> <property name="src.dir" value="src" /> <property name="webapp.dir" value="webapp" /> <property name="WEBINF.dir" value="${webapp.dir}/WEB-INF" /> <path id="compile.classpath"> <fileset dir="${lib.dir}" includes="*.jar" /> <fileset dir="${WEBINF.dir}/lib" /> <pathelement path="${WEBINF.dir}/classes" /> </path> <target name="Usage"> <echo message="Availiable Targets" /> <echo message=" clean : Delete ${WEBINF.dir}/classes, ${dist.dir}" /> <echo message=" compile : Compile from ${src.dir} to ${WEBINF.dir}/classes" /> <echo message=" create-war: Create ${dist.dir}/${app.name}.war" /> <echo message=" deploy-war: Copy ${dist.dir}/${app.name}.war to ${deploy.dir}" /> </target> <target name="clean" description="Delete ${WEBINF.dir}/classes, ${dist.dir}"> <delete dir="${WEBINF.dir}/classes" /> <delete dir="${dist.dir}" /> </target> <target name="compile" description="Compile from ${src.dir} to ${WEBINF.dir}/classes"> <mkdir dir="${WEBINF.dir}/lib" /> <mkdir dir="${WEBINF.dir}/classes" /> <javac srcdir="${src.dir}" destdir="${WEBINF.dir}/classes"> <classpath refid="compile.classpath" /> </javac> <copy todir="${WEBINF.dir}/classes"> <fileset dir="${src.dir}" excludes="**/*.java" /> </copy> </target> <target name="create-war" depends="compile" description="Create ${dist.dir}/${app.name}.war"> <mkdir dir="${dist.dir}" /> <war destfile="${dist.dir}/${app.name}.war" webxml="${WEBINF.dir}/web.xml"> <fileset dir="${webapp.dir}" includes="**/*.*" excludes="**/web.xml, **/servlet*.jar, **/junit*.jar" /> </war> </target> <target name="deploy-war" depends="create-war" description="Copy ${dist.dir}/${app.name}.war to ${deploy.dir}"> <copy todir="${deploy.dir}" preservelastmodified="true"> <fileset dir="${dist.dir}" includes="${app.name}.war" /> </copy> </target> </project>
Ihr Projektverzeichnis muss jetzt so aussehen ('dist' und 'classes' erscheinen erst nach dem 'Ant'-Lauf):
[\MeinWorkspace] '- [MeineWebApp] |- [dist] | '- ... |- [lib] | '- servlet.jar |- [src] | |- [meinjavabeanpkg] | | '- MeineJavaBean.java | '- [meinservletpkg] | '- MeinServlet.java |- [webapp] | |- [WEB-INF] | | |- [classes] | | | '- ... | | |- [lib] | | | '- ivtEJB.jar | | '- web.xml | |- HelloDB.jsp | |- HelloEJB.jsp | |- HelloJavaBean.jsp | |- HelloJSP.jsp | '- index.jsp '- build.xml
Öffnen Sie ein Kommandozeilenfenster und geben Sie die folgenden Kommandos ein:
cd \MeinWorkspace\MeineWebApp
ant create-war
Im '<Projektverzeichnis>\dist'-Verzeichnis wird das Webarchiv 'MeineWebApp.war' generiert.
Starten Sie zuerst WebSphere und dann über 'http://localhost:9060/ibm/console' die WebSphere-Administrationskonsole.
Klicken Sie in der linken Spalte auf:
'[+] Anwendungen' | 'Enterprise Anwendungen'.
Rechts in der Liste sehen Sie die bereits vorhandene EJB 'ivtApp'.
Klicken Sie in der linken Spalte auf:
'Neue Anwendung installieren'.
Klicken Sie rechts unter 'Pfad der neuen Anwendung' auf 'Durchsuchen...' und geben Sie als Pfad ein:
'\MeinWorkspace\MeineWebApp\dist\MeineWebApp.war'.
Geben Sie unter 'Stammkontext' ein: 'MeineWebApp'.
Klicken Sie auf 'Weiter', 'Weiter', 'Weiter', 'Weiter', 'Fertig stellen' und 'speichern'.
Klicken Sie in der linken Spalte auf:
'[+] Anwendungen' | 'Enterprise Anwendungen'.
Rechts in der Liste sehen Sie jetzt 'MeineWebApp_war'.
Falls rechts daneben der 'Anwendungsstatus' keinen grünen Pfeil, sondern ein rotes Kreuz zeigt:
Aktivieren Sie die 'Auswählen'-Checkbox vor 'MeineWebApp_war' und klicken Sie auf 'Starten'.
Jetzt erscheint der grüne Pfeil.
Testen Sie Ihre Webanwendung. Klicken Sie für die einzelnen Tests nacheinander auf folgende Links:
http://localhost:9080/MeineWebApp
http://localhost:9080/MeineWebApp/helloservlet
http://localhost:9080/MeineWebApp/HelloJSP.jsp
http://localhost:9080/MeineWebApp/HelloJavaBean.jsp