Asynchronous, Concurrent and Distributed Processing in Java EE



Podobne dokumenty
EJB 3.0 (Enterprise JavaBeans 3.0)

POSTANOWIENIE. z dnia 20 sierpnia 2018 roku

Tworzenie komponentów logiki biznesowej i warstwy dostępu do danych w oparciu o EJB3.0/JPA lub EJB 3.1/JPA2

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

Obsługa transakcji rozproszonych Java. Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska

Red Hat Network Satellite Server

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Java Persistence API - zagadnienia zaawansowane

Cele. Definiowanie wyzwalaczy

JAVA EE MODEL APLIKACJI. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Programowanie Komponentowe WebAPI

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

Serwery LDAP w środowisku produktów w Oracle

Aplikacje Internetowe, Servlety, JSP i JDBC

Programowanie komponentowe 5

JAVA PERSISTENCE API CZĘŚĆ 2 ASPEKTY ZAAWANSOWANE. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Enterprise JavaBean 3.0

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Wybrane działy Informatyki Stosowanej

Programowanie w Javie cz. 1 Wstęp. Łódź, 24 luty 2014 r.

AUREA BPM Oracle. TECNA Sp. z o.o. Strona 1 z 7

JBoss: MetaMatrix, Mobicents, Seam, Rools, ESB

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

1 Wprowadzenie do J2EE

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

Virtual Grid Resource Management System with Virtualization Technology

Podstawy frameworka Spring

Visual VM, Java Management extension i inne ciekawostki

Enterprise JavaBeans

SOP System Obsługi Parkingów

Aplikacje w Javie- wykład 11 Wątki-podstawy

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Problemy niezawodnego przetwarzania w systemach zorientowanych na usługi

Enterprise Java Beans Narzędzia i Aplikacje Java EE

Program Zamiana towarów dla Subiekta GT.

ZAPOZNANIE SIĘ ZE SPOSOBEM PRZECHOWYWANIA

Wybrane działy Informatyki Stosowanej

Niezbędne serwery aplikacji. Wprowadzenie do technologii JBoss i Apache Tomcat.

Skalowanie i monitorowanie działania systemu dlibra 5.0

Programowanie obiektowe

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Aktualizacja środowiska JAVA a SAS

Replikacja bazy danych polega na kopiowaniu i przesyłaniu danych lub obiektów bazodanowych między serwerami oraz na zsynchronizowaniu tych danych w

Szkolenie: Budowa aplikacji SOA/BPM na platformie Oracle SOA Suite 11g

Serwery Statefull i Stateless

Wydajność hurtowni danych opartej o Oracle10g Database

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski

Enterprise Java Beans wykład 7 i 8

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Konfiguracja modułu alarmowania w oprogramowaniu InTouch 7.11

SAM-Insights ADVANCED CENTRAL DATA COLLECTOR (ACDC) Dane licencyjne nie mierzone przez skanowanie. Nowy moduł ACDC o unikalnej funkcjonalności

Część I Tworzenie baz danych SQL Server na potrzeby przechowywania danych

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Program szkolenia: REST i Microservices w PHP

Enterprise JavaBeans (EJB)

Ekspert MS SQL Server Oferta nr 00/08

Enterprise JavaBeans (EJB)

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Konfiguracja serwera DNS w systemie Windows Server 2008 /2008 R2

Zarządzanie wieloserwerowym środowiskiem SAS z wykorzystaniem SAS Grid Managera. Katarzyna Wyszomierska

OSGi Agata Hejmej

Projekt INP Instrukcja 2. Autor Dr inż. Zofia Kruczkiewicz

Swing Application Framework czyli tam i z powrotem. Copyright Piotr Kochański & Erudis,

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Automatyzacja procesów biznesowych Andrzej Sobecki. ESB Enterprise service bus

JAVA EE 8. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

EJB 2.x oraz zmiany w standardzie dla EJB 3.0. Michał Stanek

Rola EJB na platformie Java EE. Enterprise JavaBeans (EJB)

Zmiana treści Specyfikacji Istotnych Warunków Zamówienia.

Projektowanie i implementacja infrastruktury serwerów

akademia androida Service, BroadcastReceiver, ContentProvider część IV

onfiguracja serwera DNS w systemie Windows Server 2008 /2008 R2

Instrukcja uŝytkownika narzędzia Skaner SMTP TP. Uruchamianie aplikacji

