Beruflich Dokumente
Kultur Dokumente
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.
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.
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.
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.
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
· 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
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
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:
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.
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:
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.
Die Methode wird vom Application Selector nach Erzeugung der Swift Application als
java.awt.Frame aufgerufen und übergibt den Namen des Benutzerkontos.
Die Methode wird vom Application Selector nach Erzeugung der Swift Application als
java.awt.Frame aufgerufen und übergibt den Farbwert des aktuellen Frame-Hintergrundes.
1.2.2Swift Service-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.
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:
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.
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.
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:
Ü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.
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/";
/**
* 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;
/**
* 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;
//{{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();
}
}
setVisible(false);
} catch (Exception e) {}
}
setVisible(false);
} catch (Exception e) {}
}
Klassendeklaration:
package com.chatcorp.chat.client;
import java.awt.*;
import java.util.*;
import com.iit.swift.server.*;
import com.iit.swift.framework.*;
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.
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.
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.
· 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:
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:
setVisible(false);
} catch (Exception e) {}
}
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 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;
/**
* 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;
/**
* 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
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;
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.
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:
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
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.
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.
Setzen Sie sich in das Directory swiftsrc und erzeugen das jar-File chatterbox.jar mit
Sie haben jetzt wieder das jar-File, das nötig ist, um es in das Swift Framework einzubinden. Tun
Sie das z. B. mit
... oder schauen Sie für andere Formen von Aufrufen (z. B. als Applet) in das Kapitel "Aufrufe Swift
Relay Server, Swift Framework".