5. Chemnitzer Linux-Tag
Thomas Güttler
OOPServer: Dokumenten-Workflow mit Zope
1 Einleitung
1.1 Überblick
- Einleitung
- OOPServer aus Nutzersicht
- Python
- Zope
- OOPServer
- Zukunft
1.2 Zielgruppe
Der Vortrag wendet sich an folgende Zielgruppen:
- Personen, die über den Einsatz eines Dokumenten- oder
Workflow-Systems entscheiden (Manager).
- Personen, die mehr über Zope erfahren wollen.
- Personen, die sich über meine Implementierung eines Dokumenten-
und Workflow-Systems informieren wollen.
Gliederung des Vortrags:
- Der erste Teil ist für alle. Voraussetzung ist lediglich, dass
man wissen sollte, wie man einen Web-Browser bedient.
- Der zweite Teil stellt die verwendeten Bausteine vor: Zope und
Python. Der Zuhörer sollte:
- HTML kennen
- wissen, was CGI ist
- schon in mindestens einer Programmiersprache entwickelt haben
- Der dritte Teil zeigt die interne Struktur von OOPServer. Der
Zuhörer sollte in der Lage sein, Quelltext in einer ihm vielleicht
unbekannten Programmiersprache zu lesen.
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:
- Workflow: Arbeitsablauf (z.B. Posteingang -> Bearbeitung ->
Weiterleiten -> Bearbeiten -> Postausgang)
- Zope: Web Application Server
- Python: Programmiersprache
- OOPServer: Anwendung, die mittels Zope und Python implementiert wurde.
2 OOPServer aus Nutzersicht
- Siehe "Einleitung" in der Demo.
- Dokument erstellen
- Workflow
- Weiterleiten: Keine Kopie!
- Suchen
- Schlagwortlisten erweitern
- Verlauf einsehen
- i18n: Internationalisierung
- UploadClient
3 Python
OOPServer: 80% Python, 15% Zope, 5% von mir (OOPServer).
-
Python ist eine leicht zu lernende,
objektorientierte Programmiersprache.
-
Es gibt Datentypen für Listen und Hash-Tabellen.
-
Die Syntax ist einfacher und schöner als bei Perl. Besonders bei
objektorientierter Programmierung.
-
Plattformunabhängig: Windows, Unix und Mac
-
Interpretierte Sprache
-
Optimierbar in C
-
Es existieren viele Module
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
-
Die Programmiersprache Python bietet sehr viele
Bibliotheken. (Reguläre Ausdrücke, http, pop3, smtp, xml, ...)
-
Die Syntax ist, besonders bei der objektorientierten Programmierung,
schöner als bei Perl. Das erleichtert das Einarbeiten in fremden Code.
-
Dem Zwang zum Einrücken muss auch der faulste Programmierer nachgeben.
-
Man bekommt bei Fehlern immer einen Stacktrace mit Zeilennummer des
Fehlers. In "C" muss man dafür extra den Debugger starten.
-
Segmentation Faults sind nicht möglich --> Programmentwicklung ist
schneller als in C oder C++.
-
Die Entwicklungsgeschwindigkeit ist heutzutage wichtiger als die
Ausführungsgeschwindigkeit zur Laufzeit. Zeitkritische Abschnitte
können in C oder C++ geschrieben werden.
-
Keine Makefiles nötig.
-
Die Python Newsgroup (comp.lang.python) ist sehr
anfängerfreundlich. Jeder Python Programmierer sollte hin und
wieder hineinschauen. Man lernt täglich Neues.
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.
-
Objektorientiert: Es wird mit Instanzen einer Klasse gearbeitet,
und Klassen können von Eltern-Klassen abgeleitet sein. Die
Daten werden in keiner relationalen Datenbank gespeichert.
-
Open Source: Das Programm und der Quelltext ist frei (kostenlos)
verfügbar. Der Quelltext darf modifiziert und weitergeben werden.
-
Web Application Server: Ein Programm zur Erstellung dynamischer
HTML Seiten inklusive Datenbankanbindung.
Zope besteht aus folgenden Bausteinen:
-
Web Server: Zope hat einen eigenen http-Server, kann aber auch
über Apache oder IIS angesprochen werden.
-
Web Interface: Zope kann man mit einem Browser administriert werden.
-
Python Produkte:
Anwendungen können in Python als sog. Python Produkte geschrieben werden.
-
ZODB: ZODB ist eine objektorientierte Datenbank.
Sie ist wie Zope in Python geschrieben und kann
auch "standalone" ohne Zope verwendet werden.
-
Datenbanken:
Alle relationale Datenbanken, die mit Python angesprochen werden,
können sind verwendbar.
-
DTML und ZPT: Ähnlich wie bei PHP werden Anweisungen
zwischen den HTML Tags geschrieben.
-
Schnittstellen: FTP, WebDAV, XML-RPC.
-
Benutzerverwaltung: Es ist möglich gegen NT- oder Unix-Server
zu authentifizieren.
-
Portabel: Unix & Windows
4.2 Misserfolge
"Why not Zope ...." (A. M. Kuchling)
Software-Entwickler, die lernen wollen mit Zope zu arbeiten, liegen
mehrere Steine im Weg.
- Acquisition, ZPT, ZClasses und DTML: unschön
- WebDAV: Nicht stabil
--> 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:
- Software-Entwickler
- Nutzer
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
- Assertions
- UnitTest pro Objekt
- UnitTest der Tests der einzelnen Objekte aufruft
5.5 i18n: Internationalisierung
print _("my english string")
---> "Meine deutsche Zeichenkette"
5.6 Vererbung
OOPObject --> DemoObject
- OOPObject: Basisfunktionalität
- DemoObject: Darstellung in HTML
6 Zukunft
- Bessere Implementierung von Zugriffsrechten
- Vielleicht: GUI-Client
- Zope 3: Derzeit noch Alpha-Stadium
- Belastungstests
- Vielleicht: Terminverwaltung, Email-Integration
- Praktischer Einsatz beim Kunden --> Email an mich!
7 Links