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