EJB 3.1: A Community Update



Documentos relacionados
Explorando os novos recursos de EJB 3.1. Fabio Velloso

TDC2012. EJB simples e descomplicado, na prática. Slide 1

ENTERPRISE JAVABEANS 3. Msc. Daniele Carvalho Oliveira

EJB ainda tem vez no Java EE 6? Fernando Lozano Consultor 4Linux

Enterprise Java Beans

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

Mini-curso Gratuito Globalcode Slide 1

Arquitetura JEE Introdução à Camada de Negócios: Enterprise Java Beans (EJB) Marcos Kalinowski

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas) Sumário. Java 2 Enterprise Edition. J2EE (Java 2 Enterprise Edition)

Fundamentos da Plataforma Java EE. Prof. Fellipe Aleixo

J2EE. J2EE - Surgimento

UFG - Instituto de Informática

Sistemas Distribuídos e Tolerância a Falhas Mestrado em Engenharia Informática 1ª ano / 2ª semestre

Experiência em missão crítica de missão crítica

Java EE 6. A revolução do. Um overview sobre as novidades da JSR 316. a r t i g o

Prof. Fellipe Araújo Aleixo

UFG - Instituto de Informática

Prova Específica Cargo Desenvolvimento

UTILIZAÇÃO DA TECNOLOGIA ENTERPRISE JAVABEANS NO DESENVOLVIMENTO DE APLICAÇÕES DISTRÍBUIDAS

EJB. Session Beans. J2EE (C. Geyer) Introdução a SessionBean 1

Spring: Um suite de novas opções para Java EE

Como sobreviver com Java 2? Saulo Arruda

Capítulo 1 - Java EE 6 por alto - 1

UFG - Instituto de Informática

JPA: Persistência padronizada em Java

Java 2 Enterprise Edition Fundamentos básicos de Transações

Message Driven Beans. Apresentação. Introdução Implementação de MDBs Deployment no JBoss Java Messaging Service Exemplo

JPA Passo a Passo. Henrique Eduardo M. Oliveira henrique@voffice.com.br. Globalcode Open4Education

Enterprise Java Bean. Enterprise JavaBeans

Componentes no Java EE

Java e Banco de Dados: JDBC, Hibernate e JPA

Artigo JavaMagazine (edição 58)

Enterprise Java Beans (III)

Laboratório EJB e J2EE Uma aplicação completa

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

Programação e Configuração de Aplicações JEE. Edilmar Alves

Stateful Session Beans

Framework. Marcos Paulo de Souza Brito João Paulo Raittes

Palavras-chave: clínica de psicologia, Java EE 6, Web Profile, EBJ Lite, sistema de gerenciamento.

Arquitetura JEE COFEN Analista de Sistemas CREA/RJ Analista de Sistemas

ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE

Java 2 Enterprise Edition Uma aplicação J2EE completa

Serviço de Transação. Transação - Conceitos

J530 - Enterprise JavaBeans. Introdução a EJB e Stateless. Session Beans. argonavis.com.br. Helder da Rocha (helder@acm.org)

Web Technologies. Tópicos da apresentação

Boas Práticas no desenvol Aprenda a desenvolver componentes e serviços

Aplicação da Arquitetura Multicamadas Utilizando Java. Raquel Schlickmann Orientador: Marcel Hugo

Argo Navis J931 - Padrões de Design J2EE. Introdução. Objetivos de aprender padrões J2EE. Conhecer padrões para uso na plataforma J2EE

Aplicações Distribuídas Cliente/ Servidor Corporativas

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Programação Concorrente em java - Exercícios Práticos Abril 2004

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Desenvolvimento Web com Framework Demoiselle versão 1.0

UNIVERSIDADE FEDERAL DA BAHIA INSTITUTO DE MATEMÁTICA CIÊNCIA DA COMPUTAÇÃO LINGUAGENS PARA APLICAÇÃO COMERCIAL. Java Peristence API 1.

Enterprise JavaBeans. Java Deployment Course. por Jorge H. C. Fernandes DI-UFPE Julho de 1999

Erick Ferreira Macedo

Projeto Demoiselle. Para perguntas e respostas, utilizem a lista de discussões de usuários da comunidade: demoiselle-users@lists.sourceforge.

Curso de Linguagem Java

