čtvrtek 25. prosince 2008

Cosi nevyřešeného nad Servlet specifikací

Asi nejsem sám, kdo považuje Servlet specifikaci jako nejzásadnější věc v JEE oblasti. Je to již celkem, co prosákly první informace o připravované verzi 3.0 standardizované pod JSR 315. Dnes jsem na InfoQ našel článek odkazující na debatu kolem vydaného Public Review (odkazuje stav specifikace) a nedobrý pocit se mě zmocnil.

Již mnohokrát se ukázalo, že není nic horšího než složitá specifikace postavená na předpokladech a tezích úzké skupiny lidí bez dostatečného reálného podkladu, EJB budiž mementem. Věřil jsem, že tohle období máme za sebou. V expertních skupinách (lidé zodpovědní za doručení specifikace) totiž začali zasedat lidé, kteří měli s Enterprise Javou reálné zkušenosti. Jedním z těchto garantů pro mě je Greg Wilkins, autor servlet kontejneru Jetty.

Proto mě nepříjemně zamrazilo, když tato mnou respektovaná osoba napíše v reakci Public review JSR 315 následující řádky:

JSR-315 has produced a Public Review (PR) of the servlet 3.0 specification, which unfortunately is a poor document and the product of a discordant expert group (EG) working within a flawed process.

Greg Wilkins dále velice správně a výstižně poukazuje na další fakt:

The API decided by JSR-315 will be with us for many years to come and will affect the evolution of java web applications and potentially the rest of our programming careers.

Je to přesně tak, a každý kdo kdy pracoval s JEE na tento fakt musí poukázat. Servlet API je tak zásadním API, že jakékoliv hazardování při jeho rozšiřování může mít dalekosáhlé následky. Wilkins dále poukazuje na další problémy jako vedlejší či pomalý deployment a nebo nejasné pořadí konfigurace v deployment descriptoru webové aplikace.

Jeho postřehy pro mě mají daleko větší váhu než kód kdesi ve vývojové větvi serveru GlassFish. Při vší úctě k odpovědím, které poskytnul spec lead Rajiv Mordani, to ve mě vyvolává obavy. Budeme mít nafouknutější specifikaci, která bude plná vágních formulací? Usnadní nám to opravdu život? Proč se snaží tuto specifikaci tak rychle dokončit, tlačí je snad rámec JEE 6?

Pokud specifikace obsahuje takové otazníky, tak je dle mého názoru lepší držet se hesla, že "méně je někdy více", už jenom například z důvodů zpětné kompatibility. Specifikace se dá rozšířit vždy, ale něco z ní vyškrtnout je problém. Ač si co do možností myslím o JPA specifikaci své, tak se jí musí nechat, že nebyla přehnaně ambiciózní, prakticky se inspirovala v Hibernate a nekonal se tak "pokus na vývojářích". Servlet 3.0 by se měla vydat stejnou cestou, jedná se totiž o tak zásadní věc, že jakýkoliv experiment může mít dalekosáhlé následky.

Na závěr přidávám jeden z komentářů na TheServerSide:

The Java community should realize that this is one of the few ways we can really "break" Java.

Many other blunders, such as EJB, have not been very important. The usage of many packages was specialized and restricted anyway. Servlets, though, are the common starting point for Web development in Java. At present they are easy to understand and implement. If you screw up servlets and make them hard to understand or implement, you'll lose the Java development community much faster than you might think is possible.