Open Registry of Game Information 

  • Java-Entwicklung: Architektur-Diskussion

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

Moderators: MZ per X, gene

 #36699  by gene
 16 Mar 2013, 20:41
Wer meine Postings zum Thema Java-Programmierung verfolgt hat, der wird gemerkt haben, dass ich vor einiger Zeit einen alternativen Ansatz zum bisherigen ausprobiert habe: Ich war auf das Play Framework gestoßen. Da ich mit der bisherigen auf Servlets und Spring basierenden Anwendung einige Probleme bei der Entwicklung hatte, habe ich es einfach mal ausprobiert.

Aktuell haben wir also zwei Entwicklungs-Stände, die nahezu das Gleiche können. Jetzt ist es an der Zeit, sich für einen der beiden Ansätze zu entscheiden, denn beide parallel zu entwickeln wird zu viel Aufwand und auch nicht sinnvoll sein.

Hier noch ein paar Details zu den beiden Entwicklungsständen:

1) Servlet-Anwendung
  • Web-Anwendung auf der Basis von Servlets
  • Spring für Dependency Injection
  • JPA für Persistenz der Daten
  • Spring Data JPA als Ergänzung für Datenzugriffe
  • Spring Security für die Absicherung von Web-Zugriffen (Rechte, Rollen)
  • Builds und Deployment über Jenkins-Buildserver
  • Lokale Entwicklung über Jetty-Server und MySQL
  • "Produktiv-Betrieb" (demo.oregami.org) über Tomcat-Server

2) Play Framework
  • Web-Anwendung für das Play Framework
  • JPA für Persistenz der Daten
  • Google Guice für Dependency Injection
  • lokale Entwicklung mit Play Framework und H2-Datenbank (in Memory) oder MySQL
  • Play-Plugin "Deadbolt 2" für Absicherung der Web-Zugriffe
  • "Produktiv-Betrieb" (play.oregami.org) über das Play Framework (eingebauter Server)

Wo sehe ich Vor- bzw. Nachteile?
+ (plus) = Vorteil
- (minus) = Nachteil
Mehr Plus/Minus = wiegt stärker

Spring/Servlet-Anwendung
+ Builds und Deployment mit Buildserver problemlos
--- Spring Data JPA arbeitet nicht mit Hibernate Envers (Historisierung der Daten) zusammen (zumindest habe ich es nicht hinbekommen)
- Servlet-Anwendung unter Tomcat sehr "schwergewichtig" (Reload, publish) während der Entwicklung
- hohe Komplexität des Spring Frameworks
- großer Funktionsumfang des Spring Frameworks

Play Framework-Anwendung
++ leichtgewichtige Entwicklung durch Play Framework und Google Guice
+ integrierte H2 In-memory-Datenbank für schnelle Entwicklung
++ funktioniert mit Hibernate Envers (Historisierung der Daten ist ein MUSS für unsere Anwendung)
+ Programmiersprache Scala als potenzielle Option für später
- noch Probleme beim Build im Buildserver und beim Deployment
- noch Probleme beim Entwicklungs-Test (wenn alles läuft dann sind Web-basierte Tests über das eingebaute Selenium-Testframework auch funktionsfähig)
- keine gute IDE-Unterstützung in Scala-Web-Templates (keine Code-Completion, Start der Anwendung nur über Play-Konsole)
+ typsichere Web-Templates
+ Meinungen im Web lassen erahnen, dass Anwendungen mit dem Play Framework Alles können und bei der Entwicklung eine hohe Effizienz zu erreichen ist


Auch wenn die "nackte" Liste der Vor- und Nachteile einige Punkte auflistet, die beim Play Framework negativ sind, so neige ich doch eher dazu, die Play Framework Variante weiterhin zu verwenden. Ich möche gerne die Tests noch zum Laufen bekommen, und auch bei den Problemen mit der IDE sehe ich noch gute Chancen, dass man z.B. Code-Completion hinbekommt. Ich habe im Web recht viel über das Play Framework gelesen und so viel Positives gelesen, dass ich hoffe, dass meine bisherigen Erfahrungen damit einfach noch nicht "perfekt" waren und sich das noch bessern wird. Es erscheint mir sehr verlockend, dass man auf den ganzen "Servlet-Kram" verzichten kann (keine web.xml usw.). In der englischen Wikipedia steht z.B. "Play is heavily inspired by Ruby on Rails and Django and is similar to this family of frameworks. Play uses Java to build web applications in an environment that may be less Java Enterprise Edition-centric. Play uses no Java EE constraints. This can make Play simpler to develop compared to other Java-centric platforms."

