Sie sind auf Seite 1von 36

SWIFT â

Swift Relay Server


Swift Framework
Version 1.0

User Manual
SWIFT Â
An IIT Innovation

Ó 1997, 1998 IIT Ingenieurgesellschaft für Informationstechnik mbH. All Rights reserved.

Swift, Swift Relay Server und Swift Framework are Registered Trademarks of IIT GmbH.

Java is a Registered Trademarks of Sun Microsystems, Inc.

All other Registered Trademarks or product names mentioned are property of the owners.

Copyright Ó for this document and all online documentation of the system by IIT GmbH. All rights
reserved. No part of this document may be copied, photocopied, reproduced, translated, altered or
reduced without written permission of IIT GmbH.

IIT Ingenieurgesellschaft für Informationstechnik mbH


Heudorfer Str. 15a, D-27726 Worpswede
Tel.: 04794/92901, Fax: 04794/95028
http://www.iit.de, eMail: info@iit.de

Information about Swift on theim Wld Wide Web:


http://www.swift.de
Distribution:
sales@swift.de
Customer Support (registered customers only):
support@swift.de
SWIFT Â
An IIT Innovation

Thank you, Sun!


SWIFT Â
An IIT Innovation

Lizenzvereinbarung
BITTE LESEN SIE DIESEN VERTRAG SORGFÄLTIG DURCH. ER LEGT DIE BEDINGUNGEN FEST, ZU DENEN IHNEN
DIESE LIZENZ FÜR DIESES SWIFT-COMPUTERPROGRAMM GEWÄHRT WIRD. SOLLTEN SIE MIT DIESEN
BEDINGUNGEN NICHT EINVERSTANDEN SEIN, SENDEN SIE UNS BITTE DIE SOFTWARE UND ALLE ANDEREN
MITGELIEFERTEN TEILE IN IHRER ORIGINALVERPACKUNG ZURÜCK. DER VOLLSTÄNDIGE LIZENZPREIS WIRD
IHNEN VON UNS ERSTATTET.

DAS KOPIEREN DIESES COMPUTERPROGRAMMS ODER SEINER DOKUMENTATION AUSSER IN DEN GEMÄSS
DIESEM VERTRAG VORGESEHENEN FÄLLEN, STELLT EINE VERLETZUNG DES URHEBERRECHTS IHRES LANDES
DAR. DAS KOPIEREN DIESES COMPUTERPROGRAMMS OHNE GENEHMIGUNG VON IIT IST RECHTSWIDRIG. IIT IST
IN DIESEM FALL ZU SCHADENSERSATZFORDERUNG BERECHTIGT, UND SIE KÖNNEN STRAFRECHTLICH
BELANGT WERDEN.

1. Lizenzgewährung

IIT GmbH (im folgenden IIT genannt) gewährt Ihnen eine einfache, nicht übertragbare Lizenz für die Benutzung des beiliegenden
Computerprogramms (im folgenden "Software" genannt) und der zugehörigen Dokumentation (im folgenden "Dokumentation"
genannt) auf Anlagen, die in Ihrem Besitz befindlich sind oder die unter Ihrer Aufsicht stehen, gemäss den folgenden
Bedingungen.
Dieser Lizenzvertrag gestattet die Anfertigung einer einzigen Sicherungskopie der Software. Dieses Software-Paket enhält ein
Handbuch und die zugehörige Dokumentation in gedruckter Form oder in elektronischer Form. Liegt die Dokumentation in
gedruckter Form vor, darf sie nicht kopiert werden. Liegt die Dokumentation in elektronischer Form vor, darf ein Ausdruck
angefertigt werden, von dem allerdings keine Kopie angefertigt werden darf.

Die Anfertigung einer zweiten Kopie der Software ist erlaubt, sofern Sie der einzige Nutzer der zweiten Software-Kopie sind und
die Kopie auschließlich zu Sicherungszwecken dient.

2. Nutzung des Swift Relay Servers

Die Nutzungslizenz für den Swift Relay Server bezieht sich auf eine Software-Instanz. Für weitere Software-Instanzen, also z. B.
Start des Swift Relay Servers auf gleichem Host mit unterschiedlichem Port, sind weitere Lizenzen nötig.

3. Nutzung des Swift Frameworks

Das Swift Framework unterliegt keinerlei Nutzungsbeschränkungen, sofern es gemeinsam mit der erworbenen Lizenz für den
Swift Relay Server benutzt wird.

4. Beschränkungen

Es ist ausdrücklich untersagt,

· die Software oder Dokumentation zu kopieren, ausgenommen in der lizenzverträglich erlaubten Weise;
· die Software zu analysieren, zu untersuchen, zu dekompilieren oder zu disassemblieren, ausgenommen in der gesetzlich
erlaubten Weise, wenn dies unerlässlich ist, um Informationen zu erhalten, die zur Herstellung der Interoperabilität eines
unabhängig entwickelten Programms mit der Software oder mit einem anderen Programm erforderlich sind und solche
Informationen nicht ohne weiteres von IIT oder von Dritten erhältlich sind;
· die Software, Dokumentation und alle anderen Rechte, die diese Lizenz gewährt, ohne vorherige schriftliche Genehmigung
von IIT ganz oder teilweise zu verbreiten, zu vermieten, zu verleihen, zu verkaufen, in Unterlizenz zu vergeben oder in
irgend einer anderen Weise an Dritte zu übertragen;
· Eigentums- und Urheberrechtshinsweise, Etiketten oder Markenzeichen auf der Software oder Dokumentation zu entfernen,
zu verändern oder unleserlich zu machen;
· die Software zu verändern, zu übersetzen, zu arrangieren oder anzupassen oder abgeleitete Werke auf Basis der Software
ungeachtet des Zwecks zu erstellen.

5. Copyright

Das Eigentums- und Urheberrecht an der Software, der Dokumentation und allen von Ihnen angefertigten Kopien vebleibt bei IIT.
Ein unerlaubtes Kopieren der Software und/oder Dokumentation oder ein Nichtbeachten der obigen Einschränkungen hat die
automatische Beendigung dieses Lizenzvertrags zur Folge.

6. Gewährleistung

IIT gewährleistet, dass die Software die allgemein in der Dokumentation beschriebenen Möglichkeiten und Funktionen bietet IIT
darf nach eigenem Gutdünken beschliessen, Fehler zu korrigieren oder zu beheben, fehlerhafte Datenträger oder
Dokumentationen zu ersetzen oder die Lizenzgebühr zu erstatten und diesen Lizenzvertrag zu beenden. FÜR IIT BESTEHT
KEINE GEWÄHRLEISTUNGSPFLICHT, ES WERDEN WEDER AUS DRUCKLICHE, NOCH STILLSCHWEIGENDE UND
AUCH KEINE GESETZLICHEN ODER IN MÜNDLICHEN ODER SCHRIFTLICHEN MITTEILUNGEN GEGEBENEN
GARANTIEN GELEISTET. IIT LEHNT JEDE WEITERGEHENDE GARANTIE AB, EINSCHLIESSLICH DER GARANTIE DER
SWIFT Â
An IIT Innovation
HANDELSÜBLICHEN QUALITÄT ODER DER EIGNUNG FÜR EINEN SPEZIFISCHEN ZWECK. IIT GARANTIERT NICHT,
DASS DIE SOFTWARE UNUNTERBROCHEN ODER FEHLERFREI ANGEWENDET WERDEN KANN.

7. Haftungsausschluss

DIE NUTZER DIESER SOFTWARE SIND VERANTWORTLICH FÜR DIE ÜBERWACHUNG, HANDHABUNG UND
KONTROLLE IM ZUSAMMENHANG MIT DIESER SOFTWARE. DIESE VERANTWORTLICHKEIT SCHLIESST DIE
BESTIMMUNG DER GEEIGNETEN ANWENDUNG FÜR DIESE SOFTWARE UND DIE WAHL DER SOFTWARE UND
ANDERER PROGRAMME ZUR ERZIELUNG DER BEABSICHTIGTEN ERGERNISSE EIN. DIE NUTZER DIESER
SOFTWARE SIND AUCH VERANTWORTLICH FUR DIE BEURTEILUNG DER ADÄQUATHEIT UNABHÄNGIGER
VERFAHREN ZUR PRÜFUNG DER ZUVERLÄSSIGKEIT UND GENAUIGKEIT ALLER MIT HILFE DIESER SOFTWARE
ERHALTENEN RESULTATE, EINSCHLIESSLICH ALLER DATEN, DIE MIT HILFE DER SOFTWARE ENTWICKELT
WURDEN.

