Übungsblatt 05 - Institut für Informatik

Werbung
Universität Augsburg, Institut für Informatik
Prof. Dr. W. Kießling
Dr. A. Huhn, M. Endres
SS 2009
21. Mai. 2009
Übungsblatt 5
Suchmaschinen
Aufgabe 1: Servlets und Datenbanken
In dieser Aufgabe soll ein Servlet entstehen, mit dessen Hilfe eine Datenbank durchsucht wird.
Der Verbindungsaufbau zu einer Datenbank wird bei JEE im Allgemeinen vom Server erledigt.
Eine Datenbank wird allgemein durch eine XML-Konfigurationsdatei als Data Source deklariert
und kann dann über einen festgelegten Namen erreicht werden. Eine Verbindung zur StandardDatenbank bauen Sie wie folgt auf:
javax.naming.InitialContext context = new InitialContext();
javax.xml.DataSource ds =
(DataSource) context.lookup("java:/DefaultDS");
java.sql.Connection conn = ds.getConnection();
Dabei ist java:/DefaultDS der JNDI-Name der Resource (JNDI steht für Java Naming and
Directory Interface).
Die JBoss-Standard-Datenbank ist HSQL. Definitionen aller Tabellen und -Inhalte sind in der Datei
server\default\data\hypersonic\localdb.script als SQL-Statements aufgeführt.
Sie sollen nun eine Web-Anwendung implementieren, mit der die Nahrungsmittel-Datenbank durchsucht werden kann. Gehen Sie wie folgt vor:
a) Ergänzen Sie localdb.script um die Einträge aus der Datei food_db.sql (siehe ÜbungsSeite im Web). Kopieren Sie die neuen CREATE MEMORY TABLE Statements unter die bereits
vorhandenen.
b) Die INSERT-Statements aus food_db.sql können Sie am Ende der localdb.script
einfügen.
c) Machen Sie sich mit der Struktur der Nahrungsmittel-Datenbank vertraut.
d) Implementieren Sie die Web-Anwendung: Es sollen die Tabellen für die Nahrungsmittel-Typen
FAST FOODS, SNACKS, SWEETS und BEVERAGES durchsucht werden können. Für jeden
Suchvorgang soll die Tabelle frei wählbar sein oder alle Tabellen durchsucht werden können.
e) Pro Nährstoff-Kategorie soll Minimum und Maximum der gewünschten Ergebnisse per Formular wählbar sein.
f) Die Anzeige der Ergebnisse soll in Tabellenform erfolgen.
1
Aufgabe 2: Enterprise Java Beans - Session Beans
Enterprise Java Beans sind ein Programmierkonzept, um komponentenbasierte Software zu schreiben. Dabei unterscheidet man zwei Arten von Beans:
• stateless (zustandslose) Beans, die bei jedem Aufruf gleich reagieren
• stateful (zustandsbehaftete) Beans, die einen internen Zustand besitzen
Wir werden beide Arten implementieren und mit einem Client darauf zugreifen.
1. Erstellen Sie ein neues EJB-Projekt. Der Ziel-Server ist JBoss, für den auch die DefaultKonfiguration gewählt werden soll. Im letzten Fenster setzen Sie einen Haken vor Generate
Deployment Descriptor.
2. Erzeugen Sie jetzt ein neues EJB Session Bean. Wir beginnen mit einem Stateless-Bean namens Calculator im Paket beans. Das Bean soll die folgenden Methoden haben:
• public int sum(int a, int b) - gibt die Summe von a und b zurück
• public int mult(int a, int b) - gibt das Produkt von a und b zurück
Tragen Sie die Methoden dazu sowohl in der Bean-Klasse CalculatorBean als auch im
Bean-Interface Calculator ein. Das Interface legt fest, welche Methoden ein Client sehen
kann.
Über Run as→Run on Server wird das Bean auf dem Server deployed und kann verwendet
werden. Die Erfolgsmeldung des Servers lautet:
STARTED EJB: bean.CalculatorBean ejbName: CalculatorBean
3. Nun soll ein Programm entstehen, das auf das Bean zugreift. Erstellen Sie ein neues JavaProjekt, dem Sie die Libraries jbossall-client.jar und jboss-ejb3.jar aus dem
JBoss-Unterverzeichnis client hinzufügen. Bei den referenzierten Projekten tragen Sie das
EJB-Projekt ein.
Die Konfigurationsdaten speichern Sie in der Datei jndi.properties:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
Die Konfiguration und der Aufruf eines Beans laufen dann wie folgt ab:
java.util.Properties props = new Properties();
props.load(new java.io.FileInputStream("jndi.properties"));
javax.naming.InitialContext ctx = new InitialContext(props);
beans.Calculator calc =
(Calculator) ctx.lookup("CalculatorBean/remote");
4. Stateful Beans haben Attribute, deren Wert während einer Session mit einem Client gespeichert bleibt. Ein solches soll jetzt entstehen und die folgenden Methoden anbieten:
•
•
•
•
public
public
public
public
int
int
int
int
setMin(int min) - setze das Attribut min neu
setMax(int max) - setze das Attribut max neu
random() - gib eine Zufallszahl zwischen min und max zurück
getCount() - gib die Anzahl der Aufrufe von random zurück
Testen Sie das Bean ebenfalls mit einem Client.
2
Herunterladen