SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Von wegen
schwergewichtig
Moderne Webentwicklung mit Java EE 7
15
133
Minuten
LOC
45
160
Minuten
LOC
CC0 Public Domain – bretpit – https://pixabay.com/de/apfel-birne-pflaumen-obst-früchte-993366/
Vorstellung
http://soa.rocks
anwendungsentwickler
podcast.de
@StefanMacke
Stefan Macke
CC0 Public Domain – StartupStockPhotos – https://pixabay.com/de/whiteboard-mann-präsentation-849813/
Vechta
Java EE
CC0 Public Domain – Unsplash – https://pixabay.com/de/sonnenschirme-straße-geschäfte-690452/
38
JSRs
Java Persistence API
CC0 Public Domain – ColossusCloud – https://pixabay.com/de/server-wolke-entwicklung-geschäft-1235959/
Java Server Faces
CC0 Public Domain – Imonk72 – https://pixabay.com/de/webseite-code-html-codierung-647013/
Context and
Dependency
Injection
CC0 Public Domain – jochenpippir – https://pixabay.com/de/spritze-medizin-finger-957260/
Standard Edition
CC0 Public Domain – snoku – https://pixabay.com/de/baustelle-crane-pier-container-1156566/
CC0 Public Domain – susisorglos089 – https://pixabay.com/de/fundamente-wasser-bremerhaven-100698/
CC0 Public Domain – TanteTati – https://pixabay.com/de/spaghetti-pasta-nudeln-essen-781795/
CC0 Public Domain – Pezibear – https://pixabay.com/de/feder-weiß-leicht-zart-luftig-647915/
Beispielanwendung
MongoDB
Express.js
AngularJS
Node.js
MongoDB
EE
AngularJS
Java
CC0 Public Domain – Alexas_Fotos – https://pixabay.com/de/butler-tablett-getränke-wein-sekt-964009/
Domain Model =
Persistence Model
CC0 Public Domain – StartupStockPhotos – https://pixabay.com/de/whiteboard-mann-präsentation-849810/
CC0 Public Domain – DiegoRodriguesdeCastro – https://pixabay.com/de/fotorahmen-frame-tiefe-878223/
Keine Frameworks*
CC0 Public Domain – DiegoRodriguesdeCastro – https://pixabay.com/de/fotorahmen-frame-tiefe-878223/
*außer
CC0 Public Domain – prima4you – https://pixabay.com/de/tier-löwin-faul-ausruhen-raubtier-1106359/
http://github.com/StefanMacke
persistence.xml
Erweiterungen
Lessons Learned
CC0 Public Domain – tpsdave – https://pixabay.com/de/colorado-hügel-landschaft-359919/
Annotation
Hell
Quelle: http://www.deic.uab.es/material/102750-javaEE7ReferenceSheet.pdf
CC0 Public Domain – Peggy_Marco – https://pixabay.com/de/ballonfahrt-ballon-feuer-bagan-1028896/
LOC
Java 130
Angular 70
RLY?
Literatur
Fazit
!=
Beinahe
leichtgewichtig
Moderne Webentwicklung mit Java EE 7

Weitere ähnliche Inhalte

Andere mochten auch

Designing JEE Application Structure
Designing JEE Application StructureDesigning JEE Application Structure
Designing JEE Application Structureodedns
 
Java EE Pattern: Entity Control Boundary Pattern and Java EE
Java EE Pattern: Entity Control Boundary Pattern and Java EEJava EE Pattern: Entity Control Boundary Pattern and Java EE
Java EE Pattern: Entity Control Boundary Pattern and Java EEBrockhaus Consulting GmbH
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Ryan Cuprak
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014Ryan Cuprak
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Heithem Abbes
 

Andere mochten auch (7)

Java EE Pattern: The Control Layer
Java EE Pattern: The Control LayerJava EE Pattern: The Control Layer
Java EE Pattern: The Control Layer
 
Designing JEE Application Structure
Designing JEE Application StructureDesigning JEE Application Structure
Designing JEE Application Structure
 
