Department of Software Engineering

Download Report

Transcript Department of Software Engineering

UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
9. Háttér logika
Dr. Bilicki Vilmos
Szegedi Tudományegyetem
Informatikai Tanszékcsoport
Szoftverfejlesztés Tanszék
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Tartalom
 EJB
 CDI
2015.04.13.
■
■
■
■
■
■
■
■
■
■
■
■
Szolgáltatások
Szkópok
Injektálás
Minősítő jelölések
EL nevek
Producer metódusok
Alternatívák
Specializáció
Eseménykezelés
Interceptorok
Dekorátorok
Sztereotípiák
Programrendszerek fejlesztése
2
2015.04.13.
Programrendszerek fejlesztése
3
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
EJB rendszer
 Bean fejlesztő
■ Telepíthető adott funkciót ellátó komponenesket gyárt
 Alkalmazás szintetizáló
■ Ő látja át az adott problémát és tervezi meg hozzá az
alkalkalmazást
 EJB telepítő
■ Biztonsági, integrációs kérdések (LDAP, tűzfal, …)
 Rendszer Adminisztrátor
■ Rendszer menedzsment, monitorozás, …
 Alkalmazás szerver gyártó
 Fejlesztő eszköz gyártók
2015.04.13.
Programrendszerek fejlesztése
4
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Erőforrás hozzáférés
A JEE komponensek sok fajta
erőforráshoz férhetnek hozzá (email,
LDAP, fájl, …)
A JNDI feladata a név szolgáltatás
biztosítása a komponensek számára
2015.04.13.
Programrendszerek fejlesztése
5
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
JNDI
 Java Naming and Directory Interface
 A J2EE legfontosabb összetevője (a J2SEE –nek is része)
 Feladata:
■ Objektumok referenciáinak tárolása kereshető formában
■ Együttműködés a címtár alapú rendszerekkel (amelyek
tudják az információt hierarchikusan kezelni)
 Felépítése:
■ JNDI API
■ Elnevezés menedzser
■ JDNI SPI
■ Szolgáltatók (Service Provider)
2015.04.13.
–
–
–
–
LDAP
COS
RMI
DNS




NIS
Fájl Rendszer
Windows Reg.
Novell Fájl R.
Programrendszerek fejlesztése
6
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Elnevezés, Címtár
Elnevezés (Naming):
■
■
■
■
■
LDAP, DNS, COS, …
Kötés – binding
Referenciák, Címek
Konteksztus (Context) (név-objektum kötés halmaz)
Névterek, Elnevezési rendszerek – konteksztusok
halmaza
Címtár (directory):
2015.04.13.
■
■
■
■
■
Az objektumok rendelkeznek tulajdonságokkal is
Tulajdonság azonosító
Címtár szolgáltatás
Directory Schema
Keresések, …
Programrendszerek fejlesztése
7
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
JNDI csomagok
 javax.naming
■ Kontesztus (Context)
– Kezdő kontesztkus (Initial Context)
– list, lisBindings, bind, reBind, unBind
– Al kontesztus - subContext
■ Nevek (Name , CompositeName )
– String, Name
■ Kötések
■ Referenciák
 javax.naming.directory
■ Attribútumok lekérdezése
■ DirContext, getAttributes(), modifyAttributes(), search()
 javax.naming.event
 javax.naming.ldap (Teljesebb LDAP)
■ LDAP v3
■ LdapContext
 javax.naming.spi
2015.04.13.
Programrendszerek fejlesztése
8
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Kötés, Konteksztus
Kötés:
bind, rebind, unbind, rename
Fruit fruit = new Fruit("orange");
ctx.bind("favorite", fruit);
Fruit fruit = new Fruit("lemon");
ctx.rebind("favorite", fruit);
ctx.unbind("favorite");
ctx.rename("report.txt", "old_report.txt");
Al kontesztus:
createSubcontext, destroySubcontext
2015.04.13.
ctx.createSubcontext("new");
ctx.destroySubcontext("new");
Programrendszerek fejlesztése
9
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Erőforrás injektálás
A konténer automatikusan beinyektálja a
megfelelően annotált mezőbe/tulajdonságba
■ Inicializáláskor (mező/tulajdonság)
■ Futás időben (osztály alapú)
@Resource
2015.04.13.
■ Név (name)
■ Típus (type)
■ Azonosítás típusa (authenticationType)
■ Megosztható (shareable)
■ Csatolás neve (mappedName)
■ Leírás (dessc)
Programrendszerek fejlesztése
10
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Elosztott rendszerek
Gyakran kliens-szerver
Problémák:
2015.04.13.
■ A távoli objektum megtalálása
■ Bájt kód betöltése
■ Kommunikáció
– Socket használat
– RPC használat
– RMI
– Corba
– RMI IIOP
– SOAP
– XML RPC
Programrendszerek fejlesztése
11
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
RMI
Remote Method Invocation
Objektum orientált RPC
■ Teljes objektumokat tudunk átküldeni, nem
csak előre definiált típusokat
Java specifikus
Elosztott szemétgyűjtő
Biztonságos
Egyszerű (nincs IDL)
URl szerű: rmi://host:port/objektumnév
2015.04.13.
Programrendszerek fejlesztése
12
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Különbségek
Elosztott vs. Normál Java alkalmazás
2015.04.13.
■ Távoli objektum hivatkozása használható
■ A Cast ugyanúgy működik
■ instanceOf is
■ A távoli objektumoknál az interfésszel
kommunikálunk nem a megvalósító osztállyal
■ A távoli eljárás hívások eredménye és
paraméterei érték szerint adódnak át
■ A távoli objektum hivatkozásként adódik át
■ Külön hibakezelés kell
Programrendszerek fejlesztése
13
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Felépítése
 Java.RMI.remote interfész
■ Ezt kell bővítenünk
■ Minden metódusnál specifikálni kell a java.rmi.RemoteException
kivételt
■ A távoli eljárás deklarálásánál a benne szerepelő objektumokat
interfészekkel kell megadnunk
 RemoteException
■ Kommunikációs hiba
■ Paraméter átalakítás hiba
■ Protokol hiba
 RemoteObject
■ java.lang.Object
 java.rmi.server.UnicastRemoteObject
 java.rmi.activation.Activatable
2015.04.13.
Programrendszerek fejlesztése
14
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Működése
Hagyományos RPC megoldás:
2015.04.13.
■ Csonkok (stubs) elrejtik a hálózati protokollokat és a
serializációt
– Kliens oldali reprezentáció vagy proxy
– Ugyanazt az interfészt valósítja meg mint a távoli osztály
– Egy csonk metódus hívás:
»
»
»
»
»
Kapcsolatot kezdeményez a távoli JVM-mel
Átalakítja és átviszi a paramétereket (marshalls)
Megvárja az eredményt !!!!!!
Kiolvassa és visszaalakítja a paramétereket (unmarshalls)
Visszaadja az eredményt a hívónak
■ Vázak (skeletons) a szerver oldali ragasztó (Java2 ben nem
kötelező)
– Szerver oldali reprezentáció:
» Kiolvassa a paramétereket és visszaalakítja őket
(unmarshals)
» Meghívja a megfelelő objektum megfelelő metódusát
» Átalakítja és átküldi az eredményt (marshals)
Programrendszerek fejlesztése
15
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Használata
 Távoli interfész deklarálás
public interface WeatherService extends Remote {
public List getWeatherInformation() throws RemoteException;}
 Osztály megvalósítás