8. Haftungsbeschränkung

IIT HAFTET NICHT FÜR VERLUSTE ODER SCHÄDEN WELCHER ART AUCH IMMER, EINSCHLIESSLICH DES
VERLUSTS VON DATEN, GEWINNEINBUSSEN, VERSICHERUNGSKOSTEN ODER ANDERER BESONDERER
SCHÄDEN, EINSCHLIESSLICH FOLGESCHÄDEN UND INDIREKTER SCHADEN, DIE SICH AUS DER BENUTZUNG
ODER DER UNFÄHIGKEIT DER BENUTZUNG DER SOFTWARE ODER DER ZUGEHÖRIGEN DOKUMENTATION
ERGEBEN, UNGEACHTET DER JEWEILIGEN URSACHE UND DES FÜR DIE HAFTUNG GELTEND GEMACHTEN
RECHTSGRUNDS. DIESE EIN- SCHRÄNKUNG GILT AUCH DANN, WENN IIT ODER EIN ZUGELASSENER IIT-
HÄNDLER ÜBER DAS RISIKO EINES SOLCHEN VERLUSTS ODER SCHADENS ZUVOR INFORMIERT WURDE. SIE
ERKENNEN AN, DASS DIE LIZENZGEBÜHR DIESE RISIKOVERTEILUNG RECHTFERTIGT. IIT HAFTET KEINESFALLS
UND IIT KANN KEINESFALLS HAFTBAR GEMACHT WERDEN FÜR DEN VERLUST ODER DIE ENTWENDUNG DER
SOFTWARE, IIT IST INSBESONDERE NICHT VERPFLICHTET, VERLORENE ODER ENTWENDETE SOFTWARE ZU
ERSETZEN. SIE SIND AUSSCHLIESSLICH ALLEIN VERANTWORTLICH FÜR DIE SICHERUNG DER SOFTWARE
GEGEN VERLUST UND ENTWENDUNG UND FÜR EINE AUSREICHENDE ABSICHERUNG IHRER INVESTITION
DURCH EINE VERSICHERUNG ODER DERGLEICHEN.

9. Gerichtsstand

Gerichtsstand ist Osterholz-Scharmbeck, Deutschland.


SWIFT Â
An IIT Innovation

Table Of Content
1 INTRODUCTION............................................................................................................................................................
1.1 WHY JAVA?......................................................................................................................................................
1.2 WHY SWIFT?.....................................................................................................................................................
2 SWIFT CONCEPTS......................................................................................................................................................
2.1 SWIFT RELAY SERVER........................................................................................................................................
2.2 SWIFT SECURITY LAYER.....................................................................................................................................
2.3 SWIFT FRAMEWORK...........................................................................................................................................
2.4 SWIFT APPLICATIONS.........................................................................................................................................
2.5 SWIFT SERVICES................................................................................................................................................
2.6 SWIFT CHANNELS..............................................................................................................................................
3 INSTALLATION...........................................................................................................................................................
3.1 CONTENT..........................................................................................................................................................
3.2 SWIFT RELAY SERVER........................................................................................................................................
3.2.1 Requirements......................................................................................................................................................
3.2.2 Starting the sServrs.............................................................................................................................................
3.2.3 Stopping the Ssevers...........................................................................................................................................
3.2.4 Properties...........................................................................................................................................................
3.2.4.1 Server Hostname..........................................................................................................................................................
3.2.4.2 Server Port...................................................................................................................................................................
3.2.4.3 Registry Path...............................................................................................................................................................
3.2.4.4 Log Path......................................................................................................................................................................
3.2.4.5 Timezone.....................................................................................................................................................................
3.3 SWIFT FRAMEWORK / JAVA APPLICATION.............................................................................................................
3.3.1 Requirements......................................................................................................................................................
3.3.2 Call....................................................................................................................................................................
3.3.3 Properties...........................................................................................................................................................
3.3.3.1 Timezone.....................................................................................................................................................................
3.4 SWIFT FRAMEWORK / JAVA APPLET.....................................................................................................................
3.4.1 Requirements......................................................................................................................................................
3.4.2 Applet-Tag..........................................................................................................................................................
4 SWIFT FRAMEWORK................................................................................................................................................
4.1 LOGIN..............................................................................................................................................................
4.2 APPLICATION SELECTOR.....................................................................................................................................
4.3 SWIFT CHANNEL MANAGER................................................................................................................................
4.3.1 Defining / Editing of channels.............................................................................................................................
4.4 SWIFT APPLICATION MANAGER...........................................................................................................................
4.4.1 Defining / Editing of Applications.......................................................................................................................
4.5 SWIFT SERVICE MANAGER..................................................................................................................................
4.5.1 Defining / Editing of Services..............................................................................................................................
4.6 SWIFT ROLE MANAGER......................................................................................................................................
4.6.1 Defining / Editing of Roles..................................................................................................................................
4.6.1.1 Defining time limitations..............................................................................................................................................
4.6.1.2 Defining functional limitations.....................................................................................................................................
4.7 SWIFT USER MANAGER......................................................................................................................................
4.7.1 Defining / Editing of user accounts.....................................................................................................................
4.8 SWIFT SYSLOG MONITOR....................................................................................................................................
4.9 SWIFT RESOURCE MONITOR................................................................................................................................
4.10 SWIFT USER MONITOR.....................................................................................................................................
4.10.1 Transmitting notifications to active users.........................................................................................................
4.10.2 Force Logout of active users.............................................................................................................................
SWIFT Â
An IIT Innovation
5 SWIFT FRAMEWORK TUTORIAL: THE CHAT CORPORATION'S "CHATTERBOX"..................................
5.1 DESCRIPTION.....................................................................................................................................................
5.2 CALLING SWIFT RELAY SERVER, SWIFT FRAMEWORK...........................................................................................
5.3 LOGIN..............................................................................................................................................................
5.4 DEFINITION OF CHANNEL RESOURCES..................................................................................................................
5.5 DEFINITION OF SWIFT APPLICATION CHATTERBOX...............................................................................................
5.6 DEFINITION OF ROLES........................................................................................................................................
5.7 DEFINITION OF USER ACCOUNTS.........................................................................................................................
5.8 DEFINITION OF ADVERTSERVER AS SWIFT SERVICES.............................................................................................
5.9 CONFIGURATION OF ADVERTSERVER USING ADVERTMANAGER...........................................................................
5.10 USAING THE CHATTERBOX..............................................................................................................................
6 PROGRAMMING SWIFT ...........................................................................................................................................
6.1 OVERVIEW.........................................................................................................................................................
6.2 JAVA REMOTE METHOD INVOCATION (JAVA/RMI)...............................................................................................
6.2.1 What is RMI?......................................................................................................................................................
6.2.2 A simple example................................................................................................................................................
6.2.3 Swift Relay Server from RMI-perspective............................................................................................................
6.3 SWIFT RELAY SERVER API.................................................................................................................................
6.3.1 Remote API........................................................................................................................................................
6.3.1.1 Classes- & Interface overview......................................................................................................................................
6.3.1.2 Access to the RMI-Registry..........................................................................................................................................
6.3.1.3 iSwiftServer.................................................................................................................................................................
6.3.1.4 EString........................................................................................................................................................................
6.3.1.5 iServerListener.............................................................................................................................................................
6.3.1.6 iLoginContext..............................................................................................................................................................
6.3.1.7 iChannelSender............................................................................................................................................................
6.3.1.8 ChannelSubscriber.......................................................................................................................................................
6.3.1.9 iChannelMemberListener.............................................................................................................................................
6.3.1.10 iChannelReceiverTuner..............................................................................................................................................
6.3.1.11 iChannelDataListener.................................................................................................................................................
6.3.1.12 ChannelObject...........................................................................................................................................................
6.3.1.13 ApplicationProperty...................................................................................................................................................
6.3.2 Service API.........................................................................................................................................................
6.3.2.1 What are Swift Services?..............................................................................................................................................
6.3.2.2 Service Conditions.......................................................................................................................................................
6.3.2.3 Using Swift Resources by Swift Services.....................................................................................................................
6.3.2.4 Embedding Services with the service-Interface.............................................................................................................
6.3.2.5 API-Description...........................................................................................................................................................
6.3.2.5.1 Classes & Interface overview................................................................................................................................
6.3.2.5.2 iService................................................................................................................................................................
6.3.2.5.3 ServiceException..................................................................................................................................................
6.3.2.5.4 LocalLogin...........................................................................................................................................................
6.3.2.5.5 LogSender............................................................................................................................................................
6.3.2.5.6 LogValue.............................................................................................................................................................
6.3.2.6 Swift Service Tutorial: The Chat Corporation's "AdvertServer".....................................................................................
6.3.2.6.1 Implementation of iService-Interface/Service-Startup............................................................................................
6.3.2.6.2 Transmitting Ads..................................................................................................................................................
6.3.2.6.3 Service-Shutdown.................................................................................................................................................
6.3.2.6.4 The Remote Interface iAdvertServer.....................................................................................................................
6.3.2.6.5 Compiling, installation..........................................................................................................................................
6.4 SWIFT FRAMEWORK API....................................................................................................................................
6.4.1 Swift Framework - technical perspective.............................................................................................................
6.4.2 Swift Applications...............................................................................................................................................
6.4.2.1 What are Swift Applications?.......................................................................................................................................
6.4.2.2 Conventions of Swift Applications...............................................................................................................................
6.4.2.3 Interface com.iit.swift.framework.iApplication.............................................................................................................
6.4.3 Swift Service-Managementclasses.......................................................................................................................
SWIFT Â
An IIT Innovation
6.4.3.1 What are Managementclasses?.....................................................................................................................................
6.4.3.2 Conventions for Managementclasses............................................................................................................................
6.4.3.3 Interface com.iit.swift.framework.iServiceManager......................................................................................................
6.4.4 Swift Application Tutorial: The Chat Corporation's "Chatterbox".......................................................................
6.4.4.1 ChatterboxApp............................................................................................................................................................
6.4.4.1.1 Implementation of the iApplication-Interface.........................................................................................................
6.4.4.1.2 Flowdescription "ChatterboxApp".........................................................................................................................
6.4.4.2 AdvertManager............................................................................................................................................................
6.4.4.2.1 Implementation of the iServiceManager-Interfaces................................................................................................
6.4.4.2.2 Saving the new AdvertServer-Configuration..........................................................................................................
6.4.4.2.3 Compiling, Installation..........................................................................................................................................
SWIFT Â
An IIT Innovation