Projekt Fstorage. Łukasz Podkalicki Bartosz Kropiewnicki

Komunikator internetowy w C#

Zapewnienie wysokiej dostępności baz danych. Marcin Szeliga MVP SQL Server MCT

Programowanie komputerów

Język UML w modelowaniu systemów informatycznych

Wymagania systemowe Autor: Stefan Cacek

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

Zmiana treści Specyfikacji Istotnych Warunków Zamówienia.

Szkolenie wycofane z oferty

Aplikacje RMI Lab4

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Przypisywanie bibliotek w architekturze SAS

Transkrypt:

<Insert Picture Here> Asynchronous, Concurrent and Distributed Processing in Java EE W przykładach z Oracle WebLogic Server, Oracle Coherence i Oracle TopLink Grid Waldek Kot waldemar.kot@oracle.com Oracle Polska

Agenda WspółbieŜność - po co? Dlaczego w Java EE jest to problem? Rozwiązania Co moŝna uŝyć dzisiaj? Work Manager API z przykładami w Oracle WebLogic Server Co pojawi się w Java EE 6? Technologie Data Grid Z przykładami w Oracle Coherence Połączenie z Java Persistence API

Po co współbieŝność? Zwiększenie wydajności Skrócenie czasu tworzenia odpowiedzi systemu MoŜliwość podziału większego zadania na mniejsze i ich równoległego wykonania Lepsza responsywność aplikacji (szczególnie dla uŝytkowników) Prostsza obsługa operacji wykonywanych asynchronicznie i długotrwających np. notyfikacje, batch processing, server maintenance Lepsze wykorzystanie dzisiejszego sprzętu multi-server, multi-cpu, multi-core, multi-thread per core, Java/JVM od początku oferowała tu dobre wsparcie

Dlaczego jest to trudne w J2EE/Java EE? Specyfikacja EJB (21.1.2 Programming Restrictions): An enterprise bean must not use thread synchronization primitives to synchronize execution of multiple instances. Synchronization would not work if the EJB container distributed enterprise bean s instances across multiple JVMs. The enterprise bean must not attempt to manage threads. The enterprise bean must not attempt to start, stop, suspend, or resume a thread, or to change a thread s priority or name. The enterprise bean must not attempt to manage thread groups. These functions are reserved for the EJB container. Allowing the enterprise bean to manage threads would decrease the container s ability to properly manage the runtime environment. Mit: komponenty Java EE (servlet/ejb) nie mogą samodzielnie zarządzać wątkami W rzeczywistości: mogą, choć nie powinno się tego robić z bezpośrednim uŝyciem mechanizmów Java SE (np. klasy java.lang.thread)

Dlaczego? Brak kontroli nad takimi wątkami ze strony kontenera (serwera aplikacyjnego) Brak kontekstów (metadanych) w takich wątkach Konteksty: security, class loading, transaction, naming, locale, własnych konteksty (?), W Java EE trzeba takŝe zadbać o: Skoordynowanie cyklu Ŝycia kontenera/komponentów i powoływanych przez nich wątków Wysoki poziom izolacji aplikacji Tematy godne rozwaŝenia w Java EE Quality of Service Overload protection Rozdział zadań pomiędzy instancje serwerów aplikacyjnych Wersjonowanie Fajnie, gdyby programista takŝe miał nad tym kontrolę Application-scoped

Jakie są więc opcje dla programisty Java EE? Bezpośrednie uŝycie wątków z Java SE (java.lang.thread) Typowa odpowiedź: uŝyj JMS, systemu kolejkowego, itd. ale JMS nie stworzono do tego celu. Nawet z JMS wychodzą nadmiernie skomplikowane rozwiązania Od 2003 (i na pewno jeszcze przez kilka lat ): CommonJ Work Manager API De facto standard Implementowany przez liczące się serwery aplikacyjne Oracle WebLogic, IBM WebSphere JCA (technicznie moŝliwe, ale nie polecam) Java EE 6 (?) Concurrency Utilities for Java EE JSR-236, JSR-237 moŝliwość skorzystania z dobrodziejstw Java SE (5, 6, ) Technologie Data Grid przetwarzanie rozproszone sterowane danymi np. Oracle Coherence

Work Manager API Kluczowe interfejsy: Work, WorkItem, WorkManager, WorkEvent, WorkListener Work rozszerza Runnable Operacja wykonywana przez WorkManager: schedule (Work) jest takŝe opcja z listenerem Konstrukcje synchronizacyjna obiektów WorkItem waitforall waitforany obie mają takŝe wersje z timeout em