Arquiteturas de Aplicações Web. Leonardo Gresta Paulino Murta

SISTEMA DE AGENDAMENTO E GERENCIAMENTO DE CONSULTAS CLÍNICAS

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

PROJETO PEDAGÓGICO DE CURSOS

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Fábrica de Software 29/04/2015

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Tecnologias Web. Java Enterprise Edition

J530 - Enterprise JavaBeans. Relacionamentos em EJB com. CMP e BMP. argonavis.com.br. Helder da Rocha (helder@acm.org)

WebWork 2. João Carlos Pinheiro.

HIBERNATE EM APLICAÇÃO JAVA WEB

Curso - Padrões de Projeto Módulo 2: Padrões de Criação

Web Services utilizando JAX-WS

Projetos Corporativos Baseados na Tecnologia Java Que Falham: O Que Podemos Aprender Deles?

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Tecnologia Java. Daniel Destro do Carmo Softech Network Informática

Desenvolvimento Web Avançado com JSF2, EJB3.1 e CDI

J2EE TM Java 2 Plataform, Enterprise Edition

JAVA ENTERPRISE EDITION: PERSISTÊNCIA DE BANCO DE DADOS

Autenticação e Controle de Acesso

DESENVOLVIMENTO COM JAVA EE E SUAS ESPECIFICAÇÕES

Aspectos técnicos do desenvolvimento baseado em componentes

Java II. Sérgio Luiz Ruivace Cerqueira

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ UTFPR CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS LUCAS JOSÉ MERENCIA

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

REFLEXÃO EM JAVA. INVERSÃO DE DEPENDÊNCIA FACTORY METHODS FACTORY CLASSES IoC, CONTAINERS e BEANS SPRING PARTE III

Web Services. (Introdução)

SCC Técnicas de Programação para WEB. Rodrigo Fernandes de Mello

Desktop em minutos com genesis, Matisse, Java WebStart e JSR-296

Middleware de Aplicações Paralelas/Distribuídas

Lidando de Forma Eficiente com Validações Locais de Objetos

Programação de Computadores - I. Profª Beatriz Profº Israel

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Transcrição:

EJB 3.1: A Community Update Reza Rahman Autor, EJB 3 in Action Expert Group Member, Java EE 6 and EJB 3.1 Fundador, Cognicellence Julho de 2008 1

EJB 3.0: Revisão Breve > As grandes mudanças > EJB simplificado > Java Persistence API > A queda dos EJB 2.x Entity Beans > Foco na facilidade de uso > programação POJO > Annotations desde o começo > Não mais configuração XML > Defaults inteligentes > Injeção de dependência > Bem recebido pela comunidade, apesar dos céticos > EJB 3.1 mantém a facilidade de uso e traz mais features 2

EJB 3.1: Novidades > Interfaces opcionais para Session Bean > Singleton Beans com controle de concorrência > Timers declarativos e programáticos no estilo Cron > Invocações assíncronas > Empacotamento WAR simplificado > Suporte em runtime para Java SE > Nomes JNDI globais padronizados > EJB Lite 3

Interfaces Opcionais para Session Bean > Acoplamento fraco através de interfaces não é sempre necessário > Um Session Bean é apenas uma classe bean com annotations > Todos métodos públicos são métodos de negócio > O Cliente tem referencia direta à classe bean > Especialmente útil ao usar Session Beans como backing beans JSF com WebBeans/Seam 4

