Specyfikacja Java™ Platform, Enterprise Edition 6 (Java EE 6) Web Profile jest niezwykle strawnym dokumentem pod względem wielkości - jedynie 20 stron. Warto się z nim zapoznać, bo jest, jak to się wyrażono na stronie 2:
"Being the first profile of the Java EE 6 Platform to be defined, we expect the Web Profile specification to be used as a model for future profiles."
Możnaby powiedzieć, że profil webowy (ang. web profile) jest swoistą referencyjną implementacją dla profili w Java EE 6. Na pewno jest to jedyny znany profil Java EE 6 na chwilę obecną i celuje w określenie standardu tworzenia nowoczesnych aplikacji webowych (ang. modern web applications). Można się z tym zgadzać lub nie, ale trudno zaprzeczyć, że jest to próba nadgonienia^H^H^Hkrok ku uproszczeniu życia programistom i administratorom, którym potrzebna była jedynie specyfikacja Java Servlet 3.0 z dodatkami, a byli zmuszani do "taszczenia" pełnego środowiska Java EE - Apache Geronimo, JBoss AS, GlassFish - lub jedynie korzystali z Apache Tomcat i tworzyli z niego właściwe środowisko (czy to przez wzbogacanie pojedynczej aplikacji webowej, czy też całego serwera). Zamiarem Java EE 6 było ukrócenie tego "procederu" i wyjście na przeciw takim potrzebom. Życie zweryfikuje sensowność takiego działania.
W głównej specyfikacji Java EE 6 - Java™ Platform, Enterprise Edition (Java EE) Specification, v6 (rozdział EE.9, strona 201) możemy przeczytać na temat profili Java EE 6. Jest to jedynie wprowadzenie do mechanizmu ich definiowania i specyfiki działania, a szczegóły pozostawia się dedykowanym dokumentom, np. wspomnianemu Java™ Platform, Enterprise Edition 6 (Java EE 6) Web Profile Specification.
Profil Java EE jest zestawem (podzbiorem właściwym) specyfikacji Java EE, który spełnia wymagania danej klasy aplikacji (ale mi tutaj pachnie algebrą zbiorów i tylko czekać na przecięcia, pokrycia, algebry ilorazowe i temu podobne :]). W ten sposób można odchudzić środowisko uruchomieniowe - serwer aplikacyjny - tak, aby spełniał jedynie wybrane specyfikacje, np. certyfikacja JBoss Application Server 7.0 nie dotyczy pełnego wydania Java EE 6, a wyłącznie omawianego profilu webowego (patrz sekcja Strict Compliance na stronie JBoss AS 7).
W skład profilu webowego wchodzą następujące specyfikacje:
- Java Servlet 3.0
- JavaServer Pages (JSP) 2.2
- Expression Language (EL) 2.2
- Debugging Support for Other Languages (JSR-45) 1.0
- Standard Tag Library for JavaServer Pages (JSTL) 1.2
- JavaServer Faces (JSF) 2.0
- Common Annotations for theJava Platform (JSR-250) 1.1
- Enterprise JavaBeans (EJB) 3.1 Lite
- Java Transaction API (JTA) 1.1
- Java Persistence API (JPA) 2.0
- Bean Validation 1.0
- Managed Beans 1.0
- Interceptors 1.1
- Contexts and Dependency Injection for the Java EE Platform 1.0
- Dependency Injection for Java 1.0
Na uwagę zasługuje fakt zawarcia EJB 3.1 w profilu, ale jedynie w jego wersji uproszczonej, zwanej EJB Lite (do omówienia w kolejnych wpisach).
Jedynym formatem aplikacji, które są wspierane przez środowiska wspierające profil webowy, jest moduł aplikacji webowej (WAR).
Poza wymaganiami opisanymi w dokumencie standaryzującym profil mamy jeszcze wymagania opisane w specyfikacji Java EE 6 - Java™ Platform, Enterprise Edition (Java EE) Specification, v6, które muszą zostać spełnione przez wszystkie profile Java EE 6 (patrz rozdział EE.9.5 Requirements for All Java EE Profiles, strona 203):
- wsparcie dla adnotacji @Resource, @Resources, @PostConstruct oraz @PreDestroy
- dostępny kontekst JNDI “java:” (jak opisano w sekcji EE.5.2, "JNDI Naming Context")
- dostępność Java Transaction API (JTA)
Mam wrażenie, że z nadejściem profilu webowego w Java EE 6 zaprzestano promować ideę, że rozpoczynanie transakcji czy dostęp do bazy danych z poziomu aplikacji webowej jest nieodpowiednie - istnienie JPA 2.0 oraz JTA 1.1 przeczą temu.
A co Ty sądzisz o nowej specyfikacji Java EE 6 i jak to ktoś powiedział (nie mogę teraz znaleźć odnośnika do tego) "programowania adnotacjami"? Kiedyś był wszechobecny XML i jego wady i zalety znamy. Teraz są adnotacje i jest podobnie - są wady i zalety. Czy zalety Java EE 6 przesłaniają jego wady?
p.s. Java EE 6 to ona czy on, abym pisząc "jego wady" odnosił się do właściwej płci? :)
Myślę, że wprowadzenie profili miało również na celu rozwiązanie konfliktu purystów Javy EE, którzy 'serwerem aplikacji' nazywali tylko serwer zgodny ze specyfikacją EE. W takim rozumieniu 'serwerów aplikacji' było niewiele.
OdpowiedzUsuńPo wprowadzeniu profili definicja 'serwera aplikacji' uległa rozszerzeniu, a jeżeli mnie pamięć nie myli, to właśnie Expert Grupa miała nadzieję, że nastąpi wzrost liczby serwerów zgodnych ze specyfikacją EE (czy to Web Profile, czy Full Profile). Jak widać po Resin'ie i TomEE - coś się w temacie rusza.
Osobną kwestią jest to, co naprawdę powinno znaleźć się w Web Profilu. Brak mi np. JAX-RS i Asynchroniczności EJB. Nie mniej EE 6 zapoczątkowała ideę profili, która osobiście mi się podoba, a na rozwój sytuacji trzeba będzie poczekać (Cloud Profile w EE 7?).
Warto również przyjrzeć się pracy Expert Grupy dot. Javy EE 7 [1], jak i JIRA gdzie zgłaszane są sugestie do samych EJB / EJB Lite [2].
[1] - http://java.net/projects/javaee-spec/lists/jsr342-experts/archive/2011-10/
[2] - http://java.net/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+EJB_SPEC+AND+resolution+%3D+Unresolved+AND+priority+%3D+Major+ORDER+BY+key+DESC&mode=hide