-
Serwer aplikacji to konkretna implementacja abstrakcyjnych specyfikacji Java EE. Przykłady: Serwer Payara (Glassfish), IBM OpenLiberty i JBoss Wildfly.
-
Żądanie specyfikacji Java (JSR) to formalna prośba skierowana do społeczności Java o dodanie i ulepszenie technologii. Jest to podmiot standaryzujący API na platformie technologicznej Java i służący do grupowania API w bloki, takie jak JAX-RS (Java API for RESTful Web Services). Dla każdego JSR zawsze istnieje domyślna implementacja referencyjna.
-
Implementacja referencyjna to konkretna implementacja/implementacja abstrakcyjnego JSR. Na przykład referencyjna implementacja JAX-RS nosi nazwę Jersey. Sama Java EE jest JSR. Zatem serwer aplikacji jest zbiorem różnych implementacji referencyjnych Java EE JSR. Java EE to JSR 366, a jedną z jej referencyjnych implementacji jest Glassfish 5.
-
Jakarta EE to nowa nazwa Java EE obowiązująca od 2018 roku. Obecnie Oracle przekazało platformę Java pod zarządzanie Fundacji Eclipse .
Podstawy JavaEE
W Java EE istnieją trzy kluczowe interfejsy API:-
Interfejs API trwałości Java (JPA). Odpowiada za przechowywanie i pobieranie informacji z relacyjnych baz danych, które można rozszerzyć o współpracę z bazami NoSQL. To jest warstwa danych w aplikacji.
-
Wstrzykiwanie kontekstu i zależności (API CDI). Jest to ustandaryzowany sposób ograniczenia sprzężeń w zastosowaniach. Zarządza różnymi interakcjami komponentów, aby zapewnić swobodne oddzielenie.
-
API Java dla usług sieciowych RESTful (JAX-RS). Udostępnia zasoby poprzez HTTP jako usługi sieciowe.
API kontekstu i wstrzykiwania zależności
Wstrzykiwanie zależności to specjalna forma kontroli inwersji (strategia oprogramowania, w której poszczególne komponenty otrzymują swoje zależności). To uzewnętrznia zależność w aplikacji w celu utworzenia komponentów o niskim sprzężeniu.Cechy CDI
-
Wstrzykiwanie zależności (Typesafe) umożliwia deklarowanie zależności od typów, dzięki czemu kompilator wychwytuje błędy w czasie wykonywania.
-
Konteksty cyklu życia to możliwość powiązania interakcji cyklu życia i komponentów stanowych z dobrze zdefiniowanymi, ale rozszerzalnymi komponentami cyklu życia.
-
Przechwytywacze umożliwiają przechwytywanie żądań dostępu do określonej metody.
-
Zdarzenia są sposobem na tworzenie wysoce oddzielonych aplikacji. Zdarzenia można uruchamiać, gdy metoda Observers nasłuchuje uruchomionych zdarzeń.
-
Interfejs dostawcy usług (SPI) to zestaw technik, interfejsów API i interfejsów, których można używać jako rozszerzeń, na przykład w bibliotece Apache.
Niektóre koncepcje API CDI:
-
CDI Bean Discovery to mechanizm, w którym struktura wstrzykiwania zależności analizuje i odkrywa komponenty bean, aby kontrolować domyślny sposób wykrywania komponentów bean, czyli ziaren z adnotacjami, takimi jak @Annotated. Istnieją trzy typy trybu wykrywania komponentów bean: WSZYSTKIE (w tym komponenty bean bez adnotacji), ANNOTATED i NONE.
-
Kontener CDI to metoda fabryczna, w której klasy Java wchodzą i wychodzą z ich funkcjonalnością i możliwościami. To jest aplikacja zarządzająca fasolą.
-
Instancje fasoli i kontekstu. Bean to szablon tworzony przez programistę. Instancja kontekstowa to instancja komponentu Bean utworzona i zarządzana przez kontener CDI.
API trwałości Java
JPA służy do mapowania obiektów na tabele relacyjnej bazy danych. Interfejs API Java Persistence jest zgodny z zasadami manifestu ORM. Manifest ORM (Manifest mapowania relacyjnego obiektu):-
Obiekty, a nie tabele: programiści piszą obiekty, a nie tabele.
-
Wygoda, a nie ignorancja: ORM powinien być wygodny. Programiści powinni posiadać minimalną wiedzę na temat relacyjnych baz danych. ORM nie jest sposobem na ukrycie niewiedzy, ale wygodą.
-
Dyskretny i przejrzysty: ORM powinien zapewniać programistom kontrolę nad zawartością bazy danych i pełną kontrolę nad tym, co jest zapisywane. Starsze dane, nowe obiekty: ORM umożliwi Ci tworzenie nowych obiektów ze starszych danych, czyli rekonstrukcję dotychczasowej bazy danych na obiekty Java.
-
Wystarczająco, ale nie za dużo: ORM zapewni wszystkie narzędzia do rozwiązywania typowych problemów wynikających z niedopasowania impedancji (termin używany w odniesieniu do problemów, które powstają w wyniku różnic pomiędzy modelem bazy danych a językiem programowania). ORM nie powinien być zbyt ciężki.
-
Lokalność i mobilność: Dane są lokalne, ale musi istnieć możliwość przeniesienia trwałego stanu aplikacji do różnych części aplikacji.
-
Standardowy interfejs API, implementacja z możliwością podłączenia: polegaj na standardowym interfejsie API, ale w razie potrzeby możesz zmieniać implementacje.
-
Najbardziej modułowym komponentem obiektów JPA jest zwykły, stary obiekt Java (POJO). Każdy obiekt musi mieć unikalny identyfikator.
-
Jednostki JPA zazwyczaj używają adnotacji, takich jak @MappedSuperClass, co pozwala na użycie nadklas zawierających wspólne pola encji. Adnotacja @AttributeOverride służy do zastępowania jednostek nadklasy. @Column służy do konfigurowania mapowań baz danych. Adnotacji @Transient można używać w przypadku pól w klasie encji, które nie powinny być mapowane na bazę danych.
-
Typ dostępu to proces, za pomocą którego dostawca trwałości uzyskuje dostęp do stanów w jednostce. Dostęp do pól ma miejsce, gdy dostawca uzyskuje dostęp do pól klasy bezpośrednio poprzez odbicie. Dostęp do właściwości ma miejsce, gdy w celu uzyskania dostępu do stanów używane są metody właściwości Java Bean, czyli używane są metody pobierające i ustawiające. Aby skorzystać z dostępu do właściwości, moduł pobierający musi być opatrzony adnotacją @Id. Typ dostępu mieszanego wykorzystuje dostęp do obu pól i właściwości w tej samej klasie encji za pomocą adnotacji @Access.
API Java dla usług sieciowych RESTful
Ograniczenia architektury REST:-
Klient i serwer są od siebie niezależni.
-
Bezstanowy: każde indywidualne żądanie docierające do serwera jest autonomiczne i niepowtarzalne. Serwer nie przyjmuje żadnych założeń z poprzedniego żądania.
-
Buforowanie: system musi obsługiwać buforowanie na różnych poziomach, aby poprawić wydajność i skalowalność.
-
Ujednolicony interfejs oznacza, że klient musi mieć wspólny, ujednolicony interfejs, aby uzyskać dostęp do zasobów na serwerze, a także wchodzić w interakcję z zasobami na serwerze. System wielowarstwowy: Serwer można zaimplementować w różnych warstwach, dzięki czemu klient nie musi się martwić o system wielowarstwowy, taki jak serwer obsługujący równoważenie obciążenia.
-
Metoda HTTP GET: żądanie zasobu lub zasobów. Metoda żądania GET jest idempotentna, co oznacza, że wielokrotne wysyłanie tego samego żądania do metody nie powinno zmieniać stanu zasobu ani danych na serwerze.
-
Metoda HTTP POST: Żądanie POST służy do tworzenia nowych zasobów na serwerze. Powoduje to zmianę zestawu danych na serwerze. POST zwykle ma treść, w której publikowany lub dołączany jest ładunek lub cokolwiek, co chcemy utworzyć na serwerze.
-
Metoda HTTP PUT: używana semantycznie do aktualizacji zasobów na serwerze.
-
Metoda HTTP DELETE: Używana do usuwania zasobów na serwerze.
-
Typy treści. Istnieje kilka typów treści, które można wykorzystać i utworzyć za pomocą metod zapytań: XML, CSV, EXCEL, TEXT i JSON.
-
JAX-RS ma koncepcję pisania treści wiadomości. Są to konstrukcje API służące do konwersji typów Java na typ oczekiwany przez klienta. Adnotacji @Produces można użyć do określenia typu, na który konwertowana jest odpowiedź obiektu Java.
-
Adnotacja @Consumes informuje środowisko wykonawcze JAX-RS o typie treści zużywanej przez daną metodę zasobu. Środowisko wykonawcze JAX-RS następnie konwertuje treść JSON przekazaną jako ładunek na obiekt Java, którego typ jest taki sam jak parametr metody.
-
Mapowanie wyjątków JAX-RS: konstrukcja API używana do mapowania wyjątków na odpowiedzi HTTP. Adnotacja @Provider służy do programowego rejestrowania mechanizmu rozpoznawania wyjątków w środowisku wykonawczym JAX-RS.
GO TO FULL VERSION