Documente Academic
Documente Profesional
Documente Cultură
PRC8 PDF
PRC8 PDF
8.1. Componente
8.7. Tranzacii
8.1. Componente
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
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
- se execut n contul unui singur client; - pot actualiza date partajate dintr-o BD;
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);
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;
@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)); }
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