Wie startet man eine JAVA EE Projekt

Status
Nicht offen für weitere Antworten.

schroedi

Mitglied
Ein kleine Frage über die man bestimmt ein gesamtes Buch schreiben kann.

Machen wir es kurz.
Ich habe eine Webanwendung, in ASP/.net - lecker,

Also nehme ich den Code auseinander und will jetzt endlich guten, wartbaren Java EE Code bauen.

Wie gehe ich hierbei am korrektesten und am einfachsten vor...?
 

Wolfram

Mitglied
Da brauchst Du einen Application Server, Tomcat, Glassfish, Websphere, welchen-hab-ich-vergessen. Hast Dir schon einen ausgesucht? Die sind wohl alle nicht so newbie-freundlich, oder man kann viele Klagen über jeden hören, Du musst ein paar JSRxxx lesen. Aber wenn man das Prinzip einmal verstanden hat, geht's ganz gut. Der Standard ist immer derselbe, nur die Implementation des Servers unterschiedlich: Mal geht's unter Windows, dann unter Linux, mal mit nem Web-Frontend, mal über Commandline/.conf-Dateien in Linux. Der Trick an Application Servern ist glaub ich "rapid", nicht so sehr "wartbar".

Aber: In dem Moment, in dem Du die Sphäre des Application Servers verlässt, bist Du gleich wieder auf Dich allein gestellt. Java EE kann nur so-und-soviel für Dich tun - mach Dich schlau, bevor Du von einer Technologie auf die andere umstellst, bloß weil es sich auf der Tastatur leichter tippen lässt ;)

Hab übrigens keine Ahnung, in Wirklichkeit :)
 

ARadauer

Top Contributor
wenn man damit anfängt reichen wahrscheinlich servlets und jsp. mit ejb würd ich mich beschäftigen, wenn man die grundlagen verstanden hat. also recht meiner meinung nach am anfang ein tomcat
 
M

maki

Gast
JSPs gehören wie Servlets zum J(2)EE Standard ;)

JBoss wird aber nicht von allen als echter J(2)EE Server anerkannt.

Gibt sogar Leute die schreiben Enterprise Anwendungen ohne EJBs und den dazugehörenden Container.
 

Niki

Top Contributor
Wenn wir schon dabei sind, kann mir jemand mal in kurzen Sätzen erklären was mir alles Spring erleichertn soll. Wo kann ich Spring einordnen, erspart man sich dadurch EJBs oder erleichtert es mir die Arbeit damit?
Ich werde aus der Doku nicht wirklich schlau, da ist meiner Meinung nach zuviel schwammiges Geschwafel drin und keine konkreten Aussagen.
 

byte

Top Contributor
Niki hat gesagt.:
Wenn wir schon dabei sind, kann mir jemand mal in kurzen Sätzen erklären was mir alles Spring erleichertn soll. Wo kann ich Spring einordnen, erspart man sich dadurch EJBs oder erleichtert es mir die Arbeit damit?
Sowohl als auch. Du kannst Spring anstelle von EJB einsetzen, aber auch genauso beide zusammen.
Im Endeffekt ist Spring ein (alternatives) JEE-Framework. Spring ist in verschiedene Module unterteilt. Je nachdem welches Modul Du verwendest, bringt es Dir gewisse Funktionalität. Der Kern stellt die Dependency Injection dar. Das heisst, Du programmierst nach Interfaces und die Abhängigkeiten zur konkreten Implementierung wird injiziert (bedeutet: in XML-Dateien konfiguriert). Das bedeutet im Grunde, dass Du nirgends im Code per "new" Objekte erzeugst, das erledigt Spring für Dich. Daneben ist wohl das meist genutzte Feature das Transaktionsmanagement. Du kannst Deine Services oder Business-Methoden auf deklarative Weise transaktional machen. D.h. Du hast keinen Transaktionscode im Quellcode stehen, sondern konfigurierst es wieder per XML. Ähnlich kannst Du mit Spring Security Sicherheit deklarativ konfigurieren oder auch eigene Aspekte schreiben.
Spring bietet noch viel mehr, aber das würde jetzt hier den Rahmen sprengen. Du kannst aber gerne konkrete Fragen stellen. ;)

Der größte Unterschied zwischen Spring und EJB ist aber wohl, dass Spring ein Framework ist, während EJB eine Architektur (samt Application-Server) vorschreibt. Während bei EJB die meisten Features durch den Container bereit gestellt werden, liefert bei Spring das Framework die Funktionalität. Du kannst das also auch alles ohne Server nutzen, das ganze auf einem schlanken Tomcat deployen oder einfach nur per RMI (ohne weitere Serversoftware).

Ich werde aus der Doku nicht wirklich schlau, da ist meiner Meinung nach zuviel schwammiges Geschwafel drin und keine konkreten Aussagen.
Welche Doku meinst Du? Die Spring Referenz Dokumentation ist ziemlich gut.
 