Java EE Pattern: Entity Control Boundary Pattern and Java EE
Java EE Pattern: Entity Control Boundary Pattern and Java EEJava EE Pattern: Entity Control Boundary Pattern and Java EE
Java EE Pattern: Entity Control Boundary Pattern and Java EE
 
Java EE Pattern: The Boundary Layer
Java EE Pattern: The Boundary LayerJava EE Pattern: The Boundary Layer
Java EE Pattern: The Boundary Layer
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
 
Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 

Mehr von Stefan Macke

Railway Oriented Programming - Funktionaler programmieren ohne Exceptions
Railway Oriented Programming - Funktionaler programmieren ohne ExceptionsRailway Oriented Programming - Funktionaler programmieren ohne Exceptions
Railway Oriented Programming - Funktionaler programmieren ohne ExceptionsStefan Macke
 
100% Code Coverage - TDD mit Java EE
100% Code Coverage - TDD mit Java EE100% Code Coverage - TDD mit Java EE
100% Code Coverage - TDD mit Java EEStefan Macke
 
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)Stefan Macke
 
Property-based Testing mit JUnit-Quickcheck
Property-based Testing mit JUnit-QuickcheckProperty-based Testing mit JUnit-Quickcheck
Property-based Testing mit JUnit-QuickcheckStefan Macke
 
Railway Oriented Programming - Java funktional und ohne Exceptions
Railway Oriented Programming - Java funktional und ohne ExceptionsRailway Oriented Programming - Java funktional und ohne Exceptions
Railway Oriented Programming - Java funktional und ohne ExceptionsStefan Macke
 
Steuerung für automatische Verbuchungsprozesse im SAP ERP
Steuerung für automatische Verbuchungsprozesse im SAP ERPSteuerung für automatische Verbuchungsprozesse im SAP ERP
Steuerung für automatische Verbuchungsprozesse im SAP ERPStefan Macke
 
Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...
Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...
Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...Stefan Macke
 

Mehr von Stefan Macke (8)

Railway Oriented Programming - Funktionaler programmieren ohne Exceptions
Railway Oriented Programming - Funktionaler programmieren ohne ExceptionsRailway Oriented Programming - Funktionaler programmieren ohne Exceptions
Railway Oriented Programming - Funktionaler programmieren ohne Exceptions
 
100% Code Coverage - TDD mit Java EE
100% Code Coverage - TDD mit Java EE100% Code Coverage - TDD mit Java EE
100% Code Coverage - TDD mit Java EE
 
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
Moderne IT-Infrastrukturen (Cloud Computing, Serverless)
 
Property-based Testing mit JUnit-Quickcheck
Property-based Testing mit JUnit-QuickcheckProperty-based Testing mit JUnit-Quickcheck
Property-based Testing mit JUnit-Quickcheck
 
Railway Oriented Programming - Java funktional und ohne Exceptions
Railway Oriented Programming - Java funktional und ohne ExceptionsRailway Oriented Programming - Java funktional und ohne Exceptions
Railway Oriented Programming - Java funktional und ohne Exceptions
 
Sketch Notes
Sketch NotesSketch Notes
Sketch Notes
 
Steuerung für automatische Verbuchungsprozesse im SAP ERP
Steuerung für automatische Verbuchungsprozesse im SAP ERPSteuerung für automatische Verbuchungsprozesse im SAP ERP
Steuerung für automatische Verbuchungsprozesse im SAP ERP
 
Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...
Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...
Wer braucht eigentlich Microservices - Aktuelle Trends der Softwareentwicklun...
 

Von wegen schwergewichtig - Moderne Webentwicklung mit Java EE 7

