Académique Documents
Professionnel Documents
Culture Documents
1/Java EE 6
S. Rosmorduc, Conservatoire National des Arts et Mtiers
(avec des vrais bouts de transparents de Marc Le Bihan dedans)
1
Bibliographie et sources
Rappels d'architecture
Types dEJB
Interfaces dEJB
Cycle de vie
Dploiement
Concurrence
Transactions
Mcanismes sous-jacents
3
Rappels d'architecture
Couche Prsentation
(Web, Swing)
Couche Mtier
Couche Accs aux donnes
(DAO)
4
Rappels d'architecture
Couche Mtier
faade1 = service faade2 = service
classe mtier
classe mtier
classe mtier
5
Rappels d'architecture
accs distant
gestion de transaction
injection de dpendances
8
Contraintes
Stateless
Stateful
Singleton
Annotation : @Stateless
Injection
dEntityManager (JPA)
par
@PersistenceContext
11
@Stateless
public class ForumBean {
@PersistenceContext
EntityManager em;
public Message
addMessage(Message newMessage) {
em.persist(newMessage);
return newMessage;
}
public Message getMessage(Long id) {
return em.find(Message.class, id);
}
public List<MessageList> getAllMessages() {
return em.createQuery(
"select m from Message m").getResultList();
}
}
LEJB sans tat
(Stateless bean)
Annotation @Stateful
@ConcurrencyManagement(ConcurrencyManagementType.CON
TAINER) : gestion automatique par le conteneur
@ConcurrencyManagement(ConcurrencyManagementType.BEAN
) : gestion manuelle
LocalBean
23
Exemple: un bean
daccs aux produits
removeProduct(Product p) : supprime un
produit de la liste
En JSF
injection de dpendance
Entre beans
rgles
JNDI
http://docs.oracle.com/javase/jndi/tutorial/
Rcemment standardis
Pour un bean dans une autre application web, utiliser le nom #global#
java:global/APP/MODULE/BEAN
Pour une application construite partir de plusieurs war, jars: pour accder
des beans dans dautres modules dune mme application utiliser le #nom
dapplication# :
java:app/MODULE/BEAN
java:module/BEAN
ex. :
java:app/MyApp/BasketBean!myshop.business.BasketRemoteIF
Voir http://glasssh.java.net/javaee5/ejb/
EJB_FAQ.html#What_is_the_syntax_for_portable_glo
bal_ pour plus de dtails.
40
Accs aux EJB depuis
une Servlet
Le bean:
@Stateful
public class Basket {
// Product is serializable !
private List<Product> content=
new ArrayList<Product> ();
public void add(Product p) {
content.add(p);
}
....
42
accs un bean session depuis une
servlet
@WebServlet(name = "AddToBasketServlet", urlPatterns = {"/addToBasket"})
public class AddToBasketServlet extends HttpServlet {
...
private Basket lookupBasketBean(HttpServletRequest request) {
HttpSession session = request.getSession();
if (session.getAttribute("basket") == null) {
try {
Context c = new InitialContext();
Basket b = (Basket) c.lookup("java:global/SessionInViewTest/Basket");
session.setAttribute("basket", b);
} catch (NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception", ne);
throw new RuntimeException(ne);
}
}
return (Basket) session.getAttribute("basket");
}
}
Si le bean nest pas
en session, le crer avec
JNDI.
43
Dploiement
44
Concurrence
Timer
@Startup
@Schedule
@Timeout
Annotation @Asynchronous
45
L'EJB Timer (1)
rappels
TransactionManagement
REQUIRED, REQUIRES_NEW,
MANDATORY, SUPPORT,
NOT_SUPPORTED, NEVER
55
Le problme des
transactions
compte1.retirer(1000)
compte2.deposer(1000)
En BD:
Dnition
atomique
cohrente
durable
mcanisme
quel suspense !
60
Valeurs possibles pour
@TransactionAttribute
addProduit : TransactionAttributeType.SUPPORTS
sauverCommande:
TransactionAttributeType.REQUIRED
Agir sur les connections pour dbuter une transaction nest pas
ncessaire, le serveur dapplication sen charge.
sessionContext.setRollbackOnly(true);
67
Mcanismes sous-
jacents
On gnre une classe de mme interface que le Bean, qui appelle le bean,
mais #enrobe# les appels de mthodes dans le code ncessaire au
traitement de la transaction
Pour a
Noter le dcoupage
en packages
71
On cre la base de donnes
Ajout dune Persistence
Unit (pour JPA)
72
Cration du modle
(rduit une classe ici)
73
LEJB daccs aux Dvd
return
"montrerDvd?faces-redirect=true&id=" +id;
FacesContext.getCurrentInstance().getExternalContext()
permet davoir accs aux paramtres comme avec une servlet