Niki

Top Contributor
Danke, das hat schon mal viel erklärt! Das mit schwammig meinte ich die Erklärung, was Spring genau macht.
Was ich nicht ganz verstehe ist das mit dem Transaktionsmanagement. Wie genau kann ich Methoden, die eine Transaktion darstellen als solche deklarieren. Ich kenne es normalerweise so:


  1. * Connection aus Pool holen
    * Statements ausführen
    * Connection committen
    * Connection in Pool zurück legen

Das heißt, ich müsste bei dieser Methode die Connection den einzelnen Methoden mitgeben, damit alle die selbe Transaktion verwenden. Wie würde das dann in Spring ausschauen?
 
M

maki

Gast
Das heißt, ich müsste bei dieser Methode die Connection den einzelnen Methoden mitgeben, damit alle die selbe Transaktion verwenden. Wie würde das dann in Spring ausschauen?
Du würdest gar nix vom Transaktionsmanagement in deinen Methoden haben, dass ist gut so ;)

Stattdessen würdest du konfigurieren, dass beim Aufruf einer bestimmten Methode deiner Klasse eine Transaktion anfängt, die Transaktionsbehandlung/initiierung findet dann im sog. Interceptor statt, gesteuert durch die Konfiguration.
 

tfa

Top Contributor
Aussehen könnte es z.B. so in Spring (wenn man Annotation verwenden möchte):

Code:
@Transactional(propagation=Propagation.MANDATORY, rollbackFor=Throwable.class)
public  class FooDaoHibernate {

	HibernateTemplate hibernateTemplate;

	@Transactional(readOnly=true)
	@SuppressWarnings("unchecked")
	public List<Foo> findAll() {
		return hibernateTemplate.loadAll(Foo.class);
	}

	public void save(Foo obj) {		
		hibernateTemplate.saveOrUpdate(obj);
	}

	@Transactional(propagation=Propagation.SUPPORTS)
	public  Foo createNew(){
		return new FooImpl();
	}
}

Alles also sehr kurz, knapp und übersichtlich. Das ganze Transaktions-Handling macht Spring.
Es dürfte nur ein bisschen unheimlich sein, sich durch den Spring-Code zu debuggen (falls es
mal nötig sein sollte). Von den dynamisch generierten Proxy-Objekten ganz zu schweigen...
 

byte

Top Contributor
Niki hat gesagt.:

  1. * Connection aus Pool holen
    * Statements ausführen
    * Connection committen
    * Connection in Pool zurück legen
Der Connection Pool interessiert Dich bei Spring auch nur peripher. Für gewöhnlich benutzt Du in den DAOs ein entsprechendes Template (HibernateTemplate, JdbcTemplate, TopLinkTemplate, ... je nach eingesetztem OR-Mapper). Das Template stellt Methoden bereit, mit denen Du DB-Statements absetzen kannst. Um die Connections oder das Pooling kümmert sich Spring völlig transparent (Pooling aktivierst Du, indem Du eine entsprechende Pooled Data Source konfigurierst).

Du schreibst also Deine Service-Methoden und konfigurierst sie als transaktional. Diese Service-Methoden rufen DAOs auf. Die DAOs benutzen das XXXTemplate zum Absetzen der Statements. Du musst dabei weder von Spring-Klassen erben, noch irgendwelche Spring-Interfaces implementieren. Deine Klassen bleiben einfache POJOs.
 

Niki

Top Contributor
Das klingt sehr fein und transparent. Sehe ich das also richtig dass ich immer nur eine Methode als Transaktion deklariere und die Aufrufe innerhalb dieser Methode laufen dann in der selben Transaktion?
 

tfa

Top Contributor
Du kannst das für jede Methode einzeln konfigurieren, je nach Anforderung: ob ein Transaktionskontext zwingend vorgeschrieben ist (MANDATORY, sonst Exception), ob eine Tx vorhanden sein muss (REQUIRED), ob eine neue Tx erzeugt werden muss (REQUIRES_NEW), ob es egal ist, einen TxContext zu haben (SUPPORTS), usw. Am Ende sendet Spring entsprechend ein Commit - oder auch Rollback, je nach (konfigurierter) Exception.
 

Niki

Top Contributor
Ich bin ein wenig verwirrt...

Sagen wir ich habe zwei Methoden, die beide in der selben Transaktion ausgeführt werden sollen. Ist das möglich oder muss ich dann eine Methode erstellen, die diese zwei Methoden aufruft und den Transaktionskontext für diese Methode setzen?
Ich versuche zu verstehen wie das Spring intern löst, habe aber im Moment keine Durchblick
 
M

maki

