Začátkem roku 2014 proběhl průzkum, ve kterém se komunita měla vyjádřit k tomu, co by se mělo stát součástí Java EE 8. Více než 60% respondentů odpovědělo, že Java EE by mělo podrorovat vedle JSF i jinou formu MVC pro webové aplikace [1].
Následně započaly práce na JSR-371 nazvaném MVC: Model-View-Controller API [2]. A právě na nové MVC API se v tomto článku podíváme.
Můžete namítnout, že v JEE už jeden MVC framework pro webové aplikace máme: JSF. Autoři vysvětlují, že se jedná o trochu jiné MVC.
JSF je zaměřeno na vytváření komponent, které jsou využívány IoC frameworkem. Nové MVC API ponechává vývojářům větší kontrolu, neboť aplikační kód funguje na úrovni HTTP požadavků a odpovědí - prostě tak, jak to známe ze Spring MVC.
Pro podrobnější vysvětlení viz [3].
Vydání Java EE 8 je plánováno až na první pololetí roku 2017, ale my si můžeme nové API vyzkoušet již nyní. Práce na referenční implementaci jsou totiž v plném proudu a i když do finální verze specifikace jistě dojde ke změnám, základní principy zůstanou zachovány.
Zmíněná implementace nese název Ozark a je ke stažení zde: [4]. Pokud používáte Gradle, stačí přidat do build.gradle
|
|
a můžeme začít vyvíjet. Pro spuštění potřebujeme samozřejmě vhodný JEE server. Autoři Ozarku testují své dílo s GlassFish 4.1 Nightly Sept 15, 2015, takže my použijeme totéž [6].
Autoři specifikace MVC API nezačínali na zelené louce a nepokoušeli se znovu vynalézat kolo. Specifikace využívá CDI a v podstatě pouze rozšiřuje existující specifikaci JAX-RS. Pokud se podíváme na typický controller pro operace CRUD, je to jasně vidět:
|
|
Většina anotací v controlleru je převzatá z JAX-RS:
Model je do controlleru injectován pomocí CDI. Takže jedinými novinkami jsou
Zdrojové kody celé demo aplikace včetně view najdete zde: [6]
Controller má dvě možnosti, jak předat model do view:
Na view není nic zvláštního. Implementace musí podporovat JSP a Facelety, další technologie (například Thymeleaf) budou volitelné.
View pro metodu list()
z našeho controlleru může vypadat například takto:
|
|
Jestliže znáte Spring MVC, nové JEE MVC API vás ničím nepřekvapí. Následující obrázek hovoří za vše:
Nové MVC je něco, co ve standardním JEE chybělo. Sympatická je snaha maximálně využít existující specifikace (především JAX-RS) a stavět na nich.
Uvidíme, jak se nové API rozšíří, až se objeví první servery, které budou implementaci JSR-371 obsahovat.