Hinweis der Redaktion

  1. Bei moderner Webentwicklung denken viele Entwickler sicherlich nicht an Java…
  2. …sondern eher an das bekannte Webframework Ruby on Rails.
  3. Letztes Jahr wurde Ruby on Rails 10 Jahre alt. Der Erfinder von Rails, David Heinemeier Hansson, hatte bereits 2005 ein Video veröffentlicht, das für Aufregung sorgte und Rails bekannt machte.
  4. Darin erstellte er in 15 Minuten ein Blog-System mit Rails.
  5. Inkl. Kommentarfunktion usw.
  6. Für das Ganze benötigte er nur 133 LOC.
  7. Mit Rails kann man also ein Blogsystem in 15 Minuten und mit nur 133 LOC erstellen.
  8. Das nahm ich als Anlass, das Beispiel mit Java EE 7 nachzubauen. Leider kam ich nicht so ganz an Rails ran. Und Funktionen wie Post hinzufügen fehlen auch.
  9. Ich weiß, dass man ein Webframework nicht mit einer Programmierplattform vergleichen kann, aber ich denke, Java EE hat große Fortschritte im Bereich der Benutzbarkeit gemacht. Und das möchte ich heute vorstellen.
  10. Beginnen wir mit dem ersten Teil der Präsentation: meiner Vorstellung.
  11. Mein Name ist Stefan Macke. Ich habe verschiedene Webauftritte, die vielleicht interessant sind.
  12. Ich bin Softwareentwickler…
  13. …und Softwarearchitekt…
  14. …bei der ALTE OLDENBURGER Krankenversicherung AG…
  15. …und Dozent – u.a. für Software-Engineering – an der PHWT.
  16. Beide sind in Vechta zuhause…
  17. …einer kleinen Stadt zwischen Osnabrück und Bremen.
  18. Wir nutzen bereits mehrere Programmiersprachen, aber haben Java als Standard festgelegt. Und aktuell steigen wir in die Webentwicklung mit Java EE 7 ein.
  19. Schauen wir uns einmal an, was Java EE eigentlich ist.
  20. Java EE ist eine „Regenschirm-Spezifikation“, die mehrere Spezifikationen zusammenfasst.
  21. Bei Oracle konnte ich 38 Specification Requests zählen. http://www.oracle.com/technetwork/java/javaee/tech/index.html
  22. Dazu gehört z.B. der Zugriff auf die Datenbank…
  23. …die Gestaltung von Weboberflächen…
  24. …und das Querschnittsthema DI.
  25. Anders als Java SE…
  26. …wird Java EE in einem Container ausgeführt: dem Application Server.
  27. Der Application Server stellt der Anwendung die gesamte Infrastruktur zur Verfügung, also z.B. Data Sources, JNDI-Lookups, CDI usw. Darum muss sich der Entwickler nun nicht mehr selbst kümmern.
  28. Application Server gibt es eine ganze Menge, sowohl kommerziell als auch Open Source.
  29. Java EE war lange Zeit ein hoffnungslos überfrachtetes Framework, das gerade für Einsteiger kaum zu verstehen war. Lange Klassen und XML-Konfiguration überall.
  30. Hier ist ein „schönes“ Beispiel für eine solche Klasse (obwohl sie nicht aus Java EE stammt, sondern aus dem Spring-Framework).
  31. Doch in Version 7 hat sich Java EE zu einem fast schon leichtgewichtigen Framework entwickelt. Und das möchte ich heute zeigen.
  32. Kommen wir daher nun zu meiner Beispielanwendung.
  33. Ich habe mich am aktuell bekannten MEAN-Stack orientiert…
  34. …aber zwei Säulen durch Java ersetzt.
  35. Das heißt, ich lasse mir die Arbeit abnehmen wo immer es geht. Ich nutze die eingebauten Frameworks und Bibliotheken und vermeide Infrastruktur-Code. -> JPA, CDI, Twitter Bootstrap
  36. Ich halte mich nicht mit Datenbankdesign auf, sondern lasse die Datenbank anhand meiner Klassen automatisch generieren.
  37. Ich verzichte auf den Einsatz von externen Frameworks und nutze ausschließlich die „eingebauten“ Funktionen.
  38. Eine kleine Ausnahme muss ich machen: MongoDB lässt sich ohne Hibernate OGM nicht (gut) über JPA ansprechen. OGM = Object/Grid Mapper
  39. Wer heute etwas auf sich hält, nutzt natürlich REST für die Kommunikation mit dem Backend 
  40. Das hier ist das Endergebnis meiner Programmierung. Die App gewinnt keinen Designpreis, aber sie funktioniert.
  41. Das gesamte Projekt kann bei GitHub angeschaut werden.
  42. Um mit der Programmierung loslegen zu können, müssen ein paar Grundlagen geschaffen werden. Voraussetzungen: Gradle, Wildfly, Node.js, MongoDB, Eclipse installiert
  43. Wenn Gradle vorhanden ist, reduziert sich der Aufwand für das Bauen auf ein Minimum.
  44. Das ist die gesamte XML-Konfiguration der Datenbank.
  45. Das Domain Model besteht aus einfachen POJOs, die mittels JPA-Annotationen persistiert werden.
  46. Das hier ist ein Beispiel für die einfache Veröffentlichung einer REST-Ressource inkl. Injektion von Abhängigkeiten mit CDI.
  47. Worauf ich bei der Umsetzung des Beispielprojekts nicht eingegangen bin…
  48. Die Applikation enthält keine Tests! Allerdings gibt es im Java-EE-Umfeld einige gute Frameworks für automatische Tests. JUnit und Mockito könnten für die Business-Logik verwendet werden.
  49. Mit Arquillian kann man seine Webapp in einem echten Container testen.
  50. Citrus simuliert Infrastruktur wie Mailserver, JMS-Queues usw.
  51. Für HTML-Oberflächen gibt es eine ganze Reihe an Bibliotheken mit vordefinierten Controls. PrimeFaces ist ein bekannter Vertreter.
  52. PrimeFaces bietet viele professionelle Controls.
  53. Selbstverständlich kann die gesamte Applikation noch mit einem CI-Server gebaut und deployt werden.
  54. Und Tools für die statische Codeanalyse gibt es im Java-Umfeld zuhauf.
  55. Meine persönlichen Lessons Learned bzgl. Java EE 7.
  56. Start ist schwierig, da Struktur selbst erstellt werden muss (gibt es Maven-Archtetypes?).
  57. Die vielen Annotationen sind sehr verwirrend für Einsteiger. Es gibt auch gleich benannte Annotationen in unterschiedlichen Packages.
  58. Es ist immer noch viel Boilerplate-Code notwendig (z.B. Getter/Setter).
  59. Netbeans kann CRUD-Pages für Entitys generieren.
  60. Ergebnis meiner (semi-professionellen) Codeanalyse: 130 Zeilen Java-Code und 70 Zeilen Typescript.
  61. AngularJS war umständlicher als Java. Dependencies bei Java sind ja schon schlimm, aber 12.000 Dateien!?
  62. Zum Schluss noch ein paar Literaturempfehlungen.
  63. Die offizielle Dokumentation von Oracle ist ein guter Einstiegspunkt.
  64. Das Buch aus dem Rheinwerk Verlag fand ich sehr gut zu lesen.
  65. Bei Pluralsight hat Antonio Goncalves eine ganze Videoreihe rund um Java EE 7 veröffentlicht.
  66. Kommen wir zu meinem persönlichen Fazit zur Arbeit mit Java EE 7.
  67. Java EE ist nicht Rails. Mit Rails bin ich immer noch produktiver.
  68. Ich habe mit mehreren Studentenjahrgängen Projekte auf unterschiedlichen Plattformen durchgeführt. Am besten hat es mit Java EE geklappt. Vielleicht aufgrund der statischen Typisierung!?
  69. Das letzte Projekt war eine 3-Tier-Applikation mit REST-Schnittstelle, verteilt auf 3 Raspberry Pis. Das „schwergewichtige“ Java lief einwandfrei auf den Application Servern auf den RasPis.
  70. Und wenn sogar meine Studenten das hinbekommen…
  71. …können Sie das auch!
  72. Danke!