Przykład implementacji Work Manager Oracle WebLogic Server Definicje work manager ów są uŝywane przez scheduler serwera Dostęp do zasobów, priorytetyzacja, ochrona zasobów, self-tuning, itp. RóŜne klasy przetwarzania (np. minimize response time) Zaawansowana priorytetyzowana kolejka wykonawcza Work Manager to zasób kontenera podobnie jak JMS quue, czy connection pool moŝe mieć przypisane polityki wykonania QoS (Quality of Service) np. min/max liczba wątków nawet moŝna zgrać z konfiguracją innych komponentów np. JDBC connection pool przypisuje się go do komponentów aplikacji, komponentów aplikacji, nawet metod EJB poprzez deployment descriptor lub poprzez DI: adnotacja @Resource Aplikacje takŝe mogą tworzyć swoje work manager y application-scoped Programista aplikacji ma dostęp do work manager ów poprzez CommonJ Work Manager API @Resource

Demonstracja uŝycia zasobów typu Work Manager i interfejsu programistycznego CommonJ Work Manager API w Oracle WebLogic Server

DEMO (1/3) 1. Prosta aplikacja webowa 3 servlet y (serial, parallel, custom) servlet y wyświetlają wyniki i mierzą czas wykonania 2. Pojedyncze zadanie do wykonania (klasa MySubTaskImpl) parametr delay określa w milisekundach czas trwania zadania najprostsza realizacja, czyli z wykorzystaniem Thread.sleep() parametr input zawiera dane do przetworzenia (tekst) wynik wykonania zadania zamiana tekstu w input na duŝe litery moŝliwość przerwania wykonywanego zadania wtedy zadanie zwraca wynik: ##cancelled## (hardcoded )

DEMO (2/3) 3. Wykonanie szeregowe servlet SerialServlet czas wykonania mniej więcej równy sumie czasów pojedynczych zadań 4. Wykonanie zrównoleglone 1. servlet ParallelServlet 2. czas wykonania równy czasowi wykonania najdłuŝszego z zadań 3. utworzenie w serwerze aplikacyjnym zasobu work manager (MyWorkManager) 4. wstrzelenie (DI) poprzez @Resource zasobu MyWorkManager moŝliwe takŝe zdefiniowanie poprzez deployment descriptor 5. przekazywanie pracy do wykonania: metoda submit dodatkowo wersja z listener em 6. konstrukcje synchronizacji zadań waitforall (w tym wersja z timeout em) waitforany (w tym wersja z timeout em) wyświetlanie aktualnego statusu zadań ACCEPTED, STARTED, COMPLETED, ABORTED 7. przerywanie wykonywania zadań 8. określanie polityk wykonania i Quality of Service dla zasobów Work Manager określenie, Ŝe work manager MyWorkManager ma ograniczenie typu Max Threads ustawienie tego ograniczenia na wartość 1, spowoduje, Ŝe ParallelServlet wykona się tak samo jak SerialServlet, czyli zadania będą wykonywane szeregowo

DEMO (3/3) 3. Work Manager definiowany przez aplikację (application-scoped) zasób MyWorkManager jest globalny tzn. moŝe z niego skorzystać kaŝda aplikacja uruchomiona na tym serwerze/klastrze nie tylko aplikacja, ale takŝe komponenty aplikacyjne (np.. servlet y, obiekty EJB, metody EJB, itd.) aplikacyjny ( lokalny ) work manager moŝna zdefiniować poprzez specyficzne dla kontenera deployment descriptor y w WebLogic Server: np. weblogic.xml, application-weblogic.xml, servlet CustomServlet uŝywa lokalnego work manager a (MyComponentLevelWM) logika taka sama, jak w ParallelServlet Ale @Resource wstrzykuje (DI) MyComponentLevelWM dla lokalnych work manager ów takŝe moŝna określać ograniczenia (constraints) i klasy wykonania jeśli MyWorkManager ma ustawioną maksymalną liczbę wątków np. na 20, a MyComponentLevelWM ma to ograniczenie na 1, to: czas wykonania ParallelServlet równy czasowi najdłuŝszego zadania czas wykonania CustomServlet równy sumie czasów poszczególnych zadań 4. Poprzez JMX (czyli m.in. w konsoli administracyjnej WebLogic Server, a takŝe poprzez WebLogic Scripting Tool) moŝna wyświetlić statystyki work manager ów, zrobić notyfikacje, itp.

