czwartek, 14 sierpnia 2014

Xml free spring application

Hmmm... Dłuższa przerwa w postach ..... Dziś wrócimy i przypomniemy sobie jak wyeliminować z Twojego kodu XML.
Od Spring Security bodajże 3.1 czy 3.2 autorzy frameworka preferują Spring Config zamiast rozdętego XML. Czy jest to dobre ? Tak i nie ... Ale tendencja pisania w Java Config na trwale zagościła w świecie Springa.

Konfiguracja w XML ma swoje zalety.
 - łatwa do zrozumienia dla ludzi znających standard XML
 - możliwa do wyeksportowania do zewnętrzych lokacji
 - całkowicie parametryzowana - placeholders
 - namespaces - ułatwienia oraz wstępna walidacja
 - dobrze zdefiniowane pliki powinny być reużywalne
 - separacja logiki



Natomiast konfiguracja w Javie :
  - preferowana przez ludzi, którzy doskonale odnajdują się w tym języku
  - czasem (less verbosity) bardziej zwięzła
  - reużywalna  
  - separacja logiki


Ale powoli .... Standard Servlet 3.0 pozwala nam całkowicie lub też częściowo pozbyć się pliku web.xml. Oczywiście dotyczy to rozwiązań webowych.

Ok jak to teraz zrobić ? i co jest ..Ci potrzebne ?
1. Nowoczesny kontener servletów, który sobie poradzi z tym problemem
2. Coś co zaincjalizuje całość procesu.

Tyle...
Zamiast tysięcy słów lepszy będzie kawałek kodu....

Odpowiada to podobnemu plikowi web.xml jak poniżej
Ok. Co teraz bym chciał dodatkowo zrobić w swojej aplikacji. Pewnie w 90% standardowych aplikacji potrzebna jest trwałość.
No to dawaj... Standard JPA czy JPA2 wymusza deskryptor persystencji persistence.xml. Dzięki niemu serwer może z automatu zbudować sobie np schemat bazy, wybrać providera trwałości czy określić strategie dla managera transakcji.

Generalnie plik persistence.xml to będzie wariacja przykładu poniżej :
 

To jednak nie wszystko:) teraz musimy powiedzieć springowi,  jak zestawić managera transakcji, stworzyć EntityManagera, strategie dla placeholdera (${}) czy też ustawienia dla puli połączeń, czy rodzaj dialektu dla ORM'a.



Super .... Teraz czas na odpowiednik w Spring Configu....najprostsza wersja z bazą testową (Dzięki @EnableJpaRepositories("pl.java.scalatech.repository") - dodaje wsparcie dla Spring Data)


Teraz kwestia dodania elementu konfigującego dla warstwy web.
Tip : @RestController - od Spring 4.0 czystsza forma bez @Responsebody :)

Tutaj padło na integracje z thymeleaf. Dlaczego ? 
 1. JSP od wersji J2EE6 jest deprecated.
 2. Od razu widzę resultat programowania warstwy prezentacji (implementuje wszystko w standardzie HTML5, znaczniki thymeleaf'a są renderowane przez przeglądarkę na bieżąco więc nie mam potrzeby za każdym razem robić deploy na serwer czy embedowany jetty...)
Wersja aplikacji typu Restful jest bardzo podobna , w przypadku WS z użyciem CXF wystarczy dodać poniższy kawałek kodu.




Voilà :)


Teraz zbliżmy się do REST'a :)
Wynik : Dla : localhost:8080/springXmlFree/json : Spring xml free
Dla : http://localhost:8080/springXmlFree/json
{
  "name": "przodownik",
  "date": {
    "year": 2010,
    "month": "FEBRUARY",
    "dayOfMonth": 4,
    "dayOfWeek": "THURSDAY",
    "era": "CE",
    "dayOfYear": 35,
    "leapYear": false,
    "monthValue": 2,
    "chronology": {
      "calendarType": "iso8601",
      "id": "ISO"
    }
  }
}
Dla : http://localhost:8080/springXmlFree/xml

<simpleModel>
     <date>2010-02-04</date>
     <name>przodownik</name>
</simpleModel>

Super szybki wstęp do Spring Data Rest


Generuje nam coś takiego :

Teraz mamy prosty CRUD za darmo : (paging + sorting.) 

Teraz haczyk....czyli co mi zajęło najwięcej czasu.
Gradle i wtyczka do jetty. Tutaj trochę się zamotałem. Nie wiedziałem na samym początku, iż standardowo z gradle dostajemy jetty wersji 6. To słabo, w mavenie nie miałbym kłopotów i od razu ustawiam wersję 9.
Ale po co mamy google :).
Poniżej nagłówek mojego pliku build.gradle
W ten sposób osiągamy swój cel : - 0 xml - najnowszy możliwy jetty i tomcat zarazem w różnych fajnych konfiguracjach - PoC dla aplikacji JPA + Web (thymeleaf)
Odpalamy drania :)













Kod do posta znajdziesz tutaj.

Brak komentarzy:

Prześlij komentarz