Domino 9 und frühere Versionen > ND6: Administration & Userprobleme
createSession im Tomcat auf partitioned Server
Thomator:
Hi Axel,
das ist so alles richtig. Aber bei diesem Projekt ist halt der Datenbank-Layer Bestandteil des Servlets. Das Web-UI wird komplett in Notes-DB's definiert und den Aufbau der Oberfläche an sich übernimmt zum großen Teil das Servlet. Außerdem können über Mapping Inhalte von nicht webfähigen Datanbanken im Web verfügbar gemacht werden.
Das Ganze ist inzwischen eine enorm komplexe Angelegenheit, aber ich kann mir beim besten Willen nicht vorstellen, dass man den Datenbanklayer irgendwo anders unterbringen könnte.
Zumal auch die Anbindung von relationalen Datenquellen ermöglicht werden soll.
Sicher könnten auch Agenten für die Datenbankzugriffe herhalten und dann den Content an das Servlet rausschießen, aber da schon auch mal 100+ User parallel am System arbeiten können, stelle ich mir das Performace-Technisch eher grottig vor.
Meiner Meinung nach spricht bei einer sauberen Kapselung auch nichts dagegen, den Datenbank-Layer im Servlet anzusiedeln.
Eine Alternative wäre in meinen Augen nur ein zwischengeschalteter Server gewesen, der die Zugriffe durchführt. Das erzeugt aber auch wieder Overhead und der Tomcat macht die Server-Emulation ja gar nicht so schlecht.
Für Anregungen bin ich aber immer offen!
Thomas
Marinero Atlántico:
Es geht darum, für die Notes-Zugriffslogik eigene Klassen zu schreiben, um diesen code aus den Servlets herauszuhalten.
Am besten ist es, sowas wie struts zu verwenden.
Die Struts-Action Klassen spricht dann mit einem Service Layer,
das Service Layer spricht mit einem Business Layer
das Business Layer spricht mit dem Datenbankzugriffs-Layer.
Das Datenbankzugriff Layer kann auf RDBMS und Notes zugreifen.
Kauf dir Bücher zu J2EE Patterns, Struts und rede mit Bear Bibeaut auf Javaranch/Servlet und JSP Foren.
Wenn du das anders machst, ist enorme Komplexität die logische Folge. ;D
Frage: was benutzt für die HTML Generierung. Wird das auch direkt ins Servlet geschrieben ;D, oder benutzt du JSP oder Tapestry?
Thomator:
Hi Axel,
--- Zitat von: Marinero Atlántico am 27.01.05 - 12:38:16 ---Frage: was benutzt für die HTML Generierung. Wird das auch direkt ins Servlet geschrieben ;D, oder benutzt du JSP oder Tapestry?
--- Ende Zitat ---
Wie Du sicher schon vermutet hast, ersteres.
ohne mich irgendwie rausreden zu wollen: Das Projekt ist schon mehrere Jahre am Laufen und ich habe es vor einem halben Jahr praktisch in dieser Architektur übernommen. Dass diese Architektur nicht der Stein der Weisen ist, ist mir auch schon aufgefallen.
Aber wie das nun mal oft so ist, es fehlt einfach die Zeit, umzustrukturieren. Das ist ja eben auch nicht gerade die Arbeit von einem Tag. Das Servlet hat inzwischen schätzungsweise 40.000 Zeilen Quellcode. Das mal eben in eine neue Architektur umzubiegen ist .... schwierig.
Aber bei den ToDo's für das Teil gibt es auch einen Punkt "Schichtentrennung". Dann ist das Thema sowieso fällig. Wenn es soweit ist werde ich mich auf Deine Tips besinnen und mal nachforschen, wies am besten zu machen wäre.
Gruß Thomas
Marinero Atlántico:
1. Sämtliche Leute, die dafür verantwortlich sind, exekutieren. Right here. Right now.
Diese Leute sind eine Art kollektive Wiederauferstehung von General Kurtz aus Apocalypse Now.
Du sitzt im kambodschanischen Dschungel.
Da es nicht besser wird, rate ich zum Hardcore Refactoring.
Die Zeit spart ihr durch bessere Qualität, einfache Erweiterung wieder ein.
Mann. Was eine starke Mischung an Real Assheads und Pillowbytern. :-[
Später noch ein paar hinweise.
40.000 Zeilen Servlet Code :o
Versucht euch als "so nicht" Beispiel zu vermarkten.
Gruß Axel
Marinero Atlántico:
--- Zitat von: Thomator am 26.01.05 - 18:19:56 ---Meiner Meinung nach spricht bei einer sauberen Kapselung auch nichts dagegen, den Datenbank-Layer im Servlet anzusiedeln.
--- Ende Zitat ---
Das ist genau der Punkt. Das Servlet ist dann eine sehr große Kappsel. Klassen wie Servlets sollen nach OO-Praktiken möglichst kohäsiv sein. D.h. sie sollen eine möglichst fokussierte Aufgabe haben. Dieses hier geschilderte "Servlet" hat nach meinem derzeitigen Kenntnisstand (inklusive Annahmen) die folgenden Aufgaben:
- Request des Users entgegennehmen
- Request des Users validieren
- Hinleitung des Requests zu einem Response (könnte man Businesslogik nennen)
- Backend-Zugriff auf RDBMS
- Backend-Zugriff auf Lotus Domino
In einer normalen struts Umgebung, ist das Servlet lediglich für die entgegennahme des Requests und für die Weiterleitung an andere Klassen zuständig (via Request Dispatcher).
Normalerweise werden in dem doPost/doGet des Serlets andere Klassen erzeugt, die sich dann eben um die speziellen Aufgaben kümmern. Das geht dann immer über mehrere Schichten. D.h. die vom Servlet erzeugte Klasse erzeugt wieder eine, die ihre Aufgabe übernimmt, u.s.w..
Der call geht durch mehrere "Schichten" von Klassen.
Dadurch werden natürlich eindeutig mehr Objekte erzeugt, als wenn einfach der ganze code in der doPost/doGet des Servlets steht. Anfänger haben manchmal die Befürchtung, dass durch die vielen instantiierten Objekte die Performance runtergeht. Das ist nicht so. Um Performance-Aussagen zu treffen, sollte man sowieso einen Profiler benutzen (hab da auch noch keine wirklich vernünftige Strategie, arbeite aber dran). Die Objekte werden automatisch durch den Garbage Collector entsorgt. Das funktioniert sehr gut.
Dieses ganze Schichtenzeug macht man nicht so einfach aus der Lamäng. Da wird man mit der Zeit besser und man sollte von anderen lernen (Bücher). Frameworks unterstützen diesen Programmierstil.
Du hast hier aber einen megaklassischen Fall von "einfacher" Architektur, dh. wir verzichten einfach auf diesen ganzen Architektur-, OO- und Design-Tineff und progen das jetzt einfach mal in dieses doGet/doPost des Servlets. Diese ganzen OpenSource Studentenframeworks und die Sprüche dieser OO-Gurus aus den Büchern haben mit "unserer" Praxis sowieso nichts zu tun.
Die Folge: Was am Anfang so schön einfach mit einem
--- Code: ---
public void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException) {
}
--- Ende Code ---
ist inzwischen auf ein 40.000 Zeilen Monster angewachsen mit einem Haufen von if-then.
darüber rede ich die ganze Zeit.
Axel
P.S. ich kann da keine Tipps zu geben. OO kann man nur über Bücher und erfahrene Kollegen und eigene Erfahrung lernen. Es ist ein langwieriger Prozess. OO hat sich heute in der Programmierung weitgehend durchgesetzt. Es ist kein neues Thema.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln