J2EE
Antonio Cisternino
Java Beans
I Java Beans sono un esempio di realizzazione
di un sistema a componenti in Java
I componenti possono


adottare convenzioni sintattiche sui nomi per esporre
la propria interfaccia
Esporre l’interfaccia attraverso oggetti che
implementano interfacce
Nel primo caso il runtime userà l’introspection
altrimenti farà uso dell’invocazione di metodi di
interfacce conosciute
La classe di un Bean
Un Java Bean deve ereditare da
java.awt.Component se ha bisogno di
essere visualizzato
Altrimenti qualsiasi classe è un Bean
Gli elementi principali di un Bean sono:



Properties
Methods
Events
Properties
Le proprietà sono metodi che seguono
una convenzione particolare:


void setPropertyName(PropertyType val)
PropertyType getPropertyName()
Sono possibili anche indexed properties:




void setter(int index, PropertyType value);
PropertyType getter(int index);
void setter(PropertyType values[]);
PropertyType[] getter();
Methods and Events
I metodi di un bean sono normali metodi
Java
Un componente può generare eventi
Si fa uso del delegation event model
Le interfacce sono alla base di questo
modello:


Un Listener implementa un’interfaccia
Chi genera un evento invoca tutti i listener in
ascolto
Event model
Coding pattern
L’implementazione dell’event model è basato su
convenzioni
Un Listener è una classe che implementa
un’interfaccia che deriva da EventListener
Gli eventi collegati possono essere inclusi in
un’unica interfaccia
Chi lancia gli eventi implementa addXXXListener
e removeXXXListener
Un evento che deriva da EventObject fornisce
informazioni sull’evento
Bean Persistence
Un componente normalmente può essere
utilizzato in un designer
A design time il componente espone
alcune proprietà
Per persistere il suo stato:


Serializzazione/Externalization
Salvare e ripristinare le proprietà (non sempre
basta!)
Creare un Bean
Se si sa che un Bean non è stato
preinizializzato si può usare new
Altrimenti si ricorre al ClassLoader e alla
Reflection (cercando in
it.unipi.di.MioBean.ser:
ClassLoader cl =
this.getClass().getClassLoader();
ProvaBean w = (ProvaBean)
Beans.instantiate(cl, “it.unipi.di.MioBean”);
Packaging
I Beans possono essere impacchettati in
file jar
Nel manifesto si indicano quali classi sono
Beans e con che caratteristiche
Si usa un insieme di coppie nome/valore:
Name: argle/Bargle.class
Java-Bean: True
Name argle/BargleBeanInfo.class
Design-Time-Only: True
Esempio di Bean
public class HWBean extends Canvas {
private String s = "Hello World";
public String getText() {
return s;
}
public void paint(Graphics g) {
g.drawString(s, 0, 15);
}
}
Enterprise Java Beans
La specifica Enterprise JavaBeans (EJB)
definisce un’architettura per lo sviluppo e il
deployment di “transactional, distributed
object applications-based, server-side
software components”
Organizzazioni possono comprare o
sviluppare componenti focalizzandosi sulla
business logic piuttosto che sugli aspetti di
concorrenza e distribuzione
Goin’ Enterprise
EJB costruisce sulla
specifica Java Beans
Un EJBean è sempre
contenuto in un EJB
Container
I container
amministrano i
componenti in modo
da ottimizzare l’uso di
risorse (es. pooling)
EJB Container
Un contenitore EJB è responsabile per
mediare l’accesso di un EJBean alle
risorse
Ad esempio: un altro bean, o una
connessione JDBC
L’interazione tra l’EJBean e il contenitore:



Callback methods
EJBContext
Java Naming and Directory Interface (JNDI)
Callback Methods
Ogni EJBean implementa un’interfaccia
derivata da EnterpriseBean
Queste interfacce definiscono metodi che
possono essere invocati dal container
Ad esempio l’interfaccia EntityBean (sel.):




ejbLoad()
ejbStore()
ejbActivate()
ejbPassivate()
EJBContext
È un’interfaccia che espone i metodi per
interagire col contenitore:







getCallerPrincipal()
getEJBHome()
getEJBLocalHome()
getRollbackOnly()
getUserTransaction()
isCallerInRole(java.lang.String roleName)
setRollbackOnly()
JNDI
Offre un’interfaccia standard a sistemi di
naming, come ad esempio LDAP
Ogni EJBean ha automaticamente accesso un
sistema di naming chiamato Environment
Naming Context (ENC).
ENC è amministrato dal container e accesso dai
bean JNDI
JNDI ENC consente ad un bean l’accesso a
risorse come connessioni JDBC, altri EJBeans,
e proprietà specifiche del bean
Accedere un Bean
Ogni EJBean è composto da tre
componenti:



Classe di implementazione
Un’interfaccia Home (che rappresenti i metodi
per la gestione del life cycle dell’oggetto)
Un’interfaccia Remote (che esponga i metodi
che implementano la business logic)
Tipi di enterprise bean
Entity Bean: sono bean solitamente
utilizzati per accedere ai dati memorizzati
in un database
Session Bean: rappresentano processi o
agiscono come agenti che compiono
qualche attività
Un’applicazione EJB è costituita da un
insieme di entity o session beans
Persistenza
Spesso i bean devono essere salvati e
ripristinati
Esistono due tipi di persistenza:


Container-Managed
Bean-Managed
La prima si basa sulla serializzazione
Mentre la seconda è controllata dal Bean
(e quindi è più efficiente!)
JBoss
È una collezione di progetti:






JBoss Application Server
Javassist (bytecode generation)
AOP
Nukes/JBoss (Content Management)
JBoss-IDE (Integration with Eclipse)
Hibernate (Oggetti mappati su tabelle
relazionali)
JBoss Application Server
Fino alla versione 3 è un’implementazione
open della piattaforma J2EE
La nuova release del sistema propone un
modello alternativo a quello proposto da
Sun
Oltre a EJB incorpora Tomcat e le servlet
in una lista quasi infinita di buzzword
Hibernate
Mappare oggetti su un database può
essere molto utile: nel mondo
programmativo si leggono oggetti che
corrispondono a righe di tabelle
L’approccio? Dei file XML indicano come
mappare i field di una classe sulle colonne
di una tabella relazionale
Sommario
Il sistema dei tipi in Java
Reflection in Java
Il modello di caricamento dinamico
Open Java patterns
JDBC
JavaBeans
EJB
JBoss, Hibernate
Conclusioni
Conclusioni
Java ha introdotto elementi come il
caricamento dinamico dei tipi e la
reflection
Questi meccanismi, uniti ad un ambiente
con VM type-driven ha favorito l’affermarsi
di pattern di programmazione prima più
complessi
EJB non fa altro che astrarre coding
patterns in un framework a oggetti
Scarica

J2EE