Autor Thema: createSession im Tomcat auf partitioned Server  (Gelesen 4119 mal)

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
createSession im Tomcat auf partitioned Server
« am: 24.01.05 - 14:46:17 »
Hallo,

ich habe momentan das Problem, dass ich in einem Servlet eine Session öffnen will. Das klappt bei einem einfachen Domino-Server super, aber wenn der Server als partitioned Server eingerichtet ist, bekomme ich die Fehlermeldung:
"java.lang.exception: Notes initialisation failure - err 421"

Hat jemand eine Idee, woran das liegen könnte?

Danke
Thomas
« Letzte Änderung: 24.01.05 - 15:37:43 von Thomator »
+++To be human is more important than to be important!+++

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: createSession im Tomcat auf partitioned Server
« Antwort #1 am: 24.01.05 - 15:37:28 »
Ok, schon gelöst:

Liegt daran, dass für die Initialisierung der Session der Pfad zur Notes.ini benötigt wird. Bei den partitioned Servern ist der Pfad in den Umgebungsvariablen aber auf das Domino-Verzeichnis aller Server gesetzt -> und schon findet er die ini nicht.

Ich habe jetzt einen zusätzlichen Pfad zum Verzeichnis der ini gesetzt und siehe da: FUNZT!   :)

Thomas
+++To be human is more important than to be important!+++

Marinero Atlántico

  • Gast
Re: createSession im Tomcat auf partitioned Server
« Antwort #2 am: 24.01.05 - 17:53:10 »
Hi,

nur zur Zusatzinfo:
du kannst Servlets ganz gut mit IDEs debuggen:
WSAD (auf jeden Fall ab 4)
Eclipse mit Sysdeo-plugin (google:sysdeo eclipse) oder myEclipse (arbeite mich grade ernsthaft ein. Sehr cool: Eine Art plug-in Distro. 1 Jahr support für ca. 30 Dollar, 30 Tage Testversion).
mit netbeans.org geht das auch gut.

gutes Buch: http://www.amazon.de/exec/obidos/ASIN/0764559028/qid=1106585563/ref=sr_8_xs_ap_i3_xgl/028-9496007-5489363

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: createSession im Tomcat auf partitioned Server
« Antwort #3 am: 25.01.05 - 08:08:11 »
Hi,

danke für die Info. Kurze Frage mal dazu: Welche Vorteile bietet denn das Sysdeo-Plugin gegenüber dem herkömmlichen Remote-Debugging im Eclipse?

Thomas
+++To be human is more important than to be important!+++

Marinero Atlántico

  • Gast
Re: createSession im Tomcat auf partitioned Server
« Antwort #4 am: 25.01.05 - 13:50:29 »
gegenüber dem herkömmlichen Remote-Debugging im Eclipse?

Ich weiss gar nicht was das "herkömmliche Remote-Debugging ist.
Jedenfalls kannst du mit Sysdeo:
- über die Projektproperties den Tomcat für das Projekt definieren.
- hast einen start und stopp Button für Tomcat.

Debuggen einfach über Breakpoints setzen wie mit dem normalen Debugger.

Wie macht man das mit herkömmlichen Remote-Debugging?

Gruß Axel

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: createSession im Tomcat auf partitioned Server
« Antwort #5 am: 25.01.05 - 14:07:23 »
Hi Axel,

ist eigentlich genau das Gleiche. Du kannst, wenn Du ein Projekt für das Debuggen einrichtest, angeben, dass es eine "RemoteJavaApplication" ist. Bei den Connection-Properties wird dann der Host und der Port, der bei den Start-properties für den Tomcat angegeben ist, eingetragen. Die Startdatei für den Tomcat ist dann eine .bat mit folgendem Inhalt (Beispiel):

C:\java\JDKs\jdk1.4.02\bin\java.exe -jar -Xdebug -Xnoagent
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
-Djava.compiler=NONE -Duser.dir="c:\Tomcat4.1" "c:\Tomcat4.1\bin\bootstrap.jar" start


In dem Fall also Port 8000. Wenn Du dann den Tomcat gestartet hast, und den Debugger für das Projekt startest, verbindet sich Eclipse mit dem Tomcat und Du kannst auch ganz normal mit Breakpoints und so debuggen.

