Architektur Änderungen: Spring, OpenEntityInViewFilter

Alles für Entwickler: Java, JavaScript, REST-API, AngularJS, HTML.

Moderators: MZ per X, gene

Architektur Änderungen: Spring, OpenEntityInViewFilter

Postby StevenStorm » 18 Sep 2012, 22:01

Hi,

ich hab in meinem Fork mal ein paar Änderungen in Sachen Architektur gemacht.

1.) Spring eingebunden, insbesondere für erstmal für Dependecy Injection
2.) DaoManager geschaffen (das direkte Injecten in die Stripes ActionBean hat irgendwie nicht geklappt, daher n Singleton erstmal gemacht, dass die Referenz auf die Daos hält)
3.) OpenEntityManagerInViewFilter hinzugefügt. Nun wird zu Beginn des Requests der EntityManager getriggert und je nach Resource und @Transactional Annotation eine Transaction aufgemacht.

TODO:
4.) Ich würde deutlich lieber eine eigene FilterChain einsetzen, als die Filter der Reihenfolge entsprechend in der web.xml hinzu zu fügen.
5.) Würde gerne Spring benutzen, um properties zu setzen (z.B. für die Datenbank in der Testumgebung/Liveumgebung) - Impl dafür folgt, habe ich gerade keine Zeit für, sollte aber schnell gemacht sein.

Aktuelle Änderungen kann man sich hier anschauen: https://github.com/twendelmuth/oregami. ... 0c99cc85a6

Gerne darf diskutiert werden. Wer es sich anschauen möchte: aktuell funktioniert nur http://localhost:8080/game/1 - die anderen ActionBeans muss ich noch umschreiben.
StevenStorm
 
Posts: 23
Joined: 26 Aug 2012, 16:04

Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

Postby gene » 19 Sep 2012, 21:39

Spring für DependencyInjection ist super!

DaoManager genauso, über Spring mit Stripes findet man hier noch ein paar Infos, vielleicht helfen die weiter.

OpenEntityManagerInViewFilter für Transaktionierung ist ebenfalls eine schöne Sache, funktioniert das auch mit JUnit-Tests (die wir noch nicht haben)?

Das führt mich auch gleich zu den nächsten Sachen, die wir zentral hinbekommen müssen:
  • Datenbankzugriffe sollten aus JUnit-Tests möglich sein. Solche Tests haben wir noch nicht, kommen aber natürlich noch
  • wir müssen es hinbekommen, dass die Datenbank-Konfiguration für "Produktion" (öffentlich deployt im Web mit Tomcat) eine andere ist, als für lokale Entwicklungs-Arbeiten. Mein Ansatz, es über ein Maven-Profil hinzubekommen, klappt leider doch nicht wie geplant, denn "Resource-Filtering" funktioniert nicht in Eclipse.
  • als lokaler Entwickler kann man ja nicht *nur* mit JUnit-Tests arbeiten, man braucht auch einen Servlet-Container, um "gerenderte" Webseiten anzuzeigen. Du hast eine neue Lösung mit jetty eingebaut, die mir ganz gut gefällt. Dafür muss der Entwickler nur eine Java-Application (org.oregami.Start) starten und benötigt keinen Tomcat-Server mehr. Das vereinfacht die Sache enorm denke ich. Unterschiede zwischen Tomcat und Jetty sind laut meinen Recherchen nicht so relevant, oder? Trotzdem muss auch diese Lösung am besten mit der gleichen Datenbank-Konfiguration laufen wie JUnit-Tests (am besten embedded HSQLDB und der Entwickler muss keine DB-Engine extra starten),
Bekommen wir das Alles hin? Bestimmt, aber wie? Vielleicht kannst du nochmal deine SpringConfig-Lösung darlegen... :roll:
The creator of Kultpower.de
Co-founder of Oregami.org
User avatar
gene
 
Posts: 997
Joined: 25 Jan 2001, 21:20
Location: Münster

Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

Postby StevenStorm » 19 Sep 2012, 22:52

gene wrote:Spring für DependencyInjection ist super!
OpenEntityManagerInViewFilter für Transaktionierung ist ebenfalls eine schöne Sache, funktioniert das auch mit JUnit-Tests (die wir noch nicht haben)?

