Sunteți pe pagina 1din 22

8.

Aplicaii distribuite bazate pe componente:


Enterprise Java Beans (EJB)
Cuprins

8.1. Componente

8.2. Platforma Java 2 Enterprise Edition (J2EE)

8.3. Cadrul general al EJB


8.3.1. Roluri
8.3.2. Tipuri de EJB

8.4. Componente sesiune


- 8.4.1. Perspectiva clientului asupra EJB sesiune

- 8.4.2. Componente sesiune fr stare

- 8.4.3. Componente sesiune cu stare

8.5. Componente dirijate de mesaje

8.6. Persistena. Obiecte entitate

8.7. Tranzacii
8.1. Componente

Reutilizabilitatea n POO se realizeaz numai cu anumite reguli i restricii. A aprut ideea


componentelor software ca uniti de reutilizare

Componentele software sunt uniti de compunere cu interfee specificate prin contract i


care au doar dependene de context explicite. O component software poate fi instalat
independent i poate fi utilizat de tere pri

Distribuia i instalarea componentelor se face sub form binar. O component poate fi


reimplementat i reinstalat ntr-o aplicaie fr a recompila aplicaia

Specificarea unei componente include i cerinele acesteia fa de ambiana n care va fi


utilizat (de multe ori sub forma unor proprieti, care apar ca informaii externe codului
componentei). Componenta va funciona corect numai dac aceste cerine sunt satisfcute

O alt abordare: dac ambiana n care componentele vor funciona este cunoscut, ele se
scriu innd cont de ambian i codificarea va fi mai simpl. Ambiana ofer o serie de
servicii la care componentele au acces implicit, deci n cod nu mai apare ceva explicit legat
de acestea

EJB este o tehnologie dezvoltat n spiritul componentelor. (Deosebirea fa de Java RMI i


CORBA: nu mai folosete explicit interfeele de programare pentru servicii).
8.2. Platforma Java 2 Enterprise Edition (J2EE)(1)

O direcie a evoluiei platformei Java este - JNDI (Java Naming and Directory
cea a suportului pentru dezvoltarea Interface) permite accesul uniform la diverse
aplicaiilor complexe din ntreprinderi. servicii de nume (DNS, LDAP, COS-
Caracteristici (pe lng complexitate): CORBA)
- Organizare multistrat: cel puin client, server - Servlets i JSP folosite n servere Web
(logica de ntreprindere), baz de date pentru generarea dinamic de pagini HTML
i gestionarea sesiunilor realizate prin
-Necesitatea consistenei permanente a datelor
(tranzacii) browsere Web

- Asigurarea securitii datelor - JMS (Java Messaging Service) ofer suport


pentru aplicaii asincrone prin diverse
- Scalabilitatea sisteme de mesaje. Este integrat cu EJB
bazate pe mesaje

Platforma Java EE are o serie de interfee


de programare (API) specifice. Cteva - EJB definete un model bazat pe
dintre acestea: componente reutilizabile pentru partea de
server (business logic) a aplicaiilor,
- RMI creeaz baza pentru aplicaiile implementnd automat o serie de servicii i
distribuite, prin interfeele la distan(J2SE) asigurnd portabilitatea ntre diverse
servere de aplicaii. Exist EJB sesiune,
- JDBC- asigur acces portabil la bazele
EJB bazate pe mesaje i entiti de
de date relaionale i gestionarea
persisten
conexiunilor cu BD (J2SE)
8.2. Platforma Java 2 Enterprise Edition (J2EE) (2)

(din Java EE6 Tutorial)


8.2. Platforma Java 2 Enterprise Edition (J2EE) (3)

(din Java EE5 Tutorial)