public class WeatherServiceImpl extends UnicastRemoteObject implements WeatherService {
public WeatherServiceImpl() throws RemoteException
{ super();updateWeatherConditions();}
public List getWeatherInformation(){}
public static void main( String args[] ) throws Exception
{WeatherService service = new WeatherServiceImpl();
String serverObjectName = "rmi://localhost/WeatherService";
Naming.rebind( serverObjectName, service );}
 Kliens megvalósítás
String remoteName = "rmi://" + server + "/WeatherService";
WeatherService weatherService =( WeatherService ) Naming.lookup( remoteName );
List weatherInformation = weatherService.getWeatherInformation();
 Fordítás
■ Javac
■ Rmic -> csonk osztályok (rmic –v1.2 -> vázat is gyárt)
 Futtatás
2015.04.13.
■ rmiregistry
■ Java Server
■ Java Kliens
Programrendszerek fejlesztése
16
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Paraméter átadás
 Serializable (menthető) objektumok (java.io.Serializable)
 Távoli objektumok (nem exportált)
■ Érték szerint adódik át (serialization)
 Távoli objektumok (exportált)
■ Referencia szerint adódik át (csonk)
 Referencia integritás
 Osztály kommentár (Annotation)
■ Az osztály elérési útvonala is átküldődik
 Paraméter átvitel
2015.04.13.
■ java.rmi.Remote megvalósító osztály
– Exportált: csonk adódik vissza
– Nem exportált: az objektum adódik vissza
■ Egyéb osztály:
– Nem exportált: az objektum adódik vissza
Programrendszerek fejlesztése
17
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Enterprise Java Beans
EJB:
■ Szerver oldali komponens
■ Java interfészek halmaza
■ Specifikáció mely leírja a komponensek és
az alkalmazásszerverek együttműködését
Érvek EJB mellett
2015.04.13.
■ Sokan támogatják
■ Nyílt szabvány, elvileg gyártó független
■ Gyors alkalmazás fejlesztés
■ Platform független
Programrendszerek fejlesztése
18
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
EJB
2015.04.13.
Programrendszerek fejlesztése
19
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
EJB típusok
Viszony Bab (Session Bean)
■ Az üzleti folyamat modellezésére szolgál
■ Munkafolyamat, árazás, hitel kártya engedélyező, …
Entitás Bab (Entity Bean) (CSAK < =EJB2.0)
■ Az üzleti adatot modellezik
■ Termék, egyed, rendelés, …
Entitások - JPA (Java Persistence API) (CSAK >=
EJB 3.0)
Üzenet vezérelt Bab (Message Driven Bean)
2015.04.13.
■ Hasonló mint a viszony bab, csak üzenetekkel lehet
kommunikálni vele
Programrendszerek fejlesztése
20
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
EJB példa
2015.04.13.
Programrendszerek fejlesztése
21
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Az EJB objektum
 Nem kapcsolódunk
közvetlenül az EJB-hez
 Az EJB tároló elfogja a hívást
és delegálja a Bab
példánynak (Instance
Pooling)
 EJB objektum ragasztóként
funkcionál, Ragasztó
Eszköztár
 A tárló generálja (tárolónként
más-más lehet)
 Implicit MiddleWare
 Kivételek (transzparent failover):
■ Alkalmazás szintű
■ Rendszer szintű
22
2015.04.13.
Programrendszerek fejlesztése
22
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Mitől EJB az EJB?
EJB 2.0
■ javax.ejb.EnterpriseBean interfész
■ Üres interfész, csak a neve a fontos
■ A java.io.Serializable interfészt bővíti
■ Az alábbi interfészek származnak belőle:
– javax.ejb.EntityBean
– javax.ejb.SessionBean
– javax.ejb.MessageDrivenBean
EJB 3.0
2015.04.13.
■ POJO (@Stateless, interfészek @Remote,
@Local )
Programrendszerek fejlesztése
23
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Entitás kezelés
EJB 1,2.0
■ Entitás bab
EJB 3.0, 3.1
2015.04.13.
■ Entitás – JPA
■ = Hibernate 3.0
Programrendszerek fejlesztése
24
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Entitás (>=EJB 3.0)
2015.04.13.
Programrendszerek fejlesztése
25
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Viszony bab (Session Bean)
 Üzleti folyamatot valósít meg
 Nem mentődnek el a tartós tároló helyre:
■ Rövid életűek (a kliens kód hívása alatt élnek)
■ Általában nem élik túl a szerver leállásokat
 Három típusa van:
2015.04.13.
■ Állapot mentes (Stateless)
– Egy metódus hívásig él
– Nem őrzi meg állapotát
– Minden egyede egyenlő, újrahasznosítható, készletezhető
■ Állapottal rendelkező (Statefull)
– Több egymást követő kérést tranzakciót képes kiszolgálni
– Megőrzi az állapotát (a viszony idejére)
– Készletezés: passivation, activation (erőforrások menedzselése)
■ Singelton
– Egy van belőle, megőrzi az állapotát
Programrendszerek fejlesztése
26
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Életciklusok
2015.04.13.
Programrendszerek fejlesztése
27
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Példa
@Singleton
@ConcurrencyManagement(BEAN)
public class DiscountRateBean {
@PersistenceContext
private EntityManager entityManager;
private Rate rate;
@PostConstruct
private void init() {
rate = entityManager.find(Rate.class, 1);
}
@PreDestroy
private void destroy() {
entityManager.merge(rate);
}
public synchronized void setRate(Rate rate) {
this.rate = rate;
}
public synchronized Rate getRate() {
return rate;
}
}
2015.04.13.
Programrendszerek fejlesztése
28
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Teljes működés
2015.04.13.
Programrendszerek fejlesztése
29
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Üzenet vezérelt bab (Message driven bean)
Az előző komponensek RMI-IIOP-ot
használtak kommunikációra
Hátrányai:
■ A kliensnek várnia kell a válaszra (nem
engedélyezetett a szál kezelés !!)
■ Nem megbízható
■ Egyszerre csak egy egyeddel kommunikál
Message Oriented MiddleWare
2015.04.13.
■ MSMQ, IBM MQSeries, … cég függő
■ JMS szabványos igyekszik lenni (API/SPI)
Programrendszerek fejlesztése
30
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
JMS API
Messaging
Domains:
■ Publish/subscribe
■ Point-to-Point
31
2015.04.13.
Programrendszerek fejlesztése
31
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Üzenet vezérelt bab
 Teljesen el van különítve a többi komponenstől
■ Nincs home, remote, local, localhome interfész
 Egy üzleti metódusuk van
■ onMessage() menet közben deríti ki mit is kapott (instanceof)
 Nincs visszatérési értékük
 Nem tudnak kivételt küldeni a küldőnek
 Állapotmentesek
 Tartós vagy nem tartós listatagok
■ Tartós – minden üzenetet megkap akkor is ha nem aktív
■ Nem tartós csak azokat kapja meg amikor aktív volt
 javax.jms.MessageListener
■ onMessage()
 javax.ejb.MessageDrivenBean
2015.04.13.
■ ejbRemove
■ setMessageDrivenContext
Programrendszerek fejlesztése
32
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Példa: Bean
2015.04.13.
Programrendszerek fejlesztése
33
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Tranzakció kezelés
A tranzakciók használata bevált megoldás az adat
integritás megőrzése érdekében
■ Hibák, komplex helyzetek
■ Több felhasználó kezelése
A folyamatokat munka egységekbe tudjuk osztani
Hogyan oldjuk ezt meg amennyiben nem
adatbázisban végezzük el a megfelelő
műveleteket
EJB két típust támogat
2015.04.13.
■ Bab által kezelt tranzakciók
■ Konténer által kezelt tranzakciók
Programrendszerek fejlesztése
34
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Konténer által kezelt tranzakció
kezelés
A konténer szabja meg a tranzakció határokat
Viszony és üzenet babbal tudjuk használni
Egyszerűsíti a fejlesztést mert alapesetben nem
kell vele foglalkoznunk
Tipikus eset
■ A tároló adott bab metódus meghívásával egy új
tranzakciót kezd amit befejez amint a metódus
visszatért
■ Minden metódus egy-egy külön tranzakció
Nem lehet egyszerre használni a bab által kezelt
tranzakció kezeléssel
Metódus szinten specifikálhatjuk a tranzakció
igényeket
2015.04.13.
Programrendszerek fejlesztése
35
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Tranzakció hatóköre
2015.04.13.
Programrendszerek fejlesztése
36
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Példa
2015.04.13.
Programrendszerek fejlesztése
37
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Bab által kezelt tranzakció
kezelés
Akkor szokták használni a ha a tranzakció
határokat kézben szeretnénk tartani
Az előzőnél egy metódus egy
tranzakcióhoz tartozhat
JDBC vagy JTA tranzakciókezelést
lehet használni
2015.04.13.
Programrendszerek fejlesztése
38
2015.04.13.
Programrendszerek fejlesztése
39
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
JSF vs. Seam
JSF
Page
POJO
Facade
Session
EJB
JSF
JSF
Page
POJO
Facade
Entity
EJB
Managed Bean
JSF
Page
Session
EJB
SEAM
2015.04.13.
Entity
EJB
JSF
Page
Automatically wrapped in Managed Bean
Programrendszerek fejlesztése
40
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
JSF életciklus
2015.04.13.
Programrendszerek fejlesztése
41
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Seam életciklus
2015.04.13.
Programrendszerek fejlesztése
42
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
SEAM 3.0
 EJB komponensek JSF Bean-ekként való
használatának támogatása
 Annotációk használata a kontextusok változóinak
manipulálására
 Javított kontextus modell + két új kontextus:
■ Conversation
■ Business Process
 Interfész munkafolyamat-motorok könnyű
integrálásához
 JPA integrálása
 Annotációk biztosítása JSF metaadatok számára
 JSR-227 támogatás biztosítása
2015.04.13.
Programrendszerek fejlesztése
43
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Példa: Navigáció
faces-config.xml vagy
pages.xml
pageflow
 Navigációs szabályok
 Init akciók használata
navigálás előtt
 Request paraméterek
kezelése
 EL kifejezések használata
2015.04.13.
Programrendszerek fejlesztése
44
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Megoldás
• Web Beans
• JSR-299 specifikáció
• Egyesíti a JSF Managed Bean komponens
modellt az EJB komponens modellel
• Egyszerűsített programozási modellt ad
web alapú alkalmazások fejlesztéséhez
• Nincs szükség a Java EE környezet mély
ismeretére
• Javított kontextus modell
2015.04.13.
Programrendszerek fejlesztése
45
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Mi egy Web Bean?
Komponens típusai:
2015.04.13.
■ Bármilyen Java osztály
■ EJB session és
singleton bean-ek
■ Feloldó metódusok
■ JMS komponensek
■ Távoli komponensek
Alap építőelemek:
■
■
■
■
■
Telepítési típusok
API típusok
Kötési típusok
Elnevezések
Implementálások
Programrendszerek fejlesztése
46
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Web Beans céljai
 EJB komponensek JSF Bean-ekként való használatának
támogatása
 Annotációk használata a kontextusok változóinak
manipulálására
 Javított kontextus modell + két új kontextus:
■ Conversation
■ Business Process
 Interfész munkafolyamat-motorok könnyű integrálásához
 JPA integrálása
 Annotációk biztosítása JSF metaadatok számára
 JSR-227 támogatás biztosítása
2015.04.13.
Programrendszerek fejlesztése
47
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Adaptálás meglévő rendszerekhez
• Létező EJB3 session bean-ekből Web
Bean-ek készítése annotációkkal
• Létező JSF managed bean-ekből Web
Bean-ek készítése annotációkkal
• Új Web Bean komponensekbe meglevő
EJB3 session bean-ek injektálása
annotációval vagy JNDI-ből
• Új EJB-ben létező Web Bean
komponensek használata injektálással
vagy interceptorral
2015.04.13.
Programrendszerek fejlesztése
48
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Web Beans újdonságai
• A Web Beans lényege a laza csatolás
– Szerver és kliens oldal elválasztása jól definiált API-k és kötési
típusok alkalmazásával
• Az implementáció felüldefiniálható telepítési időben
– Az együttműködő komponensek életciklusainak elkülönítése
• Komponensek életciklusának automatikus menedzsmentje
• Stateful komponensek szolgáltatásokként való használata
– Ortogonális nézetek leválasztása a programkódtól
• Interceptorok használata (logging, security, transactions)
– Az üzenetek küldőinek és fogadóinak szétválasztása
• Event-ke használata
• A Web Beans egyesíti a web réteget és az üzleti réteget
2015.04.13.
– Egy komponens elérheti a request scope adatait és használhat
tranzakciós erőforrást is egyben
Programrendszerek fejlesztése
49
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
<HTML>
<HEAD><TITLE>Login Page</TITLE></HEAD>
<%@ taglib uri=“http://java.sun.com/jsf/html”
prefix=”h”%>
<%@ taglib uri=“http://java.sun.com/jsf/core”
prefix=”f”%>
@Stateless
@Name(“loginComp”)
public class LoginAction {
@PersistenceContext
private EntityManager em
<BODY BGCOLOR=”white”>
@In
private Context sessionContext;
<f:view><h:form>
private String username = “”;
Login name:
public void setUserName(String username) {
this.username = username;
}
<h:input_text id=”name”
value=”#{loginComp.userName}”/>
Password:
<h:input_text id=”password”
value=”#{loginComp.password}”/>
public String login() {
try {
User user = (User) em.createQuery(„FROM ...“)
.getSingleResult();
<h:command_button
action=”#{loginComp.login}” value=”Login”/>
sessionContext.set(„currentUser", user);
return “login“;
} catch (Exception e) {…}
</h:from></f:view>
</BODY>
</HTML>
2015.04.13.
}
}
Programrendszerek fejlesztése
50
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Contexts and Dependency Injection
Feladata a különböző rétegek
együttműködésének elősegítése
Alapelve: Laza Csatolás
Alapvető szolgáltatásai:
2015.04.13.
■ Kontextusok támogatása
– Az állapottartó komponenseket kontextusokhoz
köthetjük
■ Függőségek injektálása
– Komponenseket tudunk típusosan egy
alkalmazásba injektálni
– Telepítés időben dönthetünk az implementációról
Programrendszerek fejlesztése
51
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Contexts and Dependency Injection
CDI – JSR 299
Programozási model
Öröklődés és specializáció
Függőség injektálás és EL
Szkópok, kontextusok
Életciklusok
Dekorátorok
Interceptorok és kötések
Események
2015.04.13.
Programrendszerek fejlesztése
52
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
CDI szolgáltatások
EL segítségével elérhetőek a
komponensek
Dekorálhatjuk az injektált objektumokat
A komponensekhez interceptorokat
rendelhetünk
Esemény kezelő model
Új szkóp
2015.04.13.
Programrendszerek fejlesztése
53
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
CDI Bab
A CDI által meghatározott kontextusok
mentén menedzseli az életútját
Egy CDI bab az alábbi tulajdonságokkal
rendelkezik:
2015.04.13.
■ Típus
■ Minősítések (Qualifier)
■ Szkóp
■ EL név (opcionális)
■ Interceptor kötések (opcionális)
■ Implementáció
Programrendszerek fejlesztése
54
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Minősítő jelölések
Egy babnak különböző implementációi
lehetnek
Ezeket jelölni tudjuk a minősítő jelölésekkel
Ha nincs semmi akkor @Default
2015.04.13.
Programrendszerek fejlesztése
55
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Babok mint injektálható objektumok
Szinte bármilyen Java osztály
Viszony babok
Java EE erőforrások
Perzisztencia kontextusok
Producer mezők
A producer metódusok által visszaadott
objektumok
Web szolgáltatás referenciák
Hivatkozások távoli EJB-re
2015.04.13.
Programrendszerek fejlesztése
56
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Babok injektálása
A konténer az anotáció szerint
példányosítja és injektálja a megadott
objektumot
2015.04.13.
Programrendszerek fejlesztése
57
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Szkópok használata
Az objektum
láthatóságát
élettartamát adja meg
Használható szkópok
(sajátokat is lehet
definiálni):
2015.04.13.
■ Request
■ Session
■ Application
■ Dependent
■ Conversation
Programrendszerek fejlesztése
58
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
A conversation szkóp
• Hasonló a session hatókörhöz, állapotokat tart és
rendel felhasználókhoz a rendszerben több
request-en keresztül a következő két
különbséggel:
– A életciklusának határait az alkalmazás kezeli
– Az állapotot egy adott böngészőhöz rendeli
• Egy conversation egy feladatot reprezentál a
felhasználó szemszögéből, több feladat esetén
több conversation keletkezik
• A conversation hatókör minden JSF request
esetén aktív és legtöbb esetben a request végén
véget is ér. Több requesten keresztül tartó
conversation-t hosszú futású (long-running)
conversation-nek nevezzük.
2015.04.13.
Programrendszerek fejlesztése
59
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Függő pseudo-scope
• A négy beépített hatókör mellett a Web Bean
specifikál egy default hatókört: @Dependent
• Minden Web Bean, amely nem definiálja a
hatókörét, ebbe a hatókörbe sorolandó
• Egy függő Web Bean-re való hivatkozás
(injektálás) esetén mindig létrejön egy példány a
függő bean-ből, valahányszor az injektáló
példányosítva van
• A függő Web Bean-ek példányai sosem lesznek
megosztva komponensek között, egy ilyen
példány a példányosító Web Bean-től „függ”
• Az életciklusa is tőle függ, akkor lesz
megszüntetve, amikor a példányosító megszűnik
2015.04.13.
Programrendszerek fejlesztése
60
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
EL nevek használata
Ha nem adjuk meg akkor az osztály neve
@Name
2015.04.13.
Programrendszerek fejlesztése
61
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Producer metódusok
Lehetővé teszik nem babok, vagy
speciális inicializálási igényű objektumok
injektálását
2015.04.13.
Programrendszerek fejlesztése
62
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Alternatívák használata
Amennyiben fejlesztési időben egy bab
több verziója is szükséges
Ha nincs megjelölve akkor @Default
2015.04.13.
Programrendszerek fejlesztése
63
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Specializáció
Hasonló mint az alternatíva, de azt
akarjuk, hogy mindég cserélje le:
2015.04.13.
Programrendszerek fejlesztése
64
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Producer mező
Hasonló mint a producer metódus, csak
ez egy mező
2015.04.13.
Programrendszerek fejlesztése
65
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Eseménykezelés
Események segítségével a fordításidőbeli
függőségek figyelembe vétele nélkül lehet
kommunikálni: laza csatolás
Egy bab definiálhat egy eseményt egy
másik elküldheti egy harmadik pedig
fogadhatja azt
Esemény
2015.04.13.
■ Java objektum
■ Lehet minősítő jelölése
Programrendszerek fejlesztése
66
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Megfigyelő - Observer
 Observer metódus az esemény
elkapására
 Lehet feltételes
 Lehet tranzakcionális
 Akkor értesíti az eseményről ha
a típusa és az összes minősítő
megjelölése megegyezik
2015.04.13.
Programrendszerek fejlesztése
67
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Események létrehozása
2015.04.13.
Programrendszerek fejlesztése
68
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Interceptorok
A keresztülívelő, ortogonális problémák kezelésére
Minden menedzselt objektumra használható
2015.04.13.
■
■
■
■
■
■
@AroundInvoke
@PostConstruct
@PreDestroy
@PrePassivate
@PostPassivate
@AroundTimeout
Programrendszerek fejlesztése
69
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Dekorátorok
Szerepük az üzleti tervezési minták
megvalósítása
Egy dekorátor egy vagy több dekorált
osztályt egészít ki új képességekkel
2015.04.13.
Programrendszerek fejlesztése
70
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Sztereotípusok
Egy olyan annotáció amely más
annotációkat helyettesít
Egyfajta annotáció csoportképzés
2015.04.13.
Programrendszerek fejlesztése
71
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Egy egyszerű példa:
Komponens
2015.04.13.
@Component egy
beépített stereotípus
public
@Component
class Hello {
public String hello(String name) {
return "hello " + name;
}
}
Programrendszerek fejlesztése
72
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Egy egyszerű példa: Kliens
@Current egy
beépített kötési típus
public
@Component
class Printer {
@Current Hello hello;
public void hello() {
System.out.println(hello.hello("world"));
}
}
2015.04.13.
Programrendszerek fejlesztése
73
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Egy egyszerű példa: Konstruktor
injektálás
A konstruktorok
paraméterei default
injektálódnak
public
@Component
class Printer {
private Hello hello;
public Printer(Hello hello) {this.hello=hello;}
public void hello() {
System.out.println(hello.hello("world"));
}
}
2015.04.13.
Programrendszerek fejlesztése
74
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Egy egyszerű példa: Initializer
használata
Példányosítás utáni callback a
paraméterek injektálására
public
@Component
class Printer {
private Hello hello;
@Initializer
void initPrinter(Hello hello) {this.hello=hello;}
public void hello() {
System.out.println(hello.hello("world"));
}
}
2015.04.13.
Programrendszerek fejlesztése
75
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Komponensek nevei
2015.04.13.
Alapértelmezetten a komponensek
nem elérhetőek EL kifejezésekben. Ha
nem adunk meg nevet, egy default név
rendelődik hozzá
public
@Component
@Named("hello")
class Hello {
public String hello(String name) {
return "hello " + name;
}
}
Programrendszerek fejlesztése
76
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
JSF oldalak
2015.04.13.
Web Bean metódus
hívása EL kifejezéssel
<h:commandButton
value="Say Hello"
action="#{hello.hello}"
/>
Programrendszerek fejlesztése
77
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Kötési típusok
• A kötési típus egy annotáció, amely
lehetővé teszi a kliens számára, hogy több
implementáció közül választhasson egy
API-ból futási időben
2015.04.13.
– String alapú nevek használata feloldásnál
– @Current az alapértelmezett kötési típus
Programrendszerek fejlesztése
78
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Kötési típus definiálása és használata
public
@BindingType
@Retention(RUNTIME)
@Target({TYPE,METHOD,FIELD,PARAMETER})
@interface Casual {}
A Hello komponens
injektálása és a @Casual
implementáció elkérése
A @Casual kötési
típus specifikálása
public
@Casual
@Component
class Hi extends Hello {
public String hello(String name){
return "hi " + name;
}
}
public
@Component
class Printer {
@Casual Hello hello;
public void hello(){
System.out.println( hello.hello("JBoss Compass") );
}
}
2015.04.13.
Programrendszerek fejlesztése
79
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Telepítési típusok
• A telepítési típus egy annotáció, amely Web Beanként azonosít egy osztályt
– Telepítési típusok engedélyezhetőek és tilthatóak,
ezzel biztosítva komponensek egész csoportjainak
engedélyezését és tiltását telepítési időben
– Van egy precedencia sorrendje a telepítési
típusoknak, így segítve a futtatási környezetet, hogy
különböző implementációk között választhasson egy
API-ból
– A telepítési típusok lecserélik az XML alapú
konfigurációkat
• Az alapértelmezett telepítési típus: Production
2015.04.13.
Programrendszerek fejlesztése
80
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Telepítési típus definiálása,
használata
public
@DeploymentType
@Retention(RUNTIME)
@Target({TYPE,METHOD})
@interface Espanol {}
A felsorolás sorrendje
fontos! Csak az itt felsorol
telepítési típusok lesznek
elérhetőek az
alkalmazásban
Ugyanaz az API,
különböző
implementáció
public
@Espanol
@Component
class Hola extends Hello {
public String hello(String name){
return "hola " + name;
}
}
<web-beans>
<component-types>
<component-type>javax.webbeans.Standard</component-type>
<component-type>javax.webbeans.Production</component-type>
<component-type>org.jboss.i18n.Espanol</component-type>
</component-types>
</web-beans>
2015.04.13.
Programrendszerek fejlesztése
81
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Perzisztencia
Processz szintű -> zárolás,
versenyhelyzet detektálás
Tranzakció szintű -> Laza betöltés
problémája
EJB3 komponens szintű -> komponensek
közötti átadás
Konverzáció szintű szkóp
2015.04.13.
Programrendszerek fejlesztése
82
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Hatókörök és kontextusok
• A hatókörök meghatározzák
egy Web Bean
példányainak életciklusát
• Összekapcsolják a klienst,
és az adott klienshez tartozó
példányokat
• Bővíthető kontextus modell,
új annotációk készítésével
• Beépített hatókörök:
2015.04.13.
–
–
–
–
@RequestScoped
@SessionScoped
@ApplicationScoped
@ConversationScoped
Programrendszerek fejlesztése
83
2015.04.13.
Programrendszerek fejlesztése
84
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
of Software Engineering
Department
Tartalom
 EJB
 CDI
2015.04.13.
■
■
■
■
■
■
■
■
■
■
■
■
Szolgáltatások
Szkópok
Injektálás
Minősítő jelölések
EL nevek
Producer metódusok
Alternatívák
Specializáció
Eseménykezelés
Interceptorok
Dekorátorok
Sztereotípiák
Programrendszerek fejlesztése
85