% ------------------------------------------------------------------ %
%                                                                    % 
% Datei: anbindg.tex                                                 %
% Autor: Oliver Nietsch                                              %
%                                                                    %
% Universitaet Hamburg                                               %
% Fachbereich Informatik                                             %
% Arbeitsbereich DBIS                                                %
%                                                                    %
% Thema: Diplomarbeit: Die Modellierung und Validierung dynamischen  %
%                      Systemverhaltens am Beispiel von StP/OMT      %
%                      und Tycoon                                    %
%                                                                    %
% Inhalt: LaTeX-Dokument: Diplomarbeit,                              %
%                         Kapitel 3: Anbindung des Tycoon Systems    %
%                                    an die StP Umgebung             %
%                                                                    %
% Version vom 18. 4.1997                                             %
% ------------------------------------------------------------------ %

\chapter{Anbindung des Tycoon Systems an die StP Umgebung}
\label{Chap:Anbindung}

Die Anbindung des Tycoon Systems als Basistechnologie f"ur die Implementierung der in Abschnitt~\ref{Sec:statechartenv} dargestellten Modellierungs- und Validierungsumgebung an die StP Umgebung erscheint aus Sicht des Anwendungsentwicklers, wie aus der Abbildung~\ref{Fig:TycAnbindg} ersichtlich wird, als Erweiterung der in der Abbildung~\ref{Fig:Architektur} vorgestellten StP/OMT Architektur.\\

\begin{figure}[hbt]
  \begin{center}
    \ 
    \epsfig{figure=anbindg.eps,width=14cm}  
  \end{center}    
  \caption{\label{Fig:TycAnbindg} Anbindung des Tycoon Systems an die StP Umgebung}
\end{figure}

Dabei verh"alt sich das Tycoon System als integrierte Entwicklungsumgebung hinsichtlich seines Aufrufs und Zugriffs auf das StP Repository wie sonstige, in die StP Umgebung integrierte StP Werkzeuge, z.B. Diagrammeditoren, Tabelleneditoren etc. \cite{nietsch96}. Der Aufruf des Tycoon Systems erfolgt "uber ein Piktogramm auf dem StP Desktop. Der Zugriff vom Tycoon System auf die StP Repositoryobjekte erfolgt "uber die vom StP Application Program Interface zur Verf"ugung gestellten C Funktionen, welche die in Abschnitt~\ref{Sec:Umfang} dargestellte Basisfunktionalit"at der StP Umgebung f"ur Anwendungsentwickler verf"ugbar machen. Aus Sicht des Tycoon Systems stellt das StP Object Management System einen generischen, externen Dienst dar.

Als Resultat dieser Anbindung des Tycoon Systems an die StP Umgebung entsteht im Rahmen des Tycoon Systems die generische Bibliothek {\sl StPEnv}, die dem Programmierer im unifizierenden sprachlichen Raum der Tycoon Umgebung die gesamte, in Abschnitt~\ref{Sec:Umfang} dargestellte, StP Funktionalit"at f"ur den Repositoryzugriff bietet.