Da ich bisher ja fast der einzige Programmierer war (außer mir nur noch "StevenStorm"), ist dieser Thread eher für interessierte Neu-Programmierer gedacht :D
Einer hat sich kürzlich bei mir gemeldet...
 #36703  by los.alamos
 17 Mar 2013, 23:17
Der "Einer hat sich kürzlich bei mir gemeldet..." bin dann wohl ich. :wink:

Ohne jetzt das Play Framework wirklich zu kennen (werde mir die Tage mal ein bisschen was dazu anschauen), würde ich auch eher zu diesem leichtgewichtigeren Ansatz tendieren. Einen Fehler macht man aber wohl mit keiner der beiden Varianten.

Bin mir noch etwas unsicher, ob/wie man Scala hier sinnvoll nutzen sollte oder ggf. sogar "muss". Auf der einen Seite würde mich das schon jucken (ist ja aktuell schon ein kleines Hype-Thema), auf der anderen Seite würde es den Entwicklungsprozess aufgrund der notwendigen Einarbeitung erst mal bremsen. Ist auch schwer einschätzen, ob es potentielle, neue Entwickler eher abschreckt ("... damit kenne ich mich nicht aus") oder eher anlockt ("... cool"). Leute, die sich mit Plain Java/Spring/Servlet auskennen, findet man auf alle Fälle deutlich mehr als Scala/Play-Entwickler.

Mein Votum wäre also: Play-Framework in der Geschmacksrichtung Java
 #36817  by gene
 26 Jun 2013, 23:12
Ich mag es ja gar nicht laut sagen - aber ich habe in den letzten Wochen einen weiteren, anderen technischen Ansatz kennengelernt, mit dem man Web-Anwendungen realisieren kann. Das verfolge ich nun etwas genauer, will sagen ich versuche, einen weiteren Prototypen zu entwickeln.

Grob gesagt setze ich dabei auf Dropwizard als "Web-Framework" und AngularJS für den Browser-Client.
Fühlt sich bisher ganz gut an.

Die Frage lautet also nicht mehr nur "Play+Guice oder Servlet+Spring" :o
 #36853  by gene
 29 Jul 2013, 23:25
Ich habe mich in den letzten Wochen weiter in AngularJS und Dropwizard eingearbeitet.
Dafür habe ich allerdings erstmal versucht, das Kultpower-Archiv mit REST+AngularJS neu zu programmieren. Ich habe dabei Einiges gelernt und es ist sogar schon ein lauffähiger Stand herausgekommen. Der Sourcecode dafür ist hier zu finden.

Ich habe den aktuellen Stand mal auf test.kultpower.de gestartet. Dort wird eine REST-Anfrage an http://test.kultpower.de/service/hefte (formatierte Ansicht) durchgeführt, aus der Antwort im JSON-Format (die liefert meine Java-Dropwizard-Anwendung mit JPA+Hibernate) werden dann die Hefte aufgelistet (dafür verwende ich Angular JS).

Wenn man ein Heft anklickt (nur das erste oben links funktioniert von den aufgelisteten), wird nach dem gleichen Prinzip das Heft angezeigt:
REST-URL = http://test.kultpower.de/service/heft/powerplay_1989-08 (formatierte Ansicht)
Web-URL = http://test.kultpower.de/#/hefte/powerplay_1989-08

Der Programmcode dafür ist um ein Vielfaches eleganter als mein vorheriges PHP-/JavaScript-Gefrickel.

Ich möchte mich nun noch in das Thema Hypermedia APIs weiter einlesen und die Prinzipien davon ebenfalls in das neu entwickelte Kultpower-Archiv einfließen lassen.
Macht großen Spaß!!