═══ 1. Ъber EDisPM ═══ EDisPM V1.1d fБr OS/2 Warp v3 release: 18.05.1996 (c) by MS-CSE Der Multi-User-Editor EDisPM realisiert einen Editor, bei dem mehrere Benutzer an verschiedenen Rechnern in einem Netzwerk denselben Text gleichzeitig ansehen und bearbeiten kФnnen. Оnderungen werden gegeneinander abgesichert und miteinander kommuniziert. Ein Editorserver Бbernimmt fБr einen Text die Textverwaltung und synchronisiert Zugriffe mehrerer Editorclients darauf. Die Kommunikation erfolgt Бber SOM/DSOM. Das Programm wurde innerhalb eines Fortgeschrittenenpraktikums mit dem Thema "Implementierung eines verteilten Editors mit Hilfe der objektorientierten CORBA-Technologie" programmiert, das ich im Sommersemester 1995 am Institut fБr Informatik der TU-MБnchen am Lehrstuhl "Softwaretechnik" von Herrn Prof. Dr. Albert Endres erstellte. Betreut hat mich dabei Herr Christoph Hofmann. Kern dieses Fortgeschrittenpraktikum war es, CORBA, SOM und DSOM zu untersuchen, miteinander zu vergleichen und Anhand eines Beispielprogrammes die Arbeitsweise zu demonstrieren. Die Version 1.1 wurde fБr einen dreiteiligen Artikel Бber die SOMObjects- Programmierung in der OS/2 Inside Ausgabe 6/96 bis 8/96 erstellt. Achtung! Dieses Programm ist hauptsДchlich zur Demonstration der FДhigkeiten von SOM und DSOM gedacht. Es sind keinerlei Garantien damit Verbunden! ═══ 2. Installation ═══ Der verteilte Editor EDisPM kann entweder auf einem Rechner innerhalb einer Workplace DSOM-Umgebung installiert werden, diese steht auf jedem unter OS/2 Warp v3 laufenden Rechner zur VerfБgung, oder in einem Netzwerk, das Бber den IBM DSOM Workgroup Enabler verfБgt. Der DSOM Workgroup Enabler ist im IBM SOMObjects Developer Toolkit enthalten. Dieses Programm wurde von mir sowohl unter Workplace DSOM wie auch unter Workgroup DSOM gestestet. FБr die Installation benФtigte Dateien:  INSTALL.CMD: (Installationsbatch)  EDISPM.EXE: (Editorclient)  EDISSERV.DLL: (Editorserver-SOM-Objekte)  EDISPM.IR: (Interface Repository)  STARTEDS.CMD: (Batch zum Starten des DSOM Daemons somdd.exe)  README.TXT: (Informationsdatei)  EDISPM.INF: (Dieses Online-Handbuch) ═══ 2.1. auf einem Rechner (Workplace DSOM) ═══ Die Installation erfolgt Бber das Programm INSTALL.CMD. Es kopiert die benФtigten Dateien in ein Verzeichnis ihrer Wahl und legt einen Ordner EDisPM auf dem Desktop an. Die Datei EDISPM.IR wird in den Suchpfad des Interface Repository aufgenommen (Zeile "SET SOMIR=..." in der CONFIG.SYS). Im neu erstellten Ordner EDisPM befinden folgende drei Dateien:  EDisPM Client: Verweis auf die Datei EDISPM.EXE  EDisPM Server: Verweis auf die Datei STARTEDS.CMD  EDisPM Online: Verweis auf die Datei EDISPM.INF ═══ 2.2. in einem Netzwerk (Workgroup DSOM) ═══ Dieses Programm wurde auf einem mit dem OS/2 Lan Server 4.0 betriebenen Netzwerk getestet. Folgende Informationen werden Ihnen bei der Installation helfen:  Das Netzwerk muс Бber TCP/IP verfБgen, Hostnamen und TCP/IP-Addressen mБssen fБr jede Station eingerichtet sein.  In der CONFIG.SYS jedes Rechners muс sowohl der Username als auch der Hostname gesetzt sein.  Auf jedem Rechner muс der IBM DSOM Workgroup Enabler installiert sein, also die workgroupfДhige DSOM Umgebung.  Die Datei EDISSERV.DLL enthДlt die DSOM-Klassen - EDService, - EDText, - EDLine, die vom Standard-Server Programm SOMDSVR.EXE von der Klasse SOMDServer verwaltet werden.  Der Name, unter dem die drei Klassen zusammengefaсt werden (Server-Alias), ist nicht festgelegt. Der Client erzeugt ein neues Objekt der Klasse EDService am nДchstbesten Server.  Die fБr das Interface Repository benФtigten Informationen sind in der Interface Repository Datei EDISPM.IR enthalten.  Das Implementation Repository muс sich in einer shared Datei befinden, d.h. SOMDDIR=... muс auf jedem Rechner auf ein von allen zugДngliches gleiches Verzeichnis zeigen.  Das Implementation Repository wird von Editorclient EDisPM.EXE automatisch mit folgenden Informationen gesetzt, wenn noch keine Klasse EDService enthalten ist: - Implementation alias: EDisServ - Program name: SOMDSVR.EXE - Multithreaded: No - Server Class: SOMDServer - Host name: Der gesetzte Hostname des Rechners, auf dem der Client gestartet wird. Gegebenfalls muс das Implementation Repository von Hand mit dem Tool regimpl.exe gesetzt werden.  Die Datei EDISSERV.DLL muс sowohl auf dem Server-Rechner, als auch auf jedem Client-Rechner verfБgbar sein, da die Klasse EDLine auch vom Editorclient lokal benФtigt wird. Schicken Sie mir bitte Informationen, wie das Verhalten des Editors bei Ihnen im Echtzeitbetrieb aussieht und ob er sich nach Ihrer Ansicht als verwendbar herrausstellt. ═══ 3. Bedienung ═══ Der Editor besteht aus zwei getrennten ablaufenden Programmteilen, die miteinander kommunizieren:  Editorserver (Service): Verwaltet eine Textdatei und synchronisiert die Zugriffe mehrere Editorclients.  Editorclient: Bearbeitet eine lokale Version des Textes und kommuniziert mit dem Server zeilenweise die geschehenen Оnderungen. Die lokale Version des Textes wird regelmДсig an die vom Server verwaltete zentrale Version des Textes angepaсt. Ein Client kann vom Server einzelne Zeilen lesen und sich reservieren/sperren lassen (d.h. auсer ihm dБrfen keine anderen Clients auf diese gesperrte Zeile schreibend zugreifen oder sperren lassen, lesen ist erlaubt). ZusДtzlich hat jede Zeile eine Versionsnummer, die bei jeder Оnderung hochgezДhlt wird. Weicht die Versionsnummer einer Zeile beim Server, die Бberschrieben werden soll bzw. fБr die eine Sperre beantragt wird, von der Versionsnummer der Zeile im Client ab, wird keine Оnderung zugelassen. Die vorgenommenen Оnderungen am zentralen Text werden in einer Eventliste gespeichert. Aus dieser Eventliste ermitteln die Clients regelmДсig die geschehenen Оnderungen seit dem letzen Update und ziehen sie auf den lokalen Text nach (Update). Clients mБssen sich zu Beginn beim Server unter einem Benutzernamen anmelden. Dieser Benutzername wird benФtigt um zu vermerken, wer die Sperre einer Zeile hДlt. Auсerdem kФnnen sich die Clients die Namen der angemeldeten Benutzer holen und anzeigen. ═══ 3.1. Starten des Programmes ═══ Bevor ein Editorclient (EDISPM.EXE) gestartet werden kann, muс der DSOM-Daemon SOMDD.EXE laufen. PrБfen Sie nach, ob das Programm SOMDD.EXE gerade lДuft, ansonsten starten Sie es mittels der mitgelieferten Batchdatei STARTEDS.CMD. Anschlieсend kann ein Editorclient gestartet werden, rufen Sie dazu die Datei EDISPM.EXE auf. Folgende zwei Parameter kФnnen Бbergeben werden:  Benutzername: Jeder Editorclient muс unter einem anderen Namen gestartet werden. Wird dieser Parameter nicht Бbergeben, erscheint beim Start des Programmes ein Dialog, in dem der Benutzername angegeben werden muс.  Textname: Ein angegebener Text wird sofort geФffnet. (Siehe auch "Laden eines Textes") Zur Textverwaltung wird eine Profile-Datei (EDISPM.INI) benФtigt, die von allen Editorclients zugДnglich sein muс. Die Pfadangabe dieser Datei ist auf jedem Rechner in der OS/2-Anwendungskonfigurationsdatei OS2.INI abgelegt..br Fehlt diese Pfadangabe, wird sie beim Start des Editorclients innerhalb eines Dialoges erfragt. Geben Sie den Pfad zu der gewБnschten INI-Datei an und betДtigen Sie den OK-Druckknopf. Nach dem Start des Editorclients wird automatisch БberprБft, ob die benФtigte DSOM-Klasse EDService (enthalten in EDISSERV.DLL) im Implementation Repository registriert ist. Gegebenfalls wird ein Eintrag neu erstellt (siehe Technik). Ъber den MenБpunkt "Hilfe-Produktinformation" kann die Programminformation angezeigt werden. ═══ 3.2. Laden eines Textes ═══ Ъber den MenБpunkt "Datei-Щffnen" wird der Textverwaltungsdialog angezeigt. In einem Auswahlfenster werden zu einem Text folgende drei Angaben angezeigt: Bezeichnung Beschreibung Name Ein Textname, der zum Aufruf des Textes dient und nicht zweimal vorhanden dein darf. Ein Textname kann beim Start als zweiter Aufrufparameter Бbergeben werden. Status Der Eintrag "lДuft" zeigt an, daс dieser Text derzeit von einem Benutzer bearbeitet wird. Dateipfad Der Pfad, unter dem die Textdatei gespeichert ist. Als Textdateien sind alle ASCII-Dateien geeignet, die Textendung ist egal. Die Datei muс von allen Rechnern erreichbar sein! Innerhalb des Dialoges kann ein Texteintrag markiert und durch BestДtigung des OK-Druckknopfes geladen werden. Mit dem Abbruch-Druckknopf wird der Dialog abgebrochen. Ъber den Neu-Druckknopf kann ein neuer Texteintrag erzeugt werden. Geben Sie dazu einen Textnamen und den Dateipfad des zu bearbeitenden Textes an. Besteht die Datei noch nicht, wird sie automatisch erzeugt. Ъber den Dateiauswahl-Druckknopf kФnnen Sie den Dateipfad Бber einen Dateiauswahldialog eingeben. Ъber den LФschen-Druckknopf wird ein Texteintrag (ohne Warnung) gelФscht. Wird der Text gerade bearbeitet (Status=lДuft) wird gewarnt. Die eigentliche Textdatei bleibt dabei unangetastet. ═══ 3.3. Editieren eines Textes ═══ Ъber den MenБpunkt "Ansicht-Split Horizontal" bzw. "Ansicht-Split Vertikal" kann die Anzeige des Text-und Benutzerfensters eingestellt werden. Im Benutzerfenster werden die Benutzernamen angezeigt, die derzeit den Text sehen bzw. bearbeiten. In der Statuszeile werden verschiedene Informationen zu der Textzeile, in der sich der Textcursor befindet, angezeigt. Der Text kann innerhalb des Textfensters mit den folgenden Eingabetasten editiert werden. Оnderungen werden mit den Editorserver kommuniziert und "abgesprochen". Etwa zweimal pro Minute bzw. Бber den MenБpunkt "Ansicht-Aktualisieren" wird ein Update des Textes durchgefБhrt, das heiсt im Editorserver getДtigten Оnderungen werden nachgezogen. Dabei kann eine VerzФgerung entstehen. Taste Funktion Cursor Bewegung des Textcursors. VerlДсt der Cursor eine gesperrte Zeile, wird diese entsperrt und zum Editorserver geschickt. Die neue Zeileninformation wird in der Statuszeile angezeigt. Pos 1 Positionierung des Textcursors auf dem ersten Zeichen der Zeile. Ende Positionierung des Textcursors auf dem letzten Zeichen der Zeile. Strg+Pos 1 Positionierung des Textcursors auf die erste Zeile des Textes. VerlДсt der Cursor eine gesperrte Zeile, wird diese entsperrt und zum Editorserver geschickt. Die neue Zeileninformation wird in der Statuszeile angezeigt. Strg+Ende Positionierung des Textcursors auf der letzten Zeile des Textes. VerlДсt der Cursor eine gesperrte Zeile, wird diese entsperrt und zum Editorserver geschickt. Die neue Zeileninformation wird in der Statuszeile angezeigt. Einfg Schaltet den EinfБgemodus zwischen EinfБgen und Ersetzten um. Entf FБr eine noch nicht gesperrte Zeile wird zunДchst eine Sperre beim Editorserver beantragt. Ist die Sperre gБltig, wird das Zeichen an der Cursorposition gelФscht. Steht der Textcursor schon an der letzten Position in der Zeile, wird die nachfolgende Zeile zuerst gesperrt und dann gelФscht und an die Zeile angehДngt. Enter FБr eine noch nicht gesperrte Zeile wird zunДchst eine Sperre beim Editorserver beantragt. Ist die Sperre gБltig, wird nach der Zeile eine neue Zeile erzeugt. Falls der Textcursor sich in der Mitte einer Zeile befindet, wird der Zeilenrest ab dem Textcursor in die neue Zeile geschoben. Anschlieсend wird der Textcursor ans Ende der neuen Zeile gesetzt. Backspace FБr eine noch nicht gesperrte Zeile wird zunДchst eine Sperre beim Editorserver beantragt. Ist die Sperre gБltig, wird das Zeichen vor dem Textcursor gelФscht. Steht der Textcursor schon an der ersten Position in der Zeile, wird die vorhergehende Zeile zuerst gesperrt und dann die derzeitige Zeile gelФscht und an die vorhergehende Zeile angehДngt. Strg+Backspace FБr eine noch nicht gesperrte Zeile wird zunДchst eine Sperre beim Editorserver beantragt. Ist die Sperre gБltig, wird die Zeile gelФscht. Zeichen FБr eine noch nicht gesperrte Zeile wird zunДchst eine Sperre beim Editorserver beantragt. Ist die Sperre gБltig, wird das Zeichen an der Cursorposition eingefБgt/durch das neue Бberschrieben je nach EinfБgemodus. ═══ 3.4. Speichern eines Textes ═══ Ъber den MenБpunkt "Datei-Speichern" wird der Text gespeichert. Die Speicherung erfolgt in die in der Textverwaltung angegebene Datei im ASCII-Format. Ъber den MenБpunkt "Datei-Schlieсen" wird zusДtzlich zur Speicherung des Textes der Text verlassen (Schlieсen des Text-und Benutzerfensters, Abmeldung beim Editorserver). ═══ 3.5. Verlassen des Programmes ═══ Ъber den MenБpunkt "Datei-Verlassen" bzw. Бber das SystemmenБ kann der Editorclient beendet werden. Ein bearbeiteter Text wird vorher gesichert und geschlossen. Der DSOM-Daemon muс explizit beendet werden. ═══ 4. Technik ═══ DSOM (Distributed System Object Model) von IBM ist ein ORB (Object Request Broker) nach der CORBA (Common Object Request Broker Architecture) 1.1 Spezifikation. Ein ORB fungiert als Telefonzentrale in einem verteilten System. Er Бbernimmt die Interaktion zwischen Objekten auf vernetzten, heterogenen Systemen. Damit kФnnen Applikationen modular (aus Klassenbibliotheken) entwickelt werden, Objekte dieser Klassen kФnnen dann Бber das Netz verteilt werden. Auсerdem kФnnen mehrere Clients ein Objekt benutzen. ═══ 5. Weitere Informationen ═══ Weitere Informationen zu CORBA/SOM/DSOM und dem Fortgeschrittenpraktikum, in dem dieser verteilte Multi-User-Editor entstand, gibt es unter meiner Homepage im World Wide Web: http://www.informatik.tu-muenchen.de/~schwarma/ oder http://wwwendres.informatik.tu-muenchen.de/da_fa_archiv/fopra/schwarma/corba.html und am Lehrstuhl fБr Softwaretechnik der TU-MБnchen (Prof. Albert Endres). Hier steht ein HTML-Text meines Fortgeschrittenenpraktikums zur VerfБgung. ═══ 6. Ъber den Autor ═══ Adresse: Computer-Software-Entwicklung Martin Schwarz Meisenweg 5 84544 Aschau a. Inn Germany E-MAIL: schwarma@informatik.tu-muenchen.de WWW: http://www.informatik.tu-muenchen.de/~schwarma/ Ich bin Student der Informatik mit Nebenfach Theoretische Medizin an der TU-MБnchen im 10. Semester. Meine Schwerpunkte lege ich auf Datenbanksysteme und verteilte Anwendungen. Privat beschДftige ich mich mit OS/2-Programmierung in C und C++, habe aber auch Erfahrungen unter DOS und Windows gesammelt.