\section{Basisfunktionalit"at der StP Umgebung}
\label{Sec:Umfang}

Die generische Tycoon Bibliothek f"ur den StP Repositoryzugriff mu"s f"ur die in Abschnitt~\ref{SubSec:Prototyp} dargestellte Generierung eines Tycoon Validierungsprototypen aus einem dynamischen StP/OMT Modell mindestens die folgenden an sie gestellten Anforderungen befriedigen, welche sich an der Funktionalit"at des StP Application Program Interface orientieren \cite{StPoms94}:

\begin{itemize}
  \item Repositorymanagement
  \item Initiieren, "Uberwachen und Abschlie"sen von StP Repositorytransaktionen
  \item Interpretieren von OMS Anfragen
  \item Generieren und Auffinden von Repositoryobjekten
  \item Auffinden, Manipulieren und Ausgeben von Attributwerten der spezifizierten Repositoryobjekte
  \item Durchf"uhren von Operationen auf zu einer Einheit zusammengefa"sten Objekten innerhalb des StP Repositorys im Rahmen der abstrakten Implementationsdatentypen {\sl Collection} und {\sl Big Collection}
  \item Durchf"uhren der Fehlerbehandlung bei nicht erfolgreich abgeschlossenen Repositoryoperationen
\end{itemize}

Diese Anforderungen an den Funktionsumfang der StP Tycoon Bibliothek finden ihre Ber"ucksichtigung in der Abbildung der Operationen des StP API auf die entsprechenden Tycoon Funktionen und Module.

\section{Abbildung der StP OMS Funktionalit"at auf die Tycoon Ebene}
\label{Sec:Transfer}

Die gesamte Funktionalit"at f"ur den Repositoryzugriff wird vom StP Application Program Interface zur Verf"ugung gestellt, welches eine C basierte Bibliothek von Funktionen und Datentypen darstellt. Auf der Tycoon Ebene sollen beim Zugriff auf Repositoryobjekte im Rahmen der in Abschnitt~\ref{Sec:Modellierg} vorgestellten StP Umgebung, der Tycoon Bibliothek {\sl StPEnv}, ausschlie"slich Funktionen und Datentypen auf der Basis von TL, der Programmiersprache des Tycoon Systems, benutzt werden. Somit kann der Tycoon Programmierer ohne direkte StP API C Funktionsaufrufe auf das StP Repository zugreifen. Diese Vorgehensweise macht es erforderlich, da"s innerhalb der Tycoon Umgebung eine geeignete Abbildung der C basierten API Funktionen auf ad"aquate TL Funktionsdeklarationen erfolgt.

In diesem Abschnitt wird die Abbildung der StP API Funktionalit"at auf Tycoon Funktionalit"at exemplarisch am Beispiel einiger Funktionen des StP PDM Datentypen {\tt node} dargestellt (vgl. Abbildungen~\ref{Fig:PDModell} und~\ref{Fig:PDBeziehg}). Diese Vorgehensweise ist auch f"ur alle "ubrigen StP PDM Datentypen und sonstige innerhalb des StP Application Program Interface verwendeten Datentypen und Funktionen g"ultig.

Au"ser einer einfachen Abbildung der StP API Funktionalit"at wird die M"achtigkeit der StP Umgebung auf der Tycoon Ebene durch zus"atzliche, den Umfang der eigentlichen API Funktionalit"at erweiternde Charakteristika erg"anzt (vgl. Abschnitt~\ref{Sec:Modellierg}). 

\subsection{Tycoon C Calls f"ur den StP API Funktionsaufruf}
\label{SubSec:CCall}

Das Tycoon System bietet einen generischen Mechanismus, um auf in externen Programmiersprachen implementierte Funktionalit"at zugreifen zu k"onnen \cite{MMM93}. Eine  externe C Funktion kann mit Hilfe der Tycoon Funktion {\sl bind} an einen Tycoon Bezeichner gebunden werden:

\begin{xple}
     \k{let} bspFkt = 
       bind(:\k{Fun}(:Int) :Int "{}bsp\_bibliothek.so"{} "{}bsp\_funktion"{} "{}ii"{})
\end{xple}

Hier wird die in der dynamischen C Bibliothek {\tt bsp\_bibliothek.so} vorhandene C Funktion {\tt bsp\_funktion} an den Tycoon Bezeichner {\sl bspFkt} statisch gebunden. Der Wert dieses Bezeichners ist vom Typ {\sl \k{Fun}(:Int) :Int}. Innerhalb der Tycoon Umgebung kann die C Funktion {\tt bsp\_funktion} daraufhin wie folgt indirekt aufgerufen werden:

\begin{xple}
     \k{let} ergebnis :Int = bspFkt(20)
\end{xple}

Da"s sich eine C Funktion hinter der Tycoon Funktion {\sl bspFkt} verbirgt, ist f"ur den Tycoon Programmierer nicht ersichtlich. Diese Vorgehensweise wird im Rahmen des Aufrufs der StP Application Program Interface Funktionen von der Tycoon Ebene aus im weiteren Verlauf dieser Arbeit verfolgt. Weitere Informationen "uber die Benutzung externer C Bibliotheken aus dem Tycoon System heraus sind in \cite{MMM93} enthalten.

\subsection{Abbildung von StP API Operationen auf Tycoon Funktionen}
\label{SubSec:APIFunk}

Die Abbildung der StP API Funktionen auf Tycoon Funktionen erfolgt unter Verwendung der eben dargestellten Vorgehensweise in f"unf Schritten:

\begin{enumerate}
  \item Auf der Systemebene mu"s als Grundlage f"ur die Tycoon Funktion {\sl bind} aus den vorhandenen dynamischen StP Bibliotheken eine einzige dynamische Bibliothek erstellt werden, welche die gesamte ben"otigte StP Funktionalit"at des StP API zur Verf"ugung stellt. Der Name dieser Bibliothek wird beim Anbinden einer StP API Funktion der Tycoon Funktion {\sl bind} als Parameter "ubergeben.

Begr"undet wird die Generierung einer einzigen dynamischen Bibliothek dadurch, da"s beim Aufruf einer gebundenen API Funktion eventuell weitere Operationen oder Datentypen aus anderen dynamischen StP Bibliotheken referenziert werden. Um auf nicht bekanntgegebenen Funktionen oder Datentypen basierende Fehler zu vermeiden, werden s"amtliche dynamischen Bibliotheken miteinander verbunden. Ein entsprechendes Generierungsskript zum Erstellen der Bibliothek {\tt libstp.so} ist in Anhang~\ref{Ann:libstp} enthalten.
  \item Eine Voraussetzung f"ur eine erfolgreiche Ausf"uhrung der StP API C Funktionen bzw. einen erfolgreichen Entwicklungsdatenbankzugriff ist ein Eintrag {\tt stp\_file\_path} mit den entsprechenden Pfaden zu den StP Dateien innerhalb der Datei {\tt ToolInfo} \cite{StPcust94}, in welcher grundlegende Initialisierungen der referenzierten StP Systemvariablen und Pfade zu den ben"otigten Dateien der einzelnen StP Produkte anzugeben sind. Die Datei {\tt ToolInfo} mu"s f"ur die Benutzung des StP Application Program Interface aus dem Tycoon System heraus um die in Anhang~\ref{Ann:Pfade} dargestellte Pfadangabe zu den StP Systemdateien erg"anzt werden.
  \item Auf der Tycoon Ebene m"ussen die in Anhang~\ref{Ann:UmgVar} wiedergegebenen Systemumgebungsvariablen innerhalb jedes neu gestarteten Tycoon Subprozesses gesetzt werden. Nur so kann ein erfolgreicher Zugriff auf Objekte des StP Repositorys vom Tycoon System aus erreicht werden.

Zu diesem Zweck gibt es in der Tycoon Bibliothek {\sl MachineEnv} das Modul {\sl uxEnvironment}, mit dessen Funktion {\sl set(name, value :String) :\k{Ok}} die entsprechenden StP Systemvariablen zu Beginn eines Tycoon Subprozesses initialisiert werden k"onnen. Innerhalb der StP Tycoon Bibliothek {\sl StPEnv} "ubernimmt die Funktion {\sl omsRepository.init()} diese Aufgabe.
  \item Daraufhin k"onnen auf der Tycoon Ebene die C Funktionen an die entsprechenden Bezeichner gebunden und anschlie"send wie "ubliche Tycoon Funktionen benutzt werden. Ein Beispiel aus dem Tycoon Modul {\sl omsNode} der Bibliothek {\sl StPEnv} f"ur das Auffinden eines StP Repositoryobjekts des StP PDM Datentyps {\tt node} anhand seines Namensattributs ist in Anhang~\ref{Ann:GetIt} wiedergegeben.
  \item Der Tycoon Programmierer kann den Zugriff auf das StP Repository nach erfolgter Initialisierung der StP Systemvariablen und einem Import der entsprechenden Module der in Abschnitt~\ref{Sec:Modellierg} wiedergegebenen StP Umgebung {\sl StPEnv} "uber die dort deklarierten Tycoon Funktionen nach dem folgenden Muster durchf"uhren:

\begin{xple}
            \k{import} omsRepository omsNode

            \k{let} projdir = "{}/local/dbis11/software/StP/project"{}
            \k{let} system = "{}nietsch"{}

            omsRepository.init()

            \k{let} rep = omsRepository.connectSystem(projdir system)

            \k{let} node = omsNode.find(rep "{}Television"{}
              omsApplicationType.type omsObjectId.optional() "{} "{})
            ...

            omsRepository.disconnect(rep)
\end{xple}

Nach Initialisierung der StP Systemvariablen durch die Funktion {\sl omsRepository.init} wird eine Anzahl von Repositoryoperationen stets durch das "Offnen des Repositorys mit Hilfe der TL Funktion {\sl omsRepository.connectSystem} oder {\sl omsRepository.connectRep} und sp"ateres Schlie"sen ({\sl omsRepository.disconnect}) eingerahmt.

Innerhalb dieses Beispiels wird auf alle StP Repositoryobjekte des spezifizierten StP Projektverzeichnisses ({\sl projdir}) und StP Systems ({\sl system}) zugegriffen. Zur"uckgegeben werden die Repositoryobjekte, welche vom StP PDM Datentypen {\tt node} sind und deren Namensattribut den Wert {\sl Television} besitzt.
\end{enumerate}

Eine schematische Darstellung eines StP API Funktionsaufrufs f"ur den Zugriff auf das StP Repository aus dem Tycoon System ist in Abbildung~\ref{Fig:APIZugriff} dargestellt.

\begin{figure}[hbt]
  \begin{center}
    \ 
    \epsfig{figure=pointer.eps,width=13cm}  
  \end{center}    
  \caption{\label{Fig:APIZugriff} StP API Funktionsaufruf vom Tycoon System}
\end{figure}

Als Resultat des Tycoon Aufrufs der an den Tycoon Bezeichner {\sl omsNodeFind} gebundenen C Funktion {\tt oms\_node\_find} wird ein Zeiger auf eine Hauptspeicheradresse zur"uckgegeben, in welcher die C Struktur als Ergebnis der Repositoryanfrage abgelegt ist (hier: {\tt oms\_node\_tp}).

\section{Die Tycoon Umgebung StPEnv f"ur den StP Repositoryzugriff}
\label{Sec:Modellierg}

Die Bibliothek {\sl StPEnv} bietet auf der Tycoon Ebene die gesamte Funktionalit"at des StP Application Program Interface, um indirekt unter Verwendung der Funktionalit"at des StP Object Management Systems auf Repositoryobjekte innerhalb des StP Repositorys zugreifen zu k"onnen. Dabei finden die in Abschnitt~\ref{Sec:Umfang} dargestellten Anforderungen an die StP Bibliothek ihre Ber"ucksichtigung in den unterschiedlichen, in Abschnitt~\ref{SubSec:BibUmf} wiedergegebenen Modulen. 

\subsection{Modellierungsaspekte}
\label{SubSec:ModAspekt}

Die Grundlage der Modellierung der Bibliothek {\sl StPEnv} stellt das in der Abbildung~\ref{Fig:PDModell} auf Seite~\pageref{Fig:PDModell} wiedergegebene StP Persistent Data Model (PDM) dar. Einschr"ankend gilt, da"s die abstrakten Klassen {\sl CASE Type}, {\sl Annotated Object Type}, {\sl Reference Type} und {\sl SE Type} keine Ber"ucksichtigung im Rahmen der Modellierung der StP Bibliothek finden, da nur Objekte ihrer Subtypen, die ihrerseits keine Supertypen anderer StP PDM Datentypen sind, im Repository abgelegt werden k"onnen.

Desweiteren basiert die Modularisierung der Bibliothek {\sl StPEnv} auf den in der Abbildung~\ref{Fig:PDBeziehg} auf Seite~\pageref{Fig:PDBeziehg} aufgef"uhrten Beziehungen zwischen den einzelnen Datentypen des StP PDM. Die Art der Auspr"agung der Beziehung zwischen zwei Repositoryobjekten ist dabei unterschiedlich zu ber"ucksichtigen. Handelt es sich um eine 1:1 Beziehung, ist dieses durch das Vorhandensein eines betreffenden Attributs des referenzierten Objekts darstellbar. 1:n Beziehungen sind durch die Bildung von "`Ansammlungen"' referenzierter Objekte, \engl{Collections} oder \engl{Big Collections}, darzustellen. Au"serdem sind die sonstigen \engl{CASE Type} Attribute und ihre Verwaltungs- und Manipulationsfunktionen in angemessener Weise zu ber"ucksichtigen. Eine Erl"auterung der \engl{Case Type} Attribute und deren Datentypen ist in \cite{StPoms94} enthalten.

\subsection{Bibliotheksumfang}
\label{SubSec:BibUmf}

In der Abbildung~\ref{Fig:Module} ist die Modulstruktur der entwickelten Tycoon StP Umgebung {\sl StPEnv} dargestellt. Die Umgebung umfa"st drei verschiedene Arten von Modulen, welche unterschiedliche Funktionalit"aten beinhalten.\\

\begin{figure}[hbt]
  \begin{center}
    \ 
    \epsfig{figure=module4.eps,width=13cm}  
  \end{center}    
  \caption{\label{Fig:Module} Tycoon StP Bibliothek {\sl StPEnv}}
\end{figure}

\subsubsection*{Spezielle Funktionalit"at auf den PDM Datentypen}
\label{SubSubSec:SpeziellAPI}

Die Module dieser Kategorie stellen dem Tycoon Programmierer die Funktionen auf den PDM Datentypen zur Verf"ugung (vgl. Abbildungen~\ref{Fig:PDModell} und~\ref{Fig:PDBeziehg}). Die Datentypen werden durch die StP API C Datenstrukturen {\tt oms\_$<$pdm\_typ$>$\_tp} repr"asentiert. Sie bilden Operationen auf den C Datenstrukturen {\tt oms\_cntx\_tp}, {\tt oms\_cntx\_ref\_tp}, {\tt oms\_file\_tp}, {\tt oms\_file\_hist\_tp}, {\tt oms\_file\_lock\_tp}, {\tt oms\_item\_tp}, {\tt oms\_link\_tp}, {\tt oms\_link\_ref\_tp}, {\tt oms\_node\_tp}, {\tt oms\_node\_ref\_tp}, {\tt oms\_note\_tp} und {\tt oms\_viewpoint\_tp} des StP Application Program Interface ab. Beispielsweise finden die Operationen auf dem PDM Datentyp {\tt node}, repr"asentiert durch den C Datentyp {\tt oms\_node\_tp}, ihre Entsprechung auf der Tycoon Ebene im Modul {\sl omsNode}. Das Modul {\sl omsGeneric} umfa"st generische Funktionen aller PDM Datentypen. Es wird ausschlie"slich in den Modulen dieser Kategorie importiert. Operationen auf Kollektionen (\engl{Collection} oder \engl{Big Collection} Typen) sind in den Modulen der n"achsten Kategorie enthalten.

\subsubsection*{Allgemeine StP API Funktionalit"at}
\label{SubSubSec:AllgStPAPIFkt}

Innerhalb dieser Kategorie kann zwischen zwei Arten von Modulen unterschieden werden. Die Module {\sl omsBigCollection} und {\sl omsCollection} stellen generische Funktionen zur Verf"ugung, mit deren Hilfe \engl{Big Collections} oder \engl{Collections} von mehreren Objekten eines zu spezifizierenden StP PDM Datentypen erstellt werden k"onnen. Die restlichen Module stellen Funktionen auf den StP API C Datenstrukturen {\tt oms\_app\_type\_tp}, {\tt oms\_idlist\_tp}, {\tt oms\_pdm\_type\_tp}, {\tt oms\_object\_id\_tp}, {\tt oms\_repos\_tp}, {\tt oms\_status\_tp}, {\tt oms\_time\_tp} und {\tt oms\_txn\_tp} bereit, die im Rahmen dieser Arbeit nicht vertiefend untersucht werden.

\subsubsection*{Spezielle Tycoon Funktionalit"at}
\label{SubSubSec:SpezielleAPIFkt}

Module dieser Kategorie erweitern die StP Funktionalit"at um eine im Rahmen des StP API nicht vorhandene Funktionalit"at, welche auf der Tycoon Ebene ben"otigt wird, um die Realisierung der Repositoryanbindung "uberhaupt erstellen zu k"onnen.

Eine n"ahere Beschreibung der einzelnen Bibliotheksmodule der Tycoon StP Bibliothek {\sl StPEnv} ist in den einzelnen Tabellen in Anhang~\ref{Ann:SchnittStpenv} dargestellt.

\subsection{Grenzen der Funktionalit"at}
\label{SubSec:Schwierig}

Bez"uglich der entwickelten StP Tycoon Bibliothek {\sl StPEnv} sind einige kritische Aspekte anzumerken, welche einen Einflu"s auf die vorgenommene Modellierung der StP Umgebung auf der Ebene des Tycoon Systems haben. Daraus ergibt sich, da"s die gew"ahlte Modellierung auf der Tycoon Ebene nicht deckungsgleich zu der auf der StP Ebene ist.

Die haupts"achlichen Einschr"ankungen treten bei der Abbildung des StP Persistent Data Models mit Hilfe der StP API C Funktionen auf Module, Datenstrukturen und Operationen der Bibliothek {\sl StPEnv} und der Interpretation der Anwendungssicht auf das Repository mit der anschlie"senden Konvertierung der Anwendungsdatentypen auf StP PDM Datentypen auf.

\subsubsection*{Abbildung des StP Persistent Data Models}
\label{SubSubSec:SchwierigPDM}

Das in der Abbildung~\ref{Fig:PDModell} wiedergegebene StP Persistent Data Model stellt den Zusammenhang der existierenden StP PDM Datentypen auf der Grundlage von Vererbungsbeziehungen dar, wobei jeder PDM Datentyp in einer Subtypbeziehung zu einem anderen Typen steht. Desweiteren besitzen alle PDM Datentypen eine Anzahl von Attributen: spezielle oder, im Rahmen der Vererbungsbeziehungen zwischen PDM Datentypen, gemeinsame Attribute. Leider hat es die Firma IDE vers"aumt, diesen Sachverhalt in der Systemdokumentation detailliert wiederzugeben, so da"s an dieser Stelle keine weiteren Aussagen "uber die genaue Auspr"agung der Vererbungsbeziehungen get"atigt werden k"onnen.

Entit"aten der StP PDM Datenypen werden in der relationalen Datenbank {\sf Sybase} abgelegt und sind, wie in \cite{nietsch96} detailliert beschrieben, unter anderem durch den Einsatz der C Funktionen des StP API zugreifbar. Sowohl auf die gesamte Struktur eines PDM Objekts als auch auf seine einzelnen Attribute kann zugegriffen werden. Allerdings lassen die API Operationen keine R"uckschl"usse auf die Vererbungscharakteristika referenzierter Objekte zu, da der Repositoryzugriff mit Hilfe spezialisierter, d.h. nicht generischen, C Funktionen realisiert wird.

Da die StP API C Funktionen keinen R"uckschlu"s zulassen, in welcher Weise das Persistent Data Model auf sie abgebildet worden ist, ist es fraglich, ob man ausgehend von den StP API Operationen im Rahmen eines \engl{Re-Engineering} Vorgehens die tats"achlich vorliegenden Modellierungskomponenten auf der StP Ebene ausdr"ucken kann, um sie anschlie"send auf der Tycoon Ebene zu "ubernehmen.

\subsubsection*{Konvertierung von Anwendungs- auf StP PDM Datentypen}
\label{SubSubSec:Schwierig Konvert}

Wie in Abschnitt~\ref{SubSec:Sicht} erl"autert, wird die Verbindung zwischen Datentypen von StP Werkzeugen und denen des Persistent Data Models mit Hilfe der Abbildungsdatei {\tt omt.app.types} realisiert. Diese Datei enth"alt jedoch ausschlie"slich Eintr"age, die spezifizieren, auf welche CASE Objekttypen die Anwendungsdatentypen abzubilden sind. Die Semantik, die hinter dieser Abbildung steht, ist mit Hilfe der StP API Funktionen nicht nachzuvollziehen und folglich nicht auf die Tycoon Bibliothek {\sl StPEnv} zu "ubertragen.

So k"onnen z.B. innerhalb des CASE Werkzeugs StP/OMT mit einem grafischen Editor entwickelte Komponenten von Modellen mit Hilfe der Datei {\tt omt.app.types} auf eine Anzahl g"ultiger Repositoryobjekte abgebildet werden. Die Application Program Interface Operationen leisten diesen Dienst nicht, da sie es nur erm"oglichen, isolierte PDM Objekte im Repository zu generieren oder auf sie zuzugreifen. Eine Modellierung von g"ultigen Anwendungsdatentypen kann deshalb auf der Tycoon Ebene durch die API Funktionen nur eingeschr"ankt erfolgen.

\clearemptydoublepage