8.2. Platforma Java 2 Enterprise Edition (J2EE) (4)
- JAXB (Java Architecture for XML Binding)
- Java Mail este folosit pentru a trimite furnizeaz un mod convenabil de a lega o
notificri prin email. Are 2 pri: una este schem XML cu reprezentarea n Java. Se
cea folosit de componentele aplicaiei poate folosi independent sau n combinaie
pentru a trimite mesaje email, cealalt este cu JAX-WS.
un furnizor de servicii care permite
trimiterea mesajelor - JAX-WS definete API pe partea de client
pentru a accesa servicii Web, ca i tehnici
- JAF (Java Beans Activation Framework) este pentru implementarea punctelor de acces la
utilizat de Java Mail pentru a determina tipul aceste servicii.
datelor din mesaje, a ncapsula accesul la
date, a descoperi operaiile disponibile - JAXR (Java API for XML Registries) permite
asupra lor i a crea componentele accesul la directoarele(registrele) de uz
JavaBean corespunztoare pentru aceste general din Internet. Ofer suport pentru
operaii standardele ebXML Registry and
Repository i pentru specificaiile UDDI .
- JTA (Java Transactions API) permite Folosind JAXR, dezvoltatorii au acces la
demarcarea i controlul tranzaciilor n diverse tehnologii de directoare cu o singur
cadrul aplicaiilor. interfa

- Java Persistence API este soluia Java .


pentru asigurarea persistenei. Folosete o
coresponden obiectual-relaional pentru
a realiza legtura ntre modelul obiectual i
BD relaionale. Are 3 pri: API propriu-zis,
limbajul de interogare i metadatele pentru
coresponden
8.3. Cadrul general al EJB
8.3.1. Roluri
- Arhitectura EJB permite realizarea unor
3. Instalatorul (Deployer) - pornete de la
aplicaii distribuite prin combinarea de
componente dezvoltate independent, de produsele furnizate de rolurile precedente i
diferii programatori. Componentele se instaleaz componentele ntr-o ambian
dezvolt o singur dat i pot fi utilizate operaional specific. Rezolv
(instalate) de cte ori e necesar. dependenele externe declarate de furnizorii
de componente.
- Specificarea EJB (momentan 3.1) definete
i contractele care permit ca prin 4. Furnizorul serverului EJB este un
instrumentele oferite de companii diverse s specialist n domeniul gestionrii
se poat dezvolta i instala componente tranzaciilor distribuite i a altor servicii de
care interopereaz corect la execuie. sistem de nivel mai sczut (productor de
SO, SGBD, middleware)
- n cadrul oferit de EJB se deosebesc 7 roluri
pe parcursul ciclului de via al unei 5. Furnizorul containerului EJB este
aplicaii: responsabil pentru punerea la dispoziie a
instrumentelor de instalare necesare i a
1. Furnizorul de EJB responsabil pentru suportului de execuie pentru EJB.
producerea de clase Java care
implementeaz logica de business i pentru 6. Furnizorul de persisten este expert n
definirea interfeelor i a descriptorului de corespondena obiectual-relaional,
instalare. Este de regul un bun cunosctor procesarea interogrilor i utilizarea cache.
al domeniului de aplicaie.
7. Administratorul de sistem responsabil
2. Asamblorul de aplicaii combin mai pentru configurarea i administrarea
multe componente n uniti de instalare infrastructurii de calcul i de reea n care se
mai mari, cu modificri n descriptorii de includ serverul i containerul EJB.
instalare. Este expert n domeniul aplicaiei
8.3.2. Tipuri de EJB
Arhitectura EJB definete urmtoarele tipuri de Componentele dirijate de mesaje:
componente:
- sesiune - se execut la primirea unui mesaj de la un
- dirijate de mesaje client;
- entitate
- sunt apelate asincron;
Caracteristicile unei componente (obiect)
sesiune: - pot fi tranzacionale;

- se execut n contul unui singur client; - pot actualiza date partajate dintr-o BD;

- poate avea comportare tranzacional; - nu reprezint direct date din BD;

- actualizeaz date partajate dintr-o BD; - au durat de via relativ scurt;