Jain, die Integration Tests würden diese Implementation im @Before bzw. @After selbst machen.

gene wrote:Das führt mich auch gleich zu den nächsten Sachen, die wir zentral hinbekommen müssen:
  • Datenbankzugriffe sollten aus JUnit-Tests möglich sein. Solche Tests haben wir noch nicht, kommen aber natürlich noch

Ja ist an sich garkein Problem, wenn sie auch auf die lokale (in memory) Datenbank zugreifen. Wahrscheinlich sind Unit tests erstmal wichtiger als Integration tests? :)

gene wrote:
  • wir müssen es hinbekommen, dass die Datenbank-Konfiguration für "Produktion" (öffentlich deployt im Web mit Tomcat) eine andere ist, als für lokale Entwicklungs-Arbeiten. Mein Ansatz, es über ein Maven-Profil hinzubekommen, klappt leider doch nicht wie geplant, denn "Resource-Filtering" funktioniert nicht in Eclipse.


  • Ich werde bis Sonntag sicherlich nochmal dazu kommen und die SpringConfig Variante in meinem Projekt ergänzen. Das kannst du dir dann gerne mal anschauen.

    gene wrote:
  • als lokaler Entwickler kann man ja nicht *nur* mit JUnit-Tests arbeiten, man braucht auch einen Servlet-Container, um "gerenderte" Webseiten anzuzeigen. Du hast eine neue Lösung mit jetty eingebaut, die mir ganz gut gefällt. Dafür muss der Entwickler nur eine Java-Application (org.oregami.Start) starten und benötigt keinen Tomcat-Server mehr. Das vereinfacht die Sache enorm denke ich. Unterschiede zwischen Tomcat und Jetty sind laut meinen Recherchen nicht so relevant, oder? Trotzdem muss auch diese Lösung am besten mit der gleichen Datenbank-Konfiguration laufen wie JUnit-Tests (am besten embedded HSQLDB und der Entwickler muss keine DB-Engine extra starten),
  • Bekommen wir das Alles hin? Bestimmt, aber wie? Vielleicht kannst du nochmal deine SpringConfig-Lösung darlegen... :roll:


    Fürs Entwickeln sollte der Jetty erst mal ausreichen. Und damit wäre das ja quasi aktuell schon fertig ;)
    StevenStorm
     
    Posts: 23
    Joined: 26 Aug 2012, 16:04

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby StevenStorm » 27 Sep 2012, 21:36

    PropertyConfig Beispiel ist nun bei mir commited.
    StevenStorm
     
    Posts: 23
    Joined: 26 Aug 2012, 16:04

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby gene » 27 Sep 2012, 21:38

    Cool, schaue ich mir mal ab!

    Du kannst gerne auch im Wiki beschreiben, was du gemacht hast!
    The creator of Kultpower.de
    Co-founder of Oregami.org
    User avatar
    gene
     
    Posts: 997
    Joined: 25 Jan 2001, 21:20
    Location: Münster

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby StevenStorm » 27 Sep 2012, 22:54

    Was genau hättest du denn gerne dokumentiert? :roll:
    Muss man ja erst mal nicht machen, wenn es nicht den Weg in die Hauptapplikation findet :mrgreen:
    StevenStorm
     
    Posts: 23
    Joined: 26 Aug 2012, 16:04

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby gene » 28 Sep 2012, 05:08

    StevenStorm wrote:Was genau hättest du denn gerne dokumentiert? :roll:
    Muss man ja erst mal nicht machen, wenn es nicht den Weg in die Hauptapplikation findet :mrgreen:

    Scherzkeks :wink:

    Ich möchte vermeiden, dass Dinge, die du z.B. einbaust oder eingebaut hast, nirgendwo erklärt sind, so dass sich jeder neue Entwickler das System selbst neu erarbeiten muss.
    Gilt natürlich nicht nur für deinen Code sondern für jedermanns Code :D

    Wenn wir die Technik wieder "rund" haben, fange ich mal an, Grundlegendes aufzuschreiben. Weitere Entwickler sollten sich so leicht wie möglich einarbeiten können!
    The creator of Kultpower.de
    Co-founder of Oregami.org
    User avatar
    gene
     
    Posts: 997
    Joined: 25 Jan 2001, 21:20
    Location: Münster

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby gene » 24 Dec 2012, 10:16

    So, ich habe mich in den letzten Tagen etwas besser in das Spring Framework eingelesen. Und das recht erfolgreich.

    Daraufhin habe ich unseren Programcode etwas umgestellt, alle Datenzugriffe laufen nun nicht mehr über unsere "DAOs" (Data Access Object), sondern über "Repositories" aus Spring Data JPA. Dadurch sind sehr viele unserer selbst programmierten DAO-Klassen weggefallen, was das Ganze viel schlanker macht.

    Außerdem habe ich damit begonnen, für die Web-Anwendungs-Programmierung sog. "Services" zu programmieren - diese Services sollen fachliche Zugriffe auf die Daten zur Verfügung stellen im Gegensatz zum technischen Zugriff über "Repositories" (s.o.).
    Beispiel:
    Ein fachliches "addUser" prüft, ob der Username und/oder die Mail-Adresse bereits vergeben ist und gibt auch ein fachliches Ergebnis mit entsprechenden Meldungen zurück (bei uns: "ServiceResult" mit "ServiceMessages"), während ein technischer Service eine Datenbank-Fehlermeldung erzeugen würde. Das ist nur ein sehr einfaches Beispiel. Wenn wir die Anforderungen an unsere Anwendung beschreiben, dann meinen wir meist "fachliche Services".

    Später sollen dann in die fachlichen Services auch User-Berechtigungen usw. einfließen.
    The creator of Kultpower.de
    Co-founder of Oregami.org
    User avatar
    gene
     
    Posts: 997
    Joined: 25 Jan 2001, 21:20
    Location: Münster

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby StevenStorm » 24 Dec 2012, 11:01

    Schön. Conflicted erstmal alles ;)

    //EDIT:
    ServiceResult - ich hab fast exakt das Selbe gemacht :P
    StevenStorm
     
    Posts: 23
    Joined: 26 Aug 2012, 16:04

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby gene » 24 Dec 2012, 11:05

    StevenStorm wrote:Schön. Conflicted erstmal alles ;)

    //EDIT:
    ServiceResult - ich hab fast exakt das Selbe gemacht :P


    Sorry :oops:
    Naja, dann sind wir ja immerhin gemeinsam auf dem richtigen Weg! :D
    The creator of Kultpower.de
    Co-founder of Oregami.org
    User avatar
    gene
     
    Posts: 997
    Joined: 25 Jan 2001, 21:20
    Location: Münster

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby StevenStorm » 24 Dec 2012, 11:08

    Ja ich commite gleich mal meine Änderungen... ich hab nebenher Basic Wicket aufgesetzt, ums dir zu zeigen.
    StevenStorm
     
    Posts: 23
    Joined: 26 Aug 2012, 16:04

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby gene » 24 Dec 2012, 12:49

    Oh, du verwendest Java 7? Die RuntimeException hat in Java 7 einen Konstruktor mehr, der unter Java 6 nch fehlte. Das gab bei mir einen Compile-Fehler.
    Lass uns erstmal bei Java 6 bleiben, oder? Wenn ich in Ruhe getestet habe, ob Java 7 auch auf unserem "Produktions-Tomcat" noch läuft...

    Nachtrag: Java 7 Code entfernt. deine Änderungen sonst komplett übernommen und Demo-Anwendung neu deployt. Läuft!

    Wir müssen dann noch unsere beiden Ansätze "ServiceError" und "ServiceResult" zusammenbringen :D
    The creator of Kultpower.de
    Co-founder of Oregami.org
    User avatar
    gene
     
    Posts: 997
    Joined: 25 Jan 2001, 21:20
    Location: Münster

    Re: Architektur Änderungen: Spring, OpenEntityInViewFilter

    Postby StevenStorm » 24 Dec 2012, 14:05

    Ja lass mal demnächst chatten ;)
    StevenStorm
     
    Posts: 23
    Joined: 26 Aug 2012, 16:04


    Return to Technische Diskussionen (deutsch/german)

    Who is online

    Users browsing this forum: No registered users and 1 guest

    cron