Gast
Sagen wir ich habe zwei Methoden, die beide in der selben Transaktion ausgeführt werden sollen.
Klar, kein Problem, werden die aus deiner SessionFacade aufgerufen oder von wo aus?

Ist das möglich oder muss ich dann eine Methode erstellen, die diese zwei Methoden aufruft und den Transaktionskontext für diese Methode setzen?
Das wäre dann deine eine SessionFacade ;)

Geht aber auch anderes, siehe Post von tfa.
 

tfa

Top Contributor
Niki hat gesagt.:
Ich bin ein wenig verwirrt...

Sagen wir ich habe zwei Methoden, die beide in der selben Transaktion ausgeführt werden sollen. Ist das möglich oder muss ich dann eine Methode erstellen, die diese zwei Methoden aufruft und den Transaktionskontext für diese Methode setzen?
Ich versuche zu verstehen wie das Spring intern löst, habe aber im Moment keine Durchblick

In diesem Fall hätten beide Methoden die Propagation "REQUIRED", d.h., es wird eine neue Transaktion gestartet, wenn beim Aufruf der Methode noch keine existiert. Wenn es schon eine gibt, wird diese praktisch weiter benutzt.
 

byte

Top Contributor
Niki hat gesagt.:
Sagen wir ich habe zwei Methoden, die beide in der selben Transaktion ausgeführt werden sollen. Ist das möglich oder muss ich dann eine Methode erstellen, die diese zwei Methoden aufruft und den Transaktionskontext für diese Methode setzen?
Das geht direkt, indem Du beide Methoden mit Propagation.REQUIRED konfigurierst. Wird die erste Methode aufgerufen und es existiert noch keine Transaktion, dann erzeugt Spring eine. Ruft diese Methode nun die zweite Methode auf, wird keine neue Transaktion erzeugt, weil ja schon eine existiert. Endet Methode 1, so kommt das Commit.

Ich versuche zu verstehen wie das Spring intern löst, habe aber im Moment keine Durchblick
Intern wird das Ganze entweder über Proxies gelöst oder per Bytecode-Instrumentation (konfigurierbar). Im ersteren Fall legt Spring ein Proxy-Objekt um das eigentliche Objekt. Deine Service-Methode wird dann von der Proxy-Methode aufgerufen, die sich davor und danach um den Transaktionskram kümmert. Im zweiteren Fall wird eine spezielle ClassLoader-Erweiterung (JEE5) verwendet, um die Class-Dateien vor dem ersten Laden zu manipulieren. Der Transaktionscode wird dabei dann direkt in den Bytecode Deiner POJOs geschrieben.
 

Niki