- nu reprezint direct date din BD; - nu au stare;

- are durat de via relativ redus; - dispar la o cdere a containerului de EJB,


care trebuie s le restabileasc pentru a
- dispare la o cdere a containerului EJB, continua operaiile.
clientul trebuie s stabileasc o nou
component sesiune pentru a continua. Componentele(obiectele) entitate:

ntr-un container EJB se pot executa concurent - fac parte din modelul de domeniu,
mai multe componente sesiune furnizeaz o perspectiv obiectual asupra
BD;
Componentele sesiune pot fi: cu stare, fr
stare sau singleton - pot avea durat de via lung (ca i BD);

- entitatea i cheia ei primar supravieuiesc


unei cderi a containerului EJB.
8.4. Componente sesiune
8.4.1. Perspectiva clientului asupra EJB sesiune
Pentru un client, o component sesiune este un Un serviciu Web poate fi client numai pentru
obiect nepersistent care implementeaz obiecte sesiune fr stare sau singleton.
parte din logica de business i ruleaz pe Perspectiva unui astfel de client este descris
server ntr-un document WSDL

Clientul nu interacioneaz direct cu obiectul Este posibil ca un obiect sesiune s ofere mai
sesiune, ci prin ceea ce se numete multe perspective client, dar de regul ofer
perspectiva clientului a acelui obiect una singur

Un client al unui obiect sesiune poate fi local, la Considerente pentru alegerea unei perspective:
distan sau un serviciu web
- interfeele la distan permit o cuplare slab
Un client la distan poate fi o alt EJB din ntre client i component, dar sunt potenial
acelai sau alt container EJB, sau un costisitoare
program Java arbitrar: aplicaie, applet,
servlet - apelurile la distan implic transmiterea prin
valoare, ceea ce asigur o izolare ntre client
Interfaa folosit de un client la distan este i component;
implementat de container ca interfa de
business la distan, iar din perspectiva - apelurile locale implic transmitere prin
clientului componenta este independent de referin, deci e posibil partajarea unui
locaie document de mari dimensiuni;

Clienii locali trebuie s se afle n acelai - colocarea componentei i clientului


container cu componenta, deci perspectiva restricioneaz distribuia componentei
clientului nu este independent de locaie
- la apeluri locale se pot folosi date cu
granularitate mai fin.
8.4.2. Componente sesiune fr stare(1)
Coninutul unei EJB:

- clasa componentei, care implementeaz


metodele de business i posibile metode cu
apel invers legate de ciclul de via al EJB;

- interfeele de business, care specific


metodele implementate de clas; nu sunt
necesare dac EJB expune doar vedere
local sau fr interfa

- clase auxiliare utilizate de clasa


componentei: clase excepii, clase utilitare
Structura unui fiier JAR pentru
Aceste elemente se mpacheteaz n fiiere EJB
JAR cu structura din figur

Ciclul de via al unei componente sesiune fr


stare este ilustrat n a doua figur.

Containerul EJB creeaz de obicei o rezerv


(pool) de componente fr stare i execut
injeciile de dependen solicitate de clieni
i apeleaz metoda adnotat
@PostConstruct. La sfritul ciclului de Ciclul de via al unei componente
via containerul EJB apeleaz metoda sesiune fr stare
adnotat @PreDestroy .
(din Java EE6 Tutorial)
8.4.2. Componente sesiune fr stare(2)
Pentru utilizarea unei aplicaii cu EJB, aceasta Exemplu: convertor de valute
trebuie s fie instalat (deployed) ntr-un
server de aplicaii. Se folosete ca exemplu package com.sun.tutorial.javaee.ejb;
serverul Glassfish oferit de Sun(Oracle) import java.math.BigDecimal;

Serverul se instaleaz ntr-un director, care va import javax.ejb.*;