Table Of Illustrations

FIGURE 1: SWIFT RELAY SERVER..................................................................................................................................


FIGURE 2: SWIFT SECURITY LAYER...............................................................................................................................
FIGURE 3: PIPELINED CHANNELS..................................................................................................................................
FIGURE 4: SWIFT LOGIN..............................................................................................................................................
FIGURE 5: APPLICATION SELECTOR...............................................................................................................................
FIGURE 6: SWIFT CHANNEL MANAGER..........................................................................................................................
FIGURE 7: CHANNEL EDITIEREN....................................................................................................................................
FIGURE 8: APPLICATION MANAGER..............................................................................................................................
FIGURE 9: EDITING OF APPLICATIONS........................................................................................................................
FIGURE 10: SWIFT SERVICE MANAGER..........................................................................................................................
FIGURE 11: EDITING OF SERVICES.................................................................................................................................
FIGURE 12: SWIFT ROLE MANAGER..............................................................................................................................
FIGURE 13: DEFINING A ROLE......................................................................................................................................
FIGURE 14: DEFINING TIME RESTRICTIONS......................................................................................................................
FIGURE 15: DEFINING FUNCTIONAL RESTRICTIONS...........................................................................................................
FIGURE 16: SWIFT USER MANAGER..............................................................................................................................
FIGURE 17: DEFINING/EDITING OF USER ACCOUNTS....................................................................................................
FIGURE 18: SWIFT SYSLOG MONITOR...........................................................................................................................
FIGURE 19: SWIFT RESOURCE MONITOR........................................................................................................................
FIGURE 20: SWIFT USER MONITOR...............................................................................................................................
FIGURE 21: TRANSMITTING NOTIFICATIONS...................................................................................................................
FIGURE 22: RECEIVING NOTIFICATIONS FROM THE SWIFT FRAMEWORK.........................................................................
FIGURE 23: FORCE LOGOUT OF ACTIVE USERS................................................................................................................
FIGURE 24: DISPLAYING THE FORCE LOGOUT MESSAGE................................................................................................
FIGURE 25: CHATTERBOX CHANNEL MANAGER.............................................................................................................
FIGURE 26: CHATTERBOX CHAT SESSION......................................................................................................................
FIGURE 27: CALLING SWIFT FRAMEWORK WITH MS IE 3.02........................................................................................
FIGURE 28: APPLICATION SELECTOR.............................................................................................................................
FIGURE 29: SWIFT CHANNEL MANAGER........................................................................................................................
FIGURE 30: DEFINING A NEW CHAT-CHANNEL..............................................................................................................
FIGURE 31: DEFINING AN ADDITIONAL CHAT-CHANNELS..............................................................................................
FIGURE 32: DEFINING AN ADVERTISING-CHANNEL........................................................................................................
FIGURE 33: DEFINING AN ADDITIONAL ADVERTISING-CHANNEL.....................................................................................
FIGURE 34: SWIFT CHANNEL MANAGER AFTER DEFINITION OF CHAT/ADVERTISING-CHANNELS........................................
FIGURE 35: SWIFT APPLICATION MANAGER...................................................................................................................
FIGURE 36: DEFINING THE SWIFT APPLICATION "CHATTERBOX".....................................................................................
FIGURE 37: SWIFT APPLICATION MANAGER AFTER DEFINITION OF THE "CHATTERBOX"..................................................
FIGURE 38: SWIFT ROLE MANAGER..............................................................................................................................
FIGURE 39: DEFINING THE ROLE "ADVERTSENDER"......................................................................................................
FIGURE 40: TUNING AN ADVERTISING-CHANNEL..........................................................................................................
FIGURE 41: TUNING AN ADDITIONAL ADVERTISING-CHANNEL......................................................................................
FIGURE 42: DEFINING THE ROLE "CHATUSER".............................................................................................................
FIGURE 43: TIME RESTRICTIONS OF SERVER-RESOURCES.................................................................................................
FIGURE 44: TUNING AN ADVERTISING-CHANNEL..........................................................................................................
FIGURE 45: TUNING AN ADDITIONAL ADVERTISING-CHANNEL.......................................................................................
FIGURE 46: SWIFT ROLE MANAGER AFTER DEFINITION OF CHATTERBOX-ROLES.............................................................
FIGURE 47: SWIFT USER MANAGER..............................................................................................................................
FIGURE 48: DEFINITION OF THE USER ACCOUNT "ADVERTSERVER"..............................................................................
FIGURE 49: DEFINITION OF A USER ACCOUNT "JOE MILLER".........................................................................................
SWIFT Â
An IIT Innovation
FIGURE 50: DEFINITION OF A USER ACCOUNT "JIM SMITH"............................................................................................
FIGURE 51: SWIFT USER MANAGER AFTER DEFINITION OF NEW USER ACCOUNTS.........................................................
FIGURE 52: SWIFT SERVICE MANAGER..........................................................................................................................
FIGURE 53: DEFINING THE SWIFT SERVICE "ADVERTSERVER INTERNET MONEY".............................................................
FIGURE 54: DEFINING THE SWIFT SERVICE "ADVERTSERVER LIFESTYLE"........................................................................
FIGURE 55: SWIFT SERVICE MANAGER AFTER DEFINITION OF THE ADVERTSERVER..........................................................
FIGURE 56: ADVERTSERVER SYSLOG-MESSAGES AT STARTUP........................................................................................
FIGURE 57: SWIFT SERVICE MANAGER AFTER ADVERTSERVER HAVE BEEN STARTED........................................................
FIGURE 58: STARTING THE ADVERTMANAGER FROM WITHIN THE SWIFT SERVICE MANAGER...........................................
FIGURE 59: UNCONFIGURED ADVERTSERVER................................................................................................................
FIGURE 60: CONFIGURED ADVERTISEMENT TEXT FOR "ADVERTSERVER INTERNET MONEY"...............................................
FIGURE 61: CONFIGURED ADVERTISEMENT TEXT FOR "ADVERTSERVER LIFESTYLE"..........................................................
FIGURE 62: JOE MILLER IS UNLUCKY............................................................................................................................
FIGURE 63: ACTIVE CHATTERBOX................................................................................................................................
FIGURE 64: SWIFT RELAY SERVER - RMI-REGISTRY ...................................................................................................
FIGURE 65: SWIFT FRAMEWORK/FLOW..........................................................................................................................
FIGURE 66: ACTIVATING A MANAGEMENTCLASS...........................................................................................................
FIGURE 67: CHATTERBOX "CHANNEL MANAGER"..........................................................................................................
FIGURE 68: MANAGEMENTCLASS "ADVERTMANAGER"...................................................................................................
SWIFT 1.0 BENUTZERHANDBUCH SEITE 1
SWIFT Â
An IIT Innovation