Top Contributor
Wow, danke für die vielen Antworten. Jetzt sehe ich schon klarer! Ich glaub ich werd mal eine kleine WebApp mit Spring implementieren. Derzeit bastel ich aber noch an einer kleinen ICEFaces/Facelets Demo, um das einmal zu kapieren. Man muss ja am Ball bleiben...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Klassen IntelliJ14.1.1 Ultimate startet eine Main-Klasse NICHT MEHR Java Basics - Anfänger-Themen 0
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 22
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 7
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
T HelloWorld startet nicht Java Basics - Anfänger-Themen 14
Kirby.exe Programm startet nachdem es compiled wurde nicht Java Basics - Anfänger-Themen 17
T Konsolenscanner startet nicht durch Aufruf von Actionlistener Java Basics - Anfänger-Themen 4
V Vererbung Eclipse startet das Programm nicht und rechnet nicht Java Basics - Anfänger-Themen 6
J JavaEditor kompiliert aber startet nicht Java Basics - Anfänger-Themen 1
das_leon Erste Schritte Eclipse startet nicht Java Basics - Anfänger-Themen 1
L Compiler-Fehler AndroidStudio Projekt startet nicht mehr!!! Java Basics - Anfänger-Themen 2
C Programm JAR startet nicht - Could not create the Java Virtual Machine Java Basics - Anfänger-Themen 4
Ruvok Executable Jar File startet nicht Java Basics - Anfänger-Themen 3
I .jar startet nicht nach Export Java Basics - Anfänger-Themen 27
S Anwendung Startet nur in Vergangenheit Java Basics - Anfänger-Themen 11
M Eclipse startet nicht mehr (eclipse.exe beendet sich selbst)? Java Basics - Anfänger-Themen 5
B eclipse startet nicht Java Basics - Anfänger-Themen 1
A Erste Schritte JAR Datei startet nicht Java Basics - Anfänger-Themen 1
J Compiler-Fehler Cmd startet compiler Java Basics - Anfänger-Themen 1
M jar Datei startet nicht Java Basics - Anfänger-Themen 2
M datei startet unter windows 7 nicht Java Basics - Anfänger-Themen 12
C Jar Datei startet nicht nach Export mit Eclipse Juno Java Basics - Anfänger-Themen 2
M Webstart Startet nicht Fehler Java Basics - Anfänger-Themen 5
H Eclipse startet nicht (PATH Problem?) Java Basics - Anfänger-Themen 12
R JAR File startet nur per Doppelklick aber nicht per CMD Java Basics - Anfänger-Themen 4
B Erste Schritte Eclipse startet nicht Java Basics - Anfänger-Themen 8
K Java editor kompiliert aber startet nicht Java Basics - Anfänger-Themen 5
Z Applet startet nicht bei Domain mit Umlaut Java Basics - Anfänger-Themen 2
M cmd datei startet nicht. Java Basics - Anfänger-Themen 14
1 jar-Programm startet nicht Java Basics - Anfänger-Themen 6
B Programm startet in IDE,aber nicht in Windows Java Basics - Anfänger-Themen 4
M cmd datei startet nicht Java Basics - Anfänger-Themen 15
P Input/Output Konsolenanwendung - Sie startet nicht Java Basics - Anfänger-Themen 11
W Programm startet nicht Java Basics - Anfänger-Themen 3
T Mediathek.jar startet nicht Java Basics - Anfänger-Themen 19
A Programm startet nicht! Java Basics - Anfänger-Themen 13
Haubitze_Broese Methode am ende nochmal startet? Java Basics - Anfänger-Themen 8
I Eclipse startet nicht richtig Java Basics - Anfänger-Themen 4
R Applet startet nicht Java Basics - Anfänger-Themen 10
M Mein Externes Programm startet nicht Java Basics - Anfänger-Themen 13
I Applet startet nicht Java Basics - Anfänger-Themen 2
E Executable JAR startet nicht - Hilfe ! Java Basics - Anfänger-Themen 10
M jdownloader startet nicht JAVA fehler Java Basics - Anfänger-Themen 4
H Eclipse: Programm startet nicht, wie Fehler feststellen? Java Basics - Anfänger-Themen 5
B Thread startet anderen Thread neu Java Basics - Anfänger-Themen 7
K JAVA-Anwendung startet nicht Java Basics - Anfänger-Themen 7
D Java Applet startet im Browser nicht Java Basics - Anfänger-Themen 9
T Programm startet nicht wg. Tabelle? Java Basics - Anfänger-Themen 19
P *.jar startet nicht auf Mac OS X Java Basics - Anfänger-Themen 5
G Bluej startet nicht Java Basics - Anfänger-Themen 5
P Eclipse startet kein Applet Java Basics - Anfänger-Themen 6
A jar startet nicht Java Basics - Anfänger-Themen 6
D jar - gui mal startet es mal nur ein leeres Fenster warum? Java Basics - Anfänger-Themen 4
R jar startet nicht Java Basics - Anfänger-Themen 5
R Thread startet nicht, verstehe nicht warum Java Basics - Anfänger-Themen 2
G Applet mit Lib startet nicht Java Basics - Anfänger-Themen 2
G Apache Tomcat startet nicht da JAVA_HOME nicht definiert Java Basics - Anfänger-Themen 3
F Jar datei startet nicht Java Basics - Anfänger-Themen 6
S Jar startet nur über Konsole Java Basics - Anfänger-Themen 4
S mehr als 1 Bild im Jar --> Jar startet nicht Java Basics - Anfänger-Themen 2
G Eclipse startet automatisch Fenster. Java Basics - Anfänger-Themen 4
H Programm erfolgreich compiliert, startet aber nicht? Java Basics - Anfänger-Themen 8
ven000m Eclipse startet nicht mehr nach Deinstalltion von alten JRE Java Basics - Anfänger-Themen 6
R Eclipse startet nicht mehr Java Basics - Anfänger-Themen 10
Bierhumpen Startet for Schleife nicht! Java Basics - Anfänger-Themen 12
M Programm(JFrame) mit Netbeans erstellt.startet nicht! Java Basics - Anfänger-Themen 4
F Java Applikation ProjectX startet sehr langsam Java Basics - Anfänger-Themen 3
H JAR startet nicht Java Basics - Anfänger-Themen 9
N jar-Datei startet nicht Java Basics - Anfänger-Themen 14
R Programm startet nicht Java Basics - Anfänger-Themen 2
D [Swing] Warum startet mein Progamm nicht? Java Basics - Anfänger-Themen 14
A applet startet nicht im webbrowser Java Basics - Anfänger-Themen 5
H appletviewer startet nicht. Java Basics - Anfänger-Themen 13
C SWT-Programm startet nicht: NoClassDefFoundError Java Basics - Anfänger-Themen 6
G jar-File startet zu langsam? Java Basics - Anfänger-Themen 9
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
G Wie wartet man bis ein URL eine Antwort zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
M mit Maven eine ausführbare Jar bauen Java Basics - Anfänger-Themen 7
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben