# Projektarbeit Frameworks



## mhamp (14. Aug 2011)

Hallo zusammen!

Im September werde ich in England das letzte Jahr meines Bachelor Studiums beginnen. Im letzten Jahr muss ich eine Projektarbeit durchführen und ich habe mich dazu entschieden eine Java-Anwendung zu entwickeln.

Die Anwendung soll eine Knowledge-Base Software für Entwicklerteams darstellen (aber das nur am Rande). Um möglichst viel aus der Projektarbeit zu lernen, möchte ich mich während der Entwicklung auch mit Frameworks auseinandersetzen.

Während eines Praktikums im Frühjahr setzte das Entwicklerteam Spring für ihr Projekt ein. Ich selbst habe mit Spring noch keine Erfahrung, habe jedoch darüber nachgedacht das Framework in meiner Anwendung zu benutzen.

Nun meine eigentlichen Fragen, ist es vielleicht etwas zu optimistisch mich in der knappen Zeit noch in ein Framework einzuarbeiten? Könnt ihr mir Bücher, Tutorials oder Blogs empfehlen um mich in Spring einzuarbeiten (selbstverständlich gerne auch in Englisch).
Welche Frameworks könnten noch hilfreich sein? Hibernate als ORM und ActiveMQ um den Datenaustausch zwischen Client- und Server-Seite durchzuführen?

Vielen Dank im Voraus,
mhamp


----------



## nillehammer (15. Aug 2011)

> Nun meine eigentlichen Fragen, ist es vielleicht etwas zu optimistisch mich in der knappen Zeit noch in ein Framework einzuarbeiten?


Wenn Du Dich grundsätzlich mit Java auskennst und eine IDE wie Eclipse richtig bedienden kannst, ist es realistisch. Du holst die Zeit, die Du anfangs hineinsteckst hinterher locker wieder raus.



> Welche Frameworks könnten noch hilfreich sein? Hibernate als ORM und ActiveMQ um den Datenaustausch zwischen Client- und Server-Seite durchzuführen?


Hibernate ist eine gute Wahl, arbeite selbst sehr gerne damit. Es ist auch gut mit Spring integrierbar. Ich würde da aber eine Schicht höher ansetzen und mich mit JPA beschäftigen. Hibernate ist dann einer der möglichen Provider für JPA (andere wären EclipseLink oder Apache JPA).

Wenn Dein Frontend Webbasiert ist, brauchst Du vielleicht garkeine Client-/Server Kommunikation und kannst Dir ActiveMQ sparen. Spring enthält jeden falls auch Komponenten für die Erstellung von Weboberflächen.


----------



## mhamp (15. Aug 2011)

Vielen Dank für deine Antwort!

Nein webbasiert soll das Projekt vorerst nicht werden (vielleicht im Anschluss an die Projektarbeit, aber bis dahin ist noch Zeit).

ActiveMQ würde ich gerne benutzen einfach um es mal eingesetzt zu haben. 
Mit ActiveMQ ist, im Gegensatz zum "Standard-Java-RPC", eine Kommunikation in beide Richtungen (Client <==> Server) möglich - ist das richtig?
Hast du eventuell auch Erfahrungen damit und kannst mir ein bis zwei Tipps geben?

Mit JPA kann ich leider rein gar nichts anfangen, habe mir schnell den Wikipedia-Artikel durchgelesen. Hört sich für mich ziemlich ähnlich zu Hibernate an!? Wo ist denn da der Unterschied?


----------



## nillehammer (15. Aug 2011)

> Mit ActiveMQ ist, im Gegensatz zum "Standard-Java-RPC", eine Kommunikation in beide Richtungen (Client <==> Server) möglich - ist das richtig?