Damit kann man z.B. auch Servlets, die auf anderen Maschinen laufen, debuggen.
(Hat allerdings in diesem Fall nix genützt, weil ich den Sourcecode vom Notes.jar nicht habe und den Fehler deshalb nicht finden konnte)

Gruß Thomas

PS: Da fällt mir ganz spitz die Frage ein: Hat jemand das Notes.jar in Source-Form? ;D

+++To be human is more important than to be important!+++

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re: createSession im Tomcat auf partitioned Server
« Antwort #6 am: 25.01.05 - 14:18:31 »
Hi,

ganz interessante Frage.
Ich wär mal gespannt was da so ein Tool wie Jascii (decompiler) draus macht.

Gruß
Qojote

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: createSession im Tomcat auf partitioned Server
« Antwort #7 am: 25.01.05 - 14:21:04 »
Hi Qojote,

ich habe vor geraumer Zeit mal versucht, mit einem Decompiler das Notes.jar aufzutröseln, nach ca. 1 Stunde Vollast auf dem Rechner hab ich abgebrochen, weil ich auch noch arbeiten musste... 8)

Thomas
+++To be human is more important than to be important!+++

Marinero Atlántico

  • Gast
Re: createSession im Tomcat auf partitioned Server
« Antwort #8 am: 25.01.05 - 16:58:16 »
Danke für den Tipp. Das wusste ich nicht.
Aber Sysdeo bringt noch ein bischen Zusatzsupport wie z.B. Einträge in die xml-Konfigurationsdateien von Tomcat, damit man das Projekt in seinem normalen Workspace hat.
Sysdeo ist aber ohne JSP Editor und sowas ist schon gut zum entwickeln. Deshalb teste ich jetzt die myEclipse Sammlung. Hatte schon mal Probleme mit meinen selbstgestrickten Zusammenstellungen von plug-ins und finde das von der Idee her gut (und billig). 

Marinero Atlántico

  • Gast
Re: createSession im Tomcat auf partitioned Server
« Antwort #9 am: 26.01.05 - 16:59:13 »
muss es jetzt loswerden:  ;D
Geh mal davon aus, dass du den Direktzugriff auf Domino im Servlet veranstaltest du nur zum Testen der Connectivity.
Für eine Anwendung ist das ein klassischer Fall einer BAD IDEA.
Kennzeichnend für Java/J2EE Entwicklung ist die Liebe zur geschichteten Architektur.
In J2EE: 
Präsentation Layer (Web) --> (Service Layer) ---> Business Layer --> Datenbank Layer.
Das einzige, was hier u.U. noch vielleicht nicht nötig ist, ist der Service Layer.
Über einen eigenen Datenbank (Zugriffs-) Layer kann man eigentlich schon nicht mehr diskutieren.
Ein Notes Zugriff gehört in dieser Logik eindeutig in den Datenbank Layer.
Wenn man Tomcat Anwendungen so entwickelt, dass man lustig vom Web Layer auf den Datenbank-Layer direktzugreift, kann man auch ruhig Notes programmieren.

