porque você deveria usar cdi nos seus projetos java! - javaone la 2012 - sérgio lopes
DESCRIPTION
Palestra técnica dada no JavaOne Latin America 2012 sobre CDI e JavaTRANSCRIPT
![Page 1: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/1.jpg)
Porque você deveria usarCDI em todos os seus projetos Java
CDI
![Page 2: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/2.jpg)
@sergio_caelumsergiolopes.org
![Page 3: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/3.jpg)
CDI
![Page 4: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/4.jpg)
(
![Page 5: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/5.jpg)
CDI
![Page 6: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/6.jpg)
CDI
![Page 7: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/7.jpg)
CDI
![Page 8: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/8.jpg)
public class ProdutoDao { public void salvar(Produto produto) {
entityManager.persist(produto); }}
![Page 9: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/9.jpg)
public class ProdutoDao { public void salvar(Produto produto) { EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa"); EntityManager entityManager = factory.createEntityManager();
entityManager.persist(produto); }}
![Page 10: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/10.jpg)
CDI
![Page 11: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/11.jpg)
public class ProdutoDao {
public void salvar(Produto produto) { entityManager.persist(produto); }}
![Page 12: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/12.jpg)
public class ProdutoDao { private EntityManager entityManager;
public ProdutoDao(EntityManager em) { this.entityManager = em; }
public void salvar(Produto produto) { entityManager.persist(produto); }}
![Page 13: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/13.jpg)
public class ProdutoDao { private EntityManager entityManager; // recebo dependência pronta public ProdutoDao(EntityManager em) { this.entityManager = em; }
// uso dependência public void salvar(Produto produto) { entityManager.persist(produto); }}
![Page 14: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/14.jpg)
injeção dedependências!
![Page 15: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/15.jpg)
injeção dedependências!
inversão de controle.
![Page 16: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/16.jpg)
injeção dedependências!
separação de responsabilidades.inversão de controle.
![Page 17: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/17.jpg)
)
![Page 18: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/18.jpg)
CDI
![Page 19: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/19.jpg)
especificação cdiimplementação weld
![Page 20: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/20.jpg)
public class ProdutoDao { private EntityManager entityManager;
public ProdutoDao(EntityManager em) { this.entityManager = em; }
public void salvar(Produto produto) { entityManager.persist(produto); }}
![Page 21: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/21.jpg)
public class ProdutoDao { private EntityManager entityManager; @Inject public ProdutoDao(EntityManager em) { this.entityManager = em; }
public void salvar(Produto produto) { entityManager.persist(produto); }}
![Page 22: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/22.jpg)
public class ProdutoDao {
@Inject private EntityManager entityManager;
public void salvar(Produto produto) { entityManager.persist(produto); }}
![Page 23: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/23.jpg)
CDI
injeção com @Inject
![Page 24: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/24.jpg)
public class ProdutoController {
private ProdutoDao dao; public void insere() { Produto produto = // pega dados no request dao.salvar(produto); }}
![Page 25: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/25.jpg)
public class ProdutoController {
@Inject private ProdutoDao dao; public void insere() { Produto produto = // pega dados no request dao.salvar(produto); }}
![Page 26: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/26.jpg)
injeção fácil!
![Page 27: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/27.jpg)
e oEntityManager?
![Page 28: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/28.jpg)
CDI
métodos produtores
![Page 29: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/29.jpg)
public class JPAUtil {
public EntityManager criaEM() {
}}
![Page 30: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/30.jpg)
public class JPAUtil {
public EntityManager criaEM() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jpa"); return factory.createEntityManager(); }}
![Page 31: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/31.jpg)
public class JPAUtil {
public EntityManager criaEM() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jpa"); return factory.createEntityManager(); }}
![Page 32: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/32.jpg)
public class JPAUtil {
@Produces public EntityManager criaEM() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jpa"); return factory.createEntityManager(); }}
![Page 33: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/33.jpg)
quando criar oEntityManager?
![Page 34: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/34.jpg)
public class JPAUtil {
@Produces @RequestScoped public EntityManager criaEM() { EntityManagerFactory factory = Persistence .createEntityManagerFactory("jpa"); return factory.createEntityManager(); }}
![Page 35: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/35.jpg)
mas e afactory?
![Page 36: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/36.jpg)
public class JPAUtil {
@Produces @RequestScoped public EntityManager criaEM(){ return factory.createEntityManager(); }}
![Page 37: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/37.jpg)
public class JPAUtil {
@Produces public EntityManagerFactory criaFactory() { return Persistence.createEntityManagerFactory("jpa"); } @Produces @RequestScoped public EntityManager criaEM(){ return factory.createEntityManager(); }}
![Page 38: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/38.jpg)
public class JPAUtil {
@Produces public EntityManagerFactory criaFactory() { return Persistence.createEntityManagerFactory("jpa"); } @Produces @RequestScoped public EntityManager criaEM(){ return factory.createEntityManager(); }}
![Page 39: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/39.jpg)
public class JPAUtil {
@Produces public EntityManagerFactory criaFactory() { return Persistence.createEntityManagerFactory("jpa"); } @Produces @RequestScoped public EntityManager criaEM(EntityManagerFactory factory){ return factory.createEntityManager(); }}
![Page 40: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/40.jpg)
public class JPAUtil {
@Produces @ApplicationScoped public EntityManagerFactory criaFactory() { return Persistence.createEntityManagerFactory("jpa"); } @Produces @RequestScoped public EntityManager criaEM(EntityManagerFactory factory){ return factory.createEntityManager(); }}
![Page 41: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/41.jpg)
e quemfecha?
![Page 42: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/42.jpg)
public class JPAUtil {
public void fechaEM(EntityManager em) { em.close(); }
}
![Page 43: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/43.jpg)
public class JPAUtil {
public void fechaEM(@Disposes EntityManager em) { em.close(); }
}
![Page 44: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/44.jpg)
gerenciamentodo ciclo de vida!
![Page 45: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/45.jpg)
e mais de umbanco de dados?
![Page 46: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/46.jpg)
public class JPAUtil {
@Produces @ApplicationScoped public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped public EntityManager criaEM1(EntityManagerFactory factory){}
}
![Page 47: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/47.jpg)
public class JPAUtil {
@Produces @ApplicationScoped public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped public EntityManager criaEM1(EntityManagerFactory factory){}
@Produces @ApplicationScoped public EntityManagerFactory criaFactory2() {}
@Produces @RequestScoped public EntityManager criaEM2(EntityManagerFactory factory){} }
![Page 48: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/48.jpg)
public class JPAUtil {
@Produces @ApplicationScoped public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped public EntityManager criaEM1(EntityManagerFactory factory){}
@Produces @ApplicationScoped public EntityManagerFactory criaFactory2() {}
@Produces @RequestScoped public EntityManager criaEM2(EntityManagerFactory factory){} }
?
![Page 49: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/49.jpg)
CDI
qualifiers
![Page 50: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/50.jpg)
public class JPAUtil {
@Produces @ApplicationScoped @Geral public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped public EntityManager criaEM1(EntityManagerFactory factory){}
@Produces @ApplicationScoped @Diretor public EntityManagerFactory criaFactory2() {}
@Produces @RequestScoped public EntityManager criaEM2(EntityManagerFactory factory){} }
![Page 51: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/51.jpg)
public class JPAUtil {
@Produces @ApplicationScoped @Geral public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped public EntityManager criaEM1(@Geral EntityManagerFactory f){}
@Produces @ApplicationScoped @Diretor public EntityManagerFactory criaFactory2() {}
@Produces @RequestScoped public EntityManager criaEM2(@Diretor EntityManagerFactory f){} }
![Page 52: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/52.jpg)
@Retention(RUNTIME)public @interface Diretor {}
@Retention(RUNTIME)public @interface Geral {}
![Page 53: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/53.jpg)
@Qualifier@Retention(RUNTIME)public @interface Diretor {}
@Qualifier@Retention(RUNTIME)public @interface Geral {}
![Page 54: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/54.jpg)
public class ProdutoDao {
@Inject private EntityManager entityManager;
public void salvar(Produto produto) { entityManager.persist(produto); }}
![Page 55: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/55.jpg)
public class ProdutoDao {
@Inject @Geral private EntityManager entityManager;
public void salvar(Produto produto) { entityManager.persist(produto); }}
![Page 56: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/56.jpg)
public class JPAUtil {
@Produces @ApplicationScoped @Geral public EntityManagerFactory criaFactory1() {}
@Produces @RequestScoped @Geral public EntityManager criaEM1(@Geral EntityManagerFactory f){}
@Produces @ApplicationScoped @Diretor public EntityManagerFactory criaFactory2() {}
@Produces @RequestScoped @Diretor public EntityManager criaEM2(@Diretor EntityManagerFactory f){} }
![Page 57: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/57.jpg)
public class BackupDeTudo {
public void backupBDs() {
}}
![Page 58: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/58.jpg)
public class BackupDeTudo {
@Inject @Any private Instance<EntityManager> todosEntityMangers; public void backupBDs() {
}}
![Page 59: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/59.jpg)
public class BackupDeTudo {
@Inject @Any private Instance<EntityManager> todosEntityMangers; public void backupBDs() { for (EntityManager em : todosEntityMangers) { // ... } }}
![Page 60: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/60.jpg)
múltiplosbeans!
![Page 61: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/61.jpg)
quem controlatransações?
![Page 62: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/62.jpg)
public class ProdutoDao { @Inject private EntityManager entityManager; public void salvar(Produto produto) { entityManager.getTransaction().begin(); entityManager.persist(produto); entityManager.getTransaction().commit(); }
}
![Page 63: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/63.jpg)
public class ProdutoDao { @Inject private EntityManager entityManager; public void salvar(Produto produto) { entityManager.getTransaction().begin(); entityManager.persist(produto); entityManager.getTransaction().commit(); } public void apagar(Produto produto) { entityManager.getTransaction().begin(); entityManager.remove(produto); entityManager.getTransaction().commit(); }}
![Page 64: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/64.jpg)
public class ProdutoDao { @Inject private EntityManager entityManager; public void salvar(Produto produto) { entityManager.getTransaction().begin(); entityManager.persist(produto); entityManager.getTransaction().commit(); } public void apagar(Produto produto) { entityManager.getTransaction().begin(); entityManager.remove(produto); entityManager.getTransaction().commit(); }}
![Page 65: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/65.jpg)
public class ProdutoController {
@Inject private ProdutoDao dao; public void substitui() { dao.salvar(produtoNovo); dao.apagar(produtoAntigo); }}
![Page 66: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/66.jpg)
CDI
interceptadores
![Page 67: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/67.jpg)
public class ProdutoController {
@Inject private ProdutoDao dao; @Transacional public void substitui() { dao.salvar(produtoNovo); dao.apagar(produtoAntigo); }}
![Page 68: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/68.jpg)
@InterceptorBinding@Retention(RUNTIME)public @interface Transacional { }
![Page 69: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/69.jpg)
public class ProdutoDao { @Inject private EntityManager entityManager; public void salvar(Produto produto) { entityManager.persist(produto); } public void apagar(Produto produto) { entityManager.remove(produto); }}
![Page 70: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/70.jpg)
@Interceptor @Transacionalpublic class TransacionalInterceptor {
}
![Page 71: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/71.jpg)
@Interceptor @Transacionalpublic class TransacionalInterceptor {
@AroundInvoke public Object intercept(InvocationContext ctx) {
}}
![Page 72: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/72.jpg)
@Interceptor @Transacionalpublic class TransacionalInterceptor {
@AroundInvoke public Object intercept(InvocationContext ctx) { // ... antes da lógica
Object resultado = ctx.proceed();
// ... depois da lógica return resultado; }}
![Page 73: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/73.jpg)
@Interceptor @Transacionalpublic class TransacionalInterceptor {
@Inject private EntityManager em;
@AroundInvoke public Object intercept(InvocationContext ctx) { em.getTransaction().begin();
Object resultado = ctx.proceed();
em.getTransaction().commit(); return resultado; }}
![Page 74: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/74.jpg)
<beans> <interceptors> <class> br.com.caelum.TransacionalInterceptor </class> </interceptors></beans>
![Page 75: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/75.jpg)
maisencapsulado!
![Page 76: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/76.jpg)
um processo decompra complexo
![Page 77: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/77.jpg)
public class Pagamento {
public void efetuaCobranca() { // ... comunica com Cielo }}
![Page 78: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/78.jpg)
public class Estoque {
public void reservaMercadoria() { // ... reserva produto no estoque }}
![Page 79: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/79.jpg)
public class Notificacoes {
public void notificaCompra() { // envia email confirmando pro usuario }}
![Page 80: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/80.jpg)
public class FinalizaCompraController {
public void finalizaCompra() {
}}
![Page 81: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/81.jpg)
public class FinalizaCompraController {
@Inject private Pagamento pagamento;
public void finalizaCompra() { pagamento.efetuaCobranca();
}}
![Page 82: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/82.jpg)
public class FinalizaCompraController {
@Inject private Pagamento pagamento; @Inject private Estoque estoque;
public void finalizaCompra() { pagamento.efetuaCobranca(); estoque.reservaMercadoria();
}}
![Page 83: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/83.jpg)
public class FinalizaCompraController {
@Inject private Pagamento pagamento; @Inject private Estoque estoque; @Inject private Notificacoes notificacoes; public void finalizaCompra() { pagamento.efetuaCobranca(); estoque.reservaMercadoria(); notificacoes.notificaCompra(); }}
![Page 84: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/84.jpg)
como desacoplaro processo?
![Page 85: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/85.jpg)
CDI
eventos
![Page 86: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/86.jpg)
public class FinalizaCompraController {
public void finalizaCompra() {
}}
![Page 87: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/87.jpg)
public class FinalizaCompraController {
public void finalizaCompra() { Compra compra = new Compra(produto, cliente);
}}
![Page 88: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/88.jpg)
public class FinalizaCompraController {
@Inject @Any private Event<Compra> eventoCompra; public void finalizaCompra() { Compra compra = new Compra(produto, cliente);
}}
![Page 89: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/89.jpg)
public class FinalizaCompraController {
@Inject @Any private Event<Compra> eventoCompra; public void finalizaCompra() { Compra compra = new Compra(produto, cliente); eventoCompra.fire(compra); }}
![Page 90: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/90.jpg)
public class Pagamento {
public void efetuaCobranca(Compra c) { // ... comunica com Cielo }}
![Page 91: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/91.jpg)
public class Pagamento {
public void efetuaCobranca(@Observes Compra c) { // ... comunica com Cielo }}
![Page 92: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/92.jpg)
public class Pagamento {
public void efetuaCobranca(@Observes Compra c) { // ... comunica com Cielo }}public class Estoque {
public void reservaMercadoria(@Observes Compra c) { // ... reserva produto no estoque }}
![Page 93: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/93.jpg)
maisdesacoplado!
![Page 94: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/94.jpg)
não quero cobraro cartão em teste
![Page 95: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/95.jpg)
public class Pagamento {
public void efetuaCobranca(@Observes Compra c) {WebServiceCielo.cobraDeVerdade(c.getCartao());
}}
![Page 96: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/96.jpg)
CDI
alternatives
![Page 97: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/97.jpg)
public class PagamentoDeVerdade {
}
public class PagamentoDeMentira {
}
![Page 98: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/98.jpg)
public class PagamentoDeVerdade {
public void efetuaCobranca(@Observes Compra c) {
}}
public class PagamentoDeMentira {
public void efetuaCobranca(@Observes Compra c) {
}}
![Page 99: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/99.jpg)
public class PagamentoDeVerdade {
public void efetuaCobranca(@Observes Compra c) {WebServiceCielo.cobraDeVerdade(c.getCartao());
}}
public class PagamentoDeMentira {
public void efetuaCobranca(@Observes Compra c) { LogDeTeste.fariaUmaCompraAqui(); }}
![Page 100: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/100.jpg)
public class PagamentoDeVerdade implements Pagamento {
public void efetuaCobranca(@Observes Compra c) {WebServiceCielo.cobraDeVerdade(c.getCartao());
}}
public class PagamentoDeMentira implements Pagamento {
public void efetuaCobranca(@Observes Compra c) { LogDeTeste.fariaUmaCompraAqui(); }}
![Page 101: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/101.jpg)
public class PagamentoDeVerdade implements Pagamento {
public void efetuaCobranca(@Observes Compra c) {WebServiceCielo.cobraDeVerdade(c.getCartao());
}}
@Alternativepublic class PagamentoDeMentira implements Pagamento {
public void efetuaCobranca(@Observes Compra c) { LogDeTeste.fariaUmaCompraAqui(); }}
![Page 102: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/102.jpg)
<beans> <alternatives> <class> br.com.caelum.PagamentoDeMentira </class> </alternatives></beans>
![Page 103: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/103.jpg)
CDI
extensions spi
![Page 104: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/104.jpg)
posso estendero próprio CDI!
![Page 105: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/105.jpg)
public class HelloExtension implements Extension {
}
![Page 106: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/106.jpg)
public class HelloExtension implements Extension {
<T> void hiBean(@Observes ProcessAnnotatedType<T> pat) {
}}
![Page 107: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/107.jpg)
public class HelloExtension implements Extension {
<T> void hiBean(@Observes ProcessAnnotatedType<T> pat) { Class<T> clazz = pat.getAnnotatedType().getJavaClass(); System.out.println("Hi! " + clazz.getName()); }}
![Page 108: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/108.jpg)
META-INF/services/javax.enterprise.inject.spi.Extension
br.com.caelum.HelloExtension
![Page 109: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/109.jpg)
posso modificaros beans do CDI
![Page 110: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/110.jpg)
public class ModulosOpcionaisExtension implements Extension{
}
![Page 111: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/111.jpg)
public class ModulosOpcionaisExtension implements Extension{
<T> void bloqueia(@Observes ProcessAnnotatedType<T> pat) {
}
}
![Page 112: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/112.jpg)
public class ModulosOpcionaisExtension implements Extension{
<T> void bloqueia(@Observes ProcessAnnotatedType<T> pat) { Class<T> clazz = pat.getAnnotatedType().getJavaClass(); String packageName = clazz.getPackage().getName();
}
}
![Page 113: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/113.jpg)
public class ModulosOpcionaisExtension implements Extension{
<T> void bloqueia(@Observes ProcessAnnotatedType<T> pat) { Class<T> clazz = pat.getAnnotatedType().getJavaClass(); String packageName = clazz.getPackage().getName(); if (deveSerBloqueado(packageName)) {
} }
private boolean deveSerBloqueado(String pkg) { // TODO ler um arquivo de config de módulos bloqueados? return pkg.startsWith("br.com.caelum.entrega"); }}
![Page 114: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/114.jpg)
public class ModulosOpcionaisExtension implements Extension{
<T> void bloqueia(@Observes ProcessAnnotatedType<T> pat) { Class<T> clazz = pat.getAnnotatedType().getJavaClass(); String packageName = clazz.getPackage().getName(); if (deveSerBloqueado(packageName)) { pat.veto(); } }
private boolean deveSerBloqueado(String pkg) { // TODO ler um arquivo de config de módulos bloqueados? return pkg.startsWith("br.com.caelum.entrega"); }}
![Page 115: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/115.jpg)
dá pra estendermuito mais
![Page 116: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/116.jpg)
decoratorsstereotypesinjection pointscustom scopesconversation scopemais de extensions
CDI+
![Page 117: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/117.jpg)
Você deveria usarCDI em todos os seus projetos Java!
CDI
![Page 118: Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérgio Lopes](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b6af324a7959ad7b8b45da/html5/thumbnails/118.jpg)
Obrigado!@sergio_caelum