Anfang
Aufgaben
Blatt 1
Blatt 2
Blatt 3
Blatt 4
Blatt 5
Blatt 6
Abgaben
Blatt 1
Blatt 2
Blatt 3
Blatt 4
Blatt 5
Blatt 6
|
Blatt 1
Aufgabe 1
-
Die LDIF - Daten, werden mit dem Befehl: /usr/sbin/ldif2ldbm -f slapd.conf
-i data.ldif eingespielt. Das Ergebnis ist die Generierung der Datenbankdateien.
Der Befehl "time" liefert die Zeit, die dafür benötigt wird.
quak seyrich/ldap2> ll
total 209
-rw-r--r-- 1 seyrich WSIstud
211380 Nov 7 15:14 data.ldif
-rw-r--r-- 1 seyrich WSIstud
1061 Nov 7 15:25 slapd.conf
quak seyrich/ldap2> time /usr/sbin/ldif2ldbm -f slapd.conf
-i data.ldif
1.410u 0.150s 0:01.98 78.7% 0+0k 0+0io
1068pf+0w
quak seyrich/ldap2> ll
total 778
-rw-r--r-- 1 seyrich WSIstud
5 Nov 7 15:27 NEXTID
-rw-r--r-- 1 seyrich WSIstud
211380 Nov 7 15:14 data.ldif
-rw------- 1 seyrich WSIstud
110592 Nov 7 15:27 dn.dbb
-rw------- 1 seyrich WSIstud
98304 Nov 7 15:27 dn2id.dbb
-rw------- 1 seyrich WSIstud
7168 Nov 7 15:27 id2children.dbb
-rw------- 1 seyrich WSIstud
358400 Nov 7 15:27 id2entry.dbb
-rw------- 1 seyrich WSIstud
7168 Nov 7 15:27 objectclass.dbb
-rw-r--r-- 1 seyrich WSIstud
1061 Nov 7 15:25 slapd.conf
quak seyrich/ldap2>
|
-
Die Abfrage aller Hotels in Esslingen kann in zwei Varianten erfolgen.
Dementsprechend erhält man unterschiedliche Ausgaben
quak seyrich/ldap2> ldapsearch -v -b 'dc=uni-tuebingen,
dc=de' 'l=esslingen' -p 1
091
ldap_init( <default>, 1091 )
filter pattern: l=esslingen
returning: ALL
filter is: (l=esslingen)
uid=179, dc=uni-tuebingen,dc=de
objectclass=organizationalUnit
uid=179
ou=Esslingen 179
telephonenumber=179 179 179
postalcode=73733
l=Esslingen
streetadress=Mittelstr. 12
owner=Fr. Schwenk
1 matches
quak seyrich/ldap2> ldapsearch -v -b 'dc=uni-tuebingen,
dc=de' 'l=esslingen*' -p
1091
ldap_init( <default>, 1091 )
filter pattern: l=esslingen*
returning: ALL
filter is: (l=esslingen*)
uid=179, dc=uni-tuebingen,dc=de
objectclass=organizationalUnit
uid=179
ou=Esslingen 179
telephonenumber=179 179 179
postalcode=73733
l=Esslingen
streetadress=Mittelstr. 12
owner=Fr. Schwenk
uid=636, dc=uni-tuebingen,dc=de
objectclass=organizationalUnit
uid=636
ou=Esslingen-Berkheim 636
telephonenumber=636 636 636
postalcode=73734
l=Esslingen-Berkheim
streetadress=Kastellstr. 1
owner=Siegfried Koengeter
2 matches
quak seyrich/ldap2> |
Der Parameter -v sorgt für die Ausgabe der Suchparameter, ist aber
nicht erforderlich.
Aufgabe 2
eine Beschreibung der Hotels soll nun mit ldapmodify hinzugefügt
werden. Gefragt ist wieder nach der Zeit, auch hier abgegriffen mit dem
Befehl "time".
quak seyrich/ldap2> time ldapmodify -D 'cn=admin,
dc=uni-tuebingen, dc=de' -f description.ldif -p 1091 -wsecret
modifying entry dc=uni-tuebingen, dc=de
modifying entry uid=1, dc=uni-tuebingen,dc=de
modifying entry uid=2, dc=uni-tuebingen,dc=de
...
modifying entry uid=995, dc=uni-tuebingen,dc=de
modifying entry uid=996, dc=uni-tuebingen,dc=de
modifying entry uid=997, dc=uni-tuebingen,dc=de
modifying entry uid=998, dc=uni-tuebingen,dc=de
modifying entry uid=999, dc=uni-tuebingen,dc=de
modifying entry uid=1000, dc=uni-tuebingen,dc=de
0.310u 0.240s 1:24.33 0.6% 0+0k 0+0io
151pf+0w
quak seyrich/ldap2> |
Aufgabe 3
-
Das Rahmenprogramm, ist so vervollständigt, dass es alle Hotels ausgibt, welche ein Bad besitzen und eine 7'er PLZ haben.
Der Befehl zum Compilieren lautet:
quak seyrich/ldap2> gcc -o aufgabe3 aufgabe3.c -lldap -llber
|
- Die Ausgabe (komplett) und die gemessene Zeit:
quak seyrich/ldap2> time ./aufgabe3
connecting to ldap server ...
bind ...
search ...ready
Output:
dn: uid=29, dc=uni-tuebingen,dc=de
attribute: objectclass
/ value: organizationalUnit
attribute: uid / value:
29
attribute: ou / value:
Mindersdorf 29
attribute: telephonenumber
/ value: 29 29 29
attribute: postalcode
/ value: 78355
attribute: l / value:
Mindersdorf
attribute: streetadress
/ value: Adlergasse 4
attribute: owner / value:
Fam. Beringer-Hoffmann
attribute: description
/ value: Minibar, Restaurant, Sauna, Dusche/Bad/W
C.
dn: uid=52, dc=uni-tuebingen,dc=de
attribute: objectclass
/ value: organizationalUnit
attribute: uid / value:
52
attribute: ou / value:
Reichenau 52
attribute: telephonenumber
/ value: 52 52 52
attribute: postalcode
/ value: 78479
attribute: l / value:
Reichenau
attribute: streetadress
/ value: Am Voegelisberg 13
attribute: owner / value:
Fr. Keller
attribute: description
/ value: Schwimmbad, Minibar.
...
dn: uid=994, dc=uni-tuebingen,dc=de
attribute: objectclass
/ value: organizationalUnit
attribute: uid / value:
994
attribute: ou / value:
Korntal-Muenchingen 994
attribute: telephonenumber
/ value: 994 994 994
attribute: postalcode
/ value: 70825
attribute: l / value:
Korntal-Muenchingen
attribute: streetadress
/ value: Stuttgarter Str. 60
attribute: owner / value:
Beate Schmalzridt
attribute: description
/ value: Restaurant, Tiefgarage, Schwimmbad, Inte
rnet/Fax, Zentral, Minibar.
dn: uid=996, dc=uni-tuebingen,dc=de
attribute: objectclass
/ value: organizationalUnit
attribute: uid / value:
996
attribute: ou / value:
Tuebingen 996
attribute: telephonenumber
/ value: 996 996 996
attribute: postalcode
/ value: 72076
attribute: l / value:
Tuebingen
attribute: streetadress
/ value: Schwalbenweg 17
attribute: owner / value:
Inh. Heinz Vetter
attribute: description
/ value: Restaurant, Sauna, Schwimmbad, Massage,
Internet/Fax.
0.030u 0.040s 0:00.37 18.9% 0+0k 0+0io 132pf+0w
quak seyrich/ldap2>
|
Aufgabe 4
Jetzt ist es Zeit unseren "slapd" zu killen
quak seyrich/ldap2> /usr/libexec/openldap/slapd
-f slapd.conf -p 1091 -d 2
slapd starting
slapd shutting down - waiting for 0 threads to terminate
slapd stopping
quak seyrich/ldap2> |
3:46pm up 62 days, 2:09,
7 users, load average: 0.18, 0.20, 0.10
187 processes: 186 sleeping, 1 running, 0 zombie,
0 stopped
CPU states: 1.5% user, 4.3% system,
0.0% nice, 94.1% idle
Mem: 323032K av, 316808K used,
6224K free, 146520K shrd, 71472K buff
Swap: 257000K av, 1444K used,
255556K free
144928K cached
PID USER PRI
NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME
COMMAND
27589 seyrich 14 0
1116 1116 788 R 0
6.0 0.3 0:03 top
24560 seyrich 0 0
1244 1244 776 S 0
0.0 0.3 0:00 tcsh
24584 seyrich 0 0
1240 1240 772 S 0
0.0 0.3 0:00 tcsh
26444 seyrich 0 0
2424 2424 872 S 0
0.0 0.7 0:00 slapd
26445 seyrich 0 0
2424 2424 872 S 0
0.0 0.7 0:00 slapd
26446 seyrich 0 0
2424 2424 872 S 0
0.0 0.7 0:00 slapd
--------------------------
3:47pm up 62 days, 2:10,
7 users, load average: 0.30, 0.22, 0.12
184 processes: 183 sleeping, 1 running, 0 zombie,
0 stopped
CPU states: 0.7% user, 6.7% system,
0.0% nice, 92.4% idle
Mem: 323032K av, 313760K used,
9272K free, 145656K shrd, 71480K buff
Swap: 257000K av, 1444K used,
255556K free
142916K cached
PID USER PRI
NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME
COMMAND
27590 seyrich 12 0
1116 1116 788 R 0
5.8 0.3 0:01 top
24560 seyrich 0 0
1244 1244 776 S 0
0.0 0.3 0:00 tcsh
24584 seyrich 0 0
1240 1240 772 S 0
0.0 0.3 0:00 tcsh
quak seyrich/ldap2> exit
logout
Connection to quak closed.
ibm-xt[32] |
Blatt 2
IDL-Datei vervollständigen
Als erstes haben wir die Datei VierGewinnt.idl um die Interfaces der Objekte, die per CORBA im Netz bereitgestellt werden sollen ergänzt.
Hernach haben wir sie mit dem Kommando idl2java VierGewinnt.idl -no_tie kompiliert:
linus[45][~/corba1/Corba1 ] ll
total 7
drwxr-xr-x 2 seyrich WSIstud
2048 Nov 23 16:31 ClientAufg1
drwxr-xr-x 2 seyrich WSIstud
2048 Nov 23 16:46 ServerAufg1
-rw-r--r-- 1 seyrich WSIstud
690 Nov 26 15:13 VierGewinnt.idl
-rw-r--r-- 1 seyrich WSIstud
521 Nov 26 15:12 vbroker.csh
-rw-r--r-- 1 seyrich WSIstud
521 Nov 2 2000 vbroker.csh~
linus[46][~/corba1/Corba1 ] idl2java VierGewinnt.idl -no_tie
Creating: VierGewinnt
Creating: VierGewinnt/breite.java
Creating: VierGewinnt/hoehe.java
Creating: VierGewinnt/spielfeldTypHolder.java
Creating: VierGewinnt/spielfeldTypHelper.java
Creating: VierGewinnt/Partie4gewinnt.java
Creating: VierGewinnt/Partie4gewinntHolder.java
Creating: VierGewinnt/Partie4gewinntHelper.java
Creating: VierGewinnt/_st_Partie4gewinnt.java
Creating: VierGewinnt/_sk_Partie4gewinnt.java
Creating: VierGewinnt/_Partie4gewinntImplBase.java
Creating: VierGewinnt/_example_Partie4gewinnt.java
Creating: VierGewinnt/PartieManager.java
Creating: VierGewinnt/PartieManagerHolder.java
Creating: VierGewinnt/PartieManagerHelper.java
Creating: VierGewinnt/_st_PartieManager.java
Creating: VierGewinnt/_sk_PartieManager.java
Creating: VierGewinnt/_PartieManagerImplBase.java
Creating: VierGewinnt/_example_PartieManager.java
Creating: VierGewinnt/Meister.java
Creating: VierGewinnt/MeisterHolder.java
Creating: VierGewinnt/MeisterHelper.java
Creating: VierGewinnt/_st_Meister.java
Creating: VierGewinnt/_sk_Meister.java
Creating: VierGewinnt/_MeisterImplBase.java
Creating: VierGewinnt/_example_Meister.java
linus[47][~/corba1/Corba1 ] |
Server vervollständigen
Aus der Datei Server.java machten wir ein funktionsfähiges Programm, das die in der Aufgabestellung erläuterten Aufgaben erledigt.
Client vervollständigen
In Client.java mussten die Methoden
private static PartieManager holeManager()
private static Meister holeMeister(int typ)
vervollständigt werden.
Diese Methoden dienen dazu, dem Client den vom Serverprogramm per CORBA bereitgestellten Partie-Manager bzw. Computerspieler zu finden.
Aufgerufen wird holeManager zu Beginn der main-Methode, holeMeister am Anfang der spielen-Methode des Clients.
Anwendung kompilieren und starten
Den Server und den Client kompilieren, danach den osagent im Hintergrund starten, dann den Server. Dieser läut, bis man ihn unterbricht.
Sobald man den osagent ausgeschaltet hat kann man sich auch schon wieder anderen Dingen zuwenden.
linus[47][~/corba1/Corba1 ]
linus[48][~/corba1/Corba1 ] osagent &
linus[50][~/corba1/Corba1 ] javac ServerAufg1/*.java
linus[50][~/corba1/Corba1 ] javac ClientAufg1/*.java
linus[51][~/corba1/Corba1 ] vbj ServerAufg1.Server
Starten den Server (Anneliese).....
^C
linus[52][~/corba1/Corba1 ]
linus[52][~/corba1/Corba1 ] ps
PID TTY TIME CMD
18640 pts/17 0:00 osagent
18550 pts/17 0:01 tcsh
linus[53][~/corba1/Corba1 ] kill 18640
Received signal (15)
linus[54][~/corba1/Corba1 ]
[2] Exit 1
osagent
linus[54][~/corba1/Corba1 ] ps
PID TTY TIME CMD
18550 pts/17 0:01 tcsh
linus[55][~/corba1/Corba1 ] exit
logout
Connection to linus closed.
itt-2020:~> |
Exemplarisch ein einfachstes Spiel zwischen zwei menschlichen Gegnern:
linus:~/corba1/Corba1>vbj ClientAufg1.Client
4 gewinnt
---------
1) Partie spielen
2) Computergegner starten (Java)
4) Computerbedenkzeit einstellen
5) Partien auflisten
7) Ende
1
Eingabe des Partienamens: Otto
Sie sind Spieler 1
warte auf Spieler 2...
Spielfeld zur Zeit:
|
|
|
|
|
|
|
|
|
|
|
|
-----------------
1 2 3 4 5 6 7
Ihr Zug (1-7): 1
Zugdauer: 1 sec.
Spielfeld nach dem Zug:
|
|
|
|
|
|
|
|
|
|
| 1
|
-----------------
1 2 3 4 5 6 7
Spielfeld zur Zeit:
|
|
|
|
|
|
|
|
|
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Ihr Zug (1-7): 1
Zugdauer: 1 sec.
Spielfeld nach dem Zug:
|
|
|
|
|
|
|
|
| 1
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Spielfeld zur Zeit:
|
|
|
|
|
|
|
|
| 1 2
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Ihr Zug (1-7): 1
Zugdauer: 1 sec.
Spielfeld nach dem Zug:
|
|
|
|
|
|
| 1
|
| 1 2
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Spielfeld zur Zeit:
|
|
|
|
|
|
| 1 2
|
| 1 2
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Ihr Zug (1-7): 1
Zugdauer: 2 sec.
Spielfeld nach dem Zug:
|
|
|
|
| 1
|
| 1 2
|
| 1 2
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Sie haben gewonnen:
|
|
|
|
| 1
|
| 1 2
|
| 1 2
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
4 gewinnt
---------
1) Partie spielen
2) Computergegner starten (Java)
4) Computerbedenkzeit einstellen
5) Partien auflisten
7) Ende
7
linus:~/corba1/Corba1> |
linus:~/corba1/Corba1>vbj ClientAufg1.Client
4 gewinnt
---------
1) Partie spielen
2) Computergegner starten (Java)
4) Computerbedenkzeit einstellen
5) Partien auflisten
7) Ende
5
Partien zur Zeit:
Otto
4 gewinnt
---------
1) Partie spielen
2) Computergegner starten (Java)
4) Computerbedenkzeit einstellen
5) Partien auflisten
7) Ende
1
Eingabe des Partienamens: Otto
Sie sind Spieler 2
warte auf Spieler 1...
Spielfeld zur Zeit:
|
|
|
|
|
|
|
|
|
|
| 1
|
-----------------
1 2 3 4 5 6 7
Ihr Zug (1-7): 2
Zugdauer: 3 sec.
Spielfeld nach dem Zug:
|
|
|
|
|
|
|
|
|
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Spielfeld zur Zeit:
|
|
|
|
|
|
|
|
| 1
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Ihr Zug (1-7): 2
Zugdauer: 2 sec.
Spielfeld nach dem Zug:
|
|
|
|
|
|
|
|
| 1 2
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Spielfeld zur Zeit:
|
|
|
|
|
|
| 1
|
| 1 2
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Ihr Zug (1-7): 2
Zugdauer: 2 sec.
Spielfeld nach dem Zug:
|
|
|
|
|
|
| 1 2
|
| 1 2
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
Sie haben verloren:
|
|
|
|
| 1
|
| 1 2
|
| 1 2
|
| 1 2
|
-----------------
1 2 3 4 5 6 7
4 gewinnt
---------
1) Partie spielen
2) Computergegner starten (Java)
4) Computerbedenkzeit einstellen
5) Partien auflisten
7) Ende
7
linus:~/corba1/Corba1> |
Blatt 3
IDL-Datei
Die IDL-Datei konnte von Blatt2 übernommen werden.
Der Client
Im Client sollte wie auf Blatt2 die beiden Methoden holeMeister(int typ) und holeManager() implementiert werden.
Der Unterschied lag darin, dass hier der Server eine die Objekte mit einer Namensbindung in Namenskontexten zur Verfügung stellt, ähnlich einer Verzeichnisstruktur.
Die Server
Die Aufgabe, die Viergewinntdienste PartieManager und Meister zur Verfügung zu stellen war auf zwei Server verteilt. Dem Server fiel die Aufgabe zu, einen PartieManager und einen Meister in der angegebenen Namenkontextstruktur zur Verfügung zu stellen, wärend der Meister2 einen weiteren Meister in die Struktur einhängen sollte.
Starten des Naming Service:
madonna:~>tnameserv -ORBInitialPort 14375
Initial Naming Context:
IOR:000000000000002849444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f
6e746578743a312e300000000001000000000000004c00010000000000246d61646f6e6e612e496e
666f726d6174696b2e556e692d54756562696e67656e2e44650008f5000000000018afabcafe0000
00027997e879000000080000000000000000
TransientNameServer: setting port for initial object references
to: 14375
|
Nach dem Start des Name Service liefert die Anfrage nach allen gemeldeten Objekten:
madonna:~/corba2>java Util.NamensLister -ORBInitialPort
14375
Root context= null
Keine Namen registriert!
madonna:~/corba2>
|
Starten des ersten Servers (Server)
madonna:~/corba2>java ServerAufg2.Server -ORBInitialPort
14375
Manager ist bereit.
JAVAMeister ist bereit.
NameService ist da
das Verzeichnis "4 gewinnt" eingehängt..
das Verzeichnis "Computergegner" eingehängt..
das Verzeichnis "Partiemanager" eingehängt..
javameister druntergehängt
manager druntergehängt
|
Nun liefert die Anfrage nach allen gemeldeten Objekten:
madonna:~/corba2>java Util.NamensLister -ORBInitialPort
14375
Root context= null
Kontext= [{4 gewinnt,directory}]
Kontext= [{Computergegner,directory}]
Objekt= [{javameister,object}]
Kontext= [{Partiemanager,directory}]
Objekt= [{manager,object}]
madonna:~/corba2> |
Starten des zweiten Servers (Meister2)
madonna:~/corba2>java ServerAufg2.Meister2 -ORBInitialPort
14375
JAVAMeister2 ist bereit.
NameService ist da
Versuche, JAVAMeister 2 reinzutun...wir waren erfolgreich. Nun
kann es losgehen!
|
Nun liefert die Anfrage nach allen gemeldeten Objekten:
madonna:~/corba2>java Util.NamensLister -ORBInitialPort
14375
Root context= null
Kontext= [{4 gewinnt,directory}]
Kontext= [{Computergegner,directory}]
Objekt= [{javameister,object}]
Objekt= [{javameister2,object}]
Kontext= [{Partiemanager,directory}]
Objekt= [{manager,object}]
madonna:~/corba2> |
madonna:~/corba2>java Util.NamensLister -ORBInitialPort
14375
Root context= null
Kontext= [{4 gewinnt,directory}]
Kontext= [{Computergegner,directory}]
Objekt= [{javameister,object}]
Objekt= [{javameister2,object}]
Kontext= [{Partiemanager,directory}]
Objekt= [{manager,object}]
madonna:~/corba2> |
Abschalten
Zu guter letzt muss wieder alles abgeschaltet werden. Die Server wie gehabt mit ^c hinterrücks ermorden. Wenn der Naming Service aber solchermassen tot gemacht ist, so auch alle Bindungen, die er kannte. So sind nun keine Resourcen mehr unnötig in Gebrauch, so dass man sich getrost mit einem beherzten exit verabschieden kann, bis man die Dienste der holden madonna wiedereinmal in Anspruch zu nehemen gedenkt oder gedenkt wird.
Blatt 4 - Servlets
Aufgabe 1
In dieser Aufgabe sollten wir ein Servlet erstellen, welches anhand des gesendeten Werts aus dem Formular in der
.html Seite Aufg1.html eine Datenbankabfrage startet und eine .html
Seite mit der Liste der Produkte erzeugt. Dazu sollte das Rahmenprogramm Aufg1Servlet.java erweitert werden.
Aufgabe 2
Zu tun war folgendes: Es gibt ein Applet, welches eine einfache GUI für ein MasterMind Spiel zur Verfügung stellt. Das Generieren der Spielcodes und das
Überprüfen der Spielcode-Kandidaten übernimmt ein Servlet. Das Applet kommuniziert mit dem Servlet über ein einfaches Kommunikationsprotokoll, um
dessen Dienste zu benutzen. Im mmApplet.java war der Benutzername noch nachzutragen. Das mmServlet.java verlangte nach einem einfachen Protokoll.
Zu beachten war, dass man den Classpath richtig setzt und auch alle benötigten Packages einbindet. Wir haben das explizit beim Kompilieren angegeben und nicht die Variable CLASSPATH neu gesetzt.
Die erweiterten Programme haben wir im richtigen Verzeichnis abgelegt und die Datenbank sowie die nötigen Packages noch in das selbe kopiert:
quak:/usr/opt/IBMWebAS/servlets/aufgaben/seyrich>ll
total 52
-rw-r--r-- 1 seyrich WSIstud
5205 Jan 14 15:24 Aufg1Servlet.class
-rw-r--r-- 1 seyrich WSIstud
6077 Jan 14 15:24 Aufg1Servlet.java
-rwxr--r-- 1 seyrich WSIstud
193 Jan 11 14:57 jcAufg1Servlet
-rwxr--r-- 1 seyrich WSIstud
191 Jan 11 16:21 jcmmServlet
-rw-r--r-- 1 seyrich WSIstud
3886 Jan 15 12:48 mmServlet.class
-rw-r--r-- 1 seyrich WSIstud
6215 Jan 15 12:51 mmServlet.java
drwxr-xr-x 2 seyrich WSIstud
4096 Jan 11 14:49 myClasses
drwxr-xr-x 3 seyrich WSIstud
4096 Nov 28 2000 pizzasvc
quak:/usr/opt/IBMWebAS/servlets/aufgaben/seyrich>ls myClasses/
classes.tar databeans.jar ibmwebas.jar jsdk.jar
jst.jar xml4j.jar
quak:/usr/opt/IBMWebAS/servlets/aufgaben/seyrich>ls pizzasvc/
MessageBean.class
db
ShoppingCart.class
finishOrderServlet.class
ShoppingCartException.class modifyOrderServlet.class
ShoppingCartItem.class orderDataServlet.class
addItemServlet.class
pCategoriesServlet.class
config.class
pDescriptionsServlet.class
quak:/usr/opt/IBMWebAS/servlets/aufgaben/seyrich>
|
Legt man nun noch die SeitenAufg1.html und mmind.html , sowie. eine Startseite index.html im richtigen Verzeichnis ab, ist man fertig:
quak:/usr/opt/home/cspuser/public_html/seyrich>ll
total 36
-rw-r--r-- 1 seyrich WSIstud
3026 Jan 15 14:53 Aufg1.html
-rw-r--r-- 1 seyrich WSIstud
2758 Jan 11 16:21 HttpMessage.class
-rw-r--r-- 1 seyrich WSIstud
3290 Jan 11 16:21 HttpMessage.java
-rw-r--r-- 1 seyrich WSIstud
3010 Jan 15 14:51 index.html
-rw-r--r-- 1 seyrich WSIstud
4918 Jan 11 17:40 mmApplet.class
-rw-r--r-- 1 seyrich WSIstud
5296 Jan 11 17:40 mmApplet.java
-rw-r--r-- 1 seyrich WSIstud
2900 Jan 15 14:54 mmind.html
quak:/usr/opt/home/cspuser/public_html/seyrich> |
Die Ausgabe von Kontrollaugaben erfolgt bei Ausführung des Servlets über stderr in die Datei
/var/log/httpd.error_log
Dies ist zu Debugzwecken recht praktisch. Auch lässt sich die Nummer so schneller finden...
quak:/var/log>grep seyrich httpd.error_log
seyrich=============================
seyrich init
seyrich hole code
seyrich habe session
seyrich habe code
seyrich Valunames
seyrich putte: 74074
seyrich code reingeputtet
seyrich habe num
seyrich habe num geputtet: 0
seyrich theCode
seyrich tryNum
seyrich=============================
seyrich check
seyrich habe session
seyrich habe theCode: 74074
seyrich habe aCode: 12345
seyrich getValuNames():
seyrich theCode
seyrich tryNum
seyrich habe tryNum: 0
seyrich habe trynum puttet: 1
seyrich rechnen
seyrich fertig
seyrich=============================
seyrich check
seyrich habe session
seyrich habe theCode: 74074
seyrich habe aCode: 12345
seyrich getValuNames():
seyrich theCode
seyrich tryNum
seyrich habe tryNum: 1
seyrich habe trynum puttet: 2
seyrich rechnen
seyrich fertig
seyrich=============================
seyrich check
seyrich habe session
seyrich habe theCode: 74074
seyrich habe aCode: 12345
seyrich getValuNames():
seyrich theCode
seyrich tryNum
seyrich habe tryNum: 2
seyrich habe trynum puttet: 3
seyrich rechnen
seyrich fertig
quak:/var/log>
|
Und das wars auch schon. Man muss noch nicht einmal jemanden killen!
Blatt 5
Aufgabe 1
Die erste Aufgabe bestand darin, sich auf der IBM/S390 in das TSO -Subsystem
einzuloggen. Danach war das Dataset
anzulegen, in dem die Dateien der folgenden Aufgaben abzulegen waren.
Danach sollten zwei Testdateien mit Hilfe des ISPF -Editors angelegt und editiert werden.
Die Abgabe bestand in einem Screenshot der zweiten Datei PRAKTxy.TEST.CNTL(V1) .
Bei der Benutzung des Editors sollte man beachten, dass die Kommandos zum Einfügen und Löschen von Zeilen
in die Zeilennummerierung geschrieben werden müssen.
Aufgabe 2
Die yweite Aufgabe hatte zum Ziel ein eigenes c-Programm auf der Maschine yu schreiben, compilieren und auszuühren.
Dazu mussten die beiden Dataset - PRAKTxy.TEST.C
PRAKTxy.TEST.LOAD
angelegt
werden. In ersteres sollte der Quellquode des c-Programms abgelegt werden, wärend das andere dafür vorgesehen war,
den ausführbaren Maschinencode, der mit Hilfe des Compileskript
PRAKTxy.TEST.CNTL(V1)
aus Aufgabe 1 erzeugt wurde, aufzunehmen.
Als Steigerung musste ein eigenes c-Programm entworfen und mit einem angepassten Skript ausführbar gemacht werden.
Abzugeben war der Screenshot
-
der Skriptdatei
PRAKTxy.TEST.CNTL(V2) :
-
des eigens entworfenen c-Programms
PRAKTxy.TEST.C(V2) :
-
deie Ausgabe des Programmes mit dem Aufruf
TSO CALL \'PRAKTxy.TEST.LOAD(V2) :
|