1Introduction

1.1Why Java?

Since the release of the first beta-version of Java in November 1995 it has been deployed and was
developed in a surprising pacehat sich Java in ungeahnter Geschwindigkeit ausgebreikelt. While
initiall to WebPages Java has become a professional platform for development since the release of
version 1Zunächst eher verantwortlich für nettes Beiwerk von Webseiten in Form von Java-Applets
ist Java seit dem Releall possible areas with one thing in common:für alle erdenklichen Bereiche,
die alle eines gemeinsam haben:

"Small, simple, safe, object-orientated, interpreted or dynamically


optimized, byte-coded, architecture-neutral, garbage-collected,
multithreaded, exception-handled, distributed, dynamically
extensible."

-- Java's Co-Founder Bill Joy

Thinking "yesja, abut it islowber slow", is a er irrt. Meanwhile thJust-In-Time Compiler gaining C+
+Denn inzwischen erreic be further improved by utilizing SUNs Und damit nicht genug, soll diese
durch Einsatz von Sun's "HotSpot"-Technology.ie n

Except of thath zu erlernen it’s eaava, it requires little resourcesbenötigt wenig Ressourcen, is
avaind comes free of chargeläuft auf allen Plattformen und isdea that sounds like born in paradiseif
you take into consideration, that a C++ class library can set you back XXXX Dollars

bedenkt man, daß für eine C++-Klassenbibliothek auch schon mal 20.000 DM fällig werden
können.In other words: Fassen wir also zusammen: Java is GREAT!
SWIFT Â
An IIT Innovation

1.2Why Swift?

The typical software setup of enterprises corresponds to a natural structure which rarely is
designed that one part intersects with another. More likely software systems were implemented
according to requirements of departments and that as quick as possible. The result is a
corresponding uncontrolled growth. Only in very rare cases these evolved structures can be
replaced because they are linked narrowly with the organizational processes of an enterprise and
represent a considerable value.

The present trend for object-oriented development of software considers this by integration of these
systems as objects, which provide their services via a distributor software, so-called object request
broker (ORB) to all other services. This means on the one hand, that an old system can be
maintained and used in the in the existing form, on the other hand it acts as a service object for
other systems. Using this approach, a gentle migration to new technologies is possible.

ORB-systems act as distributor systems between objects declaring themselves as service


providers (server objects) or service recipients (client objects) and/or a Mix of both on the actual
ORB. ORB Therefore an ORB could be compared with an enterprise data bus.

Swift is an ORB completelyEher ist es so, daß Softwaresysteme nach Anforderungen von
Fachabteilungen realisiert wurden und das möglichst schnell. Ein entsprechender Wildwuchs
istiverzahnt und stellen einen erheblichen Wert dar.Der heutige Trend zur objektorientierten
Entwicklung von Software berücksichtigt dies durch Integration dieser Systeme als Objekte, die
ihre Dienste über eine Verteilersoftware, sog. Object Request Broker (ORB) allen anderen
Diensten anbieten. So wird zum einen ein Altsystem in der bisherigen Form erhalten und kann wie
bisher benutzt werden, zum anderen fungiert es als Dienstobjekt für andere Systeme. Durch diese
Vorgehensweise ist ein sanfter Übergang auf neue Technologien möglich.

nfore it is usable on all operating system platforms offering a Java Vrtual Machine (VM) in fact on
all usual platforms. Communication is based on Remote Method Invocation (Java-RMI). A simple
CORBA-integration is guaranteed by Standard CORBA-Mapping via IDL and the future
implementation of the Inter-ORB-Protocol (IIOP) as the main RMI-protocol

A powerful channel functionality is integrated into Swift providing the resources to exchange Swift,
large amounts of data between Swift clients without every need for conversion (indeed the
transmission is performed with objects or object sets (arrays, vectors)). Swift has been tested
extensively in production environments and is used with high data traffic in round-the-clock-
operation gaining very good performance and causing no problems whatsoever.

In addition to all features provided by an ORB Swift offers a secure user and role administration
with the possibility of a very fine right allotment for system objects and resources therefore it is
ideal to be used in a company-wide Internet pool . Another advantage is the ease of use at a
favorable price.
SWIFT Â
An IIT Innovation
SWIFT Â
An IIT Innovation
1.2.1.1Interface com.iit.swift.framework.iApplication

Task:

Über das Application-Interface erfolgt eine Einbindung einer Swift Application in das Swift
Framework.

Package:

com.iit.swift.framework

Methods:

public void setLoginContext(iLoginContext loginContext);

Die Methode wird vom Application Selector nach Erzeugung der Swift Application als
java.awt.Frame aufgerufen und übergibt das aus dem Loginvorgang erzeugte
iLoginContext-Objekt.

Parametername Typ Beschreibung


loginContext iLoginContext Aus dem Loginvorgang erzeugtes
iLoginContext-Objekt.

public void setUsername(String username);

Die Methode wird vom Application Selector nach Erzeugung der Swift Application als
java.awt.Frame aufgerufen und übergibt den Namen des Benutzerkontos.

Parametername Typ Beschreibung


username String Name des Benutzerkontos

public void setBackground(int background);

Die Methode wird vom Application Selector nach Erzeugung der Swift Application als
java.awt.Frame aufgerufen und übergibt den Farbwert des aktuellen Frame-Hintergrundes.

Parametername Typ Beschreibung


background int Farbwert des aktuellen
Framehintergrundes.

1.2.2Swift Service-Managementklassen

1.2.2.1What are Managementklassen?

Managementklassen dienen zur erweiterten Konfiguration von Swift Services. Dies kann dann
nötig werden, wenn ein Parameterstring für die Service-Konfiguration nicht ausreichend ist. Eine
Managementklasse kann bei der Definition eines Swift Services über den Swift Service Manager
angegeben werden. Ist dies der Fall, wird bei Selektion des Services der Manage-Button enabled
und die Managementklasse kann hierüber aktiviert werden.
·Figure 1: Aktivierung einer Managementklasse

Um einen Swift Service managen zu können, muß dieser ein Remote Interface implementieren,
über das die Managementklasse den Service konfiguriert.

1.2.2.2Konventionen für Managementklassen

Als Konventionen für Managementklassen gelten:

· Sie müssen von java.awt.Frame abgeleitet sein,

· sie müssen das Swift-Interface com.iit.swift.framework.iServiceManager


implementieren.

