# Anfängerfragen J2EE



## McTrevor (20. Jun 2007)

Irgendwie finde ich im Netz keine konkreten Antworten zu meinen Fragen nur so Wischi-Waschi-Aussagen... Hier also die Fragen:


Kann jemand mal kurz und knapp erklären, wie die Skalierung bei J2EE funktioniert? Wie läuft das *in der Praxis* ab? Für mich ist hierbei die Skalierung über mehrere Rechner interessant. Nicht einfach den Rechner durch einen dickeren zu ersetzen (das macht wohl jedes Programm schneller  :roll: ).

Gibt es Application Server, die verteilt auf mehreren Rechnern laufen können? Wenn nicht, dann endet die Skalierbarkeit doch bei einem System, oder nicht?

Braucht ein J2EE-Server eigentlich eine JRE um zu laufen? Oder gibt es da Unterschiede bei den verschiedenen Implementierungen?

Wieviel/was muss geändert werden um eine normale Java-Anwendung auf einem Apllication-Server laufen zu lassen? 

Auf einem Application-Server laufende Anwendungen müssen doch multithreaded programmiert sein, um zu skalieren, wenn man die Anzahl der Maschinen erhöht. Wobei Threads wohl eher schlecht auf verteilten Systemen laufen, immerhin teilen sie sich den Speicherbereich mit ihrem Vaterprozess. Muss eine skalierende Anwendung also aus mehreren Prozessen statt aus mehreren Threads bestehen? Oder verbirgt der Application-Server komplett die Existenz des Clusters auf dem er läuft (falls das überhaupt geht) und stellt sich der Anwendung als ein (kompaktes) System dar und verteilt selbstständig die Threads je nach Last auf die einzelnen Hosts?

Ich freue mich auf die Antworten, die da kommen mögen, damit ich das endlich mal ralle.

Bis dann denn!

McTrevor


----------



## hannes.de (20. Jun 2007)

Hallo,

auf ein paar von deinen Fragen kann ich dir schon Antworten geben.

Beim Tomcat-Server ist es tatsächlich möglich, dass dieser auf mehreren Rechner läuft. Ein sogenanntes Cluster.
Threads können natürlich auf einen anderen Rechner übertragen werden. Jeder hat seine eigenen Threads.

In der Regel wirst du einen Loadbalancer vor deinem Cluster setzen. Anfragen vom gleichen Client, sollten auch vom gleichen Server behandelt werden, wenn Daten zwischen gespeichert werden müssen. Dieser Punkt ist wohl etwas schwieriger, weil es hier darum geht den Loadbalancer entsprechend zu konfigurieren. Hier fehlt mir die Praxis.

Um eine J2EE Anwendung zum Laufen zu bringen, brauchst du natürlich eine Java-Umgebung.  ???:L

> Wieviel/was muss geändert werden um eine normale Java-Anwendung auf einem Apllication-Server laufen zu lassen?
Das hängt davon ab, welchen Application-Server du nutzen möchtest. Wenn du J2EE mit EJB nutzen möchtest, gibt es da einiges zu tun.
Ansonsten gibt es genügend andere Frameworks (z.B. Spring), wo sich das ein bisschen in Grenzen hält.

Hoffe, ich konnte dir ein bisschen helfen.

Hannes


----------



## McTrevor (21. Jun 2007)

hannes.de hat gesagt.:
			
		

> Hallo,
> 
> auf ein paar von deinen Fragen kann ich dir schon Antworten geben.



Danke schonmal dafür! :toll: 



> Beim Tomcat-Server ist es tatsächlich möglich, dass dieser auf mehreren Rechner läuft. Ein sogenanntes Cluster.
> Threads können natürlich auf einen anderen Rechner übertragen werden. Jeder hat seine eigenen Threads.





> Um eine J2EE Anwendung zum Laufen zu bringen, brauchst du natürlich eine Java-Umgebung.  ???:L



Ja wie nu? Wenn der Application-Server in einer JVM läuft, damm muss doch defacto die JVM verteilt auf mehreren Rechnern laufen, damit der Tomcat verteilt laufen kann? Also kann es in dem Fall doch jeder J2EE-Server oder keiner, oder nicht?



> In der Regel wirst du einen Loadbalancer vor deinem Cluster setzen. Anfragen vom gleichen Client, sollten auch vom gleichen Server behandelt werden, wenn Daten zwischen gespeichert werden müssen. Dieser Punkt ist wohl etwas schwieriger, weil es hier darum geht den Loadbalancer entsprechend zu konfigurieren. Hier fehlt mir die Praxis.



Praktischerweise wird das zu entwickelnde Programm keine Clients benötigen. Die Überlegung, J2EE zu nutzen, rührt allein von der Performance (Skalierbarkeit her). Darum möchte ich vorher ausloten, wie das faktisch aussieht. Das Schlagwort "Skalierbarkeit" liest man an jeder Stelle, aber sobald man es was konkreter möchte, wird es dunkel. 



> > Wieviel/was muss geändert werden um eine normale Java-Anwendung auf einem Apllication-Server laufen zu lassen?
> Das hängt davon ab, welchen Application-Server du nutzen möchtest. Wenn du J2EE mit EJB nutzen möchtest, gibt es da einiges zu tun.
> Ansonsten gibt es genügend andere Frameworks (z.B. Spring), wo sich das ein bisschen in Grenzen hält.
> 
> ...



Ja danke, das war schonmal ein Anfang. Andere Meinungen sind aber auch noch willkommen! :wink: 

Bis dann denn!

McTrevor


----------



## Ralf Ueberfuhr (22. Jun 2007)

Zum Clustern:
Die VM-Threads laufen lokal, also auf jedem Rechner einer. Es laufen auch die Instanzen der Application Server auf den verschiedenen Rechnern. Ein Cluster ist nur ein Zusammenspiel mehrerer Application Server, reguliert durch Load Balancer. Diese können auch - wenn gewünscht - Sessiondaten austauschen. Wenn dann eine Anfrage ankommt, wird diese auf einen der Server verteilt.

Grundsätzlich:
Wenn du keine Clients hast, dann brauchst du auch kein J2EE. Was macht das für einen Sinn?


----------



## McTrevor (22. Jun 2007)

Die Aufgabe besteht darin, in Java ein Programm zu schreiben, daß Dateien analysiert, um wandelt und umherschiebt. Da das erwartete Arbeitsvolumen von moderat bis gewaltig schwankt, muss die Geschichte skalierbar über mehrere Systeme sein. Ausfallsicherheit (Hot-Standby evtl.) ist auch gefordert.

Wenn ein J2EE-Server dafür nicht geeignet ist, wie würde man sowas dann in Java umsetzen?

Bis dann denn!

McTrevor


----------



## Gast (22. Jun 2007)

Dann nimmst du einen JMS-Server, (JMS ist Teil von J2EE), behandelst die Datenmengen dort asynchron in Form von Warteschlangen. Es gibt eigene JMS-Server (z.B. JBoss oder WebSphere MQ), die ebenfalls in Clustern laufen können.


----------



## Ralf Ueberfuhr (22. Jun 2007)

P.S.: Ich war's ;-)


----------



## Czapie (23. Jun 2007)

Hallo,

vllt. sollte man dazu erstmal klären, für was ein Applikation-Server überhaupt da ist.

Meiner Ansicht nach ist ein App-Server (egal welche zugrundeliegende Technologie) ein Mittel, 
um Geschäftslogik auszulagern bzw. an einem zentralen Punkt zu halten.

Aber, brauchst du überhaupt eine Auslagerung deiner Geschäftslogik aus deiner 
Software? Oder brauchst du eigentlich nur sehr viel Rechenleistung, aber willst / kannst
nicht auf entsprechende Hochleistungsrechner zugreifen, und kommst daher auf die
Idee einer Verteilung der Last auf mehrere Rechner und damit auf einen App.-Server?


----------



## T0M (23. Jun 2007)

Hab auch eine Anfängerfrage zu JavaEE: Wo gehören Dateien rein, die ein Servlet zur Ausführung braucht, also z.B. eine Textdatei mit Konfigurationen? Zu den Class-Dateien des Servlets in WEB-INF (verwende TomCat)?


----------



## Ralf Ueberfuhr (23. Jun 2007)

Solche Dateien mit in den WEB-INF/classes-Ordner, also zum Bytecode.


----------



## T0M (23. Jun 2007)

masseur81 hat gesagt.:
			
		

> Solche Dateien mit in den WEB-INF/classes-Ordner, also zum Bytecode.


Danke für die Antwort! Hatte da nämlich Angst mir die Klassen-/Verzeichnis-Ordnung zu verpatzen.  :wink:


----------



## McTrevor (4. Jul 2007)

Und die JMS-Server laufen auch auf Clustern von mehreren Rechnern und skalieren dort gut? Das Programm soll ja in mehreren Umgebungen gleichzeitig eingesetzt werden und sollte darum möglichst ohne weitere Anpassungen gut skalieren.

Also ist die zu behandelnde Aufgabe ohne J2EE zu lösen, wenn man auf einen (StandAlone-)JMS-Server zurückgreift?

Worin liegt hier der Vorteil gegenüber einer Lösung, bei der man RMI  nutzt und mehrere Server in der Registry einträgt, die die Aufträge abarbeiten? Ist es überhaupt möglich, sowas mit RMI zu realisieren?

Bis dann denn!

McTrevor

p.s.: Danke schonmal für die bisherige Hilfe.


----------



## miketech (4. Jul 2007)

Hi,

ist nicht JMS asynchron, während RMI synchron ist? Nur so ein Gedanke 

Gruß

Mike


----------



## McTrevor (5. Jul 2007)

Wo ist jetzt genau das Problem? Ob die Aufträge jetzt in der JMS-Queue landen oder von mir per RMI in entfernte Queues gepackt werden, die dort von Threads abgearbeitet werden, macht doch keinen großen Unterschied, oder?

Bis dann denn!

McTrevor


----------