Vorteile einer geschichteten Architektur sind:
- höhere Übersicht
- bessere Testbarkeit (Service/Business und Datenbank Layer können isoliert (z.B. vom Webserver getestet werden).
- stärkere Objekt-Orientierung. Eine GOOD IDEA für OO ist, die Entwicklung einer Anwendung immer mit dem Business Layer anzufangen.
- Frameworks wie struts, hibernate, spring, uvam gehen von einer solchen Architektur quasi aus.
- bessere Wartbarkeit
- leichtere Fehlersuche
- leichtere Spezialisierung für einzelne Projektmitglieder
- bessere Wiederverwendbarkeit

Ein Direktzugriff von einem Servlet auf eine Datenbank ist in Java ungefähr so gut angesehen (und sinnvoll) wie das Gründen einer Religion mit Menschenopfern in der Realen Welt.   :o

Es ist keine Hexerei.

Gruß Axel

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: createSession im Tomcat auf partitioned Server
« Antwort #10 am: 26.01.05 - 18:19:56 »
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
+++To be human is more important than to be important!+++

Marinero Atlántico

  • Gast
Re: createSession im Tomcat auf partitioned Server
« Antwort #11 am: 27.01.05 - 12:38:16 »
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?

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: createSession im Tomcat auf partitioned Server
« Antwort #12 am: 27.01.05 - 12:53:17 »
Hi Axel,

Frage: was benutzt für die HTML Generierung. Wird das auch direkt ins Servlet geschrieben ;D, oder benutzt du JSP oder Tapestry?
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
+++To be human is more important than to be important!+++

Marinero Atlántico

  • Gast
Re: createSession im Tomcat auf partitioned Server
« Antwort #13 am: 27.01.05 - 13:29:21 »
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 
« Letzte Änderung: 27.01.05 - 13:30:55 von Marinero Atlántico »

Marinero Atlántico

  • Gast
Re: createSession im Tomcat auf partitioned Server
« Antwort #14 am: 28.01.05 - 11:33:24 »
Meiner Meinung nach spricht bei einer sauberen Kapselung auch nichts dagegen, den Datenbank-Layer im Servlet anzusiedeln.
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) {
}
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.
« Letzte Änderung: 28.01.05 - 12:03:39 von Marinero Atlántico »

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: createSession im Tomcat auf partitioned Server
« Antwort #15 am: 28.01.05 - 12:03:04 »
Hi Axel,

da ist vielleicht auch ein kleines Missverständnis aufgekommen. Es ist nicht so, dass in den Methoden des Servlets (doGet, doPost) sämtliche Logiken implementiert sind.

Da hängt noch ein ziemlich umfangreiches Klassenmodell dahinter. Letztenendes werden in den Instanzen der einzelnen Module die Validierungen und Ausgaben des HTML-Codes vorgenommen und an das Response-Object weitergeleitet. Diese Instanzen greifen wiederum auf eine 'Zugriffsschicht' in Form von anderen Klassen-instanzen zu.

In den Objecten (Modulen) findet auch das Caching statt, so dass der HTML-Code nicht jedesmal neu berechnet werden muss.

Es gibt also schon einen Unterteilung in Schichten. Auch alle Interfaces sind selbst implementiert. Es wurde also eben kein existirendes Framework verwendet (weil zum Zeitpunkt des Projektstarts auch noch kein Ausgereiftes verfügbar war), sondern eine Art Framework wird praktisch in der Architektur selbst abgebildet.

Allerdings bin ich, wie schon angemerkt duraus auch der Meinung, dass hier eine bessere Kapselung möglich und sinnvoll wäre.

Die Performance-Geschichte haben wir auch schon durch. Dafür haben wir mit JMeter die entsprechende Last erzeugt, über das Logging, was Bestandteil der Anwendung ist, den Start und das Ende jeder Methode mit den Zeiten ausgeben lassen, und dann die Flaschenhälse gesucht (eingegrenzt) und auch zum großen Teil gefunden.

Das ist zwar sicher etwas umständlich, hat aber echt was gebracht.

Thomas

Nachtrag: Das Klassenmodell besteht insgesamt aus 57 Klassen und Interfaces

2.Nachtrag: Mit Servlet meine ich immer die komplette Anwendung, was wohl zu der fälschlichen Annahme geführt hat, dass alles in der Klasse, die von HTTPServlet abgeleitet ist, implementiert ist.
« Letzte Änderung: 28.01.05 - 12:12:19 von Thomator »
+++To be human is more important than to be important!+++

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: createSession im Tomcat auf partitioned Server
« Antwort #16 am: 28.01.05 - 12:19:31 »
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.

Einen hab ich noch: Die OO ist auch für mich nix neues. Ohne kann man mit Java auch reichlich wenig anfangen. Allerdings verstehe ich nach Deinem letzten Posting Deine extrem entsetzten Antworten. Ich hab da wohl ein bisserl schwammig formuliert... ;D

Thomas
+++To be human is more important than to be important!+++

Marinero Atlántico

  • Gast
Re: createSession im Tomcat auf partitioned Server
« Antwort #17 am: 28.01.05 - 13:52:00 »
So bescheuert können noch nicht mal Leute sein, die in Internet-Foren posten (bin selber einer)  ;D