Richtig und falsch: Ja, es ist eine Kommunikation in beide Richtungen möglich. Falsch ist, dass das bei RPC nicht geht. Bei RPC geht das nämlich auch. Aber das Aufgabengebiet von Messaging Systemen ist nach meinem Verständnis ein anderes als RPC. RPC ist synchron. D.h. der Client sendet einen Aufruf und erwartet direkt eine Antwort. Messages sind für asynchrone Kommunikation gedacht. D.h. der Client sendet eine Message und macht dann weiter, ohne eine direkte Antwort zu erwarten. RPC kann man sicher auch mit Message basierten Systemen umsetzen, ich halte es aber dafür für Overkill.

Aber bei einer Kowledgebase gibt es gute Anwendungsfälle für Message basierte Kommunikation. Z.B. Nutzer tragen ein, dass sie ein bestimmtes Thema interessiert (englisch to subscribe). Wenn jetzt zu diesem Thema ein neuer Artikel in der Knowledge Base gespeichert wird, wird dieser an alle Interessierten veröffentlicht (englisch to publish). Das entsprechende Kommunikationspattern heißt (oh Wunder) publish/subscribe. Das ist ein ganz klassischer Fall für Message Systeme.



> Hast du eventuell auch Erfahrungen damit und kannst mir ein bis zwei Tipps geben?


Leider überhaupt nicht. Bei uns werden Message Systeme über Webservice angesprochen. D.h. ich verpack meine Nachrichten in XML und verschick sie per HTTP. Ich hab deswegen noch nie direkt gegen JMS programmiert geschweige denn mal selbst einen Message-Server hochgezogen.



> Mit JPA kann ich leider rein gar nichts anfangen, habe mir schnell den Wikipedia-Artikel durchgelesen. Hört sich für mich ziemlich ähnlich zu Hibernate an!? Wo ist denn da der Unterschied?


In früheren Zeiten gab es noch keine Frameworks für das Mapping von Java Klassen auf Datenbanktabellen. Da hat jeder Entwickler plain JDBC programmiert und sich dann mit den Integers, Strings, Booleans etc. aus den ResultSets seine Java Objekte selbst zusammengebaut. Um den Entwickler davon zu entlasten, haben sich ORM-Frameworks entwickelt. Einer der prominentesten Vertreter ist sicher Hibernate. Es gibt aber auch viele andere komerzielle und nicht komerzielle. In der Java Community hat man das erkannt und versucht einen Standard draus zu machen. Herausgekommen ist JPA. (ist jetzt sehr verkürzt dargestellt) Da JPA nicht im luftleeren Raum entstanden ist, finden sich dort viele Elemente der bereits existierenden ORM-Frameworks, bis hin zu gleich benannten Annotationen. Deswegen sieht vieles ähnlich aus. JPA ist der Standard, den man beherrschen sollte, Hibernate ist eine mögliche Alternative für ein Framework, das den Standard implementiert (und natürlich um einige nicht standardisierte Features erweitert...)


----------



## mhamp (16. Aug 2011)

Dann hatte ich ActiveMQ leicht falsch verstanden, aber es wird dann wohl doch die richtige Wahl finden.
Hoffentlich finde ich ein paar gute Tutorials ;-)

Ich habe mich gestern Abend noch etwas intensiver mit JPA auseinandergesetzt und denke das darauf die Wahl fallen wird (danke also für deinen Hinweis!).
Allerdings habe ich noch eine Frage, EJB ist auch - wie Hibernate - ein Framework, welches auf den Standard aufsetzt?


----------



## nillehammer (16. Aug 2011)

> EJB ist auch - wie Hibernate - ein Framework, welches auf den Standard aufsetzt?


Nein, EJB ist Bestandteil eines anderen Standards nämlich JEE. JEE ist die eierlegende Wollmilchsau der Anwendungsintegration mit Java. EJB beschäftigt sich auch mit dem persistieren von Objekten in Datenbanken. Bei EJBs (Enterprise Java Beans) wird im Gegensatz zu "normalen" Java-Objekten der Lebenszyklus der Objekte von einem sog. Container gemanaged. Darüber hinaus gibt es da noch sowas wie Transaktionskontrolle etc.



