# Verständnisfrage zu Frameworks



## one-man-factory (3. Sep 2011)

Hallo zusammen, ich habe mir kürzlich ein video2brain-tutorial zu javaEE 6 ausgeliehen und bin soweit wirklich begeistert über den schnellen, unkomplizierten Einstieg. Dummerweise gibt es einen kleinen Konflkt zwischen dem, worauf der Kurs hinarbeitet und dem, was ich für ein paar geplante Projekte wahrscheinlich wissen müsste.

Also, am Anfang des Tutorials werden unterschiedliche Projektformen vorgestellt. Webanwendungen und Enterprise-Anwendungen, also solche Anwendungen, die man in ein .war-Archiv packen würde und solche, die in ein .ear-Paket gehören.
Es wird nun darauf hingewiesen, dass nur die im .ear gepackten Enterprise-Applikationen die Möglichkeit bieten echte verteilte Anwendungen zu schreiben. Dann wird darauf hingewiesen, dass sich das Tutorial fast ausschließlich mit Webanwendungen beschäftigwn wird.

Ich bin jetzt in etwa bei der Hälfte angekommen und hab damit schonmal in Servlets, JSP und JSF reingeschnuppert.

Nun meine Frage (die vielleicht etwas dumm rüberkommt, aber ich muss mich wirklich erstmal orientieren...):

Wenn ich mit NetBeans ein Webprojekt erzeuge, kann ich ja aus mehreren Frameworks wählen (JSF, Hibernate, usw.). Wenn ich aber nun eine neue Enterprise-Application beginnen will, steht mir davon nichts zur Verfügung. Muss ich daraus jetzt schließen, dass manche Frameworks nur für die "abgespeckte" Version funktionieren? Oder lässt sich das irgendwie kombinieren - vielleicht so eine Art integrierte Webanwendung? :bahnhof:

Ich hoffe das kommt nicht all zu bescheuert rüber. Ich werde im Augenblick mit so vielen neuen Informationen überhäuft, dass ich mich erstmal zurechtfinden muss...:rtfm:


----------



## JohannisderKaeufer (3. Sep 2011)

Für JEE6 nutzt man einen Applicationserver, z.B. JBoss, Glassfish,...
Diese Applicationserver unterstützen die gesamte Bandbreite was einem JEE zur Verfügung stellt.


Diese Applicationserver beinhalten in der Regel auch einen sogenannten Servlet-Container.
Die bekanntesten ServletContainer sind z.B. Tomcat und Jetty.

Tomcat und Jetty reichen für Webanwendungen vollkommen aus und können auch ausserhalb eines ApplicationServers betrieben werden. Das macht sie etwas leichtgewichtiger und leichter zu Handeln.

Da man bei einer Webanwendung oft auch auf Datenbanken zugreift, nutzt man häufig ein Framework wie Hibernate. Das ist bei einem Webcontainer standardmäßig nicht dabei.

Bei einer JEE Anwendung programmiert man gegen ein "Interface". Und zwar gegen JPA. Der Applicationserver bringt dann eine JPA-Implementierung mit. Datenbankverbindungen werden dann im Applicationserver konfiguriert.


----------



## one-man-factory (3. Sep 2011)

JohannisderKaeufer hat gesagt.:


> Diese Applicationserver beinhalten in der Regel auch einen sogenannten Servlet-Container.
> Die bekanntesten ServletContainer sind z.B. Tomcat und Jetty.
> 
> Tomcat und Jetty reichen für Webanwendungen vollkommen aus und können auch ausserhalb eines ApplicationServers betrieben werden. Das macht sie etwas leichtgewichtiger und leichter zu Handeln.
> ...



Okay, erstmal danke!

Wenn ich das also richtig verstehe, kann ich, wenn ich, solange ich meine Anwendung in einem Applicationserver laufen lasse ALLES nutzen, was JavaEE 6 bietet. Das klärt schonmal einen Teil der Frage. 

