Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy

86
Thorsten Kamann ● [email protected] 1

description

Gute Software sollte sich an der entsprechenden Fachdomäne orientieren und nicht an der zugrundeliegenden Technologie. Um dies zu erreichen, wird allerdings eine Basis benötigt, die technisch ausgereift ist ohne Einschränkungen für die Entwicklung. Eine solche Basis kann mit dem Springframework geschaffen werden. Die Kombination von Spring, Annotations, Java Persistence (JPA) und Unit-Testing erlaubt eine flexible und modulare Architektur und könnte eine mögliche technische Basis für ein solches Softwaresystem sein. Dieser Vortrag stellt einen Lösungsansatz anhand eines einfachen Beispiels vor. Die Aufbereitung der Inhalte orientiert sich dabei an einem typischen test-zentrierten Entwicklungsprozess. Folgende Themen werden angesprochen: * Einleitung Spring und JPA, Maven, Groovy * Projektstruktur * Entwicklung der API (der Schnittstellen) * Test-getriebene Entwicklung der Implementierung * Spring-unterstützte Integrationstests Ausblick: * Spring 2.5 - mehr Annotations; Verwaltung von Entities mit Spring * Webschicht - Anbindung einer Webanwendung mit Java Server Faces (JSF) * Spring-Webservices - Contract-First Webservices mit Spring-WS 1.0

Transcript of Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy

  • 1.

2. Ziele der Software-Entwicklung 3. Was istguteSoftware? 4. und was man dafr braucht 5. Das Thema heute ist: 6. 7. Technische Infrastruktur 8. Technische Infrastruktur 9. Technische Infrastruktur 10. Technische Infrastruktur 11. Technische Infrastruktur 12. 13. Leichtgewichtige Architekturen? 14. Leichtgewichtige Architekturen 15. Leichtgewichtige Architekturen 16. Leichtgewichtige Architekturen 17. 18. Beispiel: Das Domnenmodell 19. Beispiel: Komponenten 20. Beispiel: Komponenten 21. Beispiel: Komponenten 22. Beispiel: Komponenten 23. Beispiel: Komponenten 24. Beispiel: Komponenten 25. 26. Exkurs: Maven 27. Exkurs: Maven - Repositories 28. Exkurs: Maven 29. Exkurs: Maven 30. Exkurs: Maven - Abhngigkeiten 4.0.0spring2.jpa.basicspring2-jpa-basic-impl1.0.0-SNAPSHOTorg.springframeworkspring2.5.1 [] [] Artefakt-Beschreibung SNAPSHOT! Abhngigkeit liefertalle bentigtenBibliotheken 31. Exkurs: Maven-PlugIns org.apache.maven.pluginsmaven-surefire-plugin2.4-SNAPSHOTquick-suite.xml PlugIn frTestausfhrung LdtTestsuite 32. 33. Exkurs: Spring [Was ist Spring?] Inversion of Control Ansammlung von API's Programmier- modell 34. Exkurs: Spring [Komponenten] Spring Core AOP Spring AOP AspectJ-Integration DAO Spring JDBC Transaction- Management ORM JPA Hibernate Toplink JDO JEE JMX JMS JCA Remoting EJB's Email WEB Spring MVC Struts WebWork Tapestry JSF PDF Portlets 35. Exkurs: Spring [Features] 36. Exkurs: Spring [Features] 37. Exkurs: Spring [Features] 38. Exkurs: Spring [Features] 39. Exkurs: Spring [Features] 40. 41. Exkurs: Java Persistence API 42. Exkurs: Java Persistence API 43. Exkurs: Java Persistence API 44. 45. Exkurs: Groovy 46. Exkurs: Groovy 47. Exkurs: Groovy The Groovy Truth Runtime type Evaluation criterion required for truth Boolean Booleanwert musstruesein Matcher Der regulre Ausdruck muss mindestens 1 Treffer haben Collection Die Collection darf nicht leer sein Map Die Map darf nicht leer sein String Der String darf ebenfalls nicht leer sein Number Muss ungleich 0 sein Alles andere Die Objektreferenz muss ungleichnullsein 48. Exkurs: Groovy Listen und Ranges def list = [item1, item2, item3] assert list.size() def emptyList = [] assert !emptyList list expAddress}] as IAddressDao ICustomerService customerService =new CustomerService(addressDao: addressDao) def result = customerService .changeAddress(expAddress) assert expAddress == result } Erzeugung einer neuen Instanz mit Constructor- Enhancement Implementierung des IAddressDao Neue Instanz desICustomerService Ausfhren undErgebnis vergleichen 69. 70. Zum Beispiel: Webapp 71. 72. Zum Beispiel: Integration 73. Zum Beispiel: Integration 74. Zum Beispiel: Integration 75. Zum Beispiel: Integration 76. Zum Beispiel: Integration 77. Zum Beispiel: Integration 78. Zum Beispiel: Integration (Selenium) 79.

  • WW

Zum Beispiel: Integration (Testcode) public class SimpleWebtest{ @BeforeClass() @Parameters(["browser"])final void prepareSelenium(String browser){} @BeforeMethod final void startSelenium(){} @AfterMethod final void stopSelenium(){} @Test final void testTheStuff(){} } Parameterisierte Methode wirdeinmal pro Klasseninstanzausgefhrt Wird pro Testmethodeausgefhrt 80. Zum Beispiel: Integration (Testsuite) 81. 82. Fazit 83. Fazit 84. 85. Ressourcen: Links 86. ber den Referenten