Das Management-Objekt wird als java.awt.Frame vom Swift Service Manager erzeugt. Dann
erfolgt eine Übergabe des Service-Objekts und des Farbwertes des aktuellen Framehintergundes.
Abschließend wird die show Methode von java.awt.Frame durch den Swift Service Manager
aufgerufen.

1.2.2.3Interface com.iit.swift.framework.iServiceManager

Task:

Über das iServiceManager-Interface erfolgt eine Einbindung einer Service-Managementklasse


in den Swift Service Manager.

Package:

com.iit.swift.framework

Methods:
public void setServiceObject(Object object);

Die Methode wird vom Swift Service Manager nach Erzeugung des Management-Objektes als
java.awt.Frame aufgerufen und übergibt das selektierte Service-Objekt. Dieses muß auf
den Typ des entsprechenden Remote Interfaces gecastet werden.

Parametername Typ Beschreibung


object Object Selektiertes Service-Objekt

public void setBackground(int background);

Die Methode wird vom Swift Service Manager nach Erzeugung des Management-Objektes als
java.awt.Frame aufgerufen und übergibt den Farbwert des aktuellen Frame-Hintergrundes.

Parametername Typ Beschreibung


background int Farbwert des aktuellen
Framehintergrundes.
1.2.3Swift Application Tutorial: The Chat Corporation's "Chatterbox"

In diesem Abschnitt betrachten wir die Swift Application "Chatterbox". Hier speziell die als Swift
Application implementierte Klasse "ChatterboxApp" und die Managementklasse "AdvertManager"
für den Swift Service "AdvertServer".

1.2.3.1ChatterboxApp

Die bereits in verschiedenen Abschnitten beschriebene Swift Application "Chatterbox" der virtuellen
Chat Corporation zeigt nach Aktivierung durch den Application Selektor einen "Channel Manager"
an:

·Figure 2: Chatterbox "Channel Manager"

Über den "Channel Manager" können dann Channels gewählt werden, für die eine "ChatSession"
erzeugt wird, mittels derer dann der eigentliche Chat stattfindet.

Der Sourcecode befindet sich in com.charcorp.chat.client.ChatterboxApp.java und


liegt im jar-File swiftsrc.jar der Swift Installation bei.
Hier zunächst der komplette Sourcecode. Wir werden nachfolgend auf die Einzelheiten eingehen:

package com.chatcorp.chat.client;

import java.awt.*;
import java.util.*;
import com.iit.swift.server.*;
import com.iit.swift.framework.*;

/**
* The ChatterboxApp class implements a Swift Application, that is plugged in
* into the Swift Framework. It is derived from java.awt.Frame and implements
* the Swift interface "iApplication", over that the login context is handed over.
*
* After activation, the ChatterboxApp displays a Channel Manager over which the
* user could subscribe on channels, prefixes with "Chat/". To each chat channel
* could be a defined advertising channel with the same name but prefixed with
* "Advert/". For each subscription, ChatterboxApp generates a ChatSession, over
* which the chat takes place.
*
* @author Andreas Mueller
* @version 1.0, 03/10/98
*/
public class ChatterboxApp extends Frame implements iApplication
{
// Channel prefixes
public final static String CHANNELPREFIX = "Chat/";
public final static String ADVERTPREFIX = "Advert/";

// Name of this Application


public final static String APPNAME = "Chatterbox";

// The server manager object


private iLoginContext loginContext = null;

// The background color


private int background = 0;

// Vector of created ChatSession objects


private Vector frames = new Vector();

/**
* Construct the ChatterboxApp
*
*/
public ChatterboxApp()
{
//{{INIT_CONTROLS
setLayout(null);
setVisible(false);
setSize(insets().left + insets().right + 451,insets().top +
insets().bottom + 300);
setBackground(java.awt.Color.orange);
label3 = new java.awt.Label("Chatterbox Channel Manager",Label.CENTER);
label3.setBounds(insets().left + 84,insets().top + 24,276,36);
label3.setFont(new Font("Dialog", Font.BOLD, 16));
add(label3);
channelList = new java.awt.List(0,false);
add(channelList);
channelList.setBounds(insets().left + 24,insets().top + 96,408,110);
channelList.setBackground(java.awt.Color.white);
label2 = new java.awt.Label("Select the channel you wish to subscribe to:");
label2.setBounds(insets().left + 24,insets().top + 72,398,18);
add(label2);
subscribeButton = new java.awt.Button();
subscribeButton.setActionCommand("button");
subscribeButton.setLabel("Subscribe");
subscribeButton.setBounds(insets().left + 168,insets().top + 252,103,25);
subscribeButton.setBackground(java.awt.Color.lightGray);
add(subscribeButton);
ErrorMsg = new java.awt.Label("",Label.CENTER);
ErrorMsg.setVisible(false);
ErrorMsg.setBounds(insets().left + 24,insets().top + 216,408,24);
ErrorMsg.setFont(new Font("Dialog", Font.BOLD, 12));
ErrorMsg.setForeground(java.awt.Color.red);
add(ErrorMsg);
setTitle("ChannelManager");
//}}

//{{INIT_MENUS
//}}

//{{REGISTER_LISTENERS
SymWindow aSymWindow = new SymWindow();
this.addWindowListener(aSymWindow);
SymAction lSymAction = new SymAction();
subscribeButton.addActionListener(lSymAction);
//}}
}

/**
* Construct the ChatterboxApp with a Frame title
*
*/
public ChatterboxApp(String title)
{
this();
setTitle(title);
}

/**
* Set the current user name (implementation fom Application).
* We don't need it.
*
* @param username the current user name
*/
public void setUsername(String username)
{
}

/**
* Set the background color of the Swift Framework
* (implementation fom Application).
*
* @param background the background color
*/
public void setBackground(int background)
{
super.setBackground(new Color(background));
this.background = background;
}

/**
* Set the login context object, created from
* Swift Framnework as a result of successful login.
* (implementation fom iApplication).
*
* @param loginContext the login context object
*/
public void setLoginContext(iLoginContext loginContext)
{
try {
// store it local
this.loginContext = loginContext;

// get available channels for this user


Vector channels = loginContext.getChannels();

// put all channels, prefixes with "Chat/" into the


// selection listbox
for (int i=0; i<channels.size(); i++)
{
String channelName = (String)channels.elementAt(i);
if (channelName.startsWith(CHANNELPREFIX))
channelList.add((String)channels.elementAt(i));
}
}
catch (Exception e) {
ErrorMsg.setText(e.getMessage());
ErrorMsg.show();
}
}

/**
* Show the Frame
*
*/
public synchronized void show()
{
move(50, 50);
super.show();
}

/**
* Add notify
*
*/
public void addNotify()
{
// Record the size of the window prior to calling parents addNotify.
Dimension d = getSize();
super.addNotify();
if (fComponentsAdjusted)
return;

// Adjust components according to the insets


setSize(insets().left + insets().right + d.width,
insets().top + insets().bottom + d.height);
Component components[] = getComponents();
for (int i = 0; i < components.length; i++)
{
Point p = components[i].getLocation();
p.translate(insets().left, insets().top);
components[i].setLocation(p);
}
fComponentsAdjusted = true;
}

// Used for addNotify check.


boolean fComponentsAdjusted = false;

//{{DECLARE_CONTROLS
java.awt.Label label3;
java.awt.List channelList;
java.awt.Label label2;
java.awt.Button subscribeButton;
java.awt.Label ErrorMsg;
//}}

//{{DECLARE_MENUS
//}}

/**
* close all ChatSession Frames
*
*/
private void closeChilds()
{
for (int i=0; i<frames.size(); i++)
{
Frame f = (Frame)frames.elementAt(i);
f.hide();
f.dispose();
}
}

// Event classes and methods


class SymWindow extends java.awt.event.WindowAdapter
{
public void windowClosed(java.awt.event.WindowEvent event)
{
Object object = event.getSource();
if (object == ChatterboxApp.this)
ChatterboxApp_WindowClose(event);
}

public void windowClosing(java.awt.event.WindowEvent event)


{
Object object = event.getSource();
if (object == ChatterboxApp.this)
ChatterboxApp_WindowClosing(event);
}
}

void ChatterboxApp_WindowClosing(java.awt.event.WindowEvent event)


{
try {
// close all ChatSession objects
closeChilds();

// release this application


loginContext.releaseApplication(APPNAME);

setVisible(false);
} catch (Exception e) {}
}

void ChatterboxApp_WindowClose(java.awt.event.WindowEvent event)


{
try {
// close all ChatSession objects
closeChilds();

// release this application


loginContext.releaseApplication(APPNAME);

setVisible(false);
} catch (Exception e) {}
}

class SymAction implements java.awt.event.ActionListener


{
public void actionPerformed(java.awt.event.ActionEvent event)
{
Object object = event.getSource();
if (object == subscribeButton)
subscribeButton_Action(event);
}
}

void subscribeButton_Action(java.awt.event.ActionEvent event)


{
try {
// get the selected channel name
String channel = channelList.getSelectedItem();
if (channel != null)
{
// create a new chat session
ChatSession cs = new ChatSession(channel,
ADVERTPREFIX+
channel.substring(CHANNELPREFIX.length()),
loginContext,background);

// remember the created chat session object for a later closeChilds...


frames.addElement(cs);
ErrorMsg.hide();
}
} catch (Exception e)
{
ErrorMsg.setText(e.getMessage());
ErrorMsg.show();
}
}
}
1.2.3.1.1Implementation des iApplication-Interfaces