Mir geht es nun vor allem darum, ob ich die Anwendung auf unterschiedlichen, also physisch getrennten Servern laufen lassen kann. Der Video2Brain-Mensch (btw. er ist äußerst entspannt ^^) hat erläutert, dass eine Anwendung, die als war-paket deployt wird, den Applicationserver dazu bringt den Webcontainer und den EJB-Container in die selbe virtuelle Maschine zu laden, was halt de3n selben Adressraum zur Folge hat und damit auch eine bessere Performanz/Ressourcennutzung. Das aber macht eine physische Trennung unmöglich.
Er erklärt weiter, dass man, möchte man eine vollwertige, verteilte Anwendung entwickeln ene Enterprise-Applikation anpeilen muss.

Mich hat jetzt dabei stutzig gemacht, dass mir, wenn ich eine solche Enterprise-Geschichte starten will, zumindest seitens NetBeans, keines der Frameworks zur Verfügung steht, die man für Webanwendungen nutzen kann. Ich gehe schon davon aus, dass das geht und ich nur zu verwirrt bin, aber die Frage lässt mich einfach nicht in Ruhe...:autsch:


----------



## Gelöschtes Mitglied 5909 (4. Sep 2011)

Bei Enterprise Applications verwendet man in der Regel "nur" die Standard JEE APIs.
Dazu zählen JPA, JSF, EJB, Servlets, JSPs, JMX, JNDI,...
Um die Anwendungen zu deployen, benötigt man einen Application Server, der u.a. einen Servlet Container und einen EJB Container enthält. 

Bei normalen WebApps kann man Standardmäßig nur einen teil der JEEE APIs verwenden. Dazu zählen insbesondere die Webtechnologien Servlets und JSPs. Sie benötigen einen ServletContainer (Tomcat, Jetty,...).

Da man auch bei normalen WebApps in der Regel eine Persistenzschicht hat, kann man aus einer vielzahl von Frameworks wählen, die das erledigen. Eine davon ist z.b. Hibernate, was eine JPA implementierung ist, aber auch noch ein bischen mehr bietet als der Standard. Hat zwar Vorteile, aber auch den nachteil, dass man dann nicht mehr Standardkonform ist.
Man kann auch eine andere Webschicht nehmen (wicket, tapestry, spring mvc, ...) und kann quasi alle frameworks selbst wählen.

Pro und Contra (unvollständig)

Vorteil webapp:
- wahl der frameworks
- "leichtgewichtig" (stimmt nicht immer )
Nachteil webapp:
- nicht immer Standardkonform
- Clustering ggf. aufwendiger 

Vorteil EnterpriseApp:
- Standardkonform
- Clustering
Nachteil EnterpriseApp:
- Nutzung der APIs beschränkt
- "keine" Frameworkwahl bzw nutzung von z.b. hibernate specials (indirekt wahl der implementierung über appserver)


----------



## Sym (4. Sep 2011)

Wenn Dich das Thema des AppServers richtig interessiert, kann ich EJB 3.1 Professionell empfehlen.

Die ersten Themen behandeln allgemein den AppServer und die einzigen Komponenten darin. Später geht es neben EJB auch in Richtung JPA.


----------



## one-man-factory (4. Sep 2011)

Danke für die Erläuterung und auch danke für den Buchtipp (da bin ich immer auf der Suche )!



raiL hat gesagt.:


> Vorteil webapp:
> - wahl der frameworks
> - "leichtgewichtig" (stimmt nicht immer )
> Nachteil webapp:
> ...



Inwiefern ist Clustering mi webapps aufwendiger? Ist es so aufwendig, dass man lieber den Weg der eingeschränkten Frameworks beschreitet? Oder ist es auch vorstellbar alle Vorteile zu nutzen, wie etwa Hibernate und schlussendlich trotzdem geclusterte anwendungen zu haben - eben irgendwie geflickschustert?


----------



## Gelöschtes Mitglied 5909 (5. Sep 2011)

kann man pauschal nicht sagen, es kommt ganz darauf an wie die webanwendung programmiert ist


----------

