Viele Leute hier sehen Java aus der Apflets-Brille.
Wenn ich IBM richtig verstehe, wollen sie Domino zunehmend mit Java verheiraten.
Dafür sind aber nicht Apflets, sondern serverseitiges Java Thema.
Ich versuche nun in loser Folge Texte über serverseitiges Java zu veröffentlichen, die sich erstmal darum bemühen, die Grundlagen verständlich zu machen. Und ich sage. Ja. Verständlich.
Der spezifische Charakter von Java bewirkt, dass Produkte eigentlich nicht mehr sooo wichtig sind. Das eine läßt sich problemlos mit dem anderen ersetzen. Zentral für serverseitiges Java ist der open-Source Server Tomcat. Er funktioniert in wichtigen Teilbereichen genau gleich wie Websphere, braucht deutlich weniger CPU und ist leichter zu bedienen.
Zudem hat Tomcat als Referenzimplementierung (wird später erklärt) eine besondere Rolle in der Weiterentwicklung von serverseitigen Java.
Serverseitiges Java ist modular-schichtenmässig aufgebaut. Eins basiert auf dem anderen. JSPs aus Sicht des Java-Server technisch Servlets. Auch Portlets basieren auf Servlets. (näheres zu diesen verwirrenden Aussagen später).
1. Teil: Die Entstehung von serverseitigen Java und Tomcat
1996 erschienen die ersten Servlet Container. Der Begriff Container ist vereinfachend als Laufzeitumgebung zu verstehen. Ähnlich wie - sagen wir als Beispiel - Lotus Web Agenten einen Domino Server als Laufzeitumgebung benötigen, brauchen Servlets eben einen Servlet-Container. Ein Servlet Container ist immer Bestandteil eines (Web-)-Servers.
LotusScript Web-Agenten sind bekanntlich eine spezielle Art von LotusScript-Scripts. Genauso verhält es sich mit Servlets in Verhältnis zu Java. Das sind normale Java-Klassen, die von einer bestimmten Klasse erben (wie ja Applets auch).
Die Servlets leben also im Container und warten auf einkommende (http-)Requests. Machen etwas damit und senden wieder eine (http-)Response an den Browser zurück.
Gut. Wir haben also bis jetzt 2 Mitspieler:
1. Servlet-Container
- Produkt von Server-Hersteller programmiert
- Teil eines Servers
2. Servlets
- Teil einer Anwendung. Werden von Anwendungsentwickler programmiert
- leben im Servlet-Container.
Ersetzt man Servlet Container mit Domino, Servlets mit Notes Gestaltungselementen, müsst ihr jetzt endlich einsehen, dass das auch nicht anders als bei Domino ist.
Zurück zu 1996. Ohne mich jetzt in historische Studien zu stürzen, stelle ich mal die Behauptung auf, dass die ersten Servlet-Container von den Herstellern einfach mal so programmiert wurden. Da gab es natürlich unterschiedliche Vorstellungen darüber, wie ein Servlet (und seine Laufzeitumgebung, der Servlet-Container/Server) zu reagieren hat.
Sun erstellte dann eine Servlet-Spezifikation. Dort wird klar festgelegt, wie ein Servlet zu funktionieren hat.
Die Hersteller von Servlet-Containern konnten diese bauen, wie sie wollten. Sie müssen nur garantieren, dass Servlets nach den vereinbarten Spezifikationen funktionieren.
Eine Spezifikation ist wie der Turmbau von Babel rückwärts.
Nach der Spezifikation sprechen alle die selbe Sprache. Deshalb kann ich noch heute meine Servlets in Tomcat, Bea Weblogic, Oracle AppServer, vermutlich mySAP oder natürlich auch Websphere packen und das Servlet und der Servlet-Container verstehen sich (wg. Turmbau von Babel rückwärts).
IRIS hat nie den Kern von Domino als Spezifikation dokumentiert, nach der auch andere Hersteller ihr eigenes Domino entwickeln könnten.
Trotzdem ist uns der Begriff „Spezifikation“ aus der Notes-Welt bekannt. Nämlich im Kontext der „Öffnung gegenüber den Standards“. LotusScript unterstützt heute die (sprachenunabhängigen) DOM/SAX-XML-APIs. Lotus Objekte erfüllen die MS-COM-Spezifikation. Lotus Gestaltungselemente werden mit der http-Engine in mehr oder weniger standard-konformes html3.2 umgewandelt, der Notes-Client versteht teilweise JavaScript, etc. pp.
Moment. Ist es nicht ungewöhnlich, dass der Kapitalismus unterschiedliche Firmen das gleiche Produkt herstellen lässt. Nein. Der Servlet Container ist nämlich aus Sicht des Kapitalismus kein Produkt, sondern Infrastruktur. Für Straßen gibt es ja schliesslich auch relativ enge Normen. Sie erfüllen die gleiche Funktionalität, sind aber hinsichtlich der Teerbeschichtung, der Fähigkeit Verkehr aufzunehmen, etc. verschieden. Genauso ist es mit den Servlet-Containern. Die Unterschiede liegen in Performance, Admin-Tools, spezifischen Entwicklungstools, proprietären Erweiterungen, etc. Wir reden dabei nicht um Kleinigkeiten. Es ist aber in keinem Fall so, dass ein sehr teures Produkt unbedingt performanter ist als ein Gratis-Produkt. Die Unterschiede liegen in vielen Details verborgen.
Wichtig ist, dass man den Servlet-Container wechseln kann, ohne die Servlets neu programmieren zu müssen.
Natürlich gibt es noch heute Leute, die der Meinung sind, dass sie eine Sprache gefunden haben, die besser als der Standard ist. Ein Beispiel ist Brendon Upson, der mit seinem Puakma-Server versucht einen Java-Server zu vertreiben für die er seine eigenen Spezifikationen hat. Er ist eigentlich ein sympathischer Mensch. Er argumentiert mit dem „puakma is about choice“-Argument
http://www.codestore.net/store.nsf/unid/BLOG-20030820?OpenDocument (die letzten Beiträge). Ich halte davon nix. Was ist, wenn ein großes Känguruh auf Brendon springt? Warum sollen 2 Australier eine bessere Lösung entwickeln, als Tausende von openSource, IBM, Oracle, Sun, etc. Entwicklern, die täglich dem Gemecker der Java-Community ausgesetzt sind?