> Dann hatte ich ActiveMQ leicht falsch verstanden, aber es wird dann wohl doch die richtige Wahl finden.


Ich glaube, dass Du, ohne es zu wissen sogar die goldrichtige Wahl getroffen hast. Nachdem, was ich mir unter einer Knowledge Base vorstelle, ist die Abstraktion einer "Message" sehr gut geeignet, um die Anwendungsfälle abzubilden.

-User in der Rolle "Autor" machen Themen auf (englisch Topics). Unter diesen Topics veröffentlichen sie Artikel (oder auch nur kurzte Dreizeiler mit einer Lösung, die sie gerade gefunden haben)
-User in der Rolle "Leser" registrieren sich für Topics und kriegen automatisch alle neuen Artikel übermittelt, wenn sie ihren Client starten.

Bei ActiveMQ brauchst Du Dich (wenn ich die Doku richtig verstanden habe) dann garnicht um die Speicherung zu kümmern. Das wird auf dem Server nur konfiguriert und er macht es dann für Dich.

Was ich noch nicht gefunden habe ist, wie man bspw. eine Suche nach Inhalten machen kann.


----------



## mhamp (16. Aug 2011)

nillehammer hat gesagt.:


> Ich glaube, dass Du, ohne es zu wissen sogar die goldrichtige Wahl getroffen hast.



Ein blindes Huhn findet auch mal ein Korn 


Ich habe bei vogella.de ein JPA-Tutorial gefunden (JPA2.0 with EclipseLink). 
Dort wird also EclipseLink als JPA-Implementation benutzt. Benutzt man JPA überhaupt nicht "pur" sondern immer nur eine Implementierung bzw. einen Provider?

Kannst du mir ein Buch/Online-Ressource zu JPA empfehlen?

(Danke übrigens für deine Geduld!)


----------



## maki (16. Aug 2011)

"Pro JPA 2: Mastering the Java Persistence API" ist imho sehr gut.

Ansonsten ersetzt ein ORM nicht die Kenntnisse für Objekt-Relationales Mapping (und damit RDBMS/Normalisierung) und OOP, "es geht nicht um Ignoranz sondern um Bequemlichkeit" frei aus dem Buch übersetzt.


----------



## nillehammer (16. Aug 2011)

> Benutzt man JPA überhaupt nicht "pur" sondern immer nur eine Implementierung bzw. einen Provider?


Genau, JPA definiert nur die Syntax und die Semantik. Die Ausführung machen dann die Implementierungen/Provider. Ist vielleicht vorstellbar wie bei Java das Verhältnis von Interface und konkreter Klasse.



> Kannst du mir ein Buch/Online-Ressource zu JPA empfehlen?


Ich hab mich durch den Getting Started Guide und danach durch das Reference Manual von Hibernate gearbeitet. Gibt es beides hier: Documentation - Hibernate - JBoss Community Mit dem Hintergrundwissen aus den Dokus ausgestattet, lohnt es sich, diese Blogserie zu lesen: JPA Implementation Patterns | Xebia Blog

//Edit:


> Ansonsten ersetzt ein ORM nicht die Kenntnisse für Objekt-Relationales Mapping


Da schreibt Maki etwas sehr wahres. Ich selbst bin am Anfang darüber gestolpert, dass ich nicht verstanden habe, was "Ownership of an Association" bedeutet. Das ist in den Hibernate Docs erklärt. Wenn Du an der Stelle bist, überlies es nicht einfach (so wie ich damals), sondern versuche es wirklich nachzuvollziehen. Was auch wichtig ist, ist die Zustände und ihre Übergänge zu verstehen, die eine persistent Entity einnehmen kann. Auch das sollte man nicht einfach überlesen, sondern wirklich verinnerlichen.


----------



## mhamp (18. Aug 2011)

Vielen Dank für eure hilfreichen Antworten!

Werde mich dann demnächst mal mit JPA und EclipseLink auseinandersetzen!


----------