apare i ca director gazd pentru Java EE.
Fiierul javaee.jar trebuie s apar n @Stateless
public class ConverterBean {
CLASSPATH pentru a fi accesat. private BigDecimal yenRate = ...
private BigDecimal euroRate = ...
n cazul Glassfish exist cteva utilitare pentru
administrarea serverului. Pornirea acestuia public BigDecimal
se poate face cu: dollarToYen(BigDecimal dollars) {
BigDecimal
result=dollars.multiply(yenRate); return
asadmin start-domain domain1 result.setScale(2, BigDecimal.ROUND_UP);
iar oprirea cu: }

asadmin stop-domain domain1 public BigDecimal yenToEuro(BigDecimal


yen) {BigDecimal result =
Etapele realizrii unei aplicaii sunt: yen.multiply(euroRate); return
result.setScale(2, BigDecimal.ROUND_UP);
- se creeaz componenta EJB
}}
- se creeaz clientul (web sau aplicaie Java) De remarcat adnotarea @Stateless la clasa
- se instaleaz componenta EJB n server componentei. Se folosete perspectiva no-
interface
- se ruleaz clientul (din browser sau direct).
8.4.3. Componente sesiune cu stare(1)
Ciclul de via al unei componente sesiune cu
stare este mai complex deoarece aceasta
poate fi pasivat i reactivat (v. Figura).
Doar una din metodele din figur poate fi
apelat de client (Remove), celelalte sunt
apelate doar de container

Starea unei asemenea componente (numit i


stare conversaional) se menine pe durata
unei sesiuni client-component. Dac (din Java EE6 Tutorial)
clientul distruge componenta (Remove),
starea dispare. package com.sun.tutorial.javaee.ejb;
Exemplu: crucior de cumprturi pentru o import java.util.List;
librrie online, cu componenta accesibil de import javax.ejb.Remote;
la distan
@Remote
Pentru accesul de la distan este obligatorie o public interface Cart {
interfa de business la distan (remote public void initialize(String person)
business inteface), deci exist clasa throws BookException;
public void initialize(String person,
CartBean, dar i interfaa Cart. Se
String id)throws BookException;
folosesc 2 clase auxiliare, BookException public void addBook(String title);
i IdVerifier. public void removeBook(String title)
throws BookException;
De remarcat c interfaa apare ca o interfa public List<String> getContents();
simpl, dar cu adnotarea @Remote: public void remove();
}
8.4.3. Componente sesiune cu stare(2)
Clasa CartBean implementeaz metodele Clientul este realizat n clasa CartClient, cu
interfeei de business, dar poate lansare din linia de comand. Clasa obine
implementa i alte metode (@Remove) sau o referin la un obiect CartBean prin
metodele pentru apeluri inverse, adnotate injecie de referin:
corespunztor: @PostConstruct,
@PreDestroy, etc. @EJB
private static Cart cart;
Clasa CartBean trebuie adnotat cu
@Stateful Cu aceasta apelurile la metodele de business
din CartBean apar astfel:
Semntura unei metode de business trebuie s
respecte urmtoarele: cart.addBook("Bel Canto");
...
- s aib nume care nu ncepe cu ejb; List<String> bookList =
cart.getContents();
- modificatorul de acces s fie public;
Compilarea i instalarea unei aplicaii se pot
- dac este permis acces de la distan, face fie ntr-un IDE (ex. NetBeans), fie din
argumentele i tipul returnat trebuie s fie linie de comand, de regul cu ajutorul
legale pentru RMI; utilitarului ant.
- nu pot apare modificatorii static i final.

Clasele auxiliare pot fi puse n acelai fiier


JAR cu clasa CartBean sau ntr-un fiier
WAR sau EAR.
8.5. Componente dirijate de mesaje (1)
Componentele dirijate de mesaje sunt
consumatori de mesaje dintr-o coad sau
de la un abonament de durat. Mesajele pot
fi trimise de orice component Java sau
chiar de aplicaii care nu folosesc
tehnologie Java

Componenta conine o metod onMessage,


