2. Agenda
Session de Beans
Déploiement des projets EJB au serveur
Les clients distants pour les Session de
Beans
Session de beans sans état
L'accès local aux EJB
2
4. Avantages d’EJB
Encapsuler la logique
– La logique métier séparé de contrôle et de présentation
l'accès à distance
– Applications multiples sur différents serveurs peuvent accéder EJB
la simplicité
– Relativement facile à utiliser par rapport aux autres systèmes à
distance d'objets
Large soutien aux fournisseurs
– JBoss, Oracle AS, WebLogic, WebSphere, Glassfish, etc
évolutivité
– Pratiquement tous les app Java EE en charge les serveurs de
clustering, équilibrage de charge et de basculement
4
5. Désavantages de EJB
La complexité
Bien EJB3 pourrait être plus simple que les systèmes RemoteObject autre, à
distance objet-cadres sont beaucoup plus complexes que locale-objet
d'approches.
Le printemps est plus facile et plus puissant pour l'accès local
Nécessite le serveur Java EE
Impossible d'exécuter sur Tomcat, Jetty, Resin, JRun, Résine
Serveurs Java EE sont généralement beaucoup plus difficile à configurer,
considérablement plus lent à démarrer / redémarrer au cours du
développement et de test, et coûtent généralement de l'argent
Nécessite la dernière version de Java EE version
Doit mettre à niveau vers les derniers communiqués de serveur
Mauvaise réputation à cause de versions antérieures
EJB2 était si complexe que les EJB a mauvaise réputation à ce jour
5
7. Session Beans: Aperçu
session de Beans
Sur le serveur, vous faites l'interface (marqué avec @ Remote) et
POJO qu'elle met en œuvre (marqués avec @ Stateless)
Ordinaires objet Java avec les méthodes ordinaires qui
utilisent des objets Java ordinaires comme arguments et les
types de retour
Aucun Etat (vars exemple) maintenu entre les appels de
méthode
Le client utilise InitialContext.lookup ("nom") pour obtenir la
réf.
Client effectue des appels de méthode normale (données
sérialisées sur le net.)
Session EJB sans état
Mark POJO avec @ Stateful au lieu de @ Stateless
Mark méthode spéciale avec @ Remove
Le client ne similaires appels de recherche et de méthode, mais il
doit appeler la méthode particulière lorsque vous avez terminé.
Etat (vars exemple) maintenu jusqu'à ce que cette méthode
appelée 7
9. session Beans sans état: Idée
POJOs
Ordinaire des classes Java; pas d'interfaces ou des classes
spéciales parent. Fournissent souvent une sorte de service telles
que la cartographie des identifications client à des objets à la
clientèle.
L'accès local ou à distance
Peut être consulté soit sur serveur d'application locale (même machine
que soft qui utilise les beans) ou serveur d'application distant (machine
différente du soft qui utilise les beans)
Ne pas maintenir l'état du client
Les variables d'instance sont protégés contre les conditions de course que
pendant un seul appel de méthode. Faut pas stocker l'état du client spécifique
qui doit être accessible à travers des appels de méthodes multiples.
9
10. session Beans sans état: Approche
• Faire nouvel EJB projet
– fichier Nouveau EJB Project
• Possibilité de choisir JBoss ou Glassfish comme exécution cible. De toute
façon, vous pouvez déployer des projets à la fois aux serveurs.
• Définir une interface
– Marque avec @ Remote
• Pour accéder à d'autres serveurs ou de projets sur le même serveur
– Marque avec @ Local
• Pour ne permettre l'accès de projets sur un même serveur (par défaut)
• Créer une classe qui implémente l'interface
– Marque avec des apatrides par défaut du serveur JNDI cartographie @
– Marque AVEC @ Stateless (mappedName = "SomeJndiName")
• Déployer application serveur
– cliquez R-sur serveur, Ajouter / Supprimer des projets, de démarrer le serveur
10
11. EJB Project
faire des projets
fichier nouveau EJB Project
Choisissez un nom
JBoss ou Glassfish comme cible d'exécution
Vous pouvez ensuite déployer sur n'importe quel
serveur compatible; vous n'êtes pas limité à celui
choisi initialement.
Facultatif: Ajouter à une EAR
Si vous faites Projet web dynamique plus tard tard qui
veut utiliser @ EJB, vous pouvez l'ajouter à la même
EAR
Déploiement de projet
cliquez R-sur JBoss ou Glassfish (ou tout autre serveur Java
EE 5 que vous avez enregistré avec Eclipse), Ajouter et
supprimer des projets, choisissez Projet, Ajouter, Terminer
cliquez R-sur JBoss ou Glassfish (ou autre), Démarrer
11
15. Idée
Les clients estiment que le bean par JNDI
Client Java code ne sais même pas la machine sur laquelle réside le
bean
Les clients utilisent bean comme un POJO normal
Mais les arguments et les valeurs de retour sont envoyés à travers le
réseau
Ainsi, les classes personnalisées doivent être sérialisables
Code de base
InitialContext context = new InitialContext();
InterfaceName bean = (InterfaceName)context.lookup("JNDI-Name");
jndi.properties
Fichier texte dans le classpath; donne URL distante et d'autres infos
15
16. Projet client distant
Fait nouveau projet Web dynamique
Choisir chanceux numéros-client que le nom
Choisir que JBoss 5 d'exécution cible
Peuvent être déployées pour Glassfish ou d'autres serveurs
Java EE 5
jndi.properties
Fichier texte créé, appelé «jndi.properties" dans le dossier src
Doit donner URL distante. Souvent d'autres infos. Spécifiques du serveur!
Détails montré dans la diapositive à venir
Déploiement
N'a pas besoin de courir sur la même machine que le Projet d'EJB.
Autonome (bureau) les clients n'ont pas besoin d'être déployé sur n'importe
quel serveur d'application, ils peuvent simplement avoir une "main" méthode.
Applications Web devrait être déployée sur un serveur Java EE 5 app
16
18. Remarque sur le nom de context.lookup
Numéro
Vous passez un nom à context.lookup. Si vous utilisez
simplement @ Remote sans mappedName, le nom par
défaut est différents pour JBoss que pour Glassfish (ou
autres serveurs).
Dans JBoss, le nom JNDI serait
"NumberServiceBean/remote"
En Glassfish, le nom JNDI serait
"coreservlets.bean.NumberService«
Solution: utiliser mappedName
J'utilise @ Stateless (mappedName = "NumberCreator")
au lieu de simplement @ Stateless
Donc, je peux utiliser le même nom (NumberCreator) quel
que soit
dont le serveur du projet EJB est déployé pour 18
20. Standalone client distant: Résultats
lucky-numbers (EJB Project)
Déployé à JBoss ou Glassfish. La sortie est la même
lucky-nombres-client (Proj Web dynamique.)
Pas encore déployé sur n'importe quel serveur.
jndi.properties correspond au serveur d'EJB projet
sortie
20
27. Idée
Utilisez @ EJB, avant variable d'instance
Bean sera automatiquement instanciée et assignée. Par exemple:
@ d'EJB privés Certains services mon service;
utile pour les
Un EJB qui utilise un autre d'EJB dans le cadre de sa logique
Toujours une bonne idée puisque les EJBs sont habituellement
ensemble
De multiples applications Web qui utilisent la même logique métier
Plus simple, mais application Web ne peut pas passer au serveur
distant
restrictions
Avant de variables d'instance, les variables non locales.
Les deux classes doivent faire partie du même EAR sur le même serveur
Dans Eclipse, toutes les classes dans un seul projet d'EJB
satisfaire cette
Si vous utilisez un projet EJB (EJB) et des projets web
dynamiques (les classes qui utilisent les EJB), vous devez choisir
"Ajouter un projet à une EAR» et spécifiez un même
27
37. Sessions Dynamiques de Beans: Idée
POJOs
Ordinaire des classes Java; aucune des interfaces spéciales
ou d'un parent classes. Fournissent souvent une sorte de
service qui stocke informations (temporairement) ainsi que
de l'envoyer. Local ou accès à distant
Peut être consulté soit sur serveur d'application locale
(même machine comme soft qui utilise les beans) ou serveur
d'application à distance (différents machine à partir de app
qui utilise les beans)
Maintenir l'état du client
Vous pouvez configurer les beans avec le client-spécifiques
d'informations, d'accéder ensuite au info (sans crainte de la
race conditions) jusqu'à ce que vous appelez la méthode
spéciale marquée avec @ Remove.
37
38. Sessions Dynamiques de Beans : Approche
Faire nouvel EJB projet
Fichier Nouveau projet EJB
Définir une interface
Marque avec @ Remote
Pour accéder à d'autres serveurs ou de projets sur le même serveur
Marque avec @ Local
Pour ne permettre l'accès de projets sur un même serveur (par défaut)
Créer une classe qui implémente l'interface
Marque avec @ Dynamique pour serveur JNDI cartographie
Marque avec @ (Stateful mappedName = "SomeJndiName")
Marquer une méthode avec @ Retirer
Lorsqu'elle est appelée, le serveur termine la session et l'instance de
GC
Déployer application serveur
cliquez R-sur serveur, Ajouter / Supprimer des projets, de démarrer le serveur
38
51. Livres et références
EJB 3 en action
Debu Panda, Reza Rahman, et Derek Lane (Manning)
Enterprise JavaBeans 3.0 (5e édition)
Bill Burke et Richard Monson-Haefel (O'Reilly)
Tutoriel Java EE 5 (EJB section)
http://java.sun.com/javaee/5/docs/tutorial/doc/bnblr.html
JBoss EJB3 Tutoriel
http://docs.jboss.com/ejb3/app-server/tutorial/
Glassfish EJB FAQ
https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html
Cay Horstmann EJB Tutoriel
http://www.horstmann.com/elvis/elvis-meets-glassfish.html
51
52. Résumer
Session de Beans
Interface: marque avec @ Remote
Classe: marque avec @ Stateless (mappedName = "blah")
Session d’ EJB Dynamique
Classe Marque avec @ Dynamique lieu de @ Stateless
Marquer une méthode avec @ Retirer
session Clients bean
InitialContext context = new InitialContext ();
InterfaceType var = (InterfaceType) context.lookup ("blah");
var.someMethod (args);
Pour les beans avec état, appelez la méthode spécialement
marqués lorsque vous avez terminé
Besoin jndi.properties spécifiques au type de serveur
L'accès local aux beans
@EJB private InterfaceType var;
52