Die Implementation des iApplication-Interfaces erfolgt durch implements iApplication


in der Klassendeklaration sowie durch Implementation der Methoden setLoginContext,
setUsername und setBackground.

Klassendeklaration:

package com.chatcorp.chat.client;

import java.awt.*;
import java.util.*;
import com.iit.swift.server.*;
import com.iit.swift.framework.*;

public class ChatterboxApp extends Frame implements iApplication

Implementation der Methode setLoginContext:

public void setLoginContext(iLoginContext loginContext)


{
try {
// store it local
this.loginContext = loginContext;

// get available channels for this user


Vector channels = loginContext.getChannels();

// put all channels, prefixes with "Chat/" into the


// selection listbox
for (int i=0; i<channels.size(); i++)
{
String channelName = (String)channels.elementAt(i);
if (channelName.startsWith(CHANNELPREFIX))
channelList.add((String)channels.elementAt(i));
}
}
catch (Exception e) {
ErrorMsg.setText(e.getMessage());
ErrorMsg.show();
}
}

Das iLoginContext-Objekt wird lokal gespeichert. Dann werden alle für diesen Benutzer
freigegebenen Channels abgefragt. Nur solche, die mit dem vorgegebenen Prefix "Chat/"
beginnen, werden in der Auswahllistbox dargestellt. Bei Fehlern wird eine Fehlermeldung mit dem
Meldungstext der Exception ausgegeben.

Implementation der Methode setUsername:

public void setUsername(String username)


{
}

Der Benutzername wird nicht benötigt.


Implementation der Methode setBackground:

public void setBackground(int background)


{
super.setBackground(new Color(background));
this.background = background;
}

Der Background des Frames wird auf den übergebenen Wert gesetzt. Dies ist sinnvoll, um die
Homogenität des Erscheinungsbildes aller Frames des Swift Frameworks zu erhalten. Der
Farbwert wird lokal gespeichert.

1.2.3.1.2Ablaufbeschreibung der "ChatterboxApp"

Wir wollen an dieser Stelle nur kurz auf den Ablauf der Chat-Applikation eingehen und nicht jede
verwendete Klasse beschreiben. Dies würde den Rahmen dieses Dokumentes sprengen. Sind
nähere Informationen gewünscht, sollte ein Blick in den gut dokumentierten Sourcecode
ausreichen.

Die Funktionalität des "Channel Manager" beschränkt sich auf:

· Anzeige der verfügbaren Channels

· Erzeugung eines ChatSession-Objektes bei Subskription

· Schließen aller ChatSession-Objekte bei Schließen des "Channel Manager" sowie Freigabe
der Swift Application "Chatterbox"

Das Auslesen der verfügbaren Channels erfolgt in der Methode setLoginContext und wurde
bereits beschrieben.

Wird der Subscribe-Button gedrückt, führt das zur Ausführung dieses Event-Handlers:

void subscribeButton_Action(java.awt.event.ActionEvent event)


{
try {
// get the selected channel name
String channel = channelList.getSelectedItem();
if (channel != null)
{
// create a new chat session
ChatSession cs = new ChatSession(channel,
ADVERTPREFIX+
channel.substring(CHANNELPREFIX.length()),
loginContext,background);

// remember the created chat session object for a later closeChilds...


frames.addElement(cs);
ErrorMsg.hide();
}
} catch (Exception e)
{
ErrorMsg.setText(e.getMessage());
ErrorMsg.show();
}
}

Hier wird der selektierte Channelname ermittelt und ein ChatSession-Objekt erzeugt. Diesem
Objekt wird im Konstruktor der Channelname, der Name des zugehörigen Advertising-Channels
sowie iLoginContext-Objekt und Backgroundfarbwert mitgegeben. Das erzeugte
ChatSession-Objekt wird in einem Vector gespeichert, um bei einem Schließen des "Channel
Manager" alle geöffneten ChatSession-Objekte schließen zu können. Bei Fehlern wird eine
Fehlermeldung angezeigt.

Die ChatSession-Klasse wird hier nicht gesondert beschrieben. Bitte schauen Sie in den
Sourcecode.

Das Schließen des "Channel Manager" kann auf 2 Arten erfolgen. Zum einen, indem der Benutzer
das Frame schließt und zum anderen, wenn im Application Selector der Logout-Button gedrückt
wurde. Die Aktionen werden in verschiedenen Event-Handlern bearbeitet:

void ChatterboxApp_WindowClosing(java.awt.event.WindowEvent event)


{
try {
// close all ChatSession objects
closeChilds();

// release this application


loginContext.releaseApplication(APPNAME);

setVisible(false);
} catch (Exception e) {}
}

void ChatterboxApp_WindowClose(java.awt.event.WindowEvent event)


{
try {
// close all ChatSession objects
closeChilds();

// release this application


loginContext.releaseApplication(APPNAME);

setVisible(false);
} catch (Exception e) {}
}

In beiden werden über die Methode closeChilds die ChatSession-Objekte geschlossen, die
Applikation "Chatterbox" wird freigegeben und der "Channel Manager" geschlossen (ok, ok, man
hätte das in eine Methode auslagern können...).

Die Methode closeChilds schließt alle ChatSession-Objekte:

private void closeChilds()


{
for (int i=0; i<frames.size(); i++)
{
Frame f = (Frame)frames.elementAt(i);
f.hide();
f.dispose();
}
}
1.2.3.2AdvertManager

Die Klasse com.chatcorp.chat.client.AdvertManager dient als Managementklasse für


die Swift Services "AdvertServer" in ihrer jeweiligen Ausprägung für die entsprechenden
Advertising-Channels. Die Klasse wird durch den Swift Service Manager über den Manage-Button
aktiviert und stellt sich wie folgt dar:

·Figure 3: Managementklasse "AdvertManager"

Die Darstellung zeigt einen nichtkonfigurierten AdvertServer. Dieser hat den Standardtext "Please
configure me!" eingestellt.
Der komplette Sourcecode der AdvertManager-Klasse:

package com.chatcorp.chat.client;

import java.awt.*;
import com.iit.swift.server.*;
import com.iit.swift.framework.*;
import com.chatcorp.chat.server.*;
import symantec.itools.awt.MultiList;
import symantec.itools.awt.FormattedTextField;