apelat automat cnd sosete un mesaj.
Poate conine metode auxiliare pentru
prelucrarea mesajelor

Clasa component folosete adnotarea


@MessageDriven i trebuie s
implementeze interfaa
javax.jms.MessageListener

Containerul EJB este responsabil pentru


crearea unei astfel de componente i
nregistrarea ei ca receptor de evenimente

Ciclul de via al unei componente dirijate de


mesaje este redat n figur

Aplicaie simpl: un client trimite mesaje ntr-o


coad de unde sunt preluate de o
component dirijat de mesaje (din Java EE6 Tutorial)
8.5. Componente dirijate de mesaje (2)
Clientul SimpleMessageClient ncepe cu Componenta dirijat de mesaje conine o
injectarea fabricii de conexiuni i a adnotare pentru a specifica numele JDNI al
resurselor cozii: cozii din care consum mesaje:

@Resource(mappedName= @MessageDriven(mappedName="jms/Queue",... )
"jms/ConnectionFactory")
private static ConnectionFactory Clasa SimpleMessageBean trebuie s
connectionFactory; implementeze interfaa MessageListener
@Resource(mappedName="jms/Queue) care conine metoda onMessage. Aceasta
private static Queue queue;
este apelat de containerul EJB cnd coada
Se creeaz apoi o conexiune, o sesiune, un conine un mesaj. Metoda are un singur
productor de mesaje i un mesaj: argument de tip Message, mesajul primit, iar
valoare returnat trebuie s fie de tip void.
connection =
connectionFactory.createConnection(); Partea principal din corpul metodei este:
session =
connection.createSession(false, if (inMessage instanceof TextMessage)
Session.AUTO_ACKNOWLEDGE); { msg = (TextMessage) inMessage;
messageProducer = logger.info("MESSAGE BEAN: Message
session.createProducer(queue); received: " + msg.getText()); }
message = session.createTextMessage();
else {logger.warning("Message of wrong
Se trimit apoi mesaje, ntr-un ciclu: type: " +
inMessage.getClass().getName());
message.setText("This is " + (i + 1)); }

messageProducer.send(message); logger este de tip Logger, clas din


java.util.logging, care permite
nregistrarea mesajelor ntr-un jurnal
8.6. Persistena.
8.6.1 Obiecte entitate
O entitate reprezint o tabel dintr-o baz de Direcia unei relaii (partea proprietar)
date relaional, fiecare exemplar stabilete modul cum se face actualizarea
corespunznd unei linii din tabel. n baza de date. O relaie unidirecional
are doar o parte proprietar. La relaiile
Clasa entitate trebuie s satisfac urmtoarele bidirecionale exist partea proprietar i
cerine: partea invers
- s fie adnotat cu
javax.persistence.Entity Interogrile navigheaz frecvent prin relaii,
- s aib un constructor no-arg public sau direcia unei relaii stabilind dac navigarea
protected poate avea loc. De exemplu, o interogare
s nu fie declarat final i s nu aib poate naviga de la LineItem la Product, dar
metode sau cmpuri persistente final nu invers (LineItem reprezint o linie dintr-
- dac se transmite prin valoare ca obiect un Order).
detaat (de ex. prin interfaa la distan) s
implementeze Serializable Sunt permise motenirea, asocierile polimorfice
- variabilele de exemplar persistente se i interogrile polimorfice. Clasele entitate
declar private, protected sau package pot fi abstracte sau concrete.

Fiecare entitate are un identificator de obiect


unic, cheia primar (simpl sau compus)

Multiplicitile n relaiile ntre entiti pot fi: one-


to-one, one-to-many, many-to-one, many-
to-many
8.6.2. Gestionarea entitilor(1)
Entitile sunt gestionate de managerul de Un manager gestionat de container se obine
entiti, reprezentat de un exemplar al prin injectarea lui ntr-o component a
javax.persistence.EntityManager, asociat aplicaiei:
cu un context de persisten: setul de
entiti dintr-un depozit (data store) @PersistenceContext EntityManager em;

Interfaa EntityManager definete metode Aplicaiile creeaz manageri de entiti folosind


pentru crearea i tergerea entitilor, metoda createEntityManager a clasei
javax.persistence.EntityManagerFactory:
cutarea entitilor dup cheia primar i
rularea unor interogri @PersistenceUnit EntityManagerFactory emf;

Exist manageri de entiti gestionai de EntityManager em =


container sau gestionai de aplicaii emf.createEntityManager();

Pentru cei gestionai de container contextul de Pentru a cuta o entitate dup cheia primar
persisten este propagat automat de se folosete metoda EntityManager.find:
container la toate componentele care
@PersistenceContextEntityManagerem;
folosesc managerul ntr-o singur tranzacie publicvoidenterOrder(intcustID,OrdernewOrder)
{
Pentru cei gestionai de aplicaii, contextul de Customercust=em.find(Customer.class,custID);
persisten nu este propagat, iar ciclul de cust.getOrders().add(newOrder);
via al managerului este gestionat de newOrder.setCustomer(cust);
}
aplicaie
8.6.2. Gestionarea entitilor(2)
Gestionarea ciclului de via a unei entiti Datele unei asemenea entiti sunt memorate n
baza de date cnd tranzacia asociat cu
Un exemplar entitate poate fi n una din operaiapersist este terminat
urmtoarele stri: nou, gestionat, detaat,
ters Dac o entitate este deja gestionat, operaia
persisteste ignorat, dar poate avea efecte
Un exemplar nou nu are identitate persistent i n cascad pentru entitile nrudite
nu este nc asociat cu un context de
persisten Operaia persist pe o entitate tears o face s
devin gestionat, iar pe o entitate detaat
Entitile gestionate au identitate persistent i produceIllegalArgumentException sau face
sunt asociate cu un context de persisten ca tranzacia s eueze
Entitile detaate au identitate persistent i nu @PersistenceContextEntityManagerem;
sunt momentan asociate cu un context de ...
persisten publicLineItemcreateLineItem(Order
order,Productproduct,intquantity){
Entitile terse au identitate persistent, sunt LineItemli=newLineItem(order,
order.getLineItems().add(li);
asociate cu un context de persisten i sunt em.persist(li);
planificate pentru tergerea din baza de date returnli;
}
Entitile noi devin gestionate i persistente fie
prin apelarea metodeipersist, fie printr-o Exemplu de adnotare pentru relaie:
operaie persistn cascad apelat din @OneToMany(cascade=ALL,mappedBy="order")
entiti nrudite care au setate elementele publicCollection<LineItem>getLineItems(){
cascade=PERSIST saucascade=ALL n returnlineItems;
adnotarea de relaie }
8.6.2. Gestionarea entitilor(3)
Pentru tergerea entitilor se apeleaz metoda Starea entitilor persistente este sincronizat cu
remove, care poate avea i efect n cascad. baza de date cnd tranzacia cu care sunt
Dac metoda e apelat pe o entitate nou asociat este terminat cu succes (comis).
este ignorat, dar poate avea efect n Dac o entitate gestionat este ntr-o relaie
cascad . Apelul pe entiti detaate se bidirecional cu alt entitate gestionat, date
aseamn cu apelul lui persist, iar apelul pe vor deveni persistente pe baza prii de
entiti deja terse este ignorat. Datele proprietar din relaie.
entitii vor fi terse din baza de date cnd
se termin tranzacia sau printr-o operaie Se poate fora sincronizarea prin apelarea
flush metodeiflush, care are efect n cascad.
Dacflush e apelat pe o entitate tears,
n exemplul: datele entitii se terg din baza de date
publicvoidremoveOrder(IntegerorderId){
try{
Crearea interogrilor
Orderorder=em.find(Order.class,orderId);
em.remove(order); Pentru interogarea bazei de date prin limbajul de
}... interogare al Java Persistence se folosesc
metodele EntityManager.createQueryi
toate entitile LineItem asociate cu comanda vor fi EntityManager.createNamedQuery.
terse pentru c Order.getLineItems are setat n
adnotarea de relaie cascade=ALL Metoda createQuery se folosete pentru a crea
interogri dinamice, definite direct n codul
(logica de business) din aplicaie

Metoda createNamedQuery creeaz interogri


statice, definite ca metadate folosind
adnotareajavax.persistence.NamedQuery
8.6.2. Gestionarea entitilor(4)
Exemplu de interogare dinamic: Uniti de persisten
publicListfindWithName(Stringname){ O unitate de persisten definete mulimea
returnem.createQuery(
"SELECTcFROMCustomercWHEREc.name tuturor claselor entitate care sunt gestionate
LIKE:custName") de exemplare EntityManager. Aceast
.setParameter("custName",name) mulime de clase reprezint datele dintr-o
.setMaxResults(10).getResultList(); singur baz de date (data store)
}
Unitile de persisten sunt definite n fiierul
Exemplu de interogare static: de configurarepersistence.xml. Fiierul
JAR sau directorul al crui director METAINF
@NamedQuery( care coninepersistence.xml este
name="findAllCustomersWithName", rdcina unitii de persisten
query="SELECTcFROMCustomercWHERE
c.nameLIKE:custName" Exemplu de fiier:
) <persistence>
<persistenceunitname="OrderManagement">
Exemplu de utilizare pentru@NamedQuery: <description>Thisunitmanagesordersand
customers.Itdoesnotrelyonany
@PersistenceContext Vendorspecificfeaturesandcan
publicEntityManagerem; thereforebedeployedtoany
... persistenceprovider.
customers=em.createNamedQuery( </description>
"findAllCustomersWithName") <jtadatasource>jdbc/MyOrderDB
.setParameter("custName","Smith") </jtadatasource>
.getResultList(); <jarfile>MyOrderApp.jar</jarfile>
<class>com.widgets.Order</class>
<class>com.widgets.Customer</class>
</persistenceunit>
</persistence>
8.7 Tranzacii
Dou tipuri de tranzacii: gestionate de container n tranzaciile gestionate de componente,
i gestionate de componente demarcarea tranzaciilor se face n codul
componentei. Se elimin o limitare a
n tranzaciile gestionate de container, acesta
tranzaciilor gestionate de container, n care
fixeaz limitele unei tranzacii. Se pot folosi
o metod fie este asociat cu o singur
cu oricare din tipurile de componente. Codul
tranzacie, fie cu niciuna.
componentelor nu conine explicit marcaje
pentru delimitarea tranzaciilor La codificare trebuie decis dac se folosesc
tranzacii JDBC sau tranzacii JTA
La proiectarea componentelor se pot specifica
metodele asociate cu tranzacii, prin setarea O tranzacie JTA este controlat de managerul
atributelor de tranzacii de tranzacii al Java EE.
Posibile valori pentru atributele de tranzacii: Pe lng controlul mai fin, tranzaciile JTA
Required (implicit), RequiredNew,Mandatory, permit i actualizri n baze de date multiple
NotSupported,Supports,Never
de la productori diferii
Atributele de tranzacie se specific prin
O limitare a managerului de tranzacii: nu
adnotri:
permite tranzacii ncuibate
@TransactionAttribute(NOT_SUPPORTED)
Pentru a demarca o tranzacie JTA se folosesc
Dac apare o excepie sistem, tranzacia este metodelebegin,commit i rollback din
implicit rulat napoi (rolled back). O metod interfaa
poate cere explicit acest lucru apelnd javax.transaction.UserTransaction
metoda setRollbackOnly a interfeei
EJBContext (util la excepiile definite de
aplicaie)

S-ar putea să vă placă și