Introduction aux Enterprise Java Beans
Introduction aux Enterprise Java Beans
Didier DONSEZ
Université Joseph Fourier (Grenoble 1)
IMA – LSR/ADELE
'LGLHU'RQVH]#LPDJIU'LGLHU'RQVH]#LHHHRUJ
Plan
■ Rappels
• Programmation par Composant
• Architecture multi-tiers
■ Les EJB
■ Un exemple
Rappel
La programmation par composant
)RXUQLW
8WLOLVH
■ Propriétés configurables du composant F F
■ Contraintes techniques (QoS) D &RPSRVDQW D
V V
• middleware : placement, sécurité, transaction
\ \
• internes : cycle de vie, persistance
Q Q
• implantation : OS, bibliothèques, version F F
&RQWUDLQWHV
WHFKQLTXHV
Les modèles de composants :
conteneurs et structures d’accueil
■ Conteneur
• encapsulation d’un composant (et ses composantes)
• prise en charge (masque) les services systèmes
• nommage, sécurité, transaction, persistance ...
• prise en charge partielle des connecteurs
• invocations et événements
• techniquement par interposition (ou délégation)
■ Structures d’accueil
• espace d’exécution des conteneurs et des composants
• médiateur entre les conteneurs et les services systèmes
• des + comme le téléchargement de code (navigateur)
Les modèles de composants :
conteneurs et structures d’accueil
&RQQHFWHXU &RPSRVDQW
V\QFKURQH
8WLOLVH &RQWHQHXU
&OLHQW &RPSRVDQW
&RQQHFWHXU
DV\QFKURQH &RPSRVDQW
&RQWHQHXU &RQWHQHXU
6WUXFWXUHG¶DFFXHLO 6WUXFWXUHG¶DFFXHLO
0LGGOHZDUH 6HUYLFHV
Les modèles de composants :
de l’installation à l’introspection
■ Remarque
• rien à voir avec les JavaBean
• qui sont des composants côté client
Enterprise JavaBeans
■ EJB spécifications
GpILQLWLRQG¶XQHDUFKLWHFWXUHpour construire une application
en Java dont la partie serveur est construite à à l’ aide de
composants appelé Entreprise Beans (EB)
• Architecture = ensemble d’ interfaces
■ Caractéristiques principales des EB
• « écrit une fois, s’ exécute partout »
• composants « serveurs » spécialisés écrits en Java
• c.f. objets métiers de CORBA
■ EJB est la partie centrale de la plate-forme
Plate-forme Enterprise Java
&RPSRVDQWV -DYDEHDQV
50,-503,,23
&RPSRVDQWV (QWHUSULVH-DYD%HDQV
3ODWHIRUPH (-%
&RQWHQHXU6HUYHXU
-06 -1',
-7$ -'%&
&OLHQW'&20 '&20
ActiveX
EJB
Caractéristiques principales
/¶LQVWDOODWHXU 'pSORLHPHQW
HW H[pFXWLRQ
)LFKLHUHMEMDUHDU
EJB
Le contrat coté client
■ Localiser le bean
• utilisation de JNDI
■ Utiliser le bean
• utilisation de l’ interface standard fournie par l’ EB provider
• +RPH Interface
méthodes liées à la gestion du bean : FUHDWH, UHPRYH, ILQGHU, ...)
• 5HPRWH Interface (méthodes de l’ application)
Le container implémente le mécanisme de
délégation permettant de “faire suivre” l’appel au
bean
• le client ne communique pas directement avec le bean mais avec le
container
EJB
Le contrat du “conteneur”
• Remarque
• les stateful SB peuvent être inclus dans une transaction
Entity beans
• Remarque
• même principe que la mémoire virtuelle des SE
Gestion des Ressources
Le mécanisme d ’Activation/Passivation
Gestion des Ressources
Le mécanisme d ’Activation/Passivation
Cycle de Vie d ’un Entity Bean
Persistance (Entity Bean)
TX_REQUIRED None T2
T1 T1
TX_REQUIRES_NEW None T2
T1 T2
TX_BEAN_MANAGED None
T1
[Monson, p231]
Transaction
Exemple
Interface [Link]
instance bean
Client 2
■ Plusieurs problèmes
• Lecture Sale (Dirty Read)
• lecture des modifications d ’ une autre transaction qui avortera
• Lecture non répétable (Non repeatable read)
• la transaction lit successivement deux valeurs différentes d ’ une même donnée
• Lecture Fantôme (Phantom Read)
• une transaction ne lit pas des données insérées précédenment
Gestion de la Concurrence
B1 B2 B3
JTM
Serveur EJB Cas 1
B1 B2 B3
JTM
Serveur EJB 1 Serveur EJB 2 Serveur EJB 3 Cas 2
B1 B2 B3 JTM
Serveur EJB 1 Serveur EJB 2 Serveur EJB 3 Cas 3
B1 B2 B3
JTM JTM JTM
Serveur EJB 1 Serveur EJB 2 Serveur EJB 3 Cas 4
Sécurité
Client
distant (-%
&RPSWH
EJB object stub
RMI ext EJB Object %DQFDLUH
-'%&;$
-70
Oracle ou
Espace d’ adressage du client Espace d’ adressage du conteneur Instant DB
SXEOLF$FFRXQW3.LQWEUDQFKQRLQWDFFQR^
WKLVEUDQFKQR EUDQFKQRWKLVDFFQR DFFQR`
SXEOLF$FFRXQW3.^`
SXEOLF6WULQJWR6WULQJ^
UHWXUQ6WULQJYDOXH2IEUDQFKQR6WULQJYDOXH2IDFFQR`
`
$FFRXQWMDYD
l ’interface distance (remote)
• donne les prototypes des méthodes “ business”
• doit étendre l’ interface [Link]
SDFNDJH%DQN
SXEOLFLQWHUIDFH$FFRXQWH[WHQGV (-%2EMHFW ^
SXEOLFGRXEOHJHW%DODQFHWKURZV5HPRWH([FHSWLRQ
SXEOLFYRLGVHW%DODQFHGRXEOHG
WKURZV5HPRWH([FHSWLRQ$FFRXQW([FHSWLRQ
SXEOLF6WULQJJHW&XVWRPHUWKURZV5HPRWH([FHSWLRQ
SXEOLFYRLGFUHGLWGRXEOHG
WKURZV5HPRWH([FHSWLRQ$FFRXQW([FHSWLRQ
SXEOLFYRLGGHELWGRXEOHG
WKURZV5HPRWH([FHSWLRQ$FFRXQW([FHSWLRQ
`
$FFRXQWMDYD
l ’interface distance (remote)
■ Remarques
• les méthodes setX et getX correspondent à un attribut X
• les paramêtres de méthode et les valeurs de retour doivent être de type
primitif, serialisable ou étendant/implémentant [Link]
• Exceptions
• les méthodes doivent comporter au minimum RemoteException
exception “ système” : SQL, Naming, ...
• des exceptions applicatives peuvent être ajoutés
SDFNDJH%DQN
SXEOLFFODVV$FFRXQW([FHSWLRQ H[WHQGVMDYDODQJ([FHSWLRQ^
SXEOLF$FFRXQW3.SN
SXEOLF$FFRXQW([FHSWLRQ^VXSHU`
SXEOLF$FFRXQW([FHSWLRQ$FFRXQW3. SN^VXSHUWKLVSN SN`
SXEOLF$FFRXQW([FHSWLRQPVJ^VXSHUPVJ``
$FFRXQW+RPHMDYD
l ’interface maison (home)
• donne les prototypes des méthodes
de création/suppresion et de recherche
équivalent aux Factory de CORBA
• doit étendre l’ interface [Link]
SDFNDJH%DQN
SXEOLFLQWHUIDFH$FFRXQW+RPHH[WHQGV (-%+RPH ^
SXEOLF$FFRXQWFUHDWH LQWEUDQFKQRLQWDFFQR6WULQJFXVWRPHUGRXEOHEDODQFH
WKURZV5HPRWH([FHSWLRQ&UHDWH([FHSWLRQ
SXEOLF$FFRXQWILQG%\3ULPDU\.H\ $FFRXQW3.SN
WKURZV5HPRWH([FHSWLRQ)LQGHU([FHSWLRQ
SXEOLF(QXPHUDWLRQ ILQG/DUJH$FFRXQWV GRXEOHG
WKURZV5HPRWH([FHSWLRQ)LQGHU([FHSWLRQ
SXEOLF(QXPHUDWLRQ ILQG%\&XVWRPHU 6WULQJVWU
WKURZV5HPRWH([FHSWLRQ)LQGHU([FHSWLRQ
`
$FFRXQW+RPHMDYD
l ’interface maison (home)
■ Remarques sur les méthodes de création
• comporte [Link]
• [Link] est levée s’ il existe déjà une
donnée avec la clé primaire
■ Les attributs
SDFNDJH%DQN
SXEOLFFODVV$FFRXQW%HDQLPSOHPHQWV(QWLW\%HDQ ^
OHVDWWULEXWV
SULYDWHWUDQVLHQW (QWLW\&RQWH[WFW[
SXEOLFLQWEUDQFKQR 3.
SXEOLFLQWDFFQR 3.
SXEOLF6WULQJFXVWRPHU
SXEOLFGRXEOHEDODQFH
$FFRXQW%HDQMDYD
l ’implantation de l ’Entity Bean
■ Les méthodes de cycle de vie
• requises par l’ interface EntityBean
SXEOLFYRLG HME$FWLYDWH^`
SXEOLFYRLG HME'HVWUR\^`
SXEOLFYRLG HME3DVVLYDWH^`
SXEOLFYRLG HME/RDG^`
SXEOLFYRLG HME6WRUH^`
SXEOLFYRLG VHW(QWLW\&RQWH[W (QWLW\&RQWH[WFW[^WKLVFW[ FW[`
SXEOLFYRLG XQVHW(QWLW\&RQWH[W ^WKLVFW[ QXOO`
$FFRXQW%HDQMDYD
l ’implantation de l ’Entity Bean
■ Les méthodes “business”
• correspond à l’ interface distante
SXEOLFGRXEOHJHW%DODQFHWKURZV5HPRWH([FHSWLRQ ^UHWXUQEDODQFH`
SXEOLFYRLGVHW%DODQFHGRXEOHGWKURZV5HPRWH([FHSWLRQ$FFRXQW([FHSWLRQ^
LIGWKURZ QHZ$FFRXQW([FHSWLRQQHZ$FFRXQW3.WKLVEUDQFKQRWKLVDFFQR
EDODQFH G`
SXEOLF6WULQJ JHW&XVWRPHUWKURZV5HPRWH([FHSWLRQ ^UHWXUQFXVWRPHU`
SXEOLFYRLG FUHGLWGRXEOHGWKURZV5HPRWH([FHSWLRQ$FFRXQW([FHSWLRQ^
LIGWKURZ QHZ$FFRXQW([FHSWLRQQHZ$FFRXQW3.WKLVEUDQFKQRWKLVDFFQR
EDODQFH G`
SXEOLFYRLG GHELWGRXEOHGWKURZV5HPRWH([FHSWLRQ$FFRXQW([FHSWLRQ^
LIG EDODQFHG
WKURZ QHZ$FFRXQW([FHSWLRQQHZ$FFRXQW3.WKLVEUDQFKQRWKLVDFFQR
EDODQFH G`
$FFRXQW%HDQMDYD
l ’implantation de l ’Entity Bean
■ Les méthodes de création
SXEOLFYRLGHME&UHDWH LQWEUDQFKQRLQWDFFQR
6WULQJFXVWRPHUGRXEOHEDODQFHWKURZV
&UHDWH([FHSWLRQ ^
LIEDODQFHWKURZ QHZ&UHDWH([FHSWLRQ
WKLVEUDQFKQR EUDQFKQR WKLVDFFQR DFFQR
WKLVFXVWRPHU FXVWRPHU WKLVEDODQFH EDODQFH
`
SXEOLFYRLGHME3RVW&UHDWH LQWEUDQFKQRLQWDFFQR
6WULQJFXVWRPHUGRXEOHEDODQFH^`
`
■ Les méthodes de recherche
• sont générés au déploiement par le container
HME)LQG%\3ULPDU\.H\ HME)LQG/DUJH$FFRXQWV HME)LQG%\&XVWRPHU
$FFRXQW%HDQMDYD
Remarque sur les méthodes de création
Create(...)
newInstance()
Account Account
Client Home setEntityContext() Bean
ejbCreate(...)
Account Ref
Container
Le client (Application Java)
LPSRUWEDQN
SXEOLFFODVV&OLHQW&UHDWH^
SXEOLFVWDWLFYRLGPDLQ6WULQJ>@DUJY^
$FFRXQW+RPHDK$FFRXQWD
WU\^ UHFKHUFKHUO·LQWHUIDFH (-%KRPHLQWHUIDFH
,QLWLDO&RQWH[WFW[ QHZ,QLWLDO&RQWH[W
2EMHFWREMUHI FW[ORRNXS%DQN$FFRXQW
DK $FFRXQW+RPH3RUWDEOH5HPRWH2EMHFWQDUURZREMUHI$FFRXQW+RPHFODVV
`FDWFK1DPLQJ([FHSWLRQ^1DPLQJ([FHSWLRQSULQW6WDFN7UDFH`
FUpHUXQHLQVWDQFHG·HQWLWp
D DKFUHDWHDUJY>@DUJY>@DUJY>@
LQYRTXHUXQHPpWKRGH ´EXVLQHVVµ
6\VWHPHUUSULQWOQDJHW&XVWRPHU
`
Le client (Application Java) EJB1.1
LPSRUWEDQN
SXEOLFFODVV&OLHQW&UHDWH^
SXEOLFVWDWLFYRLGPDLQ6WULQJ>@DUJY^
$FFRXQW+RPHDK$FFRXQWD
WU\^ UHFKHUFKHUO·LQWHUIDFH (-%KRPHLQWHUIDFH
,QLWLDO&RQWH[WFW[ QHZ,QLWLDO&RQWH[W
2EMHFWREMUHI FW[ORRNXSjava:comp/env/ejb/%DQN$FFRXQW
DK $FFRXQW+RPH3RUWDEOH5HPRWH2EMHFWQDUURZREMUHI$FFRXQW+RPHFODVV
`FDWFK1DPLQJ([FHSWLRQ^1DPLQJ([FHSWLRQSULQW6WDFN7UDFH`
FUpHUXQHLQVWDQFHG·HQWLWp
D DKFUHDWHDUJY>@DUJY>@DUJY>@
LQYRTXHUXQHPpWKRGH ´EXVLQHVVµ
6\VWHPHUUSULQWOQDJHW&XVWRPHU
`
Méthodes de l’application
Remote interface
setBalance()
Begin
Account
Account
Client setBalance() Bean
EJB Object
commit
Le client (Application Java)
LPSRUWEDQN
SXEOLFFODVV&OLHQW6HW%DODQFH^
SXEOLFVWDWLFYRLGPDLQ6WULQJ>@DUJY^
$FFRXQW+RPHDK$FFRXQWD
WU\^ UHFKHUFKHUO·LQWHUIDFH (-%KRPHLQWHUIDFH
,QLWLDO&RQWH[WFW[ QHZ,QLWLDO&RQWH[W
2EMHFWREMUHI FW[ORRNXS%DQN$FFRXQW
DK $FFRXQW+RPH3RUWDEOH5HPRWH2EMHFWQDUURZREMUHI$FFRXQW+RPHFODVV
`FDWFK1DPLQJ([FHSWLRQ^1DPLQJ([FHSWLRQSULQW6WDFN7UDFH`
FUpHUXQHLQVWDQFHG·HQWLWp
WU\^
D DKILQG%\3ULPDU\.H\QHZ$FFRXQW3.DUJY>@DUJY>@
`FDWFK)LQGHU([FHSWLRQ^)LQGHU([FHSWLRQSULQW6WDFN7UDFH`
LQYRTXHUXQHPpWKRGH´EXVLQHVVµ
DVHW%DODQFHDUJY>@
`
Le client (Servlet 1/2)
LPSRUW
SXEOLFFODVV6HW%DODQFH6HUYOHWH[WHQGV+WWS6HUYOHW ^
$FFRXQW+RPH DK
SXEOLFYRLGLQLW6HUYOHW&RQILJFRQILJWKURZV6HUYOHW([FHSWLRQ^
WU\^
,QLWLDO&RQWH[WFW[ QHZ,QLWLDO&RQWH[W
2EMHFWREMUHI FW[ORRNXS%DQN$FFRXQW
DK $FFRXQW+RPH3RUWDEOH5HPRWH2EMHFWQDUURZREMUHI$FFRXQW+RPHFODVV
`FDWFK1DPLQJ([FHSWLRQ^1DPLQJ([FHSWLRQSULQW6WDFN7UDFH`
`
SXEOLFYRLG GHVWUR\^
6\VWHPRXWSULQWOQ'HVWUR\
`
Le client (Servlet 2/2)
SXEOLFYRLGGR*HW +WWS6HUYOHW5HTXHVWUHTXHVW+WWS6HUYOHW5HVSRQVHUHVSRQVH
WKURZV6HUYOHW([FHSWLRQ,2([FHSWLRQ^
UHVSRQVHVHW&RQWHQW7\SHWH[WKWPO
3ULQW:ULWHU RXW UHVSRQVHJHW:ULWHU
RXWSULQWOQ+70/!+($'!7,7/(!6HW%DODQFH7,7/(!+($'!%2'<!
LQWDFFQR QHZ,QWHJHUUHTXHVWJHW3DUDPHWHU$&&12LQW9DOXH
LQWEUDQFKQR QHZ,QWHJHUUHTXHVWJHW3DUDPHWHU%5$1&+12LQW9DOXH
$FFRXQW3.SN QHZ $FFRXQW3.EUDQFKQRDFFQR
GRXEOHQHZEDODQFH QHZ'RXEOHUHTXHVWJHW3DUDPHWHU%$/$1&(GRXEOH9DOXH
WU\^
$FFRXQWD DKILQG%\3ULPDU\.H\SN DVHW%DODQFHQHZEDODQFH
RXWSULQWOQ+!1HZ%DODQFH+!
RXWSULQWOQ3!$FFRXQW SN 3!3!1HZ%DODQFHDJHW%DODQFH 3!
`FDWFK)LQGHU([FHSWLRQ^RXWSULQWOQ+!3UREOHP+!3!1R $FFRXQW SN 3!`
RXWSULQWOQ%2'<!+70/!RXWFORVH
``
Descripteur de déploiement
'DWD6RXUFHQDPH
Env. properties
7;B127B6833257('
7;B1(9(5
7;B5(48,5('
7;B68332576
7;B5(48,5(6B1(:
7;B0$1'$725<
7;B%($1B0$1$*('
Gestion des transactions
[Link] [Link]();
[Link](d);
[Link]();
Exemple de Session Bean
Transfer
• Spécification du bean
• session bean “ Transfer”
• Le concepteur doit écrire le code suivant
• 7UDQVIHU+RPHMDYD
l’ interface de gestion du bean - Home interface
• 7UDQVIHUMDYD
l’ interface d’ accès à distance - Remote Interface
• 7UDQVIHU%HDQMDYD
le code du bean
• le descripteur pour le déploiement
• pas de TransferPK !!
7UDQVIHUMDYD
l ’interface distance (remote)
• donne les prototypes des méthodes “ business”
• doit étendre l’ interface [Link]
SDFNDJH%DQN
SXEOLFLQWHUIDFH7UDQVIHUH[WHQGV (-%2EMHFW ^
SXEOLFYRLGIXQG7UDQVIHU$FFRXQW3. VUF$FFRXQW3. WUJGRXEOHDPRXQW
WKURZV5HPRWH([FHSWLRQ$FFRXQW([FHSWLRQ
`
7UDQVIHU+RPHMDYD
l ’interface maison (home)
• donne les prototypes des méthodes
de création
• doit étendre l’ interface [Link]
SDFNDJH%DQN
SXEOLFLQWHUIDFH7UDQIHU+RPHH[WHQGV (-%+RPH ^
SXEOLF7UDQIHUFUHDWH WKURZV5HPRWH([FHSWLRQ&UHDWH([FHSWLRQ
`
7UDQVIHU%HDQMDYD
l ’implantation du Session Bean
• doit étendre l’ interface [Link]
■ donne l’implantation
• des méthodes de gestion du cycle de vie (“ callback” )
• ejbActivate() appelé lors de l’activation
• ejbPassivate() appelé lors de la passivation
• ejbLoad() {} inutilisé mais présent
• ejbStore() {} inutilisé mais présent
• ejbRemove() appelé quand le client appelle remove()
• setEntityContext() appelé par le container quand l’instance est crée
• unsetEntityContext() appelé par le container avant de supprimer l’instance
• des méthodes “ business” de l’ interface Account
• fundTransfer() appelée par le client
• des méthodes de creation de l’ interface AccountHome
• ejbCreate() ejbPostCreate()
7UDQVIHU%HDQMDYD
l ’implantation du Session Bean
SDFNDJH%DQN
SXEOLFFODVV7UDQVIHU%HDQLPSOHPHQWV6HVVLRQ%HDQ ^
SULYDWHWUDQVLHQW (QWLW\&RQWH[WFW[
SULYDWH$FFRXQW+RPHDK
SXEOLFYRLGIXQG7UDQVIHU$FFRXQW3.VUF$FFRXQW3.WUJGRXEOHDPRXQW
WKURZV 5HPRWH([FHSWLRQ$FFRXQW([FHSWLRQ ^
WU\^$FFRXQWDVUF DKILQG%\3ULPDU\.H\VUF
`FDWFK)LQGHU([FHSWLRQH^WKURZ QHZ$FFRXQW([FHSWLRQVUF`
WU\ ^$FFRXQWDWUJ DKILQG%\3ULPDU\.H\WUJ
`FDWFK)LQGHU([FHSWLRQ H^WKURZ QHZ$FFRXQW([FHSWLRQWUJ`
DVUFGHELWDPRXQW
DWUJFUHGLWDPRXQW
`
7UDQVIHU%HDQMDYD
l ’implantation du Session Bean
PpWKRGHVUHTXLVHVSDUO·LQWHUIDFH6HVVLRQ%HDQ
SXEOLFYRLG HME$FWLYDWH^`
SXEOLFYRLG HME'HVWUR\^`
SXEOLFYRLG HME3DVVLYDWH^`
SXEOLFYRLG HME/RDG^`
SXEOLFYRLG HME6WRUH^`
SXEOLFYRLG VHW(QWLW\&RQWH[W (QWLW\&RQWH[WFW[^WKLVFW[ FW[`
SXEOLFYRLG XQVHW(QWLW\&RQWH[W ^WKLVFW[ QXOO`
7UDQVIHU%HDQMDYD
l ’implantation du Session Bean
SXEOLFYRLGHME&UHDWH WKURZV&UHDWH([FHSWLRQ ^
WU\^
,QLWLDO&RQWH[WFW[ QHZ,QLWLDO&RQWH[W
2EMHFWREMUHI FW[ORRNXS7UDQVIHU
WKLVDK $FFRXQW+RPH3RUWDEOH5HPRWH2EMHFWQDUURZ
REMUHI7UDQVIHU+RPHFODVV
`FDWFK1DPLQJ([FHSWLRQ^WKURZ QHZ&UHDWH([FHSWLRQ`
`
SXEOLFYRLGHME3RVW&UHDWH
^`
`
Gestion de la sécurité
Stratégies de Conception
■ La réentrance
• Exemple
SXEOLFFODVV$B%HDQLPSOHPHQWV(QWLW\%HDQ ^$HVWO ·LQWHUIDFHGLVWDQWH
SULYDWHWUDQVLHQW (QWLW\&RQWH[WFW[
SXEOLFYRLGPHWKRGB^
%E «UpFXSqUHXQHUpIpUHQFHGLVWDQWH
$P\VHOI $FW[JHW(-%2EMHFW
EPHWKRGBP\VHOI``
SXEOLFFODVV%B%HDQLPSOHPHQWV(QWLW\%HDQ ^%HVWO ·LQWHUIDFHGLVWDQWH
SULYDWHWUDQVLHQW (QWLW\&RQWH[WFW[
SXEOLFYRLGPHWKRGB$D^DPHWKRGB
ORRSEDFN
``
Limites : La réentrance
■ Voir Gopalan
• [Link]
Outils de Développement
■ Bases de Données
■ Moniteurs Transactionnels
■ Serveurs Applicatifs
■ Outils de programmation
Outils de Développement
■ WebLogic ■ Forte
■ IBM ■ Progress
■ Oracle ■ Novell
■ GemStone ■ Novera
■ BEA ■ Borland
■ Borland ■ Informix
■ Netscape ■ IONA
■ Lotus ■ Allaire
■ SilverStream ■ EJBHome, JOnAS, ...
J2EE
Java 2 Enterprise Edition
• Spécifie la plateforme complet Java pour des applications
multi-tiers (vs J2SE,J2ME)
■ Architecture
Applet Container Web Container EJB Container
Applet Servlet
EJB
JSP
J2SE
JMS, JNDI, JTA, JMS, JNDI, JTA,
Application Client JDBC, RMI(IIOP) JDBC, RMI(IIOP)
Container Java Mail, JAF Java Mail, JAF
Application
client J2SE J2SE
JMS, JNDI,
RMI(IIOP), JDBC
J2SE Database
J2EE
Java 2 Enterprise Edition
■ Deux types de composants J2EE
• Web Component (fichier JAR .war)
• Servlet, JSP, HTML (formulaire associé à une servlet)
• EB Component (fichier JAR .ear)
• Entity Bean, Session Bean
■ Plateforme de référence
• SUN j2sdkee
Java ONE (Open Net Environment)
■ Annoncé le 5/2/2001
■ Ajout des « standards » Web Services dans J2EE
• SOAP, WSDL, UDDI, ebXML, …
■ Nouvelles API
• Context API
Interface vers les données contextuelles d’ un service Web
• JAX/RPC (Java API for XML based RPC)
Interface aux protocoles de transport de message XML de type RPC (SOAP, W3C
XP, … )
• JAXB (Java API for XML Data Binding)
Correspondance automatique entre des objets Java et des données XML
• JAXM (Java API for XML Messaging)
Interface aux protocoles de transport de messages XML : SOAP, ebXML Message
Service, …
• JAXP (Java API for XML Processing)
Gestion des arborescence DOM
• JAXR (Java API for XML Registries)
Interface aux annuaires ebXML Registry/Repository et UDDI Business Registry
Les spécifications EJB
■ EJB 1.0
■ EJB 1.1
• JDBC 2.0, Descripteurs XML
• contexte standard JNDI
■ EJB 2.0
• Connector
• Message Driven Bean (JMS), ...
■ La suite
• Héritage ?
• Réentrance ?
• Modèles de transaction avancées ?
EJB 2.0 What’ new
■ SQL like
• used to specified finder and select
■ Form of Query
• [Select_clause] From_clause [Where_Clause]
• Navigation
■ Query
• static in DD
• has parameters that corresponds to finder/select methods
parameters
• can use finder methods of other entity beans
EJB QL (Query Language)
Example
■ No SELECT and navigation
)5202UGHU%HDQ RO,1ROLQH,WHPV
:+(5(OSURGXFWSURGXFWBW\SH "
■ SELECT and @@ operator
6(/(&7##R
)5202UGHU%HDQ R2UGHU%HDQ R
:+(5(RTXDQWLW\ !RTXDQWLW\ $1'
RFXVWRPHUODVWQDPH ¶6PLWK·$1'
RFXVWRPHUILUVWQDPH ¶-RKQ·
■ SELECT and @@ operator
6(/(&7O !SURGXFW )5202UGHU%HDQ $6RO,1ROLQH,WHPV
6(/(&7OSURGXFW )5202UGHU%HDQ $6RO,1ROLQH,WHPV ,OOHJDO
JMS Integration
• publisher
• bean can send message
• subscriber - Message Driven Bean
• new EJB bean type
• similar to Stateless Session Bean
• transaction attribute of onMessage()
Only : NotSupported, Required
» The use of the other transaction attributes is not meanigful for
message-driven beans because there can be no pre-existing
transaction context (RequiresNew, Supports) and no client to
handle exceptions (Mandatory, Never).
• Transaction
• Receive/Send Messages can be in a transaction scope
MessageDrivenBean
■ package [Link];
import [Link];
import [Link];
SXEOLFYRLGRQ0HVVDJH0HVVDJHPHVVDJH^
,QWHJHUFXVWRPHU,' RUGHU'HWDLOJHW&XVWRPHU,'
,QLWLDO&RQWH[WMQGL(QF QHZ,QLWLDO&RQWH[W
&DWDORJ+RPHFDWDORJ+RPH
&DWDORJ+RPHMQGL(QFORRNXSMDYDFRPSHQYHMEFDWDORJ
,WHUDWRUSURGXFW,'V RUGHU'HWDLOJHW3URGXFWV,'V
ZKLOHSURGXFW,'VKDV1H[W^
,QWHJHUSURGXFW,' ,QWHJHUSURGXFW,'VQH[W
&DWDORJFDW &DWDORJ+RPHILQG%\3URGXFW,'SURGXFW,'
FDWDGG&XVWRPHU7R0DLOLQJ/LVWFXVWRPHU,'
`
`
`
Timer Service
■ Motivations
• Intégration des données multimedia (orienté Streaming) dans
les applications J2EE (EJB-JSP/JSF/Servlet)
■ 2 types de composants EMB
Architecture d’applications
utilisant des EMB
+70/60,/
:HE6HUYHU (-%6HUYHU
+773
web cam site
blah blah
blah blah
blah blah
blah blah
blah blah
5'%06(53
6HUYOHW
6HUYOHW
03(*« (QWHUSULVH -'%&
)LOWHU
)LOWHU (QWHUSULVH
50,66/ %HDQV 'DWD6RXUFH
JMF 5763 -63-6)
-63-6) %HDQV -&$
RealOne ,,2366/
WMP, …
[+70/60,/ (QWHUSULVH
(QWHUSULVH
+773 6WUHDPLQJ 0HGLD%HDQV
0HGLD%HDQV
6HUYHU
03(*« 6WUHDP
5HSRVLWRU\ 0HGLD
0HGLD
5763 0HWDGDWD 3OXJLQ
J2ME 3OXJLQ
Mobile Media 5HSRVLWRU\
API (JSR135)
Composants EMB
• Distribution
• Transaction (optional)
• TX propagation rely on OTS TX propagation
• Naming
• CoCosNaming
• Client
• Security
• CORBA IIOP CSIv2lebvel 1
• SSL, TSL
Transaction
• Deferred features
• Pluggable Persistence Manager
• Support for method interceptor
• Support for Component based inheritance
• Read-Only Beans with CMP (optimisation
• Aggregate operations for EJB QL finder method
• Related
• Java Connector Specification
API
• Question about JOS (
Web Services
■ Motivation
• Inclure les informations de déploiement dans les
commentaires des sources du bean
• Pour en générer les fichiers de déploiement
■ Outillage
• Basé sur les DocLet (JavaDoc)
• Tache ANT
<taskdef
name="ejbdoclet"
classname="[Link]"
/>
Exemple XDocLet
/**
* @[Link]
* name="CustomerBean"
* type="CMP"
* view-type="both"
* primkey-field="id"
* @[Link]
* remote-class="[Link]"
* local-class="[Link]"
* @[Link]
* remote-class="[Link]"
* local-class="[Link]"
* @ejb:pk
* class="[Link]"
* @ejb:finder
* signature= "[Link] findAllCustomers()"
* query ="SELECT OBJECT(c) FROM CustomerBean AS c"
* @ejb:transaction
type="Required"
*/
public abstract class CustomerBean implements EntityBean { …
}
Bibliographie