Kod demonstracji Work Managerów w Oracle WebLogic Server Będzie opublikowany na moim blogu: http://jdn.pl/blog/88

Concurrency Utilities for Java EE Chris Johnson (IBM), Naresh Revanuru (BEA/Oracle), Doug Lea (m.in. JSR-166, java.util.concurrent), Cameron Purdy (Tangosol/Oracle) i inni Status: Early draft (04.2009) Java EE 6??? MoŜliwość uŝycia, w tym w rozszerzony sposób java.util.concurrent i innych mechanizmów Java SE 5+ javax.util.concurrent Kluczowe konstrukcje ManagedThreadFactory ManagedExecutorService ManagedScheduledExecutorService ContextService Identyfikowalność poprzez interfejs Identifiable Zarządzanie i monitorowanie poprzez JMX/MBeans

Concurrency Utilities for Java EE ManagedThreadFactory Fabryka wątków (prac do wykonania) Dzięki temu moŝliwe będzie skorzystanie z API wyŝszego poziomu (np. java.util.concurrent czy Spring framework) ContextService Określa sposób przekazywania metadanych z wątku rodzica do wątku dziecka Zarządza kontekstami ManagedExecutorService Przypomina WorkManager z Work Manager API Operacje: submit, invokeall, invokeany Listeners Zwykle komunikacja poprzez Future Specyfikacja wspomina takŝe o wersji Distributable ManagedScheduledExecutorService Timer + Trigger

Data Grid Rozproszenie danych na wiele współpracujących ze sobą węzłów Węzły tworzą klastry Często przeniesienie danych do pamięci Dodatkowe wymagania na niezawodność i bezpieczeństwo tych danych Przetwarzanie równoległe sterowane danymi

Technologia: In-memory Data Grid Oracle Coherence coherence.jar Zarówno klient, jak i serwer (węzeł) klastra standalone, integracja z serwerami aplikacyjnymi, integracja z Spring, JPA/TopLink Buforowanie danych jeden lub więcej nazwany bufor (NamedCache) Przechowuje obiekty (para: klucz obiekt) Obiekty: Java, C++,.NET KaŜdy moŝe mieć indywidualną konfigurację odnośnie: sposobu działania (np. jeśli jako cache polityki wygasania danych: LRU, LFU) implementacji (Java heap, NIO buffers, inne) przechowywania danych (pamięć, baza danych, inny storage) topologii (m.in. zarządzanie kopiami danych, near-cache) Interfejs java.util.map Operacje: put/get, remove, clear, entryset, values, containskey, containsvalue, Rozproszone mechanizmy przetwarzania danych w buforach zapytania, zdarzenia, monitorowanie zmian, modyfikacja danych in-place, Mocno rozszerzalny (bo to komponent middleware )

Demonstracja technologii data grid z uŝyciem technologii Oracle Coherence

DEMO (1/4) 1. Jeden plik: coherence.jar zarówno klient, jak i serwer 2. Uruchomienie serwera (instancji) Coherence: \bin\cache-server.cmd 3. Uruchomienie konsoli (shell) Coherence: \bin\coherence.cmd Przydatne do podglądania stanu środowiska Coherence i poszczególnych buforów Dostęp do konkretnego buforu: polecenie cache (tu: cache jdd09) Aktualna liczba obiektów w buforze: polecenie size Dostęp do konkretnego obiektu: polecenie get Wstawienie obiektu: polecenie put Czyszczenie buforu: polecenie clear 4. Prosty projekt Java klient wstawiający i odczytujący obiekty do/z konkretnego buforu (tu bufor nazywa się jdd09) Dodać coherence.jar do classpath Fabryka dająca dostęp do konkretnego buforu: CacheFactory Bufor implementuje interfejs java.util.map metody: put, get, size, 5. Utworzyć drugi projekt Java Demonstracja komunikacji z buforem z innego procesu Java

DEMO (2/4) 6. MoŜna wstawiać dowolne obiekty Java (i nie tylko Java) Klasa Employee Atrybuty: id, imię, nazwisko, płeć, wiek, adres, pensja Warto skorzystać z własnego, wydajnego mechanizmu serializacji obiektów w Coherence Interfejs ExternalizableLite Klasa EmployeeExternalizable (implements ExternalizableLite) metody: readexternal i writeexternal Prosty klient wstawiający 20 000 obiektów EmployeeExternalizable 7. Uruchomienie drugiego (i kolejnych) serwerów (instancji) Coherence \bin\cache-server.cmd Dane w buforach są rozpraszane między instancje Coherence Zgodnie z konfiguracją danego buforu Będą tworzone repliki (kopie) obiektów Coherence dba o poprawną synchronizację tych kopii 8. Demonstracja replikacji danych Zatrzymanie dowolnego serwera (oprócz ostatniego ) nie powoduje utraty danych (obiektów) w buforze

DEMO (3/4) 9. Demonstracja mechanizmów rozproszonego, równoległego przetwarzania sterowane danymi operacje są wykonywane przez wszystkie instancje Coherence zarządzające danymi buforami Jeśli 100 instancji zarządza buforem, to kaŝda z nich będzie wykonywać przetwarzanie Kompletnie transparentne dla aplikacji klienckich 10. Rozproszone zapytania (distributed queries) średni wiek kobiet, średni wiek męŝczyzn, maksymalny wiek, suma zarobków Demonstracja czasu wykonania zapytań, gdy działa 1, 2, 3 instancje Coherence wyniki zaleŝą od liczby maszyn/cpu/core Indeksowanie addindex() dla atrybutu imię demo: wpływ indeksów na czas wykonania zapytań (jest znaczny ) Własne klucze asocjacje i moŝliwość sterowania jak obiekty będą rozmieszczane w klastrze Coherence demo: wpływ na czas wykonania zapytań

DEMO (4/4) 11. Rozproszone modyfikacje danych w buforze PodwyŜka pensji o 20% dla wszystkich pracowników Przy uŝyciu get / put Blokowanie obiektów: lock / unlock Demo: czas wykonania dla 1, 2, 3 instancji serwerów Coherence 12. Przetwarzanie danych in-place Czyli zamiast transferować obiekty które będą modyfikowane, wyślij logikę modyfikacji Klasa AbstractProcessor Logika modyfikacji w metodzie process Demo: klasa RaiseSalary (extends AbstractProcessor) Metoda invoke w NamedCache MoŜna podać filtr, czyli na których obiektach w buforze dana modyfikacja będzie wykonana Przyspieszenie wykonywania modyfikacji jest radykalne 13. MoŜliwe jest takŝe skorzystanie z trigger ów i monitorowania zmian

Kod demonstracji Oracle Coherence Będzie opublikowany na moim blogu: http://jdn.pl/blog/88

Coherence i JPA TopLink Grid JPA wzbogacone o rozproszone zarządzanie danymi MoŜliwe są 4 konfiguracje Coherence korzysta z TopLink/JPA Per bufor (NamedCache) programista uŝywa Coherence API obiekty są utrwalane w bazie danych poprzez JPA TopLink korzysta z Coherence Per Entity Wariant 1: Coherence jako rozproszony cache Level 2 Wariant 2: TopLink tylko odczytuje entity z buforów zarządzanych przez Coherence zapis bezpośrednio do DB (wraz z uaktualnieniem buforu) Wariant 3: TopLink odczytuje i zapisuje entity poprzez bufory Coherence moŝliwość skorzystania z opcji opóźnionych, asynchronicznych zapisów zmian w entity do bazy danych

Podsumowanie WspółbieŜność - po co? Dlaczego w Java EE jest to problem? Rozwiązania Co moŝna uŝyć dzisiaj? Work Manager API z przykładami w Oracle WebLogic Server Co pojawi się w Java EE 6? Technologie Data Grid Z przykładami w Oracle Coherence Połączenie z Java Persistence API

Konkurs z nagrodami Do wygrania ksiąŝki o technologiach Oracle! Oracle Service Bus, Definitive Guide to SOA http://apress.com/book/view/1430210575 Oracle SOA Suite 11g, Getting Started A Hands-on Tutorial http://www.packtpub.com/getting-started-with-oracle-soa-suite-11g-r1/book#

Dziękuję! Waldemar Kot Principal Systems Engineer, Eastern Europe Oracle Polska Sienna 75, 00-833 Warsaw, Poland Mobile: +48 660 78 55 78 Email: waldemar.kot@oracle.com Private email: waldek.kot@googlemail.com Blog: http://jdn.pl/blog/88