Session Bean sem interface @Stateless public class PlaceBidBean { @PersistenceContext private EntityManager entitymanager; public void placebid(bid bid) { entitymanager.persist(bid); @EJB private PlaceBidBean placebid; placebid.placebid(bid); 5

Singleton Beans > Novo tipo de Session Bean > Instância única para a aplicação inteira > Ótimo para estado compartilhado > Pode ser usado como listener de ciclo de vida do container > Thread-safe garantido por default > Permite controle de concorrência mais refinado > Controle de concorrência poderia ser aplicado a Stateful Session Beans também? 6

Singleton Bean Simples @Singleton public class DiscountRateBean { private Rate rate; @PostConstruct private void init() { rate = @ConcurrencyAttribute(READ_WRITE_LOCK) public void setrate(rate rate) { this.rate = rate; @ConcurrencyAttribute(READ_LOCK) public Rate getrate() { return rate; 7

Singleton com Concorrência Bean-Managed @Singleton @ConcurrencyManagement(BEAN) public class DiscountRateBean { private Rate rate; @PostConstruct private void init() { rate = public synchronized void setrate(rate rate) { this.rate = rate; public synchronized Rate getrate() { return rate; 8

Timers estilo Cron > Agendamentos sem dor de cabeça, como no Cron, sem o inferno das configurações > Ambos Timers declarativos e programaticos > Reuso da semântica do Cron em vez de reinventar a roda, com melhorias na usabilidade 9

Timers Programáticos estilo Cron @Stateless public class NewsLetterGeneratorBean { @Resource private Session mailsession; @Schedule(second="0", minute="0", hour="0", dayofmonth="1", month="*", year="*") public void generatemonthlynewsletter() { 10

Cron-like Programmatic Timers @Stateless public class WatchListAlertBean { @Resource private Session mailsession; @Resource private TimerService timerservice; public void addwatchlistalert(watchlistalert alert) { ScheduleExpression schedule = new ScheduleExpression().dayOfWeek(alert.getWeekday()).hour(alert.getHour()); timerservice.createtimer(schedule, alert.getwatchlist()); @Timeout private void sendwatchlistalert(timer timer) { 11

Sintaxe de Expressões Timer > Atributos suportados > second (0-59), minute (0-59), hour (0-23) > Default = 0 > dayofmonth (1-31), month (1-12, Jan-Dec), dayofweek (0-7, Sun-Sat), year > Default = * >Sintaxe de atributos > Valor simples: minute= 30 > Lista: month= Jan, Jul, Dec > Faixa de valores: dayofweek= Mon-Fri > Coringa: hour= * > Outros?: minute= */15, dayofmonth= L 12

Invocações Assíncronas >Processamento assíncrono é uma necessidade comum para muitos sistemas > Usualmente evitado pela dificuldade de implementação (JMS é o mecanismo mais comum) > Combinação natural com o modelo de componentes EJB 3 > Métodos assíncrono podem ter tipo de retorno void ou java.util.concurrent.future<v> > Future<V> permite controle refinado, como resultado de processamento, tratamento de exceções e cancelamento do processamento 13

Session Bean Assíncrono @Stateless public class OrderBillingBean { @Asynchronous public Future<BillingStatus> billorder(order order) { try { bill(order); return new AsyncResult<BillingStatus>( BillingStatus.COMPLETE); catch (BillingException be) { return new AsyncResult<BilllingStatus>( BillingStatus.BILLING_FAILED); 14

Invocação Cliente Assíncrona @EJB private OrderBillingBean orderbilling; Order order = new Order(); Future<BillingStatus> future = orderbilling.billorder(order); BillingStatus status = future.get(); if (status == BillingStatus.COMPLETE) { notifybillingsuccess(order); else if (status == BillingStatus.BILLING_FAILED) { notifybillingfailure(order); 15

Session Bean Assíncrono com Cancelamento @Stateless public class OrderBillingBean { @Resource private SessionContext context; @Asynchronous public Future<BillingStatus> billorders( List<Order> orders) { for (Order order: orders) { if (!context.iscancelled()) { bill(order); 16

Invocação Assíncrona com Cancelamento @EJB private OrderBillingBean orderbilling; Future<BillingStatus> future = orderbilling.billorders(orders); future.cancel(true); 17

Empacotamento WAR Simplificado > As regras de modularização determinadas pelo empacotamento Java EE tradicional podem ser excessivas, especialmente para aplicações web de porte pequeno/médio > Empacotamento simplificado permitem o posicionamento de componentes EJB diretamente no WAR em vez de num EJB-JAR separado. > Funcionalidade total de EJB continua disponível > Já existente em muitos containers EJB embutidos como OpenEJB ou Embedded JBoss que podem ser utilizados com Tomcat 18

Empacotamento Java EE 5 19

EJB 3.1: Empacotamento WAR Simplificado 20

EJB 3.1 Java SE Runtime Support > Deveria ser possível executar componentes EJB fora do container > Especialmente importante para testes de unidade > Separado e aparte do suporte EJB a clientes JavaSE via Application Client Containers, como GlassFish ACC > Já possível via containers embutidos como OpenEJB, Embedded JBoss e EasyBeans 21

EJB 3 Java SE Runtime public class PlaceBidApplication { public static void main(string[] arguments) { Bid bid = new Bid(); PlaceBidBean placebidbean = (PlaceBidBean) new InitialContext().lookup( placebidbean ); placebidbean.placebid(bid); 22

EJB 3 Unit Testing @RunWith(EJB3Runner.class) public class UserBeanTest { @EJB private UserBean userbean; @Test public void getuser() { User user = userbean.getuser( rrahman ); assertnotnull(user); assetequals(user.getfirstname(), Reza ); assetequals(user.getlastname(), Rahman ); 23

Nomes JNDI Globais Padronizados > Uma das últimas questões sérias de portabilidade > mappedname é um começo, mas insuficiente, desde que é dependente de fabricante > Precisa ser endereçado no nível da plataforma JavaEE > Alguns fabricantes estão resistentes, desde que isso requer um escopo global JNDI bem definido, e torna redundantes os mapeamentos manuais via ferramentas de deployment! > Sua ajuda é necessária aqui 24

Nomes JNDI Globais em EJB @Stateless public class PlaceBidBean implements PlaceBid { @PersistenceContext private EntityManager entitymanager; public void placebid(bid bid) { entitymanager.persist(bid); @Remote public interface PlaceBid { public void placebid (Bid bid); action-bazaar.ear ------> action-bazaar-ejb.jar ------> PlaceBidBean.java PlaceBid.java 25

Nomes JNDI Globais em EJB @EJB(mappedName=?) private PlaceBid placebid; PlaceBid placebid = (PlaceBid) new InitialContext().lookup(?); nome JNDI global no JBoss nome JNDI global no GlassFish nome JNDI global no WebSphere CE nome JNDI global padronizado action-bazaar/placebidbean/remote PlaceBid action-bazaar-ejb/placebidbean/placebid action-bazaar/action-bazaar-ejb/placebidbean/placebid 26

EJB Lite > Funcionalidades completas de EJB, como acesso remoto e messageria, podem ser desnecessárias em vários ambientes > Permite um caminho de upgrade suave, quando necessário > Torna possível criar um container sem implementar funcionalidades legadas do EJB 2.x, como interfaces home, RMI-IIOP suporte a Entity Beans > Talvez um container construído sobre o Spring e levando o projeto PitchFork ao próximo nivel? > Torna possível criar containers EJB 3.1 modulares 27

Features EJB Lite Feature Stateless beans Stateful beans Singleton beans Message driven beans No interfaces Local interfaces Remote interfaces Web service interfaces Asynchronous invocation Interceptors Declarative security Declarative transactions Programmatic transactions Timer service EJB 2.x support CORBA interoperability 28 EJB Lite EJB

Summary > Continua o caminho da simplicidade sem sacrificar o poder > Interfaces opcionais para Session Bean > Empacotamento WAR simplificado > Nomes JNDI globais padronizados > EJB Lite > Mais serviços de container > Singleton Beans com controle de concorrência > Timers declarativos e programáticos estilo Cron > Invocação assíncrona de EJBs > Suporte em runtime para Java SE > WebBeans > Integração mais próxima com JSF > Injeção de Dependência type-safe, orientada a anotações > Melhorias nos interceptadores > JPA 2 > Constraints API > Criteria API 29

Referências New Features in EJB 3.1, http://www.theserverside.com/tt/articles/article.tss?l=newfeaturesinejb3-1 New Features in EJB 3.1 - Part 2, http://www.theserverside.com/tt/articles/article.tss?l=newfeaturesejb31 New Features in EJB 3.1 - Part 3, http://www.theserverside.com/tt/articles/article.tss?l=newfeaturesejb31-3 New Features in EJB 3.1 Part 4, http://www.theserverside.com/tt/articles/article.tss?l=newfeaturesinejb3-part4 JSR 316: Java EE 6, http://jcp.org/en/jsr/detail?id=316 Envie comentários para: jsr-316-comments@jcp.org JSR 318: Enterprise JavaBeans 3.1, http://jcp.org/en/jsr/detail?id=318 Envie comentários para : jsr-318-comments@jcp.org JSR 299: Web Beans, http://jcp.org/en/jsr/detail?id=299 Envie comentários para : jsr-299-comments@jcp.org 30