Java logo

Java Enterprise Edition

Java Enterprise Edition (w skrócie Java EE) to edycja Javy dedykowana internetowym aplikacjom biznesowym. Podobnie jak Java SE (Java Standard Edition), na której bazuje, została stworzona przez Oracle. Jest ona zbiorem specyfikacji, opisujących zachowanie poszczególnych jej elementów. Przyjrzyjmy się najważniejszym spośród tych specyfikacji.

Serwer aplikacyjny

Java EE jako zbiór specyfikacji określa pewne reguły pisania kodu, przypisuje znaczenia adnotacjom, itp. Skąd jednak komputer ma wiedzieć jak to wszystko interpretować? Standardowa Java SE nie dostarcza przecież implementacji Javy EE. Jest to rola właśnie serwerów aplikacyjnych bądź kontenerów aplikacji webowych. W dużym skrócie serwery implementują wszystkie standardy Java EE, natomiast kontenery tylko wybrane. Oczywiście dzięki temu kontenery są lżejsze i mają niższe wymagania sprzętowe.

Wśród serwerów aplikacyjnych należy wymienić: GlassFish - referencyjna (pisana przez twórców Java EE) implementacja, WildFly, JBoss, WebLogic. Spośród kontenerów aplikacji webowych warto zwrócić uwagę na: Tomcat - najpopularniejsze z rozwiązań, Jetty.

Servlet

Odpowiadają za komunikację aplikacji w sieci z wykorzystaniem protokołu HTTP(S). Odpowiadają za mapowanie adresu na serwowaną treść. W starszych wersjach określał to plik web.xml, a od wersji 3.0 wystarczająca jest adnotacja @WebServlet poprzedzająca klasę określającą servlet. Na obiekcie tej klasy aplikacja będzie wywoływała żądania doGet(), doPost(), doPut() i inne o nazwach odpowiadających metodom HTTP. Każda z tych funkcji przyjmuje dwa argumenty: HttpServletRequest i HttpServletResponse, które odpowiadają kolejno żądaniu i odpowiedzi HTTP. W oparciu o żądanie serwer wybiera odpowiednią treść i przekazuje ją korzystając z response.

  
      @WebServlet("/mypage")
      public class HelloServlet extends HttpServlet {
      
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              String name = request.getParameter("name");
              response.getWriter().write("Hello " + name);
          }
      }
  

EJB (Enterprise Java Beans)

Wspiera tworzenie i zarządzanie ziarnami (beans), nakierowując programistę na sprawdzone rozwiązania typowych zagadnień: transakcyjność, rozproszenie, bezpieczeństwo, wielodostęp, trwałość, mapowanie danych na model obiektowy. Wyróżnia się trzy główne rodzaje ziaren EJB: sesyjne, sterowane komunikatami i encyjne. Te ostatnie mają także swoją własną specyfikację, JPA.

JPA (Java Persistance API)

Łączy bazę danych z aplikacją poprzez mapowanie obiektowo-relacyjne (ORM). Dzięki temu aplikacja operuje na obiektach, nazywanych encjami (entities), odpowiadającym kolejnym wierszom bazy danych. Mapowanie jest określone poprzez dokumenty XML bądź odpowienie adnotacje. Za zarządzanie powiązaniami odpowiada EntityManager.

  
    @Entity
    public class Student {

        @Id private Long id;
        @Column(name="imie_studenta", nullable=false)
        private String imieStudenta;
        //... 
    }
  
  

Istnieje kilka popularnych implementacji JPA: Hibernate, EclipseLink, TopLink, OpenJPA.

CDI (Context and Dependency Injection)

Jest to standard wstrzykiwania zależności za pomocą adnotacji @Inject. Najpopularniejszą i referencyjną implementacją CDI jest Weld. Alternatywę dla niego stanowi Apache OpenWebBeans. Wstrzykiwanie zależności jest techniką, która pozwala nam unikać silnych powiązań pomiędzy klasami. Silną rolę odgrywa tutaj korzystanie z interfejsów oraz zalet jakie daje nam polimorfizm.

JSP (Java Server Pages)

Jest to technologia umożliwiająca dynamiczne tworzenie warstwy strony internetowej widocznej dla użytkownika w formatach HTML, XHTML, DHTML oraz XML z wykorzystaniem języka Java, wplecionego w kod HTML danej strony. Można ją łączyć z plikami CSS oraz JavaScript. Strona określona przez JSP jest kompilowana do postaci serwletu i w tej postaci przekazywana użytkownikowi. Aby uniknąć niepotrzebnych operacji pliki JSP w postaci serwletu są cachowane i ponownie kompilowane dopiero, gdy ich plik źródłowy zostanie zmieniony.

JSF (JavaServer Faces)

Jest to framework dla języka Java, który znacząco upraszcza tworzenie interfejsu użytkownika aplikacji internetowych Java EE. Istnieją także frameworki jeszcze bardziej rozszerzające możliwości JSF, np. PrimeFaces, BootFaces czy Apache MyFaces.