5. Chemnitzer Linux-Tag
Thomas Güttler
OOPServer: Dokumenten-Workflow mit Zope



1   Einleitung

1.1   Überblick

1.2   Zielgruppe

Der Vortrag wendet sich an folgende Zielgruppen: Gliederung des Vortrags:

1.3   Persönlicher Bezug

2001 wurde ich mit dem Studium fertig und schrieb die letzten Zeilen meiner Diplomarbeit. Ich hatte Zeit und wollte etwas Neues kennenlernen.

Ich hatte bisher mit mehreren Methoden dynamische Webanwendungen programmiert und war mit keiner richtig zufrieden. Cocoon, Enhydra, Perl-Scripte, PHP, Java-Server-Pages, Java Servlets, XSLT und andere Methoden sagten mir nicht zu.

1.4   Begriffsdefinition:

2   OOPServer aus Nutzersicht

  1. Siehe "Einleitung" in der Demo.
  2. Dokument erstellen
  3. Workflow
  4. Weiterleiten: Keine Kopie!
  5. Suchen
  6. Schlagwortlisten erweitern
  7. Verlauf einsehen
  8. i18n: Internationalisierung
  9. UploadClient

3   Python

OOPServer: 80% Python, 15% Zope, 5% von mir (OOPServer).

3.1   Vergleich zu anderen Programmiersprachen

Java Ich habe lange mit Java entwickelt, bevorzuge aber Python. Das Kompilieren zu Bytecode ist umständlich. Außerdem ist Java nur kostenlos, aber nicht frei. Da es mehrere Java Compiler und Interpreter gibt, kommt es immer wieder zu Problemen.
C C ist rasend schnell in der Ausführung. Die Entwicklungszeit ist jedoch so langsam, so dass ich nicht freiwillig in dieser Sprache programmieren würde. Der Einsatz von C ist nur bei betriebssystemnahen und zeitkritischen Aufgaben sinnvoll.
C++ Ich halte C++ für noch umständlicher als C.
Perl Perl ist Python sehr ähnlich. Da Perl mehr Sonderzeichen und Abkürzungen verwendet, ist der Code nicht so leicht lesbar. Perl ist für kleine Scripte gut geeignet, doch für objektorientierte Programmierung würde ich es nicht einsetzen.

3.2   Persönliche Einschätzung

4   Zope

"Hat man Web-Anwendungen nicht am schnellsten in PHP und MySQL zusammengeschustert?"

--> Ja & Nein!

Wenn man eine Webanwendung mit einer "richtigen" Programmiersprache objektorientiert lösen möchte, ist das nicht mit PHP möglich.

4.1   Zope, ein Objektorientierter Application Server

Zope ist ein objektorientierter Open Source Web Application Server. Zope besteht aus folgenden Bausteinen:

4.2   Misserfolge

"Why not Zope ...." (A. M. Kuchling)
Software-Entwickler, die lernen wollen mit Zope zu arbeiten, liegen mehrere Steine im Weg. --> Python Produkte schreiben anstatt "per Webbrowser programmieren"

4.3   Skalierbarkeit: ZEO

Mittels ZEO kann die Objektdatenbank ZODB auf mehrere Rechner verteilt werden. --> Ausfallsicherheit und bessere Performance.

5   OOPServer Implementierung

Zielgruppe von OOPServer: Softwareentwickler.

Aufbau: OOPServer ist eine Erweiterung von Zope (Python Produkt)

Dokumentenverwaltung und Workflows gibt es nicht von der Stange. Es sind immer individuelle Anpassungen nötig.

Dementsprechend ist OOPServer ein Framework um kundenspezifische webbasierte Systeme zu entwickeln.

5.1   Unterschied zu CMF

Unterschied von OOPServer und CMF (Content Management Framework).

Bei OOPServer wird davon ausgegangen, dass es zwei grundverschiedene Benutzergruppen gibt: Bei CMF verschmelzen die beiden Gruppen, was dazu führt, dass der Software-Entwickler nicht so entwickeln kann, wie er möchte und der Nutzer mit den Entwicklungsmöglichkeiten überfordert ist.

5.2   Kein DTML oder ZPT

DTML und ZPT sind Template-Sprachen. Die Logik wird wie bei PHP oder JSP zwischen die HTML-Tags geschrieben. In OOPServer wird ausschließlich Python verwendet. Beispiel:
 def foo(self, data_list):
       ret=[]
       ret.append(self.standard_html_header())
       
       rows=[]
       for data in data_list:
           rows.append('<tr><td>%s</td><td>%s</td></tr>'% (data[0], data[1])
       rows=string.join(rows)
  
       ret.append(''' 
         <table border="1">
          %s
         </table>''' % rows)
       ret.append(self.standard_html_footer())
       return string.join(ret)
 

5.3   API

Kurzer Überblick über die API (Application Programmer Interface)

5.4   UnitTests

5.5   i18n: Internationalisierung

 
   print _("my english string")
   ---> "Meine deutsche Zeichenkette"
  

5.6   Vererbung

OOPObject --> DemoObject

6   Zukunft

7   Links


Thomas Güttler, 1. März 2003 (5. Chemnitzer Linux-Tag)