24
Java wybrane technologie spotkanie nr 7 Enterprise Java Beans

Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

Java wybrane technologiespotkanie nr 7

Enterprise Java Beans

Page 2: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

2

Zagadnienia dotyczące systemów rozproszonych

● Zdalne wołanie metod (ang. Remote Method Invocation)● Wielowątkowość (ang. Threading)● Współpraca z bazą danych i systemami spadkowymi (ang. Back-end

integration)● Transakcje● Równoważenie obciążenia (ang. Load balancing)● Płynne przejmowanie zadań od komponentów, które uległy awarii

(ang. Transparent failover)● Czy stan serwera, który uległ awarii jest replikowany na inne serwery

(ang. Clustering)● Uaktualnienia działającego systemu (ang. Dynamic redeployment)● Prowadzenie dziennika i audyt (ang. Logging and auditing)● Monitorowanie i administrowanie działającym systemem (ang.

System management)

Page 3: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

3

Zagadnienia dotyczące systemów rozproszonych

● Luźne sprzężenie przy pomocy komunikatów (ang. Message-oriented middleware)

● Tworzenie/niszczenie komponentów w zależności od obciążenia (ang. Component life cycle)

● Pule zasobów (ang. Resource pooling)● Kontrola bezpieczeństwa na poziomie operacji (ang. Security)● Pamięć podręczna (ang. Caching)● ...

Page 4: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

4

Serwery aplikacji● Podobna funkcja serwera jak dla kontenerów webowych● Jak zapewnić usługi śródprogramów (ang. Middleware services)

– zaprogramować samemu– użyć serwera aplikacji

● Standaryzacja– po dokonaniu wyboru nie było odwrotu– zatrzymać użytkowników można jedynie przez dbanie o jakość!

● (patrz IE)● Standaryzacja w innych dziedzinach: telewizja, telefony, paliwo

samochodowe● pozew Departamentu Sprawiedliwości przeciw IBM z 1980 r. (sprzęt,

oprogramowani i usługi zostały rozdzielone)● wojny przeglądarek● pozwy Komisji Europejskiej

Page 5: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

5

Technologia Enterprise JavaBeans● Zalety:

– to wszechobecny standard● są pracownicy● dojrzała technologia (dużo dobrych praktyk i narzędzi)

– możliwa jest przenośność● mimo, że nigdy nie jest za darmo

– aplikacje powstają szybciej, bo wiele usług jest oprogramowane w serwerach● nie wszystkie usługi są wymagana przez specyfikację (używanie

dodatkowych usług może ograniczyć przenośność)● Dotychczas z EJB było jak z przysłowiową armatą na wróble

– czy EJB 3.0 to zmieni?● Jeżeli nie EJB, to:

– lekkie zręby o otwartym kodzie (np. Spring)– .NET-managed components

Page 6: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

6

Technologia Enterprise JavaBeans● Typowe zastosowania EJB

– logika biznesowa: np. wyliczanie podatków dla listy zakupów, wysyłanie emaili z potwierdzeniami

– dostęp do bazy danych– integracja z innymi systemami (Java EE Connector Architecture)

● Typowi klienci– aplikacje (biurkowe, applety)– dynamiczne WWW– Web services (interfejs dla aplikacji)

Page 7: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

7

Page 8: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

8

Dostęp do usług● wprost (ang. explicit)

– niższa efektywność pracy programistów– trudniejsze pielęgnowanie– większa kontrola

● niejawnie (ang. implicite)– programiści skupiają się jedynie na logice biznesowej– niektóre zmiany nie wymagają poprawiania kodu– deksryptory/anotacje

● EJB– zazwyczaj jest wybór między usługami jawnymi i niejawnymi (jak wiele

kontroli potrzeba)

– specyfikacja nie narzuca sposobu realizacji dostępu niejawnego

Page 9: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

9

Role● efektywność vs elastyczność● role sprawdzają się w zespołach średnich i dużych zespołach

– Bean Provider– Application Assembler (architekt)– EJB Deployer (wybór sprzętu, redundancja, strojenie)

● często kontakt z "centrum danych"– System Administrator (nadzór nad działającym systemem)

Page 10: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

10

Kontenery EJB● http://java.sun.com/j2ee/licensees.html● Komercyjne

– BEA WebLogic– Sun Java System Application Server– IBM WebSphere– Oracle Application Server

● Otwarte– JBoss– Glassfish– Apache Geronimo– JOnAS

Page 11: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

11

Rodzaje EJB● inne technologie komponentowe jak DCOM, .NET i CORBA mają

jeden rodzaj komponentów– wiele wydłuża naukę, ale ułatwia dobrą organizację projektu

● Session beans (SB)– stateless vs stateful

● Message-driven beans (MDB)– ten sam cel, ale luźnie sprzężone

● Entity beans– nie zmienione od wersji EJB 2.1– alternatywą jest Java Persistence API

Page 12: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

12

Dostęp do beanów● RMI-IIOP

– Internet Inter-ORB Protocol● Java Message Service (JMS)● Location Transparency

– Java Naming and Directory Interface (JNDI)● java:comp/env/

(nie trzeba się odwoływać do rzeczywistych adresów zasobów)– zdalny interfejs– lokalny interfejs (od EJB 2.0)

● Web Services– komponenty vs usługi (SOA)

Page 13: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

13

Podstawy: Programowanie rozproszone

● zdalny interfejs zapewnia distribution transparency– co najmniej raz/co najwyżej raz– semantyka przekazywania

parametrów● technologie:

– OMG Common Object Request Broker Architecture (CORBA)

– Microsoft Distributed Component Object Model (DCOM)

