suessenguth99

Werbung
0. Inhaltsverzeichnis
0.
Inhaltsverzeichnis
1.
Aufgabenstellung
Thema
Vorbemerkung
Arbeitsumfang
Erläuterung des Problems
Lösungsweg
Singulärwertzerlegung
Kovarianzanalyse
Zählverfahren
JAVA
Einleitung
Beschreibung von JAVA
Objektorientiert
Einfach
Verteilt
Dynamisch
Interpretiert
Robust
Sicher
Architekturneutral
Hochleistungsfähig
Multithreadfähig
Unterschiede der JAVA-Versionen
JDK 1.0 – JDK 1.1
JDK 1.1 – JDK 1.2
Wahl der Version
CORBA
Client & Server
2-Tier-Architektur
3-Tier-Architektur
n-Tier-Architektur
Entwicklung von CORBA
OMG
ORB
IDL
Services
Facilities
Mapping
Alternativen
Socket
RPC
DCOM
RMI
Leistungsfähigkeit
Simulation der FCG
Simulation der Credit Suisse
1.1
1.2
1.3
2.
2.1
2.2
2.3
2.4
3.
3.1
3.2
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
3.2.7
3.2.8
3.2.9
3.2.10
3.3
3.3.1
3.3.2
3.3.3
4.
4.1
4.1.1
4.1.2
4.1.3
4.2
4.2.1
4.2.2
4.2.3
4.2.4
4.2.5
4.2.6
4.3
4.3.1
4.3.2
4.3.3
4.3.4
4.4
4.4.1
4.4.2
Seite
1
1
1
1
2
2
3
3
5
6
6
6
7
8
8
9
9
9
11
13
13
14
14
14
17
18
20
20
21
21
22
22
22
23
24
24
25
26
27
27
27
27
27
28
28
29
I
0. Inhaltsverzeichnis
5.
5.1
5.1.1
5.1.2
5.1.3
5.2
5.2.1
5.2.2
5.2.3
6.
6.1
6.1.1
6.1.2
6.1.3
6.2
6.2.1
6.2.2
6.3
6.3.1
6.3.2
6.3.3
6.3.4
6.3.5
6.3.6
6.3.7
7.
7.1
7.1.1
7.1.2
7.2
7.2.1
7.2.2
8.
8.1
8.1.1
8.2
8.2.1
9.
9.1
9.2
9.3
9.4
9.5
9.6
9.7
C/C++ und Fortran
Allgemein
Main-Methode
Naming-Conventions
Subroutines
Datenübergabe
Strings
Arrays
Andere Datentypen
Client
Anforderung an den Client
Statisches System / Lasten
Benutzungsoberfläche
Verteiltes System
Entwurf
Einleitung
Gliederung des Programms
Klassen des Client
Start
Programm
Module_ClientChoice
Module_Construction
Module_SVD
Module_KVA
Module_RES
CORBA-Schnittstelle
SVD
Structs
Interface
KVA
Structs
Interface
Server
SVD-Server
CORBA-Objekt
KVA-Server
CORBA-Objekt
Probleme und Lösungswege
Lasten
Singulärwertzerlegung
Server-Adresse
Verbindungsabbruch
Datenmenge
Multithreading
Applet
Seite
30
30
30
30
30
31
31
31
32
33
33
33
33
34
36
36
36
37
37
38
39
39
42
43
43
44
45
45
45
45
45
46
47
47
47
48
48
50
50
51
51
52
52
52
53
II
0. Inhaltsverzeichnis
10.
10.1
10.1.1
10.1.2
10.2
10.2.1
10.2.2
10.3
10.3.1
10.3.2
10.3.3
10.3.4
10.3.5
10.3.6
10.3.7
10.3.8
10.3.9
10.3.10
10.3.11
10.3.12
10.3.13
10.3.14
10.3.15
10.4
10.5
10.6
11.
11.1
11.1.1
11.1.2
11.1.3
11.1.4
11.2
11.2.1
11.2.2
11.2.3
11.2.4
11.2.5
12.
Benutzerhandbuch
Systemvoraussetzungen
Client
Server
Installation und Starten des Client
Installation
Starten
Construction
Neues Projekt
Öffnen eines bestehenden Projekts
Speichern des aktuellen Projekts
Programm beenden
Tragwerk drucken
Knoteneingabe
Stabeingabe
Lasteingabe
Wöhlerlinie definieren
Materialeigenschaften definieren
Profil definieren
Verteilung anzeigen
Startmenü
Hilfe aufrufen
Pop-Up-Menü
SVD
KVA
RES
Beispiel
Rahmentragwerk
Knoten und Stäbe
Lasten
SVD
KVA
Stütze
Knoten und Stäbe
Lasten
SVD
KVA
Ergebnisse
Quellenangabe
Seite
54
54
54
54
55
55
55
57
57
58
58
58
59
60
61
62
63
65
66
67
67
67
68
69
69
70
71
71
71
73
74
74
75
75
76
76
76
77
79
III
1. Aufgabenstellung
1.
Aufgabenstellung
1.1
Thema
Erstellung eines verteilt arbeitenden Programmsystems mit dem Standard-Kommunikationsmedium CORBA am Beispiel der lebensdauerorientierten Bemessung von
Tragwerken.
1.2
Vorbemerkung
Die gegenwärtige Entwicklung in der Computertechnologie sind durch den Wunsch
gekennzeichnet, bestehende Anwendungsgrenzen, die durch verschiedene Plattformen
in heterogenen Computernetzwerken gegeben sind, zu überwinden. Das Internet und
seine Möglichkeiten, die noch gar nicht alle ausgenutzt sind, gewinnen dabei
zunehmend an Bedeutung. Es ist beispielsweise möglich, Programme auf entfernten
Rechnern auszuführen und lokal zu steuern. Voraussetzung hierfür sind geeignete
Schnittstellen und sinnvolle Vereinheitlichungen, so daß die Systemarchitekturgrenzen
aufgehoben werden. Hier bietet sich die Technologie CORBA (Common Object
Request Broker Architecture) an.
1.3
Arbeitsumfang
Mit Hilfe von CORBA sollen verschiedene für die lebensdauerorientierte Bemessung
von Tragwerken vorliegende Routinen in ein Programmsystem eingebunden werden.
Diese Programmroutinen dienen der Parametrisierung der Lastprozesse, der
Kovarianzanalyse zur Ermittlung von Parametern für die Beschreibung der
Spannungsdoppelamplituden, der Abschätzung der Schädigung und der
Zuverlässigkeitsberechnung mit einem MonteCarlo-Simulationsverfahren.
Es ist ein Steuerprogramm zu schreiben, welches die Kontrolle über den Arbeitsablauf
übernimmt. Für die vorliegenden Programmroutinen sind dabei Pre- und
Postprozessoren zu erstellen, so daß das Programmäußere dem aktuellen
Benutzungsoberflächen-Standard entspricht.
Im einzelnen sollen für die Dateneingabe und die Ergebnisse graphische Darstellungen
gewählt werden. Insbesondere ist dies für das FEM-Programmmodul erforderlich.
Desweiteren sind Schnittstellen für alle verwendeten Module nötig, um so eine
fehlerfreie Datenübertragung zu gewährleisten.
Die erstellten Programme sollen vorwiegend in der Programmiersprache JAVA
geschrieben werden. Anschließend ist die Anwendung des aufgebauten
Programmsystems für vorgegebene Konstruktionen aus der Ingenieurpraxis Rahmentragwerk, Durchlaufträgersystem- beispielhaft nachzuweisen und zu
dokumentieren.
4
2. Erläuterung
2.
Erläuterung
Thema des Teilprojektes C5 des Sonderforschungsbereiches 398 ist die Entwicklung
eines parallelen/verteilten Entwurfssystems für die lebensdauerorientierte Auslegung
von Tragwerken unter Berücksichtigung von Schädigungen.
„Ziel des Projektes C5 ist es, ein computerbasiertes Entwurfssystem für
Stahltragwerke zu entwickeln, das alle die Lebensdauer beeinflussenden Effekte
berücksichtigt und eine optimale Tragwerksauslegung erlaubt.“ (/18/)
Die Grundlagen bei dem Entwurf von Systemen werden nach dem Grad ihrer
Komplexität klassifiziert (/19/).
•
•
•
Level I:
Die Bemessungsvariablen werden durch einen einzigen Wert, i.d.R. der
Mittelwert, beschrieben. Dieses Vorgehen entspricht dem Niveau der heutigen
Normen, wobei die normengebenden Gremien dafür garantieren, daß die
Versagenswahrscheinlichkeit akzeptabel klein ist.
Level II:
Die Bemessungsvariablen werden durch zwei Kennwerte (Mittelwert und Standardabweichung) beschrieben.
Level III:
Die Bemessungsvariablen werden durch ihre Verteilungsfunktionen beschrieben.
Die Schwierigkeiten bei der Methode nach Level III im Bauwesen liegen darin, daß
häufig Werte auftreten, die stark von den Mittelwerten ihrer Verteilungen abweichen
(Jahrhundertereignisse). Außerdem liegen häufig nur relative wenig Meßwerte vor
oder die Meßverfahren sind unzureichend.
Die Bemessung auf Grundlage stochastischer Belastungen ist extrem kompliziert und
für die Praxis kaum geeignet.
2.1
Lösungsweg
Um die o.g. schwierige Aufgabe zu lösen ist der Einsatz von schnellen Computern und
moderner Software unerläßlich. Durch den Einsatz von Programmen ist eine Lösung
in zwei Schritten möglich.
•
•
Reduktion der Lastdatenmenge ohne die wesentlichen Informationen zu verlieren
Ermittlung der stochastischen Parameter zur Beschreibung der Verteilung der
Tragwerksantworten (spektrale Momente)
Im zweiten Schritt wird dabei die dynamische Berechnung durch eine
Kovarianzanalyse unter Kopplung der Lastseite mit der Strukturseite ersetzt.
Anschließend kann die Verteilungsfunktion der Tragwerksantworten durch die
spektralen Momente beschrieben werden. Die Beschreibung der Verteilung erfolgt
dabei analytisch, was eine Effizienzsteigerung gegenüber der numerischen Methode
bedeutet. Die Genauigkeit bewegt sich dabei in akzeptablen Grenzen. Nach der
Emittlung der Tragwerksantworten kann die Schädigung durch Schadensakkumulation
nach der Palmgren-Miner-Regel berechnet werden und die Zuverlässigkeit des
Bauwerks bestimmt werden. Eine Optimierung kann durch mehrere
Programmdurchläufe erreicht werden.
2
2. Erläuterung
2.2
Singulärwertzerlegung
Die Singulärwertzerlegung ist ein der Kovarianzanalyse vorgeschalteter Prozeß,
bestehend aus informationsreduzierenden Algorithmen.
Aus Versuchen im Windkanal, wurden zu einem Tragwerk diskretisierte
Druckbeiwerte cp an verschiedenen Meßpunkten ermittelt. Daraus kann später der
Winddruck je Flächeneinheit der Bauwerksfläche ermittelt werden: w = cp ⋅ q
Da aus solchen Versuchsreihen sehr große Datenmengen entstehen (mehrere
Gigabyte!), ist es erforderlich diese auf eine leicht und schnell zu verarbeitende Menge
zu reduzieren. Als Ergebnis aus diesen Operationen erhält man die normierten
Parametermatrizen A, B und C. Durch die man algebraisch die stochastischen
Erregerprozesse des Mikrozeitbereiches beschreiben kann. Unterschiedliche
Windgeschwindigkeiten können abgebildet werden, da die Erregerprozesse auf
normierten Werten beruhen.
Dadurch ist es möglich, eine einmalige algebraische Rechenoperation statt
aufwendiger, wiederholter Zeitbereichssimulationen zur Berechnung der streuenden
Tragwerks-antworten durchzuführen. Auf diese Weise können die Antwortzeiten der
Computersysteme extrem verkürzt werden.
2.3
Kovarianzanalyse
Gesucht ist die Verteilung der Spannungsschwankungen, da diese in die
Schadensakkumulation eingehen. Gegeben sind die o.g. Zeitreihen der
Belastungsschwankung. Ziel ist die Kopplung der beiden Prozesse Belastung und
Tragwerksantwort. Eine dynamische Berechnung entfällt, da sie viel zu aufwendig und
kompliziert ist. Eine Lösung des Problems liegt in der Kovarianzanalyse.
3
2. Erläuterung
Durch Hintereinanderschaltung eines Formfilters (s.o.), mit dem die Parametrisierung
der aerodynamischen Übertragung gelingt (die Lasteinwirkung wird auf ein ideelles
weißes Rauschen zurückgeführt) und eines Filters für das mechanische System (dies
stellt den Zusammenhang zwischen den Lasteinwirkungen und den
Tragwerksantworten her), lassen sich über die Kovarianzanalyse sämtliche Streuungen
und spektralen Momente aller interessierenden Strukturantworten berechnen.
Die spektralen Momente ergeben sich aus:
∞
λk = ∫ ω k Gxx (ω )dω
0
wobei Gxx (.) die sogenannte einseitige Spektraldichte ist, die für die meisten
physikalischen Probleme anstatt der zweiseitigen Spektraldichte Sxx (.) verwendet wird
(/18/).
Die spektralen Momente, durch welche die stochastischen Tragwerksantworten
beschrieben werden können, haben folgende physikalische Bedeutung:
λ0 =
Varianz des Prozesses X (t )
λ1 =
gewonnen aus dem Korrelationskoeffizienten zwischen X (t ) und
.
∨
der Hilberttransformierten X (t ) von X (t ) gewinnen
λ2 =
Varianz des Ableitungsprozesses
λ4 =
Varianz von X (t )
..
Diese erhält man unmittelbar als Ergebnis aus der Kovarianzanalyse.
4
2. Erläuterung
2.4
Zählverfahren
Früher wurden die Schwingweiten numerisch ausgezählt, was einen langwierigen
Prozeß darstellt, wogegen heutzutage die Ergebnisse analytisch gewonnen werden.
Aus den Spektralmomenten kann der funktionale Verlauf der Verteilungsdichte der
Schwingweite als Überlagerung einer Exponentialverteilung und zweier
Rayleighverteilungen gewonnen werden (/20/):
fs ( s ) =
2
 1  s 2 
 1
2
s  
D3
D2
 2⋅s 

− 

+
⋅
⋅
+
⋅
⋅
−
⋅ exp −
exp
exp
s
s

2
2
 2  2 ⋅ σ  
 2  2 ⋅ R ⋅ σ   4 ⋅ σ 2
σ
 σ ⋅ D1  4 ⋅ σ ⋅ R




mit:
σ = λ0
R=
α − Xm − D12
1 − α − D1 + D12
Xm =
λ1 λ 2
⋅
λ0 λ4
D1 = 2 ⋅
D2 =
1 − α − D1 + D12
1− R
D 3 = 1 − D1 − D 2
Xm − α 2
1+α2
Die Schädigungsanteile aus den Spannungsverteilungen werden anschließend
integriert. Auf Grundlage der so gewonnen Daten kann die Zuverlässigkeit eines
Systems bestimmt werden und in weiteren Schritten optimiert werden.
5
3. JAVA
3.
Java
3.1
Einleitung
Ende des Jahres 1995 wurde von der Firma SUNTM ein vollständig neues
Softwarekonzept vorgestellt. Mit der Version 1.0 der Programmiersprache JAVA hatte
man nun erstmalig die Möglichkeit, Programme unabhängig von der zu Grunde
liegenden Plattform zu entwickeln. Dies bedeutet, daß es für den Programmierer
unerheblich ist, ob er die Software für Windows 95/98, Windows NT, Linux oder
Mac-OS entwirft. Das Programm ist - ohne auch nur eine Zeile Code zu ändern - auf
allen Systemen lauffähig. Diese Portabilität ist allerdings mit dem Nachteil verbunden,
daß die Programme im Vergleich zu C++-Programmen 20mal langsamer sind.
Mit Einführung der Release 1.1 verdoppelte sich die Ausführungsgeschwindigkeit.
Allerdings waren C++-Programme immer noch annähernd um den Faktor 10 schneller
als entsprechende JAVA-Programme.
Zu dem Geschwindigkeitssprung kamen noch weitere Entwicklungen, wie z.B.:
- Drucken aus Applikationen
- Remote Methode Invocation
- Zugriff auf Datenbanken
- digitale Signaturen
- Internationalisierung
- neues Eventmodell
- Verschlüsselung von Nachrichten
Auf diese Neuerungen wird in Kapitel 3.3.1 beim Vergleich der Versionen noch
genauer eingegangen.
3.2
Beschreibung von JAVA
Java wird von SUNTM als eine Sprache mit folgenden Eigenschaften beschrieben:
objektorientiert, einfach, verteilt, dynamisch, interpretiert, robust,
architekturneutral, portabel, hochleistungsfähig und multithread-fähig
(/1/ S. 69)
sicher,
Dabei ist interessant, daß JAVA-Programme auf zwei grundsätzlich verschiedenen
Konzepten beruhen können. Sie können als Applet und/oder als Applikation entworfen
werden.
Ein Applet ist ein Programm, welches innerhalb eines HTML-Dokumentes aufgerufen
wird, und nur durch einen JAVA-fähigen Browser in einer geschützten Umgebung
ausgeführt werden kann. Diese Umgebung wird auch als Sand-Box bezeichnet. In
dieser Umgebung sind die Rechte auf Systemressourcen extrem eingeschränkt,
wodurch Applets sehr sicher sind.
6
3. JAVA
Eine Applikation, auch als stand-alone bezeichnet, wird durch den Aufruf der JVM
über eine Kommandozeileneingabe aufgerufen. Das Programm läuft dann wie jedes
andere Programm auch und unterliegt keinen Einschränkungen (speichern, laden,
löschen, drucken ...). Als JAVA-Virtual-Machine (JVM) wird dabei der Interpreter
bezeichnet, der die compilierten class-Dateien ausführt.
Der Aufruf kann natürlich durch eine batch-Datei vereinfacht werden. Er hat
allerdings immer folgende Form: java Start.class. Mit Start.class wird hierbei die
Klasse bezeichnet, welche die main-Methode enthält und java ist der Interpreter, der
im Verzeichnis /bin des Installationspfades von JAVA liegt. Entsprechend sind
besonders die Hinweise bezüglich der CLASSPATH-Variable bei der Installation von
JAVA zu beachten.
3.2.1 Objektorientiert
Im Gegensatz zu anderen Hochsprachen wie zum Beispiel C, Fortran oder PASCAL
ist JAVA objektorientiert. Im Mittelpunkt des Entwurfes objektorientierter Programme
stehen Konstrukte, die Daten und Methoden (zur Manipulation dieser Daten) zu einer
Einheit zusammenfassen. Diese Konstrukte zur formalen Beschreibung von beliebigen
Objekten werden Klassen genannt.
Die besonders großen Vorteile dieses Konzeptes liegen in der Möglichkeit der
Wiederverwertbarkeit und Vererbung von Klassen. Vererbung heißt, daß eine Klasse
von einer anderen Klasse ihre Elementdaten und Elementfunktionen übernimmt (/2/ S.
462). Allerdings existiert in JAVA nur eine Einfachvererbung, wogegen C++ auch die
Mehrfachvererbung kennt.
Mit Vererbung wird eine OO-Technik bezeichnet, die es gestattet Eigenschaften
(Attribute und Methoden) an nachgeordnete Klassen weiterzugeben. Diese verfügen
dann ebenfalls über die Eigenschaften der Vaterklasse, ohne sie neu definieren zu
müssen.
Viereck
Parallelogramm
Rechteck
In diesem Fall erben die Klassen Rechteck und Parallelogramm die Eigenschaften der
Klasse Viereck (z.B. Breite, Höhe, Flächenberechnung usw.). Da sie nur von einer
Klasse erben, nennt man dies Einfachvererbung.
Bei der Technik der Mehrfachvererbung können Klassen von mehr als einer Klasse die
Eigenschaften erben.
7
3. JAVA
Auf diese Weise entstehen Klassenhierarchien, an deren Spitze die Stammklasse steht.
In JAVA ist diese Stammklasse die Klasse java.lang.Object. Alle weiteren Klassen
sind von ihr abgeleitet (erben ihre Eigenschaften).
Die von JAVA mitgelieferten Klassen sind in Pakete geordnet. Die wichtigsten sind:
- java.applet
- java.io
- java.util
- java.awt
- java.lang
- java.awt.event
- java.math
In diesen Paketen sind Klassen enthalten, die eine einfache Programmentwicklung
ermöglichen, ohne jedesmal elementare Klassen und Funktionalitäten neu schreiben zu
müssen.
Die einzigen Elemente in JAVA, die nicht zugleich Objekte sind, sind die elementaren
Datentypen:
- boolean
- short
- float
- char
- int
- double
- byte
- long
3.2.2 Einfach
Um die Sprache JAVA einfach zu gestalten, wurden relativ wenig Sprachkonstrukte
eingeführt, die gleichzeitig auch noch eng an die Bezeichnungen von C/C++ angelehnt
sind. Dadurch wurde die Fehleranfälligkeit von Programmen verringert, da vielen
Softwareentwicklern JAVA vertraut wirkte.
Allerdings existieren zwischen diesen Sprachen wesentliche Unterschiede, die
unbedingt beachtet werden müssen. Dazu gehört unter anderem die automatische
Speicherverwaltung (Garbage-Collector, vgl. 3.2.6), wodurch es nicht mehr
erforderlich ist, den delete-Operator zu verwenden. Außerdem wird unter JAVA nicht
zwischen Objekten und Referenzen auf Objekte unterschieden. Zudem sind selbst
Arrays und Strings Objekte, womit auf jede Zeigerarithmetik verzichtet werden kann
(vgl. 3.2.1).
3.2.3 Verteilt
Java unterstützt Netzwerke durch Klassen aus den Paketen java.net und java.rmi /
java.rmi.server die der Programmentwickler ohne Hintergrundwissen über die zu
Grunde liegenden Protokolle nutzen kann. Dadurch könne entfernte Daten und
Ressourcen auf sehr einfache Art und Weise wie lokale verwendet werden.
Aus dem Paket java.net kann die Klasse URL verwendet werden, um die durch eine
URL bezeichnete Netzwerk-Ressource herunterzuladen. Diese Klasse wird
hauptsächlich dazu verwendet, um URLs zu repräsentieren und zu parsen (/3/ S.213).
Dabei können Daten durch Datagramme (paketorientiert) als auch durch Sockets
(stream-orientiert) versendet werden.
8
3. JAVA
Mit Parsen wird der Vorgang bezeichnet, durch den eine Datenstruktur in ein
gewünschtes Format gewandelt wird (z.B. intàdouble, String àURL etc.)
In den Paketen java.rmi / java.rmi.server sind Klassen enthalten, die es ermöglichen
Client- und Server-Anwendungen zu schreiben.
RMI bedeutet Remote Methode Invocation (= entfernter Methodenaufruf). Der Client
kann Methoden eines Serverobjektes so aufrufen, als ob es sich um ein lokales Objekt
handelt. Diese Technik entspricht in vielen Details der von CORBA (vgl. Kap. 4.3.4).
3.2.4 Dynamisch
Jede Klasse muß erst zur Laufzeit des Programms geladen werden. Dadurch läßt sich
besonders bei der Verwendung von JAVA im Internet Leistung einsparen. Außerdem
können Informationen über Objekte ebenfalls zur Laufzeit ermittelt werden. Diese
Möglichkeit ist z.B. in C++ erst in der letzten Version in den Sprachstandard
aufgenommen worden (RTTI = Runtime Type Information).
Durch die Reflection-API aus dem java.lang-Paket kann ein JAVA-Programm sich
selbst inspizieren und manipulieren. Dabei handelt es sich um die Möglichkeit die
Eigenschaften, Events und Methoden zu ermitteln, welche z.B. von einem Bean zur
Verfügung gestellt werden. Diese Technik ist allerdings nicht nur auf Beans (Konzept
für wiederverwendbare Softwarekomponenten) sondern auf alle Klassen anwendbar.
Es ist dadurch möglich, während der Laufzeit des Programms, Informationen über die
Attribute, Methoden und Konstruktoren einer Klasse zu erhalten.
3.2.5 Interpretiert
Durch das Compilieren der Quellcode-Dateien (Extension *.java) werden vom JAVACompiler Byte-Code-Dateien erzeugt (Extension *.class). Dieser Byte-Code ist
allerdings kein Maschinencode, wie er beim Compilieren von C/C++-Quellcode
erzeugt wird. Er kann anschließend von jeder JVM ausgeführt werden, welche immer
einen Interpreter und Laufzeittypen enthält.
Das Ausführen des Byte-Codes stellt kein Linken wie unter C/C++ dar, da die Klassen
nacheinander zur Laufzeit des Programms geladen werden (vgl. 4.2.4), sondern ist ein
inkrementeller Prozeß, da eine Klasse erst dann geladen wird, wenn sie zur
Programmausführung benötigt wird.
Dadurch ist der Compilationsvorgang zur Erzeugung des Byte-Codes erheblich
schneller und einfacher als das umständliche Compilieren-Linken-Ausführen unter
C/C++.
3.2.6 Robust
Im Gegensatz zu C++, welches zu C abwärts kompatibel sein sollte, kann JAVA
wesentlich stärker seine Datentypen kontrollieren. Dadurch kann der Compiler Fehler
durch falsche Datentypennutzung erkennen und dem Programmierer mitteilen.
9
3. JAVA
Außerdem können unter JAVA Methoden lediglich explizit deklariert werden,
wodurch der Compiler fehlerhafte Methodenaufrufe ebenfalls meldet.
Um die Stabilität weiter zu unterstützen, sind Speichermanipulationen durch Zeiger
und Zeigerarithmetik nicht möglich. Wie oben bereits erwähnt, werden selbst Arrays
und Strings als Objekte betrachtet, welche über Methoden und nicht über Zeiger
verändert werden. Sie werden zur Laufzeit des Programmes ständig auf Gültigkeit hin
überprüft. Dadurch wird das Überschreiben von Speicherbereichen oder Daten
verhindert, was unter C++ fast zwangsläufig zum Programmabsturz führt. Im diesem
Zusammenhang ist auch der Garbage-Collector zu sehen. Er verhindert durch das
automatische Freigeben von Speicherbereichen, auf die keine Referenz vorhanden ist,
das Entstehen von Speicherlecks. Dadurch ist der Programmierer von der Aufgabe
entbunden mit delete den allokierten Speicher wieder dem System bereitzustellen.
Ein weiterer Aspekt, um die Lauffähigkeit eines Programmes sicherzustellen, ist das
Exception-Handling. Damit können Fehler, die während des Programmablaufes
auftreten, abgefangen werden. Für diesen Mechanismus gibt es in JAVA das
Konstrukt try-catch-finally. Fehlerbehandlung wird durch diese Gruppierung von
verschiedenen Ausweichmöglichkeiten für den Programmierer stark vereinfacht. Zum
Beispiel kann an den User eine Fehlermeldung ausgegeben werden, wenn eine zu
ladende Datei nicht gefunden wurde.
Ebenfalls eine wichtige Technik ist das Casting von Objekten zur Laufzeit. Damit ist
die Konvertierung eines Objektes von einem Klassentyp in einen anderen gemeint,
was grade bei Vererbungsstrukturen sehr häufig auftritt.
All diese Fähigkeiten von JAVA machen das Programmieren wesentlich einfacher und
sicherer als unter anderen Sprachen, entbinden den Programmierer aber keineswegs
von seiner Qualitätssicherungsaufgabe.
Um diese zu gewährleisten, gehört in erster Linie ein strukturiertes Programmieren zu
den Aufgaben des Entwicklers, so daß auch ein Dritter das Programm sofort verstehen
und erweitern kann. Folgendes kurzes Beispiel soll das verdeutlichen:
r+=r<<2;
Dies sieht harmlos aus, allerdings ist unklar von welchem Datentyp r ist. Ein
ordentlicher Entwickler weist im Namen auf den Typ hin:
r_ul +=r_ul<<2;
So weiß man auf den ersten Blick, daß die Variable vom Typ unsigned long ist.
Microsoft propagiert für diesen Zweck die „Ungarische Notation“ von Charles
Simonyi (/5/ S.170).
10
3. JAVA
3.2.7 Sicher
Da JAVA immer wieder als die „Internet-Sprache“ propagiert wird, ist es nicht
verwunderlich, daß dem Sicherheitsaspekt eine besonders große Bedeutung
zugewiesen wird. Niemand würde JAVA-Code aus dem Internet herunterladen und
auf seinem Rechner ausführen lassen, wenn damit ein Risiko für seine Daten
verbunden wäre. Da aber die Funktionsweise des Codes im allgemeinen unbekannt ist,
sind notwendigerweise Einschränkungen bei den Zugriffsrechten erforderlich, um die
Sicherheit zu gewährleisten.
Wie unter 3.2.6 bereits erwähnt, finden bei JAVA Zeiger keine Verwendung. Damit ist
grundsätzlich sichergestellt, daß kein direkter Speicherzugriff möglich ist.
Dies alleine würde aber noch nicht den heutigen Sicherheitsanforderungen genügen.
Während der Ausführung des Byte-Codes überprüft die JVM zur Laufzeit des
Programms den Code auf dessen Gültigkeit. So wird ausgeschlossen, daß -bewußt
oder unbewußt- ein fehlerhaft erstellter Code ausgeführt wird. Ein Über- oder
Unterlauf des Stacks ist dadurch ausgeschlossen. Außerdem können eventuelle
Implementierungslücken in der JVM nicht illegal genutzt werden.
Ein weiterer Mechanismus zur Sicherung der eigenen Datenbestände ist die Sandbox.
Dabei kann das Applet im „Sandkasten spielen“, d.h. in der Sandbox laufen, ohne in
der realen Umgebung Schaden anzurichten. Sicherheitsrelevante Methodenaufrufe des
Programmes werden durch den Security-Manager unterbunden, der eine SecurityException auswirft. Der Programmablauf wird an der Stelle sofort angehalten.
Selbstverständlich kann keine Sprache dem Anspruch auf 100%-ige Sicherheit gerecht
werden. Aber die junge Sprache JAVA erkennt und schützt vor den meisten bisher
bekannten Angriffsmethoden bei verteilten Anwendungen. Zudem können die
heutigen Browser, in denen Applets ablaufen, zusätzliche Sicherheitsstufen einrichten.
Auf der nächsten Seite wird gezeigt, wie diese Security-Level genutzt werden, um das
Verhalten von Applets dem persönlichen Sicherheitsbedürfnis des Benutzers anpassen
zu können.
11
3. JAVA
Oben abgebildet sind die Möglichkeiten zur Sicherheitseinstellung für JAVA-Applets
im Microsoft Internet-Explorer 4.0. Diese Einstellungen gelten für die „Sand-Box“.
12
3. JAVA
3.2.8 Architekturneutral
Der wohl größte Vorteil von JAVA ist die Architekturneutralität des Codes. Ein Programm kann auf jeder Plattform ausgeführt werden, für die eine JVM existiert. Derzeit
bietet SUNTM die Entwicklungsumgebung JDK (= JAVA Developers Kit) für SPARC/
Solaris, X86/Solaris, MS-Windows 95/98/NT und MacOS an. Außerdem gibt es
Portierungen von IBM für OS/2 und von Randy Chapman für Linux.
Die Auswirkungen zeigen sich z.B. bei dem primitiven Datentyp int. Dieser kann
unter C/C++ 16, 32 oder 64 Bit groß sein, unter JAVA dagegen einheitlich 32Bit auf
jeder Plattform. Die Anwendungsentwicklung wird dadurch erheblich vereinfacht.
SUNTM beschreibt diesen Vorteil mit dem Satz: Write Once, Run Everywhere.
Da aber die GUI-Elemente (Graphical User Interface) unter den verschiedenen Betriebssystemen unterschiedlich aussehen, ist eine Oberflächenprogrammierung immer
noch mit Schwierigkeiten verbunden. Unterschiedliche Font-Größen oder Farben
führen immer wieder zu Problemen (/15/).
Oben abgebildet ist die Darstellung des Startmenüs bei einem Applet unter
Verwendung des MS-Internetexplorers. Die Schrift, die bei Netscape keine Probleme
bereitet, kann nicht dargestellt werden
3.2.9 Hochleistungsfähig
Da JAVA keine Compilersprache wie C/C++ ist, ist die Ausführungsgeschwindigkeit
natürlich auch deutlich geringer. Die Version 1.0 des JDK war ungefähr 20mal
langsamer als C/C++. Mit dem JDK 1.1 ist es immerhin gelungen die Geschwindigkeit
zu verdoppeln, ist aber immer noch ca. 10mal langsamer als C/C++.
Allerdings muß dabei beachtet werden, daß bei verteilten Anwendungen, dem
typischen Anwendungsgebiet von JAVA, die Geschwindigkeit nur eine
untergeordnete Rolle spielt. Den größten Teil der Zeit wartet das Programm auf
entfernte Daten, die über das Netzwerk geladen werden sollen.
Zeitkritische Anweisungen, die nicht ausgelagert werden können, sind in
Maschinencode geschrieben, und daher ausreichend schnell. Dazu gehören
Zeichenverkettungen und –vergleiche bei Strings.
Wenn eine Leistungssteigerung unbedingt erforderlich ist, besteht die Möglichkeit den
Byte-code mit einem Just-In-Time-Interpreter auszuführen. Der Byte-Code wird
während der Programmausführung für das entsprechende System optimiert und ist
13
3. JAVA
dadurch extrem kurz, kompakt und schnell. Die dadurch erreichte Geschwindigkeit
liegt in der Größenordnung von C/C++. Natürlich ist der Vorteil der
Architekturneutralität damit verloren.
Eine weitere Möglichkeit zur Ausführungsbeschleunigung besteht darin, zeitkritische
Routinen in C/C++ zu schreiben und über die bereitgestellten Schnittstellenmethoden,
in das JAVA-Programm einzubinden. Aber auch dadurch wird der o.g. Vorteil
zunichte gemacht.
Insgesamt kann über die Geschwindigkeit von JAVA gesagt werden, daß sie zwischen
den reinen Interpretersprachen wir Tcl, Pearl oder Shell-Skripten und den echten
Compilersprachen wie C/C++ oder Fortran liegt.
3.2.10 Multithreadfähig
Unter einem Thread versteht man einen eigenständig ablaufenden Programmfaden.
Ohne diese Threads sind moderne, interaktive Programme kaum vorstellbar. Die
Möglichkeiten in JAVA-Programmen Threads einzusetzen sind gegenüber C/C++
erheblich vereinfacht. Durch den Einsatz von Klassen, die direkt Threads unterstützen,
ist ein Multithreading ohne großen Aufwand möglich. Diese Klassen sind in dem
Paket java.lang enthalten, welches standardmäßig importiert wird.
Auch ohne Zutun des Programmierers verwendet JAVA bei zeitlich nicht
berechenbaren Aktionen eigene System-Threads. Das Laden und Anzeigen eines
Bildes aus dem Internet ist eine Anwendung, deren Zeitbedarf nicht vorhersagbar ist.
Da es aber unsinnig wäre das gesamte Programm während des Ladevorganges
anzuhalten, startet der JAVA-Compiler dafür einen eigenen Thread. Diese Technik
wird bei verschiedenen anderen Situationen angewendet.
Ein laufendes Applet kann durch Threads z.B. simultan eine Grafikdatei laden, eine
Sounddatei abspielen und gleichzeitig auf Eingaben des Benutzers reagieren.
3.3
Unterschiede der JAVA-Versionen
Bei einer so jungen Sprache wie JAVA werden ständig neue Versionen veröffentlicht.
Dies hat besonders in den ersten Jahren der Entwicklung ständig zu weitreichenden
Veränderungen in der Architektur geführt. Die wesentlichsten wurden in den zwei
nachfolgend erläuterten Schritten durchgeführt.
3.3.1 JDK 1.0 – JDK 1.1
Mit der Vorstellung des JDK 1.0 im Jahre 1995 wurde eine Entwicklung gestartet, die
in z.T. sehr kurzen Entwicklungsschritten bis heute fortgeführt wurde und keineswegs
beendet ist. Die Version 1.1 brachte einige Änderungen, die für jeden Entwickler von
Interesse waren.
Die wichtigste Neuerung, die alle GUI-Programme betrifft, ist das vollständig neu
Konzept zur Ereignisbehandlung (Eventhandling). Es wurde für jedes Event eine
eigene Klasse geschaffen, was erstens dem objektorientierten Ansatz wesentlich besser
14
3. JAVA
Rechnung trägt und außerdem die Routinen bedeutend einfacher und übersichtlicher
werden läßt.
Die Behandlung von Events sah bis zur Version 1.02 im wesentlichen wie folgt aus:
public boolean handleEvent( Event evt ){
if( evt.target==okBUTTON && evt.id==Event.ACTION_PERFORMED ){
// do something }
else
if(
evt.target==yesRADIOBUTTON
&&
evt.id==
Event.ACTION_PERFORMED ){
// do something other }
else if( ....){ }
return super.handleEvent( evt );
}
Die Informationen über das auslösende Objekt und die Art des Events sind in den
Attributen target (Referenz auf das auslösende Objekt) und id (Art des Ereignisses)
gekapselt. Man kann sofort erkennen, daß diese Technik sehr umständlich und
langsam ist, da immer eine, unter Umständen sehr lange, Reihe von Alternativen
geprüft werden muß. Und das, obwohl keineswegs sicher ist, ob das Event überhaupt
verarbeitet werden soll. Diese Vorgehensweise wird auch als Event-Tourismus
bezeichnet, da ein Ereignis ungezielt von allen Klassen mit einer handleEventMethode bearbeitet werden kann.
Demgegenüber verwendet das JDK 1.1 ein Verfahren, welches von SUNTM als
Multicast-Technik beschrieben wird. Dabei wird zwischen verschiedene EventKlassen und den Listenern (Hörern) unterschieden, die auf diese Ereignisse reagieren
sollen. Das auslösende Objekt sendet das Event dabei lediglich an die bei ihm
registrierten Listener. Nachstehend eine Beispielklasse, die auf ActionEvents und
ItemEvents reagieren kann, da die Interfaces ActionListener und ItemListener
implementiert worden sind. Die entsprechenden Methoden actionPerformed sowie
itemStateChanged sind überschrieben, um eigene Aktionen zu realisieren.
public class Test implements ActionListener, ItemListener {
// Attribute, Konstruktoren, Methoden ...
public void actionPerformed( ActionEvent a_evt ){
// Reaktion auf Buttons o.ä.
}
public void itemStateChanged( ItemEvent i_evt ){
// Reaktion auf Choice o.ä.
}
}
15
3. JAVA
Die Objekte der Klasse Test können auf Button-Klicks oder eine Auswahl in einem
Choice-Element reagieren, wenn sie bei den entsprechenden Objekten als Listener
eingetragen sind.
// Code-Auszug
Test
t1= new Test();
Test
t2 = new Test();
Button
b = new Button(„ok“);
Choice
c = new Choice();
b.addActionListener( t1 );
c.addItemListener( t1 );
Das Objekt t1 kann jetzt auf Benutzereingaben reagieren, wohingegen das Objekt t2
unberührt bleibt.
In der Eventhierarchie herrscht folgende Vererbungsstruktur (/4/ S.353):
16
3. JAVA
Durch die oben beschriebene Vorgehensweise ist ein beträchtlicher
Geschwindigkeitsgewinn erzielt worden. Als Schwierigkeit erweist sich jedoch die
Tatsache, daß mehrere Objekte auf ein Event reagieren können, wobei nicht festgelegt
ist, in welcher Reihenfolge sie dies tun.
Eine weitere Änderung, die große Bedeutung für Anwendungen hat, ist die Fähigkeit
von JAVA zu drucken. Statt der grafischen Darstellung auf dem Bildschirm wird
einfach auf dem Drucker gezeichnet. Dafür muß lediglich mit folgender Anweisung
ein Objekt der Klasse PrintJob verwendet werden:
PrintJob pjob = getToolkit().getPrintJob( this, „titel“, printProperties );
Der Rest geschieht laut SUNTM „automagically“. In der Methode paint kann dann ein
Graphics-Objekt verwendet werden, um auf dem Drucker zu zeichnen.
Eine ebenfalls wichtige Neuerung, ist die Möglichkeit, Daten aus/in das Clipboard zu
lesen/schreiben und das Entwickeln von mehrsprachigen Anwendungen mit dem
Internationalization-Framework. Die beiden letztgenannten Techniken finden in dieser
Arbeit keine Anwendung, so daß darauf an dieser Stelle nicht weiter eingegangen
wird.
Als Nachteil der neuen Version muß genannt werden, daß einige Methoden des
JDK 1.0 als deprecated (veraltet) eingestuft wurden und in späteren Releases nicht
unbedingt unterstützt werden. Dazu gehört z.B. das gesamte handleEvent-Modell, was
die Weiterentwicklung bereits bestehender Projekte sehr schwierig gestaltet. Zudem ist
nicht bekannt, ab welcher Version diese Methoden nicht mehr zum Sprachstandard
gehören. Solange SUNTM die alleinige Herrschaft über die Entwicklung von JAVA
besitzt und nicht einem unabhängigen Standardisierungsremium unterworfen ist, wird
sich an dieser Tatsache auch nichts ändern. Den Programmierern bleibt also keine
andere Alternative, als sich an den Empfehlungen von SUNTM zu orientieren (/6/
S.371).
Leider sind die Neuerungen nicht abwärts kompatibel. Wenn JAVA-Programme als
Applet entworfen wurden, müssen Browser der neuesten Generation verwendet
werden. Die am meisten genutzten Browser Netscape 4 und InternetExplorer 4 bieten
eine Unterstützung für JAVA 1.1 an, doch kann nicht vorausgesetzt werden, daß jeder
Anwender diese benutzt. Ältere Versionen können lediglich über PlugIns entsprechend
programmierte Applets ausführen. PlugIns werden von SUNTM zur Verfügung gestellt.
3.3.2 JDK 1.1 – JDK 1.2
In der nächsten Runde der Entwicklung wurden weitere Neuerungen implementiert,
die dem Programmierer erweiterte Möglichkeiten erschließen.
Als wesentliche optische Neugestaltung gibt es nun die Möglichkeit, das grafische
Erscheinungsbild der Programme plattformunabhängig zu gestalten. Swing ist eine
komplett neue Menge von Oberflächenelementen, die es dem Programmierer und dem
Benutzer erlauben, daß Erscheinungsbild zur Laufzeit zu verändern. Bisher existieren
Bibliotheken, um das Look&Feel von MS-Windows, Motif und einer JAVA eigenen
Optik zu erstellen. Dabei ist Swing selbst 100%-pure JAVA-Code, also ebenfalls
absolut plattformunabhängig.
17
3. JAVA
SWING mit Java-Look&Feel
SWING mit Motif-Look&Feel
Für
verteilte
Anwendungen
von
besonderer
Bedeutung
sind
die
Sicherheitsverbesserungen im JDK 1.2. Das Sicherheitskonzept erweitert bzw. ersetzt
das alte Sand-Box-Modell. Bisher durften Applets fast gar nichts, wohingegen
Applikationen vollen Zugriff auf alle Funktionalitäten haben. Das Modell beinhaltet
verschiedene Ressourcen, wie den Schreib- oder Lesevorgang aus speziellen
Verzeichnissen oder Dateien, die explizit freigeschaltet werden können. Falls die
geforderte Ressource nicht freigeschaltet ist, wird der Zugriff unterbunden. Zusätzlich
ist es möglich JAVA-Archive (JAR-Dateien) mit Zertifikaten zu versehen, die eine
größere Funktionalität erlauben als das bisherige unzertifizierte Sand-Box-Modell.
Eine verbesserte Möglichkeit zur 2D-Grafik- und Bildverarbeitung ist durch die
JAVA2D-Klassenbibliothek erreicht worden. Sie ist eine Erweiterung der bisherigen
Bibliotheken java.awt und java.awt.image und verknüpft Text, Bilder und Line-Art zu
einem einheitlichen Modell. Das API bietet einen komfortablen Alpha-Channel, also
verschiedene Durchsichtigkeitsstufen.
Das von anderen Systemen her bekannte Drag&Drop erlaubt den Datenaustausch
zwischen „nativen“ Programmen und in JAVA erstellten Programmen bzw. unter
JAVA-Programmen. Unter Programmen sind hierbei sowohl Applets als auch
Applikationen zu verstehen. Der Datentransfer zwischen JAVA-Programmen und den
nativen Programmen kann, da Systemfunktionen verwendet werden müssen, nicht
plattformunabhängig sein. Die entsprechenden Klassen sollten daher nur eingesetzt
werden, wenn es sich nicht vermeiden läßt.
Zur Vereinfachung der Bedienung von GUI-basierten Programmen wurden
Application Services eingeführt. Sie erlauben dem Benutzer, innerhalb eines
Programmes auch mit der Tastatur statt nur mit der Maus zu navigieren. In diesem
Zusammenhang ist auch die Möglichkeit zu sehen, das Aussehen des Mauszeigers und
den aktiven Punkt der Maus (HotSpot) selbst zu definieren.
Da die letzte Version des JDK noch sehr neu ist, wird sie von keinem Browser
standardmäßig unterstützt. Lediglich über PlugIns kann das reibungslose
Funktionieren gewährleistet werden. Derzeit steht das JDK1.2, welches jetzt JDK2
18
3. JAVA
heißt, auf der Website von SUNTM für die Plattformen WIN95/98/NT und SOLARIS
zum Download bereit.
3.3.3. Wahl der Version
Das zu entwickelnde Programm soll sowohl als Applet als auch als Applikation
laufen. Es werden also zwei Forderungen gestellt. Das Programm soll möglichst von
allen Browsern dargestellt werden können und es sollte mit ausreichender
Geschwindigkeit ablaufen. Wie in 3.3.1 ausgeführt, können Applets, die mit dem JDK
1.0 erstellt wurden, in jedem JAVA-fähigen Browser ablaufen, jedoch ist die
Ausführungsgeschwindigkeit unzureichend.
Unter 1.2 programmierte Applets haben den Vorteil, eine plattformunabhängige Optik
bereitzustellen, werden aber derzeit von keinem Browser unterstützt. Einen guten
Kompromiß stellt das JDK 1.1 dar, welches auf breiter Ebene unterstützt wird und
außerdem relativ schnell ist. Dieser Geschwindigkeitsvorteil wirkt nicht nur bei
Applets, sondern auch bei Applikationen.
Aus den oben genannten Gründen kann die Wahl zur Entwicklung eines Programmes
derzeit nur auf das JDK 1.1 fallen. Das unter Kapitel /10/ beschriebene Programm
wurde mit der Version 1.1.7 entwickelt, in der einige kleine Fehler der vorherigen
Versionen 1.1 – 1.1.6 beseitigt wurden.
19
4. CORBA
4
CORBA
4.1
Client & Server
Die Zeiten, als ein Großrechner für die Applikation und den Datenbestand
verantwortlich war, ist seit Ende der 70er Jahre endgültig vorbei. Damals begann der
Siegeszug der kleinen PCs, die heutzutage in jedem Büro stehen. Das hatte allerdings
zur Konsequenz, daß ein Modell gefunden werden mußte, mit dem alle Benutzer z.B.
auf einen Datenstamm zugreifen können.
Das Aufteilen der Programme und/oder Daten auf verschiedene Systeme (verteilte
Anwendungen), hat sowohl für den Programmierer, als auch den Nutzer der Software
enorme Vorteile. Durch die Lastverteilung auf mehrere Rechner, kann auch relativ alte
Hardware mit geringer Leistung heutige Aufgaben bewältigen. Zudem ist durch die
Verteilung von Daten und Applikationen die Gefahr eines völligen Datenverlustes sehr
gering. Das System, welches die Daten bereitstellt, kann vor bewußten und
unbewußten Angriffen von außen besser geschützt werden, als bei Sicherung aller
benutzten PC’s.
Diese Technik unterscheidet sich demnach grundsätzlich von der bisherigen
Arbeitsweise. Unter Windows-Betriebssystemen wurden Programm und die
zugehörigen Daten auf den eigenen Rechner kopiert, um dort lokal auf dem eigenen
Rechner zu arbeiten. Dagegen wird z.B. unter Unix lediglich die Bildschirmausgabe
umgeleitet. Die Arbeit wird auf dem entfernten Rechner durchgeführt. Mit CORBA
können Programme und Daten auf verschiedenen, durch ein Netzwerk verbundenen
Rechnern liegen und über eine definierte Schnittstelle kommunizieren. Dadurch wird
z.B. auch ein paralleles Rechnen ermöglicht, was die vorhandene Hardware wesentlich
besser ausnutzt.
Für den Programmierer ergibt sich der Vorteil, daß eine Anwendung, die Dienste
bereitstellt (Server), nur einmal entwickelt werden muß, und nicht für jede Plattform
neu. Dadurch ist auch der Einsatz von spezieller Hardware rentabel.
Als Nachteile ergeben sich die erhöhte Komplexität der Software verbunden mit der
geringen Erfahrung der Entwickler mit dieser noch relativ jungen Technik.
Als Client wird in diesem Zusammenhang ein Programm bezeichnet, wenn es von
einem anderen, dem Server, einen Dienst in Anspruch nimmt.
20
4. CORBA
Der Vorteil von verteilten Anwendungen kommt allerdings erst bei mehreren Clients
voll zum Tragen. Hierfür kommen drei grundsätzliche Architekturen in Frage:
•
•
•
2-Tier-Architektur
3-Tier-Architektur
n-Tier-Architektur
4.1.1 2 –Tier-Architektur
Hierbei haben die Clients direkten Zugriff auf die Dienste des Servers. Dadurch wird
als negativer Nebeneffekt die Netzbelastung sehr hoch, da jede Anfrage über das Netz
geleitet werden muß. Außerdem liegt beim Client die gesamte Anwendungslogik, was
die Wartung der Applikationen wesentlich erschwert.
4.1.2 3 –Tier-Architektur
Bei dieser Technik existieren nur „Thin-Clients“, welche lediglich der Interaktion mit
dem User dienen. Außerdem ist die Netzbelastung wesentlich geringer als bei der
2-Tier-Technik. Als Vorteil für den Entwickler liegt die Anwendungslogik zentral vor,
wodurch die Wartung und Weiterentwicklung erheblich vereinfacht wird.
4.1.3 n –Tier-Architektur
21
4. CORBA
Diese Technik erweitert die 3-Tier-Architektur, indem die Anwendungslogik ebenfalls
auf mehrere Server aufgeteilt wird. Dadurch erhält man einen Vorteil hinsichtlich
Wiederverwendung, Flexibilität, Wartbarkeit und Entwicklung.
4.2
Entwicklung von CORBA
Aus den oben genannten Punkten wird schnell ersichtlich, daß eine Schnittstelle
existieren muß, durch welche die einzelnen Module miteinander kommunizieren
können. Optimal ist in diesem Zusammenhang ein Medium, das zum einen
sprachunabhängig und zum anderen systemunabhängig ist. Mit der Entwicklung von
CORBA (Common Object Request Broker Architecture) ist es gelungen diese Punkte
zu vereinen.
4.2.1
OMG
Die Unabhängigkeit von verwendeter Programmiersprache und dem System wird
durch die Organisation Object Managing Group (OMG) gewährleistet. Die OMG
wurde 1989 mit acht Mitgliedern gegründet und umfaßt mittlerweile 760 Firmen und
Einrichtungen. In dieser Organisation sind neben zu erwartenden Firmen wie
MicroSoftTM, IBM oder Netscape auch andere vertreten, die ihren Nutzen aus
verteilten Anwendungen ziehen. Dazu zählen z.B. Deutsche Flugsicherung, Deutsche
Telekom, Dresdner Bank, SAP und Daimler Chrysler /7/.
Im Jahr 1990 wurde die Version 1.0 von CORBA veröffentlicht. Kurz darauf im Jahr
1991 bereits der Nachfolger 1.1. Dieser enthielt bereits das Prinzip des ObjektNachfrage-Dienstes Object Request Broker (ORB) , welches allerdings keine
standardisierte Kommunikation gewährleistete.
Mit der Veröffentlichung der Version 2.0 enthielt CORBA auch das StandardProtokoll Internet-Inter-ORB-Protokoll (IIOP), welches von allen Herstellern
implementiert werden mußte, wollten sie ihr Produkt CORBA 2.0-Kompatibel nennen.
Dadurch konnte eine echte Interoperabilität zwischen Programmen verschiedener
Anbieter sichergestellt werden. Leider ist dieses Protokoll nur auf Netzwerken mit
TCP/IP anwendbar, was aber sowohl im Internet, als auch in den meisten Intranets
gewährleistet ist.
22
4. CORBA
Die konkrete Realisation der durch die OMG veröffentlichten Standards ist allerdings
Firmensache. Es müssen keineswegs alle Möglichkeiten, die CORBA bietet,
implementiert werden.
4.2.2
ORB
Der ORB ist eine Softwarekomponente, die die Kommunikation zwischen Objekten
erleichtern soll.
Er sorgt dafür, daß eine Anwendung ein entferntes Objekt (Remote Object) findet,
wenn eine entsprechende Objekt-Referenz vorhanden ist. Diese Referenz besteht aus
einem 96Byte großen Schlüssel, über den eine eindeutige Identifizierung des
entfernten Objektes sichergestellt ist. Diese Objektreferenz wird auch als IOR
bezeichnet. Alle Methodenaufrufe erfolgen über diese Referenz. Das bedeutet, daß das
Objekt entfernt bleibt ( Call-by-Reference ).
ETA
(Server)
Startadresse eines
Corba-Objekts auf
Server-Seite
Speicherauszug
0 0 0 A F 1 7 D 9
0 B 0 0 0 0 0 0 0
ORB.object_to_string
KAPH
(Client)
ORB.string_to_object
Aufruf von Methoden
des entfernten CORBAObjekts über Referenz
LAN, WAN
Internet
23
4. CORBA
Durch die Referenz des CORBA-Objekts ist gewährleistet, daß sowohl das Objekt
selbst, als auch der Rechner, auf dem sich das Objekt befindet, eindeutig identifiziert
werden können. Der Referenz-String kann z.B. in einer Datei gespeichert und
übertragen werden.
In der Referenz sind folgenden Angaben geschlüsselt:
IP-Adresse, Port, Objekt-Typ, Objekt-Schlüssel
Beispielreferenz ( Server läuft auf Einzelplatzrechner ohne Netzwerk )
IOR:000000000000001449444c3a4b56415f436f726a6563743a312e30000000000100
0000000000005800010000000000244d6173746572426c61737465722e727a2e727568
722d756e692d626f6368756d2e64650004040000000000080000000000000000000000
00000000000000000000000000000000000000000000000000
4.2.3
IDL
Die Interface-Definition-Language dient der Definition der Schnittstelle zwischen
Client und Server. Sie stellt die Grundlage der Sprachunabhängigkeit dar. Durch eine
Abbildung der IDL-Dateien auf die Zielplattform (mapping) wird eine Umsetzung in
die Sprache des Clients bzw. Servers erreicht. Dabei bleibt die IDL absolut
unabhängig von der gewählten Zielplattform. Dies hat selbstverständlich zur Folge,
daß lediglich eine Deklaration von Methoden möglich ist, die erst in der
entsprechenden Zielsprache definiert werden können.
4.2.4
Services
Die Services, die von CORBA bereitgestellt werden, sind allgemeine Dienste, die für
den Betrieb eines verteilt arbeitenden Systems hilfreich oder erforderlich sind. Sie
haben keine Beziehung zu einer speziellen Anwendung. Von der OMG sind die in der
folgenden Abbildung genannten Services offiziell spezifiziert.
24
4. CORBA
Wie oben bereits erwähnt, kann die konkrete Umsetzung von CORBA von Firma zu
Firma variieren. In keiner Implementierung von CORBA sind alle aufgeführten
Dienste realisiert. Es ist überhaupt so, daß Object-Services nur in geringem Umfang
umgesetzt werden. Die wichtigsten drei von ihnen sind (/8/ S.42ff) die folgenden:
• Naming Service
Durch diesen Dienst können Objekte mit einem frei wählbaren Namen angesprochen
werden, dessen Grundlage der „Context“ ist. Der Context selber ist wieder ein Objekt,
in dem anderen Objekten ein Name zugewiesen werden kann. Mit diesen Namen
können Objekte dann angesprochen werden. Zu diesem Namen gehört auch ein
jeweiliges Typ-Attribut, welches ebenfalls frei gewählt werden kann. Dieses ist
vergleichbar mit der Extension einer Datei.
• Persistant Object Service
Der Zweck dieses Dienstes liegt darin, ein gemeinsames Interface für das Managen
persistenter Objekte zu schaffen. Zu Speicherung der Objekte können verschiedene
Formate gewählt werden (normale Datei, relationale DB, objektorientierte DB), für die
jedoch jeweils ein spezieller Anpassungscode geschrieben werden muß. Wichtig ist
bei dem Interface nur, daß ein Objekt die Einheit für die Speicherung darstellt, nicht
wie sonst üblich die Tabelle.
• Transaction Service
Durch diesen Dienst werden die sogenannten ACID-Charakteristiken sichergestellt,
die als Anforderungen bei einer Transaktion erfüllt werden müssen.
- Falls eine Transaktion nicht vollständig und korrekt beendet werden kann, muß
- der ursprüngliche Zustand wieder hergestellt werden. Dies nennt man „atomic“;
- nach Beendigung einer Transaktion muß der erzeugte Zustand „consistent“ sein;
- der Ablauf der Transaktion ist nach außen nicht sichtbar („isoliert“);
- die Änderungen, die durch eine Transaktion erzeugt wurden, müssen dauerhaft
- sein.
Eine Transaktion kann dabei auf zwei Arten beendet werden. „Commit“ schreibt den
durch die Transaktion herbeigeführten Zustand fest, wogegen „Roll-back“ den
Zustand vor Beginn der Transaktion wieder herstellt.
4.2.5
Facilities
In der Abbildung unter 4.2.4 sind neben den Services auch die Facilities aufgeführt.
Facilities sind Services, welche selbst Anwendungen darstellen. Ein
Dokumentationssystem kann z.B. ein „Facility“ sein. CORBA-Facilities gehören
damit zur Anwendungsebene, während die CORBA-Services der Systemebene
zugeordnet sind.
(/8/ S. 44)
25
4. CORBA
4.2.6
Mapping
Die IDL beschreibt das Interface der Klassen in einer von der Programmiersprache
unabhängigen Weise. Das hier entwickelte System wird aber in C++ bzw. JAVA
realisiert. Daher müssen die Klassen, Strukturen, Methoden usw. der IDL
entsprechend umgesetzt werden. Grundsätzlich gilt, daß die Namen unverändert
übernommen werden. Bei dieser Umsetzung (mapping) werden einige Klassen
erzeugt, die im weiteren näher erläutert werden sollen.
• Klassen der Server-Seite
Die Klasse ImplBase enthält die Basisklasse der aus der IDL erzeugten Methoden
(Skeletons). Diese Klasse wird vererbt an die Impl-Klasse, welche die einzige Klasse
ist, die vom Programmierer manipuliert wird. Dort werden die Methoden
plattformspezifisch definiert. In der Klasse Impl können auch weitere Attribute
eingeführt werden, die in der IDL noch nicht genannt sind.
• Klassen der Client-Seite
Auf der Seite des Client enthält die Klasse StubFor<KlassenName>.java die ClientStubs. Sie repräsentieren die Klassen im Client-Adressraum. Bei der Ausführung
werden daraus sogenannte Proxy-Objekte erzeugt, welche die eigentlichen Objekte im
Server-Adreßraum darstellen. Diese werden vom Client angesprochen und die Proxies
geben dann den Methodenaufruf an die eigentlichen Objekte im Server-Adreßraum
weiter.
Die Klassen <KlassenName>Helper.java enthalten Utility-Funktionen für die
entsprechende Klasse. So muß z.B., bevor ein CORBA-Objekt angesprochen werden
kann, eine Bind-Methode ausgeführt werden, welche die Verbindung zum Objekt
aufbaut.
Die Klassen vom Typ <KlassenName>Holder.java werden in bestimmten Fällen der
Parameterübergabe benötigt. JAVA kennt nur eine Übergabe per Referenz. CORBA
dagegen erweitert die Übergabemöglichkeiten mit den Angaben „in“, „inout“ und
„out“. Bei „out“ und „inout“ wird ein Holder-Objekt übergeben, welches den
Parameterwert als Datenfeld enthält. Dieses Datenfeld kann vom aufgerufenen Objekt
modifiziert werden.
26
4. CORBA
4.3
Alternativen zu CORBA
CORBA ist nicht die einzige Möglichkeit Daten zwischen verteilten Anwendungen
auszutauschen. Allerdings bietet CORBA, im Vergleich zu den folgenden Alternativen
die besten Möglichkeiten, Daten über eine objektorientierte Schnittstelle und
plattformneutral zu übermitteln.
4.3.1
Socket
Unter einem Socket versteht man einen Kanal, der dem Schreiben und Lesen von
Daten dient. Da eine Übertragung über Sockets sehr hardwarenah geschieht, ist diese
Technik für komplexe Datentypen nicht geeignet.
4.3.2
RPC
Der Remote-Procedure-Call stellt eine funktionsorientierte Schnittstelle dar, die aber
auf der Verwendung von Sockets beruht. Sie ist relativ einfach zu verwenden, da sie
wie CORBA objektorientiert aufgebaut ist. Leider ist sie nicht standardisiert und kann
daher nicht allgemein verwendet werden.
4.3.3
DCOM
Das Distributed-Component-Object-Model der Firma MicroSoft entspricht ebenfalls
einer objektorientierten Schnittstelle und ist bereits in Win95/98 und NT integriert.
Allerdings ist es außerhalb der MS-Architektur kaum zu finden.
4.3.4
RMI
JAVA bietet ein Remote-Method-Invocation ab der Version 1.1 des JDK an. Dies ist
der CORBA-Technik sehr ähnlich, bietet aber jetzt schon ein call-by-value an, was
erst in den kommenden Versionen von CORBA implementiert werden soll. RMI ist
allerdings ein JAVA-spezifisches Verfahren und daher zur Datenübertragung
zwischen Programmen verschiedener Sprachen nicht geeignet.
27
4. CORBA
4.4
Leistungsfähigkeit
Der Aufruf einer entfernten Methode über ein CORBA-Objekt dauert ca. 10ms,
wogegen der Aufruf einer lokalen Methode nur ca.10ns benötigt. Daraus ergibt sich
eine um den Faktor 1000 größere Latenzzeit. Diese Verzögerung ist größtenteils durch
das Netzwerk bedingt und kann nur unwesentlich beeinflußt werden. Durch ein
günstiges Design kann die Anzahl der Methodenaufrufe minimiert werden, wodurch
der Ablauf des Programmes optimiert werden kann. Es ist i.d.R. günstig, wenig
Methodenaufrufe zu starten und gleichzeitig viele Daten als Parameter zu übergeben.
4.4.1
Simulation der FCG
Bei einer Simulation der Forschungsgruppe Computergeometrie und Grafik am Institut
für Informatik und angewandte Mathematik der Universität Bern wurde die Latenzzeit
bei einem einfachen Methodenaufruf gemessen. Dabei wurde ein reiner Echo-Server
implementiert:
Dabei wurden folgende, nicht repräsentativen, Zeiten gemessen:
C++ORB
JAVA
-ORB
JAVA
Socket
HTTP/
CGI
FCGLAN
1
Cam
pus
10
Interne
t
160
4
13
172
2
11
165
600
/
/
Man kann erkennen, daß sich die im Vergleich zu C++ wesentlich geringere
Ausführungsgeschwindigkeit von JAVA kaum auswirkt. Die Verzögerungen entstehen
im wesentlichen durch das Internet. Die Ursachen können Router oder Firewalls sein.
Ebenfalls ist ersichtlich, daß die Verwendung von CGI-Skripten nicht empfohlen
werden kann (/13/ S.42 ).
28
4. CORBA
4.4.2
Simulation der Credit Suisse
/14/
- 100 Clients (Zürich) greifen acht Tage lang fortwährend auf den Server (New York)
über das CS eigene WAN zu
- Die Zeit umfaßt das Senden von Parametern, die Operation und das Zurücksenden
des Resultates
- Ca. 100 Operationen/Sekunde
- Server: SUN Ultra1, 64MB RAM
- ORB: Orbix von IONA
29
5. C++ und Fortran
5
C++ und Fortran
5.1
Allgemein
Auf die Programmiersprachen C/C++ sowie Fortran soll an dieser Stelle nicht weiter
eingegangen werden. Lediglich der Aufruf von Routinen, die in den beiden Sprachen
geschrieben wurden, soll hier erläutert werden.
Damit der Quellcode von Routinen, die in Fortran oder C++ programmiert wurden, auf
Objektebene kompatibel ist, müssen sämtliche Funktionen als extern „C“ deklariert
werden. Dies gilt sowohl für den Aufruf von C++-Routinen von Fortran aus, als auch in
umgekehrter Richtung (/9/ S. 1ff).
5.1.1 Main-Methode
Da diese Arbeit aus verschiedenen Programmmodulen zusammengesetzt ist, ist ein
weiterer Punkt zu beachten.Die Main-Methode, die in jedem Programm nur einmal
vorhanden sein darf, sollte im C++-Teil enthalten sein. Falls es notwendig sein sollte,
kann in der C++-Main-Methode auch nur der Aufruf einer Fortran-Routine stehen, die
anschließend das weitere Programmverhalten bestimmt. Das hat zur Folge, daß in den
Fortran-Modulen nur Subroutinen stehen dürfen, aber keinesfalls ein vollständiges
Programm.
5.1.2 Naming-Conventions
Im Gegensatz zu den C++-Compilern behandeln Fortran-Compiler Variablen- und
Funktionsnamen ohne case-sensitivity. Das heißt, daß keine Unterscheidung zwischen
Groß- und Kleinschreibung vorgenommen wird. Daher sollten alle Methoden, auf die
von Fortran zugegriffen wird ausschließlich mit Kleinbuchstaben benannt werden.
Alle Funktions- und Variablennamen, die von C++ in Fortran verwendet werden,
werden automatisch „downgeshifted“.
5.1.3 Subroutines
Beim Aufruf von Subroutinen, ist zusätzlich zu den sonstigen Naming-Conventions zu
beachten, daß neben der Kleinschreibung noch ein Underscore angehängt wird. Dieser
ist zu berücksichtigen, da ansonsten die Routine nicht gefunden wird.
Außerdem existiert die Einschränkung, daß Subroutines innerhalb von Modulen von
C++ nicht aufgerufen werden können (/10/).
30
5. C++ und Fortran
5.2
Datenübergabe
Die Datenübergabe zwischen C++ und Fortran kann, wie bei der CORBA-Schnittstelle
im Übrigen auch, nur durch „call-by-reference“ realisiert werden. Unter C++ existieren
dafür zwei verschiedene Möglichkeiten.
-
Übergabe der Adresse des Parameters mittels des Derefenzierungsoperators
Übergabe mit Referenzvariablen (übliche Methode)
Dabei ist zu beachten, daß Felder jeder Art von C++ grundsätzlich per Referenz
übergeben werden. Um ein Maximum an Kompatibilität zu erreichen, sollte von der
Übergabe komplizierter Strukturen abgesehen werden und nur Basisdatentypen
verwendet werden.
5.2.1 Strings
Bei der Übergabe von Strings ist zu beachten, daß sie in C++ und Fortran
unterschiedlich terminiert werden. Fortran definiert einen String durch dessen
Startadresse und seine Buchstabenanzahl. C++ terminiert Strings durch ein angehängtes
NULL.
Um dennoch korrekt Strings an Methoden oder Subroutines übergeben zu können,
wird am einfachsten eine Klasse oder Struktur definiert, die wie folgt aussehen kann:
structure fstring
{
long i;
char* s;
}
Wichtig ist in diesem Zusammenhang auch die Verwendung von Strings in Fortran,
die, im Gegensatz zu C++ oder JAVA, keine variable Länge besitzen können.
Dieser Unterschied macht es unmöglich, Strings auf herkömmliche Art von C++ nach
Fortran zu übergeben. Durch ein struct ist es möglich, logisch zusammenhängende
Variablen zu verknüpfen, und über einen gemeinsamen Namen anzusprechen. Im
Gegensatz zu einer echten Klasse kennt ein struct allerdings keine Methoden.
In diesem Fall übergibt man die Adresse einer Zeichenkette und ihre Länge. Aus
diesen Informationen kann die Zeichenkette wiederhergestellt werden.
5.2.2 Arrays
Die Verwaltung von mehrdimensionalen Feldern erfolgt nach unterschiedlichen
Konzepten. C++ speichert Arrays gemäß der „row-major-order“ Fortran aber nach der
„column-major-order“. Um die jeweils richtigen Elemente zu erhalten, muß also ein
Konvertierungsalgorithmus entworfen werden, der die Felder transponiert.
Erschwerend kommt hinzu, daß bei C++ der Zählindex bei „0“ beginnt und nicht wie
bei Fortran mit „1“. Zusätzlich verlangt Fortran bei dynamischen Feldern die „leading
dimension“, damit das Feld korrekt belegt werden kann.
Um Schwierigkeiten so weit wie möglich aus dem Weg zu gehen, sind alle Felder eindimesional übergeben worden, und auf Fortran-Seite unter Benutzung der Zeilen- und
Spaltenzahl neu angelegt worden.
31
5. C++ und Fortran
5.2.3 Andere Datentypen
Unter Berücksichtigung der oben genannten Restriktionen ist eine Verwendung der
Basisdatentypen wie int, long, double, float etc. ohne weitere Einschränkungen
möglich.
32
6. Client
6
Client
6.1
Anforderungen an den Client
6.1.1 Statisches System / Lasten
Für das statische System soll eine grafikunterstützte Eingabemöglichkeit gegeben sein.
Hierbei müssen Daten wie Knotenkoordinaten, Querschnittsangaben und
Materialwerte interaktiv eingegeben werden können. Dabei ist der stochastische
Charakter der Parameter ( insbesondere der Materialdaten ) zu berücksichtigen. Aus
diesen Eingaben sollen auf Serverseite automatisch die FEM-Eingangsdaten zur
Kovarianzanalyse generiert werden.
Für Windlasten sind die signifikanten Angaben ebenfalls grafikunterstützt einzulesen.
Eine Übertragungsmatrix zum Server soll automatisch erstellt werden.
Querschnittseingaben sind in einer zu erstellenden Datenbank zu speichern. Dabei ist
die Möglichkeit zu berücksichtigen, daß sowohl selbstdefinierte Profile, als auch
genormte Profilreihen Verwendung finden können. Der stochastische Charakter der
Abmessungen ist, ebenso wie bei den Materialdaten, zu beachten.
6.1.2 Benutzungsoberfläche
Insgesamt soll sich die Optik der Benutzungsoberfläche an den Standardprogrammen
orientieren. Durch die Verwendung von Icons wird die Steuerung des
Programmablaufs wesentlich vereinfacht und beschleunigt.
Zu den Standard-Icons, wie sie in jedem Windows-Programm Verwendung finden,
gehören (v.l.n.r.):
Beenden, Neu, Öffnen, Speichern, Drucken, Netzwerk, Hilfe
Zur Eingabe der Tragwerksdaten wurden selbst entworfene Icons eingefügt. Sie sind
ebenfalls selbsterklärend gestaltet (v.l.n.r.):
Knoteneingabe, Stabeingabe, Lasteingabe, Profileingabe, Materialeingabe,
Verteilungsanzeige, Wöhler-Kurven
Auf die Verwendung von Pull-Down-Menüs wurde verzichtet. Da das Programm als
Applet und als Applikation lauffähig sein soll, ist diese Technik nicht anwendbar.
Menüs können nur einem Objekt der Klasse java.awt.Frame zugewiesen werden, und
keinem Objekt java.applet.Applet.
Zusätzlich zu den Icons kann in der Zeichenfläche mit einem Klick mit der rechten
Maustaste im Zeichenbereich ein kontext-sensitives Pop-Up-Menu aufgerufen
werdem. In Abhängigkeit von dem darunter liegenden Objekt stehen verschiedene
Aktionsmöglichkeiten zur Auswahl.
33
6. Client
Damit die Verwendung des Programms nicht unnötig unübersichtlich wird, ist die
gesamte Oberfläche lediglich in vier Bereiche geteilt (s. Kap. 10.3).
•
•
•
•
MenüIcon-Bereich:
In diesem Bereich sind ständig die Icons dargestellt, mit denen zwischen den
verschiedenen Eingabemodi gewechselt werden kann.
Zeichen-Bereich:
Hier werden wahlweise das Tragwerk, Querschnitte, Wöhlerlinien oder
Verteilungen dargestellt. Bei der Darstellung des Tragwerkes kann zusätzlich
angegeben werden, ob Knotennummern, Stabnummern, Lasten oder
Randbedingungen angezeigt werden sollen.
Informations-Bereich:
Es werden schriftliche Informationen zu den Objekten angegeben, die mit der
Maus überfahren werden.
Eingabe-Bereich:
Im Eingabe-Bereich können Daten zu Knoten, Stäben, Materialien, Lasten oder
Wöhlerlinien eingegeben werden. Die Datenfelder zur Eingabe wechseln mit
einem Klick auf das entsprechende Icon.
Im Abschnitt „Benutzerhandbuch“ wird auf die Verwendung der Oberflächenelemente
und anderer Optionen genauer eingegangen.
6.1.3 Verteiltes System
Da es sich um ein verteilt arbeitendes System handelt, soll als Schnittstelle zu den
Servern das Standard-Kommunikationsmedium CORBA verwendet werden. Auf diese
Weise sollen die bisher getrennt arbeitenden Module zu einer logischen Einheit
zusammengefügt.
Der Client übernimmt in diesem Zusammenhang die Aufgaben der Dateneingabe,
Aufbereitung für den jeweiligen Serverprozeß und Darstellung der zurückgegebenen
Ergebnisse.
Es wurde die denkbar einfachste Möglichkeit einer Client-Server-Anwendung
gewählt. Dabei handelt es sich um die unter 4.1.1 beschriebene 2-Tier-Architektur,
wenn das Programm als Applikation gestartet wird. Führt man es als Applet aus, kann
man die Architektur auch als 3-Tier interpretieren, da die Anwendungslogik vom
Arbeitsplatz des Clients gelöst ist und von einem weiteren Server zur Verfügung
gestellt wird. Allerdings müßte dann noch eine Anbindung an ein Datenbank realisiert
werden, da das Speichern aus einem Applet heraus unmöglich ist. Am besten hierfür
geeignet ist eine Objektorientierte Datenbank wie z.B. Oracle8i.
34
6. Client
Symbolische Darstellung bei Verwendung des Clients als Applet aus dem Internet
Datenbank-Server
KVA-Server
Arbeitsplatz
mit Internetanschluß
und Browser
Applikationsserver
SVD-Server
weitere Server
Verwendung des Clients als Applikation innerhalb eines beliebigen Netzwerkes
SVD-Server
KVA-Server
weitere Server
Arbeitsplatz
35
6. Client
6.2
Entwurf
6.2.1 Einleitung
Der Entwurf eines Programmes ist die eigentliche Schwierigkeit bei der
Programmierung. Dabei werden die zu verwendenden Klassen mit ihren Attributen
sowie Methoden entwickelt. Zur Darstellung der Beziehung der Klassen untereinander
hat sich die Unified-Modeling-Language (UML) weitgehend durchgesetzt.
Die Entwicklung eines Modells für Software vor ihrer Umsetzung ist ebenso wichtig
wie der Bauplan für ein großes Gebäude. Ein gutes Modell ist für die Kommunikation
innerhalb eines Projektteams genauso bedeutend wie für das spätere Funktionieren des
Programms. Es gibt verschiedene Faktoren, die auf den Erfolg eines Projektes Einfluß
haben, aber der Einsatz eines eindeutigen Standards für die „modeling language“ ist
ein besonders wichtiger Punkt. Eine „modeling language“ muß daher folgendes
beinhalten:
•
•
•
Modellelemente
Notation
Richtlinien
Da in der heutigen Zeit Softwaresysteme unglaublich komplex geworden sind, ist die
Visualisierung durch Modellelemente extrem wichtig geworden. UML ist eine
ausgereifte Antwort auf diese Anforderungen und hat sich mittlerweile zu einem
Industriestandard entwickelt (/11/ S.2).
Alle Objektdiagramme, Klassen- oder Instanzendiagramme, sind entsprechend der
Version 1.1 dieser Notation entworfen (vgl. /12/).
6.2.2 Gliederung des Programms
Das vorliegende Client-Programm JARL kann in einem ersten Schritt grob in folgende
Klassen gegliedert werden:
java.applet.
Applet
Start
1
erzeugt
0..*
Programm
1
1
Module_ClientChoice
1
Module_Construction
1
Module_SVD
1
Module_KVA
1
Module_RES
Dabei sind unter den Modulen nicht eigenständige Programme zu verstehen, als
vielmehr Codesequenzen, die jeweils eine spezielle Aufgabe erfüllen.
36
6. Client
6.3
Klassen des Client
Im folgenden werden ausgewählte Klassen des Clients näher beschrieben. Dabei wird
allerdings nicht näher auf verwendete Algorithmen eingegangen, deren Funktion im
Quellcode sehr ausführlich kommentiert ist.
Hier alle Klassen aufzuführen und zu beschreiben ist ohnehin überflüssig, da sie mit
allen Attributen und Methoden in der HTML-Online-Dokumentation
zusammengestellt wurden. Dort sind alle Attribute und Methoden, deren Bedeutung
bzw. Parameterliste und Ergebniswerte aufgeführt.
In diesem Dokument werden ebenfalls die vorhandenen Beziehungen zu geerbten
Klassen und Interfaces in einer Baumstruktur sofort ersichtlich. Dieses OnlineDokument kann mit jedem Browser betrachtet werden. Als Startseite dient entweder
die Datei tree.html oder AllNames.html aus dem Verzeichnis \Client auf dem
beiliegenden Datenträger.
6.3.1 Start
Da das Programm JARL sowohl als Applet als auch als Applikation lauffähig sein
soll, kommt der Klasse Start eine zentrale Bedeutung zu. In Abhängigkeit der
Ausführungsform werden dort verschiedene Methoden aufgerufen, die wiederum eine
Instanz der Klasse Programm sowie die Oberfläche erstellen.
Wenn die Anwendung als Applet gestartet wird, wird zuerst der Konstruktor der
Klasse Start aufgerufen, danach die Methode init(), die wiederum ein ProgrammObjekt erzeugt.
Als Applikation gestartet, wir zunächst die main()-Methode gestartet. Dort wird dann
das Programm-Objekt instanziiert.
class notation: implementation-level details
Start
{ public,
author = S.Sü.,
status = tested }
programm
<<constructor>>
+Start( )
<<query>>
+init( )
+main( s:String[] )
+paint( g:Graphics )
:
Programm
:
void
:
:
:
void
void
void
Auf der vorangegangenen Seite ist die oben erwähnte Online-Hilfe zu dieser Klasse
beispielhaft angegeben. Zu beachten ist, daß in dem HTML-Dokument Links zu
entsprechenden Klassen vorhanden sind.
37
6. Client
Der Konstruktor der Klasse Start muß nicht überladen werden, da er keine besondere
Aufgabe erfüllt. Im Sinne einer „ordentlichen“ Programmierung sollte er aber immer
neu geschrieben werden.
6.3.2 Program
Wie unter 6.2.2 bereits dargestellt, ist das Programm in fünf Abschnitte unterteilt.
Diese bilden eine logische Einheit und können nicht getrennt voneinander ablaufen.
Diese Module (Klassen) sind als Attribute in der Klasse Program gekapselt.
Bei der interaktiven Eingabe von Daten kommt der Oberflächengestaltung eine
erhebliche Bedeutung zu. Um die Bedienung unabhängig von der Ausführungsform
des Programms (Applet oder Applikation) einheitlich zu gestalten, muß die
Vererbungsstruktur von Java ausgenutzt werden. Da Applet, genauso wie Frame, die
Klasse Container erbt, kann auf diese Weise elegant ein Oberflächenattribut
geschaffen werden, welches das Frontend beinhaltet.
class notation: implementation-level details
Program
{public,
author = S.Sü.,
status = tested }
-isAnApplet
-module_clientChoice
-module_construction
-module_svd
-module_kva
-module_RES
-container
<<constructor>>
Programm( container:Container )
<<query>>
-createAttribs( container:Container )
-makeFunctionality( )
-makeOutfit( )
<<eventhandling>>
+windowClosing( w_evt:WindowEvent)
<<set & get>>
+getIsAnApplet( )
+getModule_clientChoice( )
+getModule_construction( )
+getModule_kva( )
+getModule_svd( )
:
:
:
:
:
:
:
boolean
Module_ClientChoice
Module_Construction
Module_SVD
Module_KVA
Module_RES
Container {size=1000*650, frozen }
:
:
:
void
void
void
:
void
:
:
:
:
:
boolean
Module_ClientChoice
Module_Construction
Module_KVA
Module_SVD
Aus der Klassennotation ist ersichtlich, daß der Container, der das Frontend enthält,
für die gesamte Laufzeit des Programms seine Größe nicht ändern darf. Das liegt
wiederum an der Tatsache, daß der Client als Applet und als Applikation laufen kann.
Bei einem Applet wird die Größe des sichtbaren Bereiches durch das HTMLDokument definiert, worauf der Nutzer keinen Einfluß hat. Damit ein einheitliches
Erscheinungsbild gewährleistet ist, wird die Größe des Frames für die Applikation auf
dieselben Abmessungen festgelegt.
38
6. Client
6.3.3 Module_ClientChoice
Das Objekt der Klasse Module_ClientChoice stellt lediglich eine Auswahlmöglichkeit
für den Benutzer dar. Die optische Repräsentation dieses Objektes kann zu jedem
beliebigen Zeitpunkt angezeigt werden, um einen anderen Programmabschnitt zu
starten. Es macht allerdings nur Sinn einen Server zu starten, wenn die Ergebnisse aus
den vorangegangenen erforderlichen Berechnungen vorliegen.
6.3.4 Module_Construction
Das Module_Construction enthält alle für ein Tragwerk wesentlichen Angaben zu
Knoten, Stäben und deren Eigenschaften. Die Attribute umfassen aber nicht nur die
Daten eines einzelnen, speziellen Systems, sondern auch Datenbanken mit allen
verwendeten, aber auch nicht verwendeten, Wöhlerlinien, Profilen und Materialien.
Aus diesen Datenbanken können die entsprechende Objekte für das aktuelle Tragwerk
benutzt werden. Es ist allerdings auch möglich, neu eingegebene Elemente zu
verwenden, die automatisch in der entsprechenden Datenbank gespeichert werden.
1
Construction
1
1
WoehlerData
Base
CrossSection
DataBase
besteht aus
Module_Construction
1
1
MaterialData
Base
1
Programm
1
1
FrontEnd_
Construction
java.awt.
Container
39
6. Client
Das Module besitzt, wie alle anderen Module auch, eine optische Darstellung. Dort
kann das Tragwerksprojekt über eine Menüleiste gesteuert werden. Näheres ist dem
Benutzerhandbuch zu entnehmen.
Die interaktive Oberfläche zur Eingabe und Visualisierung der Eingabedaten sind
hierbei, neben dem Tragsystem, das komplexeste Objekt des gesamten Projekts.
•
FrontEnd_Construction
In dem Objekt der Klasse FrontEnd_Construction sind alle Oberflächenelemente
zur vollständigen Eingabe eines Tragwerkes enthalten. Die oben bereits erwähnte
Aufteilung der Arbeitsoberfläche in vier logisch getrennte Module wird hier durch
die Attribute deutlich:
Class notation: implementation-level details
FrontEnd_Construction
{ public,
author: S.Sü.
status: tested }
- drawArea
- statusArea
- drawArea
- inputArea
- nodesInputArea
- beamsInputArea
- loadInputArea
- materialInputArea
- crossSectionInputArea
- verteilungInputArea
- woehlerInputArea
- drawAreaPropertyInputArea
- layout
- all
- module_construction
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
DrawArea
StatusArea
DrawArea
InputArea
NodesInputArea
BeamsInputArea
LoadInputArea
MaterialInputArea
CrossSectioninputArea
VerteilungInputArea
WoehlerInputArea
DrawAreaPropertyInputArea
BorderLayout
Container
Module_Construction
<<constructor>>
+ FrontEnd_Construction( module_construction: ModuleConstruction
all
: Container )
<<query>>
- createAttribs( )
- makeFunctionality( )
- makeOutfit( )
+ repaint( )
+ paint( g : Graphics )
+ mousePressed( m_evt : MouseEvent )
+ mouseClicked( m_evt : MouseEvent )
+ mouseReleased( m_evt : MouseEvent )
+ mouseEntered( m_evt : MouseEvent )
+ mouseExited( m_evt : MouseEvent )
:
:
:
:
:
:
:
:
:
:
void
void
void
void
void
void
void
void
void
void
<<set-methoden>>
+ setContainer( c : Container )
+ setMenuArea( ma : MenuArea )
+ setDrawArea( da : DrawArea )
+ setInputArea( ia : InputArea )
+ setStatusArea( sa : StatusArea )
+ setCrossSectionInputArea( csia : CrossSectionInputArea )
:
:
:
:
:
:
void
void
void
void
void
void
<<get-methoden>>
+ getAll( )
+ getMenuArea( )
+ getDrawArea( )
+ getInputArea( )
+ getNodesInputArea( )
+ getBeamsInputArea( )
+ getLoadInputArea( )
+ getWoehlerInputArea( )
+ getStatusArea( )
+ getDrawAreaPropertyInputArea( )
+ getCrossSectionInputArea( )
+ getMaterialinputArea( )
+ getVerteilungInputArea( )
+ getModule_construction( )
:
:
:
:
:
:
:
:
:
:
:
:
:
:
Container
MenuArea
DrawArea
InputArea
NodesInputArea
BeamsInputArea
LoadInputArea
WoehlerInputArea
StatusArea
DrawAreaPropertyInputArea
CrossSectionInputArea
MaterialInputArea
VerteilungInputArea
Module_Construction
40
6. Client
Innerhalb des FrontEnd_Construction-Objektes kommt der Klasse DrawArea eine
zentrale Bedeutung zu. Sie stellt den Zeichnungsbereich dar. Dort ist eine
besondere Interaktion mit dem Nutzer erforderlich, um das Arbeiten so einfach wie
möglich zu gestalten. Alle Events innerhalb der Zeichnungsfläche müssen dort
bearbeitet werden( verbinden von Knoten mit Stäben, markieren von Knoten oder
Stäben, PopUp-Menüs ). Daher sind die Routinen zum Eventhandling
entsprechend umfangreich. Durch das neue Event-Modell im JDK 1.1 ist eine
Aufteilung nach Ereignissen jedoch problemlos möglich und relativ übersichtlich.
Für jeden Ereignistyp existiert eine eigene Methode zum abfangen der
Benutzereingabe.
•
Construction
Statische Systeme bestehen aus einer unterschiedlichen Anzahl von Knoten und
Stäben. Knoten können Randbedingungen bezüglich der Freiheitsgrade aufweisen;
Stäbe können aus verschiedenen Materialien bestehen und verschiedene
Querschnitte aufweisen. Bauteile können einem Kerbfall zugeordnet werden,
Lasten können auf Bauteile wirken.
Aus dieser sehr kurze Beschreibung von Tragwerken, kann bereits ein einfaches
Klassenmodell entwickelt werden:
Construction
NodesDataBase
BeamsDataBase
Dabei enthalten die Datenbanken die zum System gehörenden Knoten und Stäbe
mit allen ihnen zugewiesenen Attributen.
•
Datenbanken
Da das Programm in erster Linie entworfen wurde, um als Applikation abzulaufen,
sind die Datenbanken integraler Bestandteil der Anwendung. Bei einer
Verwendung als Applet, welches wie bereits erwähnt durch zahlreiche
Einschränkungen begrenzt ist, muß ein Datenbankserver implementiert werden.
Als dynamische Daten liegen zum einen die Tragwerksdaten vor, zum anderen die
Daten für Profile, Materialien und Wöhlerlinien, womit der Benutzer Tragwerke
schnell und unkompliziert eingeben kann.
Um Daten dynamisch speichern zu können, d.h. die Datenbank wächst bei Bedarf,
kann eine einfach oder doppelt verkettete Liste benutzt werden. Die Einführung
besonderer Klassen hierfür ist unter JAVA allerdings unnötig, da das Paket
java.util verschiedene Versionen für solche Ketten zur Verfügung stellt. Die
Klasse Vektor ist eine verkettete Liste, die Methoden besitzt, mit der ein
Programmierer beliebige Objekte hinzufügen oder entfernen kann. Eine
Alternative zur Klasse Vektor ist Hashtable, in der Objekte über einen Schlüssel
eingefügt und ausgelesen werden.
41
6. Client
Die drei Datenbanken werden bei jeder Eingabe aktualisiert und bei Beendigung des
Programmes komplett als Objekt in dem File databases.wcm gespeichert. Die
Extension .wcm bedeutet dabei: woehler, cross-section, material
Hier repräsentativ die Datenbank der Materialien:
class notation: implementation-level details
MaterialDataBase
{ public,
author: S.Sü.
status: tested }
- module_construction
- dataBase
:
:
Module_Construction
Vector
<<constructor>>
+ MaterialDataBase( module_construction : Module_Construction )
<<query>>
+ addMaterial( material : Material )
+ delMaterial( material : Material )
+ getMaterial( name : String )
+ getMaterial( pos : int )
+ materialExist( material : Material )
:
:
:
:
:
void
void
Material
Material
boolean
<<set & get>>
+ setDateBase( dataBase : Vector )
+ getDataBase( )
:
:
void
Vector
Alle anderen Datenbanken sind analog aufgebaut.
6.3.5 Module_SVD
Im Rahmen dieser Diplomarbeit wurde das Programm zur Singulärwertzerlegung nich
vollständig auf den Serverbetrieb umgestellt. Provisorisch wurde das Modul zur
Herstellung einer Verbindung mit dem SVD-Server so implementiert, daß eine spätere
Erweiterung ohne Schwierigkeiten erfolgen kann.
Die Klasse Module_SVD stellt Methoden bereit, durch die mit dem Server zur
Singulärwertzerlegung kommuniziert werden kann. Im derzeitigen Stadium des
Programms werden nur Matrizen vom Server zum Client übertragen (vgl. Kap. 7.1).
Hierzu wird aus einem String, der in der Datei reference.svd gespeichert ist und
eine Referenz auf ein entferntes Objekt darstellt, mit der CORBA-Methode
string_to_object( <string> ) der Klasse ORB ein Objekt der Klasse KVA_Corject
erstellt. Über die Referenz auf dieses Objekt können Methoden verwendet werden, die
unter anderem der Datenübertragung dienen.
Aus oben genannten Gründen, liest der Server derzeit nur eine Ergebnisdatei aus, und
überträgt diese Daten an den Client, der sie wiederum für die weitere Verwendung
beim KVA-Server aufbereitet. Wenn die Aufrufe der entsprechenden FortranSubroutines angepaßt wurden, ist das Einbinden in die verteilte Architektur sehr
einfach, da die entsprechende Schnittstelle bereits vorhanden ist.
42
6. Client
6.3.6 Module_KVA
Wie die Klasse Module_SVD auch, dient Module_KVA der Verbindungsaufnahme
mit einem Server. Allerdings werden hier sämtliche Tragwerksdaten und einige
zusätzliche Informationen (Windlasten, Dämpfung etc.) benötigt. Durch geeignete
Methoden werden diese Daten an den Server übertragen, der dann die Berechnung
ausführt. Weitere Informationen zu den Servern werden in Kapitel 8 gegeben.
6.3.7 Module_RES
Die Klasse Module_RES stellt lediglich Funktionalitäten bereit, mit denen die
gewonnenen Ergebnisse grafisch aufbereitet und angezeigt werden können.
43
7. CORBA-Schnittstelle
7.
CORBA-Schnittstelle
Wie bereits im 4. Kapitel ausführlich beschrieben, dient die IDL der Definition der
Schnittstelle zwischen dem Client und dem Server. Dabei können mit interfaces und
structs klassenähnliche Strukturen gebildet werden.
Ein struct dient der Zusammenfassung verschiedener, logisch zusammenhängender
Variablen unterschiedlichen Datentyps zu einer Einheit. Diese Daten können
anschließend mit einem gemeinsamen Namen angesprochen werden.
Ein Interface definiert die Schnittstellenoperationen einschließlich der Parameter und
der Rückgabewerte. Unterschiedliche Interfaces können zu einem Modul
zusammengefaßt werden, was in diesem Projekt aber nicht benötigt wurde.
Methodenaufrufe können dabei auf die zwei Arten blocked und unblocked geschehen.
Bei der ersten Methode wartet der Client mit der Ausführung weiterer
Programmschritte, bis der Server die Methode abgearbeitet hat. Dies bedeutet, daß der
Client unter Umständen eine relativ lange Zeit keine Antwort auf Benutzereingaben
geben kann. Um dem Verdacht eines Programmabsturzes entgegenzutreten, ist es
sinnvoll, den Client, und entsprechend natürlich auch den Server, multi-thread-fähig
zu entwerfen. Über einen Fortschrittsbalken kann der zeitliche Ablauf der Aktion
visualisiert werden. Unter JAVA würde dies mit den Klassen aus dem Paket
java.lang.* keine Schwierigkeiten bereiten. Da aber die Fortran-Module nur unter
erheblichen Arbeitsaufwand auf diese Eigenschaft umgeschrieben werden können,
zumal Fortran kein multithreading unterstützt, wurde darauf verzichtet.
Bei der unblocked-Methode arbeitet der Client nach dem Aufruf der entfernten
Methode den Code weiter ab. Das hat zur Konsequenz, daß in regelmäßigen
Abständen überprüft werden muß, ob die Ergebnisse des Servers vorliegen. Eine
weitere Lösungsmöglichkeit ist, daß der Client ein CORBA-Objekt erzeugt, über
welches der Server dann Methoden auf Client-Seite aufrufen kann, wenn er die
Berechnung beendet hat. Bei dieser Technik ist keine eindeutige Trennung in Client
und Server möglich, da beide Programme Dienste bereitstellen bzw. anfordern.
Im vorliegenden Fall werden die Methoden des Servers blocked aufgerufen, wobei der
Client eine entsprechend lange Wartezeit hat, bis der Server antwortet.
Da entfernte Aufrufe besonders langwierig sind, stellt eine Verwendung von wenigen
Methoden mit vielen Parametern eine Optimierung dar. Dies wurde besonders bei der
Übertragung der Matrizen beachtet, die in einem einzigen Feld als Parameter
übergeben werden. Hinsichtlich der Sicherheit und Stabilität der Datenübertragung
wird in Kapitel 9 näher darauf eingegangen.
44
7. CORBA-Schnittstelle
7.1
SVD
7.1.1 Structs
Da im Falle des Servers zur Singulärwertzerlegung bereits bestehende Matrizen aus
einer Binär-Datei gelesen werden, und diese Daten sofort an den Client gesandt
werden, ist die Schnittstelle zwischen Client und Server sehr einfach gestaltet. Die
Fortran-Routinen werden dabei nicht aufgerufen.
Aus diesem Grund existiert nur ein struct zur Übertragung der vollständigen Matrix:
•
7.1.2
Matrix_SVD_Corject:
Rows, columns, 1-D-Feld mit reellwertigen Zahlen
Interface
Da, wie oben erwähnt, das Fortran-Programm zur Singulärwertzerlegung nicht
vollständig auf den Betrieb als Server umgestellt ist, sind hier nur drei Methoden
erforderlich um die Ergebnismatrizen A, B und C zu übertragen.
Gemäß Namenskonvention werden sie getMatrix_A() usw. genannt. Diese Methoden
haben als Rückgabewert ein CORBA-Objekt vom Typ SVD_Matrix_Corject, in dem
ebenfalls Angaben über Spalten und Zeilen gekapselt sind.
7.2
KVA
7.2.1 Structs
Alle logisch zusammenhängenden Datenstrukturen, die für die Kovarianzanalyse von
Bedeutung sind, werden in den klassenähnlichen structs zusammengefaßt. Für die
Kovarianzanalyse sind die Tragwerksdaten und einige Zusatzinformationen zur
Berechnung unverzichtbar. Um deutlich zu machen, daß es sich dabei um CORBAStrukturen handelt, wurde eine einheitliche Nomenklatur der Form
Name_KVA_Corject eingeführt. Dadurch wird eine Verwechslung mit Klassen des
Client verhindert.
Folgende Strukturen wurden daher zur Übertragung der Systemeigenschaften
eingeführt:
•
Material_KVA_Corject:
Nummer, E-Modul, G-Modul, Wichte
•
CrossSection_KVA_Corject:
Nummer, h, b, s, t, r, a, aq, iy
•
Beam_KVA_Corject:
Nummer, LKnotenNr, RKnotenNr, MaterialNr, ProfilNr
•
Node_KVA_Corject:
45
7. CORBA-Schnittstelle
•
•
Nummer, x-Koordinate, y-Koordinate, u, v, phi (Freiheitsgrade )
H_KVA_Corject:
iVon, iBis, incr, offset
Matrix_KVA_Corject:
Rows, columns, 1-D-Feld mit reellwertigen Zahlen (zum Übertragen der
Ergebnissmatrizen lambda und v)
Es wurde bewußt auf eine objektorientierte Modellierung des Gesamttragwerkes
verzichtet, da die Daten auf Client-Seite bereits strukturiert vorliegen. Nebenbei
können die relevanten Informationen direkt übergeben werden, wodurch unnötige
Methodenaufrufe entfallen und die Performance gesteigert wird(vgl. 4.4).
Eine Abbildung des gesamten Tragwerkes in CORBA-Objekten ist zwar möglich und
auch sinnvoll, wenn es um die Darstellung bzw. Speicherung in einer Datenbank geht.
Bei einer interaktiven Benutzungsoberfläche, wie sie hier vorliegt, ist diese Technik
allerdings erheblich zu langsam, da bei jeder Benutzereingabe (d.h. auch bei einer
Mausbewegung) Daten vom Tragwerk angefordert werden. Außerdem sollte das
Tragwerksmodell auf Client-Seite gebildet werden, da kein Datenbankserver existiert,
auf den alle anderen Server zugreifen können, um Informationen zu erlangen.
7.2.2 Interface
Als Interface zur Übertragung der Strukturen wurde ein Interface KVA_Corject
gebildet, das die notwendigen Methoden zur Datenübertragung zur Verfügung stellt.
Dabei wurde die bei objektorientierten Programmen übliche Namengebung set und get
verwendet, um Daten zu schicken und zu empfangen. Als Beispiele hierfür gelten:
•
•
•
•
setNode(Node_KVA_Corject)
setMatrix_A(Matrix_KVA_Corject)
getLambda()
getV()
Als Methode zum Starten der eigentlichen Berechnungsroutinen unter Fortran dient
serverStartCalculation(). In ihr wird die Fortran-Subroutine KVA aufgerufen, wobei
alle Parameter, die zur Kovarianzanalyse erforderlich sind, in einem einzigen Schritt
übergeben werden.
46
8. Server
8.
SERVER
Ein Server ist, wie in Kapitel 4.1 beschrieben, ein Programm, welches Dienste für
andere Programme bereitstellt. Es stehen in diesem Fall mehrere Server zur
Verfügung, wobei jeder Teilrechnungen für die Lebensdaueroptimierung durchführt.
Jeder Server besteht hierbei aus einem C++- und einem Fortran-Teil. Die C++-Sequenz
erzeugt das jeweilige CORBA-Objekt, wandelt es in einen Referenz-String und stellt
diesen dem Client zur Verfügung. Dies wird bei einer Applikation gewährleistet,
indem der String in einer Datei gespeichert wird, die vom Benutzer in das
Programmverzeichnis der Client-Anwendung kopiert werden muß. Soll der Client als
Applet gestartet werden, ist der String in ein entsprechendes HTML-Dokument zu
schreiben, aus dem der Client ihn als Parameter auslesen kann (vgl. Kap. 9.3).
Nachdem dieser String auf Client-Seite wieder in ein CORBA-Objekt überführt
wurde, kann der Client alle Schnittstellenmethoden des entfernten Objektes aufrufen
und die notwendigen Daten übertragen. Anschließend wird die Fortran-Subroutine
aufgerufen, welche die eigentliche Aktion ausführt. Ergebnisse aus diesen
Berechnungen werden in den Attributen der Serverobjekte gespeichert bis der Client
sie anfordert.
8.1
SVD-Server
Die Fortran-Routinen zur Singulärwertzerlegung sind bisher nicht vollständig an den
Betrieb als Server angepaßt worden. Da einige Schnittstellenmethoden bereits
implementiert sind, ist dies allerdings ohne großen Aufwand möglich. Es ist hierzu nur
erforderlich, daß Funktionen zur Übertragung erforderlicher Daten und entsprechende
Attribute zur Zwischenspeicherung im CORBA-Objekt ergänzt werden.
8.1.1 CORBA-Objekt
Das Schnittstellenobjekt, welches auf Client- und auf Server-Seite in Abhängigkeit der
verwendeten Sprache implementiert werden muß, hat einen sehr einfachen Aufbau. Da
nur Daten vom Server zum Client gesandt werden, reichen drei get-Methoden, um die
Matrizen A, B und C zu übergeben.
SVD_Corject_Impl
{ public,
author: S.Sü.
status: tested }
+ getMatrix_A( )
+ getMatrix_B( )
+ getMatrix_C( )
:
:
:
Matrix_SVD_Corject
Matrix_SVD_Corject
Matrix_SVD_Corject
47
8. Server
8.2
KVA-Server
Der Server zur Kovarianzanalyse ist vollständig auf Serverbetrieb umgestellt worden.
Er führt seine Berechnung auf Grundlage der übertragenen Tragwerksdaten und der
bereitgestellten Zusatzinformationen (Wind, Dämpfung etc.) aus.
Diese Daten werden jetzt nicht mehr aus einer umständlich zu editierenden ASCIIDatei gelesen, sondern vom Client in aufbereiteter Form zu Verfügung gestellt.
Dadurch ist eine erhebliche Fehlerquelle beseitigt.
8.2.1 CORBA-Objekt
Da beim Aufruf der Fortran-Subroutine alle erforderlichen Parameter in der
Parameterliste enthalten sein müssen, sind entsprechende Felder und Variablen zur
Speicherung der Daten bereitzustellen.
Das Objekt hat folgendes Aussehen:
class notation: implementation-level details
KVA_Corject_Impl
{ public,
author : S.Sü.
status : tested }
+ server
+v
+ lambda
+ matrix_A
+ matrix_B
+ matrix_C
+ matrix_Wind
+ nodeAmount
+ beamAmount
+ materialAmount
+ crossSectionAmount
+ alpha
+ beta
:
:
:
:
:
:
:
:
:
:
:
:
:
KVA_SERVER
Matrix_KVA_Corject
Matrix_KVA_Corject
Matrix_KVA_Corject
Matrix_KVA_Corject
Matrix_KVA_Corject
Matrix_KVA_Corject
int
int
int
int
double
double
<<constructor>>
+ KVA_Corject_Impl( server : KVA_SERVER )
<<query>>
+ setConstructionData( nodeAmount
beamAmount
materialAmount
crossSectionAmount
+ setNode(
node
+ setBeam(
beam
+ setMaterial(
material
+ setCrossSection(
crossSection
+ setDamp(
alpha
beta
+ setMatrix_A( matrix_A
+ setMatrix_B( matrix_B
+ setMatrix_C( matrix_C
+ setMatrix_Wind( matrix_Wind
+ serverStartCalculation( )
+ getLambda( )
+ getV( )
: short,
: short,
: short,
: short )
: Node_KVA_Corject )
: Beam_KVA_Corject )
: Material_KVA_Corject )
: CrossSection_KVA_Corject )
: double
: double )
: Matrix_KVA_Corject )
: Matrix_KVA_Corject )
: Matrix_KVA_Corject )
: Matrix_KVA_Corject )
: void
: void
: void
: void
: void
: void
: void
: void
: void
: void
: void
: Matrix_KVA_Corject
: Matrix_KVA_Corject
48
8. Server
Mit diesen hier definierten Schnittstellenfunktionen ist es möglich, alle Daten zu
übertragen, in den Attributen zu speichern und dem Fortran-Programm zu übergeben.
Der Aufruf der eigentlichen Berechnungsroutine erfolgt in der Methode
serverStartCalculation(). An dessen Anschluß erlangt der Client wieder die
Kontrolle über den Ablauf der Handlung und kann die Ergebnismatrizen anfordern.
Danach ist es möglich, die Ergebnisse visuell darzustellen.
Nachdem der Server die Berechnung abgeschlossen hat, kann der Client, unter
Benutzung der dafür vorgesehenen zwei Methoden, die Ergebnisfelder anfordern.
Diese Matrizen lambda und v enthalten stochastische Parameter. Die Matrizen v für
die Verschiebungen der Knoten und lambda für die Stabendschnittgrößen enthalten für
jeden Knoten bzw. jedes Stabende die Parameter µ, λ0, λ1, λ2 und λ4.
49
9. Probleme & Lösungen
9.
Probleme & Lösungswege
9.1
Lasten
Die Fortran-Routinen zur Singulärwertzerlegung sind bis zur Fertigstellung dieser
Arbeit noch nicht auf den Betrieb als Server angepaßt worden. Daher ist die Eingabe
von dynamischen Lastprozessen noch nicht erforderlich. Um eine spätere Erweiterung
zu erleichtern, sind entsprechende Schnittstellen bereits implementiert.
Derzeit ist nur die Eingabe von Streckenlasten auf Stäbe implementiert. Um beliebige
Lasten verarbeiten zu können, muß das derzeitige Klassenmodell entsprechend
erweitert werden. Eine Möglichkeit ist die folgende:
Last
EinzelLast
StabEinzelLast
StreckenLast
KnotenEinzelLast
Beim Entwurf der Klassen ist in jedem Fall zu berücksichtigen, daß Lasten
verschiedene Eigenschaften haben können:
•
•
statisch / dynamisch
stochastisch / deterministisch
Durch Kombinationen ergeben sich folgende Möglichkeiten
•
•
•
•
statisch – stochastisch
statisch – deterministisch
dynamisch – deterministisch
dynamisch – stochastisch
Die letzte Kombination ist die in diesem Projekt betrachtete.
50
9. Probleme & Lösungen
9.2
Singulärwertzerlegung
Wie bereits mehrfach erwähnt, sind die Fortran-Routinen zur Singulärwertzerlegung
nicht auf den Betrieb als Server umgeschrieben. Da bereits eine Schnittstelle
implementiert wurde, ist dies allerdings ohne großen Aufwand möglich. Es müssen
nur Methoden bereitgestellt werden, mit denen die Lastenprozeßdaten dem Server zur
Verfügung gestellt werden. Der Aufbau des CORBA-Objektes und Aufruf der
Subroutinen hat analog zur KVA zu erfolgen.
9.3
Server-Adresse
Ein Problem im Zusammenhang mit der Verwendung als Applet, ist die Bereitstellung
der Information über die Adresse des Serverobjekts. Was bei der Applikation sehr
einfach ist, nämlich das Auslesen einer Datei, die einem String enthält, ist bei einem
Applet durch das Sand-Box-Konzept nicht zu realisieren. Das HTML-Dokument,
durch welches das Applet gestartet wird, muß diese string-Information bereits als
Parameter enthalten, welche von dem Applet zur Laufzeit ausgelesen werden können.
Anschließend besteht zwischen der Applikation und dem Applet kein Unterschied,
was den Aufruf des entfernten Objekts betrifft.
Das HTML-Dokument muß von einem Applikationsserver bereitgestellt werden, der
Zugriff auf die Server zur Berechnung und gegebenenfalls auf den Server zur
Speicherung besitzt. Dieser Applikationsserver liest die reference.*-Dateien und
schreibt den Inhalt in eine von ihm zu erstellende HTML-Datei. Diese kann folgendes
Aussehen haben:
<HTML>
<HEAD>
<TITLE> JARL </TITLE>
</HEAD>
<BODY>
<APPLET code=Start width=1000 height=610></APPLET>
<PARAM name=KVA value="REFERENCE-STRING DES KVASERVERS">
<PARAM name=SVD value="REFERENCE-STRING DES SVDSERVERS">
<PARAM name=DB value="REFERENCE-STRING DES DATENBANKSERVERS">
</BODY>
</HTML>
Über die Namen können die Werte der Strings eindeutig aus der HTML-Datei gelesen
werden. Diese Technik steht nicht im Widerspruch zum Sicherheitsgedanken von
JAVA, da die Strings nicht lokal gelesen werden, sondern von der URL des HTMLDokuments stammen.
51
9. Probleme & Lösungen
9.4
Verbindungsabbruch
Das unkontrollierte Zusammenbrechen der Datenübertragung ist ein Problem, welches
im Internet heutzutage leider immer noch zu häufig auftritt und auf das der Anwender
keinen Einfluß hat. Dies liegt an der ungenügenden Bandbreite der Provider, der
Überlastung eines Routers an einem Knotenpunkt oder einer schlechten
Telefonleitung.
Um den vollständigen Verlust der Daten zu vermeiden, ist es sinnvoll, Daten
paketweise zu zerlegen. Bei Matrizen kann dies am leichtesten erreicht werden, wenn
sie zeilen- oder spaltenweise übertragen werden. Bricht die Leitung zusammen,
können nach einer erneuten Verbindungsaufnahme die fehlenden Daten angefordert
werden. Zu diesem Zweck ist es erforderlich weitere Schnittstellenmethoden
einzuführen, die eine Matrix zerlegen können, und eine geforderte Zeile/Spalte als
Rückgabewert haben.
9.5
Datenmenge
In engem Zusammenhang zur Datenmenge steht auch das Problem der Zeit, die für die
Übertragung der Daten notwendig ist. In einem Lokal Area Network (LAN) ist die
Größe der zu übermittelnden Matrizen weniger wichtig, da die Übertragungsrate
ausreichend ist, um Zeitprobleme zu vermeiden. Sollen die Daten aber über das
Internet verschickt werden, ist selbst bei ISDN mit Kanalbündelung und den dadurch
erreichbaren 128kB/s schnell der vertretbare Zeitaufwand überschritten. Eine verteilte
Anwendung ist unter solchen Bedingungen nur sinnvoll, wenn die Rechendauer der
Server die Zeit zur Datenübertragung wieder gewinnt.
Wenn die Datenmenge mehrere MegaByte oder sogar GigaByte beträgt, sind andere
Wege kostengünstiger und schneller. Eine Möglichkeit besteht darin, die Daten auf
einen Massenspeicher (Bandlaufwerk, ZIP, CD o.ä. ) zu speichern und an den
Betreiber der Server-Rechner zu schicken. Eine entsprechende Leistungsfähigkeit der
Server wird dabei natürlich vorausgesetzt, damit dieses Vorgehen noch wirtschaftlich
ist.
Mit neuen Techniken in der Datenübertragung ( ADSL ) und sinkenden Kosten für die
Leitungsnutzung, werden verteilte Anwendungen in Zukunft eine immer bedeutendere
Rolle spielen.
9.6
Multithreading
Da das Programm bislang so entworfen wurde, daß der Client während der
Berechnungen durch den Server keine eigene Aufgaben durchführen kann, kann bei
dem Nutzer schnell der Eindruck entstehen, das Programm sei abgestürzt.
Ein Lösungsweg besteht darin, den Server und den Client multithreading-fähig zu
entwerfen. Unter JAVA ist das kein Problem, da bereits Klassen und Methoden
bereitgestellt werden, die diese Technik unterstützen. Unter C++ ist das aber nur unter
relativ großem Aufwand zu bewerkstelligen und Fortran unterstützt Threads überhaupt
nicht. Es müßte der Fortschritt in der Berechnung protokolliert werden und in Relation
zur Gesamtzeit gesetzt werden, um den Verlauf der Berechnung prozentual
darzustellen.
52
9. Probleme & Lösungen
9.7
Applet
Um die Ladezeit bei einem Applet zu verringern, ist es möglich die erforderlichen
Ressourcen in einer gepackten Datei zu speichern. SUNTM hat dafür das JAR-Format
entwickelt. Dieses Format basiert auf der ZIP-Technik, enthält aber weitere
Informationen zu den enthaltenen Dateien in einer ASCII-Datei mit der Bezeichnung
„MANIFEST.MF“.
Durch diese Technik lassen sich die zu übertragenden Dateien um mehr als 50%
komprimieren, was eine erhebliche Geschwindigkeitssteigerung bedeutet. Bei diesem
Projekt konnte die ursprüngliche Datenmenge von 436kB auf 152kB reduziert werden,
was eine Reduktion auf 35% entspricht.
53
10. Benutzerhandbuch
10. Benutzerhandbuch
10.1 Systemvoraussetzungen
10.1.1 Client
Grundsätzlich läuft ein JAVA-Programm nur auf einem mindestens 32Bit-System.
Daher fallen DOS, Win3.11 oder ähnliche, veraltete Betriebssysteme als Grundlage
für diese Anwendung aus.
Ansonsten läuft der Client auf jeder Maschine, für die eine JVM oder ein JAVA 1.1fähiger Browser angeboten wird. SUNTM bietet im Augenblick das JDK, welches die
JVM beinhaltet, für Win95/98/NT und Solaris (SPARC und Intel x86) an. Es
existieren allerdings noch zahlreiche JVM von Drittanbietern z.B. für Linux, MacOS,
OS/2. Zur Installation der JVM sind unbedingt die entsprechenden Anweisungen der
Firma SUNTM zu beachten.
Eine generelle Mindestausstattung, um in vernünftiger Geschwindigkeit arbeiten zu
können, kann daher nicht gegeben werden. Dieses Programm wurde unter Windows
NT entwickelt. Dort hat sich eine Mindestausstattung mit folgenden Komponenten als
sinnvoll erwiesen:
Prozessor:
Speicher:
Grafikkarte:
Bei Applet
Browser:
Pentium MMX 200
64MB
beliebig
MS-IE 4.0, Netscape 4.0 oder andere JAVA 1.1 taugliche
Browser
Bei Applikation
JVM für JAVA 1.1
Die Software (Browser, JVM) ist kostenlos auf folgenden Internetseiten
erhältlich:
Browser:
JVM:
http://www.netscape.com
http://www.microsoft.com
http://www.javasoft.com
Da der Client stark grafikorientiert arbeitet, wird der Aufbau der Grafiken bei einem
langsamen Prozessor zu einer langwierigen Angelegenheit.
10.1.2 Server
Die verschiedenen Berechnungsserver werden i.d.R. nicht vom Anwender des Clients
gestartet oder beendet. Vielmehr sind es Programme, die autonom auf einem
entfernten Rechner ohne Unterbrechung laufen. So haben beliebige Clients ständigen
Zugriff auf deren Ressourcen. Daher wird an dieser Stelle nicht auf deren
Anforderungen eingegangen.
54
10. Benutzerhandbuch
10.2 Installation & Starten des Client
10.2.1 Installation
In Abhängigkeit von der Betriebsform sind unterschiedliche Programme zu
installieren.
• Applet
Um das Programm als Applet zu starten, ist es erforderlich einen JAVA 1.1
kompatiblen Browser installiert zu haben. Dafür können die beiden weitestverbreiteten
Browser Netscape 4.5 und MS-IE 5.0 verwendet werden. Beide sind unentgeltlich im
Internet erhältlich.
• Applikation
Die JVM von SUNTM muß installiert werden, damit der Client gestartet werden kann.
Danach ist eine besondere Installationsroutine für den Client nicht zu beachten. Das
Programm kann entweder auf die HD in ein beliebiges Verzeichnis kopiert werden,
oder direkt von der CD gestartet werden.
Achtung: Hinweise hinsichtlich der CLASSPATH-Variable bei der Installation der
JVM sind unbedingt zu beachten!
10.2.2 Starten
Der Client kann wahlweise auf zwei Arten gestartet werden. Zum einen als Applet aus
dem Internet (auch lokal möglich) oder als Applikation.
•
Applet
Nach dem Starten des Browser kann mit Datei->Seite öffnen die Datei
Diplomarbeit.htm geöffnet werden.
Öffnen des Applet mit Netscape 4.5 (eng.)
55
10. Benutzerhandbuch
Nach dem Öffnen des entsprechenden HTM-Dokuments und dem automatischen
Laden aller erforderlichen JAVA-Dateien, erscheint folgende Oberfläche:
Client als Applet im Netscape 4.5 ( Startansicht )
Um in ihr optimal arbeiten zu können, sollte eine Auflösung von min. 1024x768
mit 256 Farben eingestellt sein. Um bestmögliche Ergebnisse zu erzielen, sollte die
Grafikkarte 1152x864 Pixel darstellen.
•
Applikation
Zum Starten als Stand-alone, ist eine Kommandozeileneingabe über eine Shell
erforderlich. Unter Windows 95/98/NT kann dazu die MS-DOS
Eingabeaufforderung verwendet werden. Nach dem Wechsel in das Verzeichnis
Client auf der CD kann mit der Eingabe von
java Start <ENTER>
der JAVA-Interpreter gestartet werden, der das Client-Programm ausführt. Es
erscheint die in jeder Hinsicht gleiche Oberfläche wie bei dem als Applet
gestarteten Client. Auch bezüglich der Bedienung der einzelnen Module ergeben
sich keine Unterschiede.
Im weiteren wird davon ausgegangen, daß der Client lokal als Applikation gestartet
wurde. Bei Unterschieden zur Version als Applet wird explizit darauf hingewiesen.
Nachdem das Programm gestartet wurde, erscheint eine Auswahlmöglichkeit unter
verschiedenen Modulen.
56
10. Benutzerhandbuch
10.3 Construction
Nachdem man vom Startmenü ausgehend Construction gewählt hat, erscheint
folgende, in vier Teile gegliederte, Oberfläche:
Module_Construction Bedienoberfläche (Applikation)
Menüberei
Eingabe
bereich
Eingabeberei
Zeichenbereic
Statusbereic
Neben den Icons sind natürlich alle Windows-Elemente (Systemmenü, Titelleiste,
Schließen-Button) vorhanden.
In diesem Modul werden alle Aktionen zur Tragwerkseingabe interaktiv durchgeführt.
Die Steuerung erfolgt, mit Ausnahme der Dateneingabe, durch die Maus. Die Icons im
oberen Teil wurden selbsterklärend bzw. entsprechend denen der Standardsoftware
gestaltet.
Damit
ist
eine
einheitliche
Benutzerführung
unter
allen
Windowsprogrammen gewährleistet, was die Einarbeitung in JARL stark vereinfacht.
Von links nach rechts bedeuten die Icons:
10.3.1 Neues Projekt
Nachdem das Icon angeklickt wurde, wird ein bestehenden Projekt gelöscht und ein
neues angelegt. Gleichzeitig wird der Zeichenbereich gelöscht, damit ein neues
Tragwerk dargestellt werden kann.
Ein, unter Umständen bereits bestehendes Projekt, wird in jedem fall vorher gesichert.
57
10. Benutzerhandbuch
10.3.2 Öffnen eines bestehenden Projekts
Wenn dieses Icon angeklickt wird, erscheint eine plattformspezifische Maske, in der
die zu ladende Datei ausgewählt werden kann. Leider ist in diesem Feature ein von
SUNTM dokumentierter Bug enthalten. Es ist nicht möglich, nur Dateien mit einer
bestimmten Extension anzeigen zu lassen.
Das Öffnen einer Datei kann nur bei einer Applikation erfolgen, da das Sand-Box
Modell von SUNTM einen derartigen Eingriff in das System nicht gestattet.
10.3.3 Speichern des aktuellen Projekts
Genauso wie beim Öffnen eines Projekts, erscheint hierbei eine plattformspezifische
Maske, in der ein Pfad zum speichern und der Dateiname gewählt werden kann. Die
beim Laden geltenden Einschränkungen verbieten auch das Speichern eines Projekts
bei einem Applet.
10.3.4 Programm beenden
Das Programm wird ohne weitere Warnung sofort beendet. Die Datenbank und das
eventuell zuletzt bearbeitete Projekt werden allerdings noch gespeichert.
Da ein Applet nicht beendet werden kann, muß der Browser geschlossen werden,
wenn das Programm beendet werden soll.
58
10. Benutzerhandbuch
10.3.5 Tragwerk drucken
Das in der Zeichenfläche dargestellte Tragwerk kann auf jedem angeschlossenen
Drucker ausgegeben werden. Bei der Druckerauswahl hilft wieder eine Maske, die der
Druckerauswahl auf der jeweiligen Plattform entspricht.
Der Bildschirmabzug zeigt die Druckerauswahl unter Windows 95 mit den dort
üblichen Optionen.
Wenn das Programm als Applet abläuft ist diese Option nicht anwählbar, allerdings
läßt sich die gesamte, im Browser dargestellte Seite durch Datei->Drucken ausgeben.
59
10. Benutzerhandbuch
10.3.6 Knoteneingabe
Ein Tragwerk besteht aus Knoten und Stäben. Bevor allerdings Stäbe eingegeben
werden können, müssen entsprechende Knoten definiert werden. Dazu ist die Eingabe
einer Knotennummer, der Koordinaten und der Restriktionen erforderlich. Die
Koordinaten werden dabei, wie im Stahlbau üblich, in Millimetern angegeben. Die
Knotennummern werden automatisch bei eins beginnend durchgezählt. Eine Nummer
ist standardmäßig vorgegeben, kann aber auch selbst eingegeben werden. Durch einen
Klick auf den entsprechenden Button kann der definierte Knoten in der Datenbank
gespeichert, aktualisiert oder aus der Datenbank gelöscht werden.
Unter dem Button „save“ wird die Anzahl der bisher eingegebenen Knoten angezeigt.
Maske zur Knoteneingabe
Fehlermeldung bei falscher
Knoteneingabe
Bei der Eingabe von Knoten wird der Maßstab zur Darstellung des Tragwerks
automatisch so gewählt, daß immer das gesamte System im Zeichenbereich dargestellt
wird. Dadurch wird erreicht, daß der zu Verfügung stehende Platz optimal genutzt
wird und das Tragwerk immer proportional wiedergegeben wird.
Falls Angaben zu dem Knoten fehlerhaft sein sollten, erscheint eine entsprechende
Fehlermeldung.
Bei der Eingabe ist zu beachten, daß es nicht möglich ist negative Werte, Buchstaben
oder reellwertige Daten einzugeben. Dadurch ist eine große Fehlerquelle eliminiert.
60
10. Benutzerhandbuch
10.3.7 Stabeingabe
Nachdem Knoten eingegeben wurden, besteht die Möglichkeit, zwei Knoten mit
einem Stab zu verbinden. Dabei muß der linke und rechte Knoten vorgegeben werden.
Dies Information über die Knoten wird noch bei der Lasteingabe verwendet.
Desweiteren können Angaben über den verwendeten Querschnitt des Stabes, sein
Material und die ihm zugeordnete Wöhlerlinie gemacht werden. Aus den
entsprechenden Auswahlmenüs können die Eigenschaften ausgewählt werden. Falls
ein Attribut nicht vorhanden ist, muß es erst unter dem jeweiligen Punkt der
Datenbank hinzugefügt werden.
Maske zur Stabeingabe
Fehlermeldung bei falschen
Stabdaten
Wenn die Knotenangaben inkorrekt sind, erscheint eine Fehlermeldung, die auf den
entsprechenden Fehler hinweist. Die Angaben sind fehlerhaft, wenn z.B. kein Knoten
mit der eingegebenen Nummer existiert.
Bei der Eingabe ist, wie bei den Knoten, zu beachten, daß es nicht möglich ist negative
Werte, Buchstaben oder reellwertige Daten einzugeben. Dadurch ist auch bei der
Stabdateneingabe eine große Fehlerquelle eliminiert.
Zur Vereinfachung der Stabeingabe besteht die Möglichkeit zwei Knoten mit
gedrückter linker Maustaste zu verbinden. Dabei werden ebenfalls die eingestellten
Daten zu Profil, Wöhlerlinie und Material übernommen.
61
10. Benutzerhandbuch
10.3.8 Lasteingabe
Lasten können in dieser Version von JARL nur als Streckenlasten auf Stäbe
eingegeben werden. Dabei können aber beliebig viele Lasten, an beliebigen Orten, auf
einen Stab aufgebracht werden.
Der Stab, auf den die Last einwirkt, wird über den linken und rechten Knoten
definiert. Mit dist und length wird der Abstand der Last vom linken Knoten und die
Länge der Streckenlast beschrieben. Amount bezeichnet den Betrag der Last in kN/cm.
Lasteingabe auf einen Stab
Um den stochastischen Charakter der Last zu berücksichtigen, muß die Verteilungsart
und die Standardabweichung angegeben werden. Der Betrag der Last wird dabei als
Mittelwert der Verteilung angenommen.
Bei der Verteilung kann, wie bei allen anderen Eingaben auch, zwischen den vier
Typen gewählt werden (Umrechnung gem. /19/ S.160)
•
•
Normalverteilung mit dem Parameter σ und dem eingegebenen Betrag als
Mittelwert µ
Log-Normalverteilung mit den Parametern λ und ζ die aus µ und σ berechnet
werden:
•
•
1
2
 σ 

1
ζ =  ln   + 1 
λ = ln µ − ⋅ ζ 2
  µ 

2

 
Exponentialverteilung mit dem Parameter λ, berechnet aus µ
1
λ=
µ
Gumbel, Extremwert I max. (T1L) mit den Parametern u und α
2
62
10. Benutzerhandbuch
π
σ⋅ 6
10.3.9 Wöhlerlinie definieren
α=
u=µ−
γ
α
γ ≅ 0.577216
Bei der Definition der Ermüdungsfestigkeitskurven kann zwischen verschiedenen
Arten gewählt werden. Dabei werden für die Wöhlerlinie in jedem Fall ∆σ bei 1*104
Lastspielen, Dauerfestigkeit mit ∆σD und Anzahl der Lastspiele sowie Cut-off-limit
mit ∆σL und der zugehörigen Lastspielzahl angezeigt.
•
Definition gemäß EC 3
Es werden nur die Kerbgruppen des EC 3 definiert
•
Definition analog EC 3
Dabei sind Dauerfestigkeit und Cut-off limit wie im EC 3 definiert, aber die
Kerbgruppe kann selbst bestimmt werden. Die Steigungen betragen in jedem Fall
wie im EC3 m1 = 3 und m2 = 5
Wöhlerlinie mit selbst definierter Kerbgruppe KF 150
•
Lineare Wöhlerlinie
Die Steigung der Wöhlerlinie kann selbst definiert werden, aber die Wöhlerlinie ist
nur linear.
63
10. Benutzerhandbuch
•
Bilineare Wöhlerlinie
Die Steigungen der Ermüdungsfestigkeitskurven können selbst definiert werden.
Eingabe einer Bilinearen Wöhlerlinie
Hierbei kann der stochastische Charakter der maßgebenden Parameter der
Wöhlerlinie durch Eingabe der Verteilungsart und der Standardabweichung
explizit berücksichtigt werden. Als Mittelwert wird wieder der eingegebene Wert
angenommen.
64
10. Benutzerhandbuch
10.3.10 Materialeigenschaften definieren
Bei den Materialien können neben dem Namen alle weiteren Parameter
eingegebenwerden, die für die Berechnung innerhalb eines FEM-Programms von
Bedeutung sind. Wie bei den Wöhlerlinien und den Lasten ist hier ebenfalls der
stochastische Charakter zu berücksichtigen. Als Mittelwert der Verteilung werden
wieder die eingegebenen Werte angenommen.
Das Tragwerk wird während dieser Option nicht angezeigt.
Eingabe eines Materials
65
10. Benutzerhandbuch
10.3.11 Profil definieren
Bei der Eingabe eines Profils kann zwischen DIN-Profilen und selbst hergestellten
Querschnitten unterschieden werden. Wenn ein Profil selbst definiert werden soll,
kann der Radius null Millimeter betragen.
Die Daten des Profils werden im Zeichenbereich nicht maßstäblich angezeigt.
Trotzdem kann eine Falscheingabe besser erkannt werden, als in den Textfeldern.
Eingabe eines Profils
Wie bei allen anderen Eingaben auch, ist hier der stochastische Charakter der
Parameter zu beachten. Zu jeder Abmessung ist die Verteilungsart und die
Standardabweichung einzugeben. Als Mittelwert wird die jeweilige Abmessung
angenommen.
66
10. Benutzerhandbuch
10.3.12 Verteilung anzeigen
Bei dieser Option kann die gewählte Verteilung nur angezeigt werden. Die
eingegebenen Parameter σ für die Standardabweichung und µ für den Mittelwert
werden in die entsprechenden Parameter der gewählten Verteilung umgerechnet (vgl.
Kap. 10.3.8).
Anzeige einer Normalverteilung
10.3.13 Startmenü
Nachdem ein Tragwerk geladen bzw. definiert wurde, können die Server aufgerufen
werden und die entsprechenden Berechnungen durchgeführt werden. Im Anschluß an
die Serverberechnungen können die Ergebnisse dargestellt werden.
10.3.14 Hilfe aufrufen
Die Hilfefunktion bezieht sich nur auf Informationen zum Quellcode und nicht auf die
Bedienung des Programms. Als Hilfe ist der Statusbereich gedacht, in dem angezeigt
wird, auf welchem Knoten / Stab sich die Maus befindet, bzw. welche Bedeutung das
Icon hat, auf dem sich der Mauszeiger befindet.
Die Hilfe kann nur aufgerufen werden, wenn das Programm als Windows-Applikation
ausgeführt wird, da hierfür der Netscape-Browser aufgerufen wird.
67
10. Benutzerhandbuch
10.3.15 Pop-Up-Menü
Unabhängig von der durch ein Icon gewählten Aktion, kann im Zeichenbereich auch
mit Pop-Up-Menüs gearbeitet werden. Dies ist allerdings nur möglich, solange das
Tragwerk angezeigt wird, was bei der Eingabe von Knoten, Stäben und Lasten
gewährleistet ist. Durch einen Klick mit der rechten Maustaste wird ein
kontextsensitives Menü geöffnet. In Abhängigkeit von der Mausposition und dem dort
liegenden Objekt, sind verschiedenen Optionen möglich.
Pop-Up im Zeichenbereich
Pop-Up auf Stab
Pop-Up auf Knoten
In dem Menü wird angezeigt welches Objekt man angeklickt hat, und welche
Aktionen möglich sind. Wählt man properties, wird im Eingabebereich für Knoten
und Stäbe die Eingabemaske für das entsprechende Objekt angezeigt. Bei properties
für den Zeichenbereich, erscheint im Eingabebereich eine Maske, in der angegeben
werden kann, was im Zeichenbereich angezeigt werden soll. Zur Auswahl stehen:
- Knotennummern
- Knotenrandbedingungen
- Stabnummern
- Lasten
68
10. Benutzerhandbuch
10.4 SVD
Nachdem das Programm gestartet wurde, kann die Verbindung zu dem SVD-Server
aufgebaut werden. Dies macht allerdings nur Sinn, wenn auch ein System mit
Belastung geladen bzw. eingegeben wurde.
Ist ein Tragwerk vorhanden und wird dieses Modul aufgerufen, dann übernimmt das
Programm die Verbindungsaufnahme zu dem entsprechenden Server und überträgt die
erforderlichen Daten über die CORBA-Schnittstellenfunktionen.
Nachdem die Datenübertragung erfolgreich abgeschlossen wurde und die Ergebnisse
vorliegen, gibt das Programm eine entsprechende Mitteilung aus:
Singulärwertzerlegung
abgeschlossen
10.5 KVA
Bevor das Modul zur Verbindungsaufnahme mit dem Kovarianzanalyse-Server
aufgerufen werden kann, muß SVD erfolgreich beendet worden sein, da die
Ergebnisse aus der Singulärwertzerlegung hierfür benötigt werden. Der Datentransfer
erfolgt wieder vollkommen automatisch.
Zusätzlich zu den Ergebnissen aus der Singulärwertzerlegung werden folgende
weiteren Angaben benötigt:
•
•
•
matrix with wind
values for h
damp
69
10. Benutzerhandbuch
Ist die Übertragung und Berechnung abgeschlossen, erhält der Client als Ergebnis die
spektralen Momente, die visualisiert werden können.
Sollte die Verbindung zu einem Servern nicht aufgebaut werden können, so erscheint
eine Fehlermeldung, die auf diesen Fehler hinweist. Wenn dieser Fehler gemeldet
wird, ist die Adresse, die in dem reference.*-File angegeben wahrscheinlich nicht
korrekt oder die Datei existiert nicht. Dann muß die entsprechende Datei vom Server
in das Verzeichnis kopiert werden, in dem sich auch das Programm JARL befindet.
Ist der geforderte Dienst nicht verfügbar, weil der Server außer Betrieb ist, hat der
Nutzer auf Client-Seite keine Möglichkeiten zur Fehlerbehebung.
Fehlermeldung: Server kann nicht
gefunden werden
10.6 RES
Wird im Hauptmenü die Option RES gewählt, können die Ergebnisse aus der
Kovarianzanalyse visuell dargestellt werden.
Dabei kann für jeden Knoten des Tragwerks eine Windlast gewählt werden und die
Verteilung der zugehörigen Verschiebungen grafisch angezeigt/ausgedruckt werden.
70
11. Beispiele
11. Beispiel
Hier soll anhand zweier Beispiele gezeigt werden, wie man die einzelnen Optionen
nutzen kann, um ein Tragwerk einzugeben. Dabei können sowohl bereits bestehende
Daten aus den Datenbanken verwendet, als auch neu eingegebene Daten benutzt
werden.
Die Datenbanken beinhalten in der Grundversion jeweils 20 Kerbgruppen (/16/ S.10)
und DIN-Profile (/17/ S.8.83ff) bzw. vier Materialien. Diese können durch Hinzufügen
ständig erweitert werden.
11.1 Rahmentragwerk
11.1.1 Knoten und Stäbe
Um ein Tragwerk einzugeben, ist im Startmenü die Option Construction anzuwählen.
Anschließend können Knotenkoordinaten und Stäbe in den Eingabemasken, die durch
die Icons aktiviert werden, eingegeben werden. Die Stäbe können auch zwischen zwei
Knoten erstellt werden, indem mit der Maus vom einen zum anderen Knoten, bei
gedrückter linker Maustaste, gezogen wird.
Stab von Knoten 3 nach 4 mit den ausgewählten Eigenschaften (mit Maus gezogen)
71
11. Beispiele
Dem Stab können über die Auswahlmenüs bestimmte Eigenschaften zugeordnet
werden:
Ist ein entsprechendes Attribut nicht in der Datenbank enthalten, kann es der
Datenbank hinzugefügt werden. Anschließend ist es in der Auswahl vorhanden und
kann verwendet werden.
In diesem Beispiel sind folgende Knoten und Stäbe eingegeben worden
Knoten
1
2
3
4
5
X-Koord
0
0
50000
10000
10000
Y-Koord
0
5000
6000
5000
0
u
1
0
0
0
1
v
1
1
0
1
1
phi
1
0
0
0
1
Links
Rechts
Material
Profil
Kerbfall
1
2
3
4
2
3
4
5
St 52-4
St 52-4
St 52-4
ST 52-4
HEA 300
IPE 200
IPE 200
HEA 300
KF 125
KF 71
KF 71
KF 125
Stab
1
2
3
4
72
11. Beispiele
11.1.2 Lasten
Wie bereits erwähnt, können Lasten in dieser Version des Programms nur als
Streckenlasten auf Stäbe wirken. Dabei können beliebig viele Lasten auf einen Stab
einwirken.
Eingabe von Lasten auf ein Tragwerk
In diesem Beispiel wurden folgende Lasten eingegeben:
Links
2
2
2
3
1
Rechts
3
3
3
4
2
Dist
0
1500
3500
0
0
Length
1000
500
1500
4000
-
Amount
200
100
250
150
50
Da das Programm zur Singulärwertzerlegung nicht an den Betrieb als Server angepaßt
wurde, ist die Eingabe der Lasten z.Z. noch überflüssig.
73
11. Beispiele
11.1.3 SVD
Durch anklicken des Symbols
gelangt man wieder in das Hauptmenü. Dort
erreicht man den SVD-Server durch den Button SVD. Von dort können anschließend
die Tragwerksdaten durch send an den Server gegeben werden. Der wiederum führt
die Berechnung aus. In der Zeit, in der die Server-Berechnung durchgeführt wird, ist
keine weitere Eingabe möglich. Wenn der Client anschließend wieder freigegeben
wurde, gelangt man durch den back-Button erneut in das Startmenü.
Meldung: SVD abgeschlossen
11.1.4 KVA
Nachdem die Singulärwertzerlegung durchgeführt wurde, kann die Kovarianzanalyse
gestartet werden. Dort sind einige ergänzende Angaben erforderlich, die vorläufig
standardmäßig gesetzt werden und nicht verändert zu werden brauchen. Da diese
Daten bei der Berechnung aber noch nicht verwendet werden, sind sie eigentlich
überflüssig. Dies kann später ergänzt werden.
Eingabe für den KVA-Server
•
•
•
matrix with wind
values for h
damp
74
11. Beispiele
11.2 Stütze
11.2.1 Knoten und Stäbe
Als zweites Beispiel soll eine Eingespannte Stütze dienen, die aus fünf Knoten und
vier Stäben besteht.
Wie im Beispiel des Rahmentragwerks, können den Knoten und Stäben Eigenschaften
zugewiesen werden.
Knoten
1
2
3
4
5
X-Koord
0
0
0
0
0
Y-Koord
0
5000
6000
5000
0
u
1
0
0
0
0
v
1
0
0
0
0
phi
1
0
0
0
0
Links
Rechts
Material
Profil
Kerbfall
1
2
3
4
2
3
4
5
St 52-4
St 52-4
St 52-4
ST 52-4
IPE 100
IPE 100
IPE 100
IPE 100
KF 160
KF 160
KF 160
KF 160
Stab
1
2
3
4
75
11. Beispiele
11.2.2 Lasten
Auf die Eingabe von Lasten, wurde bei diesem Beispiel verzichtet. Da der SVDServer, der die Lasten verarbeiten soll, nicht fertiggestellt werden konnte, wurden
bereits erzeugte Ergebnismatrizen benutzt.
11.2.3 SVD
Obwohl keine Lasten eingegeben wurden, muß der SVD-Server dennoch aufgerufen
werden. Die benötigten Matrizen liegen auf Server-Seite und müssen zum Client
übertragen werden.
11.2.4 KVA
Die Kovarianzanalyse wurde mit den folgenden Parametern aufgerufen.
76
11. Beispiele
11.2.5 Ergebnisse
Die Ergebnisse der Kovarianzanalyse lassen sich grafisch darstellen. Auf der X-Achse
wird dabei die Verformung dargestellt, auf der Y-Achse die Häufigkeiten. Abgedruckt
sind die horizontalen Verschiebungen der Knoten 2, 3, 4 und 5.
77
11. Beispiele
Die dargestellten Ergebnisse entsprechen den Erwartungen. Je näher ein Knoten an der
Einspannstelle liegt, desto geringer ist die horizontale Verschiebung.
An der Form der Kurven wird die Überlagerung der verschiedenen Verteilungsarten
gut deutlich.
78
12. Quellenangabe
12
/1/
/2/
/3/
/4/
/5/
/6/
/7/
/8/
/9/
/10/
/11/
/12/
/13/
Quellenangabe
Das große Buch JAVA
Data Becker
1. Auflage 1996
Borland C++ 4.5 Das Kompendium
Einführung, Arbeitsbuch, Nachschlagewerk
Markt & Technik, 1995
JAVA Examples in a Nutshell
O’Reilly
1. Auflage 1998
JAVA in a Nutshell
O’Reilly
2. erweiterte und aktualisierte Auflage 1998
C’t Magazin für Computertechnik, Ausgabe 19/1998
C’t Magazin für Computertechnik, Ausgabe Juni/1997
http://www.omg.org/cgi.bin/membersearch.pl
JAVA-Magazin 6/98
„Verteilte Objekte“
Programmierschnittstelle: C++ / Fortran (77)
Alexander Lichius
16. Januar 1997
MIPSpro7 Fortran 90 Commands and Directives Reference Manual
„Calling a Fortran90 Subroutine from C“
Online-Dokument
Unified Modeling Language
„Summary“ Version 1.1, September 1997
http://www.rational.com/uml
Unified Modeling Language
„UML Notation Guide“ Version 1.1, September 1997
http://www.rational.com/uml
Universität Bern
Forschungsgruppe Computergeometrie und Grafik
/14/
/15/
Institut für Informatik und angewandte Mathematik
Seminarvortrag
Thomas Wenger
November 1997
Informatik/Informatique
Zeitschrift der schweiz. Informatikorganisationen
Nr. 3 – Juni 1997 (JAVA)
Java-Magazin 5/98
„write once – debug everywhere“
79
12. Quellenangabe
/17/
/18/
/19/
/20/
/21/
Arbeitsunterlagen zur Lehrveranstaltung
Brücken- und Hochbauten in Stahl- und Verbundbauweise Teil 1
Bemessung ermüdungsgefährdeter Stahlkonstruktionen
Stand: September 1996
Schneider Bautabellen für Ingenieure
Mit europäischen und nationalen Vorschriften
11. Auflage, Werner-Verlag
Teilproject C5 des SFB 398
Paralleles/verteiltes Entwurfssystem für die lebensdauerorientierte Auslegung von
tragwerken unter Berücksichtigung von Schädigungen
Leiter: Prof. Dr.-Ing. Dietrich Hartmann
Prof. Dr.-Ing. Hans-Jürgen Niemann
Sicherheit und Zuverlässigkeit im Bauwesen
Grundwissen für Ingenieure
Jörg Schneider, Hans Peter Schlatter
1994, vdf
Dirlik T.: Application of Computers in Fatigue Analysis
Dissertation University of Warwick; 1985
80
Herunterladen