/**
* The AdvertManager class implements a manager Application for
* the Swift service "AdvertServer" and as such it is defined and could
* activated through the Swift Service Manager of the Swift Framework.
*
* The class is derived from java.awt.Frame and implements the
* Swift interface "iServiceManager". Over methods of this interface the
* ServiceObject and current background-color of the Swift Frameworks
* hands over.
*
* This management-class communicates with the AdvertServer through
* the remote interface iAdvertServer.
*
* @author Andreas Mueller
* @version 1.0, 03/10/98
*/
public class AdvertManager extends Frame implements iServiceManager
{
// The advert server interface
private iAdvertServer advertServer = null;

/**
* Construct the AdvertManager
*
*/
public AdvertManager()
{
//{{INIT_CONTROLS
setLayout(null);
setVisible(false);
setSize(insets().left + insets().right + 636,
insets().top + insets().bottom + 397);
textList = new symantec.itools.awt.MultiList();
try {
java.lang.String[] tempString = new java.lang.String[2];
tempString[0] = new java.lang.String("Left");
tempString[1] = new java.lang.String("Center");
textList.setColumnAlignments(tempString);
}
catch(java.beans.PropertyVetoException e) { }
textList.setLayout(null);
try {
java.lang.String[] tempString = new java.lang.String[2];
tempString[0] = new java.lang.String("450");
tempString[1] = new java.lang.String("102");
textList.setColumnSizes(tempString);
}
catch(java.beans.PropertyVetoException e) { }
try {
textList.setAllowSorting(false);
}
catch(java.beans.PropertyVetoException e) { }
try {
java.lang.String[] tempString = new java.lang.String[2];
tempString[0] = new java.lang.String("Text");
tempString[1] = new java.lang.String("Delay (s)");
textList.setHeadings(tempString);
}
catch(java.beans.PropertyVetoException e) { }
textList.setBounds(insets().left + 42,insets().top + 66,552,169);
textList.setBackground(java.awt.Color.white);
add(textList);
editText = new java.awt.TextField();
editText.setBounds(insets().left + 42,insets().top + 252,444,23);
add(editText);
editDelay = new symantec.itools.awt.FormattedTextField();
editDelay.setMask("99");
editDelay.setBounds(insets().left + 498,insets().top + 252,95,22);
add(editDelay);
editDelay.setCursor(new Cursor(Cursor.TEXT_CURSOR));
insertButton = new java.awt.Button();
insertButton.setLabel("Insert");
insertButton.setBounds(insets().left + 114,insets().top + 282,66,24);
insertButton.setBackground(java.awt.Color.green);
add(insertButton);
replaceButton = new java.awt.Button();
replaceButton.setLabel("Replace");
replaceButton.setBounds(insets().left + 186,insets().top + 282,66,24);
replaceButton.setBackground(java.awt.Color.orange);
add(replaceButton);
removeButton = new java.awt.Button();
removeButton.setLabel("Remove");
removeButton.setBounds(insets().left + 258,insets().top + 282,66,24);
removeButton.setBackground(java.awt.Color.red);
add(removeButton);
okButton = new java.awt.Button();
okButton.setLabel("Save & Exit");
okButton.setBounds(insets().left + 42,insets().top + 342,99,31);
okButton.setBackground(java.awt.Color.lightGray);
add(okButton);
cancelButton = new java.awt.Button();
cancelButton.setLabel("Cancel");
cancelButton.setBounds(insets().left + 492,insets().top + 342,99,31);
cancelButton.setBackground(java.awt.Color.lightGray);
add(cancelButton);
label1 = new java.awt.Label("Advertising Server Configurator",Label.CENTER);
label1.setBounds(insets().left + 48,insets().top + 18,546,40);
label1.setFont(new Font("SansSerif", Font.BOLD, 18));
add(label1);
appendButton = new java.awt.Button();
appendButton.setLabel("Append");
appendButton.setBounds(insets().left + 42,insets().top + 282,66,24);
appendButton.setBackground(java.awt.Color.green);
add(appendButton);
setTitle("");
//}}

//{{REGISTER_LISTENERS
SymWindow aSymWindow = new SymWindow();
this.addWindowListener(aSymWindow);
SymAction lSymAction = new SymAction();
textList.addActionListener(lSymAction);
SymText lSymText = new SymText();
editText.addTextListener(lSymText);
editDelay.addTextListener(lSymText);
SymItem lSymItem = new SymItem();
textList.addItemListener(lSymItem);
insertButton.addActionListener(lSymAction);
replaceButton.addActionListener(lSymAction);
removeButton.addActionListener(lSymAction);
appendButton.addActionListener(lSymAction);
cancelButton.addActionListener(lSymAction);
okButton.addActionListener(lSymAction);
//}}
//{{INIT_MENUS
//}}
}

/**
* Add notify
*
*/
public void addNotify()
{
// Record the size of the window prior to calling parents addNotify.
Dimension d = getSize();

super.addNotify();

if (fComponentsAdjusted)
return;

// Adjust components according to the insets


setSize(insets().left + insets().right + d.width,
insets().top + insets().bottom + d.height);
Component components[] = getComponents();
for (int i = 0; i < components.length; i++)
{
Point p = components[i].getLocation();
p.translate(insets().left, insets().top);
components[i].setLocation(p);
}
fComponentsAdjusted = true;
}

// Used for addNotify check.


boolean fComponentsAdjusted = false;

/**
* Show this Frame
*
*/
public synchronized void show()
{
move(50,50);
super.show();
setButtons();
}

//{{DECLARE_CONTROLS
symantec.itools.awt.MultiList textList;
java.awt.TextField editText;
symantec.itools.awt.FormattedTextField editDelay;
java.awt.Button insertButton;
java.awt.Button replaceButton;
java.awt.Button removeButton;
java.awt.Button okButton;
java.awt.Button cancelButton;
java.awt.Label label1;
java.awt.Button appendButton;
//}}

/**
* Set the service object (implementation from Manager)
*
* @param object the advert server remote object
*/
public void setServiceObject(Object object)
{
try {
// cast it to the iAdvertServer interface
advertServer = (iAdvertServer)object;

// get actual advert text and delay times


String[] advertText = advertServer.getAdvertText();
int[] delay = advertServer.getDelay();

// put it into the multilist


for (int i=0;i<advertText.length;i++)
{
textList.addTextCell(i,0,advertText[i]);
textList.addTextCell(i,1,new String().valueOf(delay[i]));
}
} catch (Exception e)
{
System.out.println("got exception: "+e.getMessage());
}
}

/**
* Set the background color of the Swift Framework
* (implementation fom Manager).
*
* @param background the background color
*/
public void setBackground(int background)
{
setBackground(new Color(background));
}

/**
* Set the buttons according to some component states
*
*/
private void setButtons()
{
appendButton.setEnabled(editText.getText().length() > 0 &&
editDelay.getText().length() > 0);
insertButton.setEnabled(editText.getText().length() > 0 &&
editDelay.getText().length() > 0 &&
textList.getSelectedRow() != -1);
replaceButton.setEnabled(editText.getText().length() > 0 &&
editDelay.getText().length() > 0 &&
textList.getSelectedRow() != -1);
removeButton.setEnabled(textList.getSelectedRow() != -1);
}

// Event classes

class SymWindow extends java.awt.event.WindowAdapter


{
public void windowClosed(java.awt.event.WindowEvent event)
{
Object object = event.getSource();
if (object == AdvertManager.this)
AdvertManager_WindowClose(event);
}

public void windowClosing(java.awt.event.WindowEvent event)


{
Object object = event.getSource();
if (object == AdvertManager.this)
AdvertManager_WindowClosing(event);
}
}

void AdvertManager_WindowClosing(java.awt.event.WindowEvent event)


{
dispose();
}

void AdvertManager_WindowClose(java.awt.event.WindowEvent event)


{
dispose();
}

class SymAction implements java.awt.event.ActionListener


{
public void actionPerformed(java.awt.event.ActionEvent event)
{
Object object = event.getSource();
if (object == insertButton)
insertButton_Action(event);
else if (object == replaceButton)
replaceButton_Action(event);
else if (object == removeButton)
removeButton_Action(event);
else if (object == appendButton)
appendButton_Action(event);
else if (object == cancelButton)
cancelButton_Action(event);
else if (object == okButton)
okButton_Action(event);
}
}

class SymText implements java.awt.event.TextListener


{
public void textValueChanged(java.awt.event.TextEvent event)
{
Object object = event.getSource();
if (object == editText)
editText_TextValueChanged(event);
else if (object == editDelay)
editDelay_textValueChanged(event);
}
}

void editText_TextValueChanged(java.awt.event.TextEvent event)


{
setButtons();
}

void editDelay_textValueChanged(java.awt.event.TextEvent event)


{
setButtons();
}

class SymItem implements java.awt.event.ItemListener


{
public void itemStateChanged(java.awt.event.ItemEvent event)
{
Object object = event.getSource();
if (object == textList)
textList_itemStateChanged(event);
}
}

void textList_itemStateChanged(java.awt.event.ItemEvent event)


{
setButtons();
int sRow = textList.getSelectedRow();
if (sRow != -1)
{
editText.setText(textList.getCellText(sRow,0));
editDelay.setText(textList.getCellText(sRow,1));
}
}

void appendButton_Action(java.awt.event.ActionEvent event)


{
int nRows = textList.getNumberOfRows();
textList.addTextCell(nRows,0,editText.getText());
textList.addTextCell(nRows,1,editDelay.getText());
}

void insertButton_Action(java.awt.event.ActionEvent event)


{
int nRows = textList.getNumberOfRows();
int sRow = textList.getSelectedRow();
for (int i=nRows; i>sRow+1; i--)
{
textList.addTextCell(i,0,textList.getCellText(i-1,0));
textList.addTextCell(i,1,textList.getCellText(i-1,1));
}
textList.addTextCell(sRow+1,0,editText.getText());
textList.addTextCell(sRow+1,1,editDelay.getText());
textList.selectRow(sRow);
}

void replaceButton_Action(java.awt.event.ActionEvent event)


{
int sRow = textList.getSelectedRow();
textList.addTextCell(sRow,0,editText.getText());
textList.addTextCell(sRow,1,editDelay.getText());
}

void removeButton_Action(java.awt.event.ActionEvent event)


{
textList.removeRow(textList.getSelectedRow());
setButtons();
}

void cancelButton_Action(java.awt.event.ActionEvent event)


{
dispose();
}

void okButton_Action(java.awt.event.ActionEvent event)


{
String[] advertText = null;
int[] delay = null;
int nRows = textList.getNumberOfRows();
if (nRows > 0)
{
// create new arrays from the multilist
advertText = new String[nRows];
delay = new int[nRows];

// fill the arrays


for (int i=0;i<nRows;i++)
{
advertText[i] = textList.getCellText(i,0);
delay[i] = Integer.parseInt(textList.getCellText(i,1));
}
try {
// set the new advert text and delay times
// on advert server and save it
advertServer.setAdvertText(advertText);
advertServer.setDelay(delay);
advertServer.save();
} catch(Exception e)
{
System.out.println("got exception: "+e.getMessage());
}
}
dispose();
}
}

1.2.3.2.1Implementation des iServiceManager-Interfaces

Die Implementation des iServiceManager-Interfaces erfolgt durch implements


iServiceManager in der Klassendeklaration sowie durch Implementation der Methoden
setServiceObject und setBackground.

Klassendeklaration:

package com.chatcorp.chat.client;

import java.awt.*;
import com.iit.swift.server.*;
import com.iit.swift.framework.*;
import com.chatcorp.chat.server.*;
import symantec.itools.awt.MultiList;
import symantec.itools.awt.FormattedTextField;

public class AdvertManager extends Frame implements iServiceManager


Implementation der Methode setServiceObject:

public void setServiceObject(Object object)


{
try {
// cast it to the iAdvertServer interface
advertServer = (iAdvertServer)object;

// get actual advert text and delay times


String[] advertText = advertServer.getAdvertText();
int[] delay = advertServer.getDelay();

// put it into the multilist


for (int i=0;i<advertText.length;i++)
{
textList.addTextCell(i,0,advertText[i]);
textList.addTextCell(i,1,new String().valueOf(delay[i]));
}
} catch (Exception e)
{
System.out.println("got exception: "+e.getMessage());
}
}

Die Methode wird vor Anzeige des Frames vom Swift Service Manager aufgerufen und übergibt
den aktuell selektierten AdvertServer. Dieses Object wird auf das Remote Interface
iAdvertServer gecastet. Über dieses Interface wird dann die aktuelle Konfiguration der
Werbetexte und Delaytimes ausgelesen und dargestellt.

Implementation der Methode setBackground:

public void setBackground(int background)


{
setBackground(new Color(background));
}

Die aktuelle Hintergrundfarbe des Swift Frameworks wird auch für das AdvertManager-Frame
gesetzt.
1.2.3.2.2Speichern der neu eingestellten AdvertServer-Konfiguration

Auf das "Button-Juggling" bei der Konfiguration der Werbetextzeilen wollen wir hier nicht weiter
eingehen. Interessant ist letztlich die abschließende Speicherung der eingestellten AdvertServer-
Konfiguration. Diese erfolgt, wenn der Save&Exit-Button gedrückt wurde:

void okButton_Action(java.awt.event.ActionEvent event)


{
String[] advertText = null;
int[] delay = null;
int nRows = textList.getNumberOfRows();
if (nRows > 0)
{
// create new arrays from the multilist
advertText = new String[nRows];
delay = new int[nRows];

// fill the arrays


for (int i=0;i<nRows;i++)
{
advertText[i] = textList.getCellText(i,0);
delay[i] = Integer.parseInt(textList.getCellText(i,1));
}
try {
// set the new advert text and delay times
// on advert server and save it
advertServer.setAdvertText(advertText);
advertServer.setDelay(delay);
advertServer.save();
} catch(Exception e)
{
System.out.println("got exception: "+e.getMessage());
}
}
dispose();
}

Hier wird zuerst geprüft, ob überhaupt Werbetextzeilen vorhanden sind (keinen Text zu
konfigurieren ist nicht möglich). Dann werden diese mit den Delaytimes ausgelesen und schließlich
mittels setAdvertText, setDelay und save an den AdvertServer übertragen und gespeichert.

1.2.3.2.3Kompilieren, Installation

Erzeugen Sie ein neues Directory swiftsrc, stellen Sie sicher, daß dieses Directory im
CLASSPATH referenziert wird und wechseln Sie in dieses Directory. Entpacken Sie das jar-File
swiftsrc.jar mit

> jar xvf swiftsrc.jar

Unter dem Directory swiftsrc wird ein Directorybaum angelegt, dessen oberste Stufe com ist.

Setzen Sie sich in das Directory, in dem die Sourcen des Packages

com.chatcorp.chat.client

befinden.

Kompilieren Sie die Java-Sourcefiles mit


> javac *.java

Erzeugen Sie die benötigten Stubs/Skeletons mit

> rmic com.chatcorp.chat.client.TalkzoneListener


com.chatcorp.chat.client.ListboxListener
com.chatcorp.chat.client.AdvertListener

Erzeugt wurden die entsprechenden _Stub.class und _Skel.class.

Auf der Client-Seite wird der Stub des AdvertServers benötigt. Um diesen zu erzeugen, setzen Sie
sich in das Directory, in dem sich die Sourcen des Packages

com.chatcorp.chat.server

befinden.

Kompilieren Sie die Java-Sourcefiles mit

> javac *.java

Sie müßten jetzt iAdvertServer.class und AdvertServer.class in diesem Directory


vorfinden.

Erzeugen Sie die Stubs/Skeletons des AdvertServers mit

> rmic com.chatcorp.chat.server.AdvertServer

Erzeugt wurden AdvertServer_Stub.class und AdvertServer_Skel.class.

Setzen Sie sich in das Directory swiftsrc und erzeugen das jar-File chatterbox.jar mit

> jar cvf chatterbox.jar com/chatcorp/chat/client/*.class


com/chatcorp/chat/server/*Stub.class
com/chatcorp/chat/server/iAdvertServer.class

Sie haben jetzt wieder das jar-File, das nötig ist, um es in das Swift Framework einzubinden. Tun
Sie das z. B. mit

> jre -cp swiftframework.jar;swiftrmi.jar;chatterbox.jar


com.iit.swift.framework.SwiftLoginApp <host> <port>

... oder schauen Sie für andere Formen von Aufrufen (z. B. als Applet) in das Kapitel "Aufrufe Swift
Relay Server, Swift Framework".