– Sun Remote Method Invocation (RMI)

● gruboziarniste operacje

Page 14: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

14

Model programistyczny EJB 3.0

Page 15: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

15

Prościej niż w EJB 2.1● EJB 2.1 i EJB 3.0 można wymieszać● nie ma interfejsu domowego

– dla stateless SB i MDB nie ma sensu

– dla stateful SB użytkownik może użyć dowolnej metody

● POJO– nie trzeba dostarczać deskryptora

● kiedy deskryptor się przydaje? (podział ról w zespole)

● deskryptor ma większy priorytet od anotacji

– nie trzeba implementować specjalnych interfejsów i wypełniać ich metod

● dependency injection– można zapomnieć o JNDI

Page 16: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

16

Pule● swapping

– pamięć wirtualna– aktywacja/pasywacja– zazwyczaj Last Recently Used

(LRU)– tylko dla beanów, których metody

nie są w tej chwili wywoływane i które nie uczestniczą w transakcji

● dla socketów, połączeń JDBC, itp.– @PrePassivate– @PostActivate

● @PostConstruct i @PreDestroy● klasy callback listener

– nie dotyczy ich DI

Page 17: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

17

Pozostałe callbacki

SL SF

Page 18: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

18

Przykład – interfejs zdalnypackage test;

public interface CountRemote { public int count(); public void set(int val); public void remove();}

Page 19: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

19

Przykład – klasa beanapackage test;

import javax.ejb.*;import javax.interceptor.Interceptors;

@Stateful@Remote(CountRemote.class)@Interceptors(CountCallbacks.class)public class CountBean implements CountRemote {

private int val;

public int count() { System.out.println("count()"); return ++val; }

public void set(int val) { this.val = val; System.out.println("set()"); }

@Remove public void remove() { System.out.println("remove()"); }}

Page 20: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

20

Przykład – callbackspublic class CountCallbacks {

public CountCallbacks() {}

@PostConstruct public void construct(InvocationContext ctx) throws Exception { System.out.println("cb:construct() "); ctx.proceed(); } @PostActivate public void activate(InvocationContext ctx) throws Exception { System.out.println("cb:activate()"); ctx.proceed(); } @PrePassivate public void passivate(InvocationContext ctx) throws Exception { System.out.println("cb:passivate()"); ctx.proceed(); } @PreDestroy public void destroy(InvocationContext ctx) throws Exception { System.out.println("cb:destroy()"); ctx.proceed(); } }

Page 21: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

21

public class CountClient { public static final int noOfClients = 3;

public static void main(String[] args) { try { Context ctx = new InitialContext(System.getProperties()); CountRemote count[] = new CountRemote[noOfClients]; int countVal = 0;

System.out.println("Instantiating beans..."); for (int i = 0; i < noOfClients; i++) { count[i] = (CountRemote) ctx.lookup(CountRemote.class.getName());

count[i].set(countVal);

countVal = count[i].count(); System.out.println(countVal);

Thread.sleep(100); }

System.out.println("Calling count() on beans..."); for (int i = 0; i < noOfClients; i++) {

countVal = count[i].count(); System.out.println(countVal);

count[i].remove();

Thread.sleep(50); } } catch (Exception e) { e.printStackTrace(); } }}

Initializing beans...123Calling count on beans...234

co z callbacks???

Page 22: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

22

<?xml version="1.0" encoding="UTF-8" ?> <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"> <description>Stateful Session Bean Example</description> <display-name>Stateful Session Bean Example</display-name> <enterprise-beans> <session> <ejb-name>CountBean</ejb-name> <business-remote>examples.session.stateful_dd.Count</business-remote> <ejb-class>examples.session.stateful_dd.CountBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> <interceptors> <interceptor> <interceptor-class>examples.session.stateful_dd.CountCallbacks </interceptor-class> <post-construct><lifecycle-callback-method>construct</lifecycle-callback-method></post-construct> <post-activate><lifecycle-callback-method>activate</lifecycle-callback-method></post-activate> <pre-passivate><lifecycle-callback-method>passivate</lifecycle-callback-method></pre-passivate><!-- <pre-destroy><lifecycle-callback-method>destroy</lifecycle-callback-method></pre-destroy> --> </interceptor> </interceptors> <assembly-descriptor> <interceptor-binding> <ejb-name>CountBean</ejb-name> <interceptor-class>examples.session.stateful_dd.CountCallbacks </interceptor-class> </interceptor-binding> </assembly-descriptor> </ejb-jar>

Page 23: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

23

Ułatwienia● Ułatwienia JNDI

– Context ctx = new InitialContext(); //bezparametrowy konstruktor– w pełni kwalifikowana nazwa klasy oraz java:comp/env/ejbJNDI– SessionContext

● Anotacje– dla @Stateless, @Stateful i @MessageDriven

● name, mappedName, description– @Local i @Remote mogą zawierać listę np. {X.class, Y.class}

● Dependency Injection– @Resource SessionContext ctx;– @EJB InnyBean ib;– @Resource(name="jdbc/__default",type=Datasource.class)

DataSource ds;– @Resource int ala; //z env-entry

Page 24: Java wybrane technologie - mimuw.edu.plsroka/archiwalne/2007jwt/...4 Serwery aplikacji Podobna funkcja serwera jak dla kontenerów webowych Jak zapewnić usługi śródprogramów (ang.Middleware

24

Interceptors● @Interceptor i @Interceptors wskazują zewnętrzne klasy● @AroundInvoke wskazują metodę● programowanie aspektowe

– cross-cuting concern (bezpieczeństwo, logi, audyt)– InvocationContext.proceed()