Im Grunde ist ja die Anwendung dann schon irgendwie gelayered.
Wirklich hilfreich finde ich "Patterns of Enterprise Architecture" und "J2EE Patterns" von Krupi, etc.

Ansonsten bin ich ein zunehmend großer Freund von standardisierten Frameworks wie tapestry, spring und iBatis oder hibernate.
Das mit der kompletten Definition des UIs in Notes. Kenn das natürlich nicht. Aber das bringt dann natürlich irgendwie da so einen ganz eigenen Templating Mechanismus da rein und ich würde das erst einmal für bedenklich halten.
Im Grunde gibt es sowas ja schon mit JSP oder andere Techniken. Naja ist wohl in der supi-Kreativ-Zeit der dot.Com bubble entstanden, bevor die wirtschaftlichen Realitäten den Proggis gezeigt haben, wo ihr wirklicher Platz ist. Und das da nicht jeder seine eigene Duftmarke eines Templating Mechanismus schaffen sollte. Besser code von Leuten nehmen, die das auch wirklich können (framework Entwickler), diese lernen und dann die business cases der Wirtschaft erfüllen. 

57 Klassen/Interfaces bei 40.000 Zeilen code finde ich immer noch extrem wenig.


Gruß Axel


« Letzte Änderung: 28.01.05 - 14:05:05 von Marinero Atlántico »

Offline Thomator

  • Senior Mitglied
  • ****
  • Beiträge: 353
  • Geschlecht: Männlich
Re: createSession im Tomcat auf partitioned Server
« Antwort #18 am: 28.01.05 - 14:11:10 »
Hi Axel,

57 Klassen/Interfaces bei 40.000 Zeilen code finde ich immer noch extrem wenig.

das ist auch der Grund, weshalb wir noch mal an die Schichtentrennung ranmüssen. Hier sind teilweise Klassen dabei, die über 3000 Zeilen Quellcode enthalten. Das ist natürlich tötlich.
Da macht sogar Eclipse schlapp (wenn ich so eine Klasse mit [STRG + UMSCH + F]  formatieren will, kommt ein Speicherüberlauf zustande ;D)

Im Rahmen dieser Umstrukturierung werde ich auch mal schauen, was man an Standard-Frameworks verwenden kann. Da mus natürlich auch der Aufwand in vernünftigen Relationen zum Nutzen stehen. Na, mal sehen...

In jedem Fall danke ich Dir für deine engagierten Beiträge. Wenn es so weit ist, weiß ich ja jetzt, dass ich hier kompetente Ansprechpartner finde.

Gruß Thomas
+++To be human is more important than to be important!+++

Marinero Atlántico

  • Gast
Re: createSession im Tomcat auf partitioned Server
« Antwort #19 am: 31.01.05 - 10:54:37 »
Hi,

Du weisst, dass du mit -Xms und -Xmx der von Eclipse genutzten VM mehr Heap-Speicher spendieren kannst?
Müsste aber jetzt auch nachschlagen, wo man das einstellen kann (keine Zeit). Man kann auf jeden Fall der benutzten VM Startparameter übergeben.

eigentlich die Standards oder meine derzeitige Meinung:
Erstmal den Business Layer schreiben.
Hier ggbfls Spring einfsetzen (relativ steile Lernkurve).
Wichtiger ist aber einen Business Layer zu schreiben, der von den meisten cross cutting concerns wie Datenbankzugriff, Security, Logging, und dem Frontendlayer unabhängig ist.
Caching ist imho als cross cutting concern am stärksten mit dem Business Layer verbunden. Hier vermutlich Proxy Design Pattern (GOF).
Unit Tests schreiben. Ist gerade mit Eclipse wirklich nicht so schwierig und macht Sinn.

Für Notes Zugriff einen eigenen Object-Domino Mapper schreiben.
Für RDBMS iBatis oder Hibernate.

Für Webfrontend den Klassiker struts oder das neuere Tapestry.   

Unbedingt Fowler "Patterns of Enterprise Application Architecture" sowie "Effective Enterprise Java" von Ted Neward kaufen lassen.
 
Gruß Axel
« Letzte Änderung: 31.01.05 - 11:15:36 von Marinero Atlántico »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz