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



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

Stateful Session Beans

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

ENTERPRISE JAVABEANS 3. Msc. Daniele Carvalho Oliveira

Enterprise Java Beans

Autenticação e Controle de Acesso

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

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

Java 2 Enterprise Edition Uma aplicação J2EE completa

J2EE. J2EE - Surgimento

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

UFG - Instituto de Informática

UFG - Instituto de Informática

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

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

Enterprise Java Bean. Enterprise JavaBeans

Mini-curso Gratuito Globalcode Slide 1

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

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

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

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

Java 2 Standard Edition Como criar classes e objetos

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

EJB 3.1: A Community Update

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

Prof. Fellipe Araújo Aleixo

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

Web Technologies. Tópicos da apresentação

4 Um Exemplo de Implementação

Tema: Oracle Weblogic Administration 11g

Argo Navis J931 - Padrões de Design J2EE. Versão 2.0 (setembro de 2003) Objetivos

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

Programação Orientada a Objetos JDBC Java Database Connectivity

UFG - Instituto de Informática

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

DESENVOLVIMENTO COM JAVA EE E SUAS ESPECIFICAÇÕES

Integrando Java com Banco de Dados

1.6. Tratamento de Exceções

J2EE TM Java 2 Plataform, Enterprise Edition

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

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

Java 2 Enterprise Edition Fundamentos básicos de Segurança

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Programação com Acesso a Banco de Dados

Aplicações Distribuídas Cliente/ Servidor Corporativas

JDBC Acessando Banco de Dados

(UFF) JDBC (I) TEPIS II

Gerenciamento de Transações

Adriano Reine Bueno Rafael Barros Silva

Enterprise Java Beans (III)

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

Guia de Fatores de Qualidade de OO e Java

Entity Beans. Introdução Entity Beans BMP

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

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

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

4 - Padrões da Camada de Integração. Introdução

HIBERNATE EM APLICAÇÃO JAVA WEB

Persistência de Dados em Java com JPA e Toplink

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Banco de Dados. Sérgio Luiz Ruivace Cerqueira

J2EE. Tecnologias de Middleware. Fernando Martins - fmp.martins@gmail.com

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

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

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

Prova Específica Cargo Desenvolvimento

Controle de transações em SQL

? O SQL SERVER é um sistema de gerenciamento de banco de dados relacional que foi desenvolvido inicialmente pela Microsoft em parceria com a Sybase.

FBV - Linguagem de Programação II. Um pouco sobre Java

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

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

Java JDBC - I. Ex. 2: para o SQLServer da Microsoft, o driver JDBC pode ser obtido em

Introdução ao kit J2EE SDK (Sun)

Relatório referente a compreensão da programação JSP. Realizado do dia de 22 abril de 2010 a 03 de maio de 2010.

Orientação a Objetos

JPA: Persistência padronizada em Java

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha

Banco de Dados. Aula 1 - Prof. Bruno Moreno 16/08/2011

GBC043 Sistemas de Banco de Dados. Introdução. Ilmério Reis da Silva UFU/FACOM

Acesso a Bancos de Dados em Java (JDBC)

Transcrição:

Java 2 Enterprise Edition Fundamentos básicos de Transações Helder da Rocha www.argonavis.com.br 1

Objetivos Apresentar conceitos essenciais sobre transações em aplicações J2EE Este curso não aborda o assunto em profundidade. Há vários tópicos importantes não mencionados Para uma abordagem mais profunda, consulte Capítulo sobre transações no J2EE Tutorial Capítulo sobre transações no livro Mastering EJB 2 Capítulo 17 da especificação EJB Módulo 12 do curso J530 (EJB) em www.argonavis.com.br Roteiro O que são transações; transações ACID Container-managed transactions Bean-managed transactions 2

O que são transações? Transações são uma técnica para simplificar a programação de aplicações Programador não precisa se preocupar com recuperação de falhas e programação para sistemas multiusuário São unidades atômicas de procedimento Sistema de transações garante que o procedimento ou termina com sucesso ou é completamente desfeita Suporte a transações é um componente essencial da arquitetura EJB Programador EJB pode escolher entre duas formas de demarcação de transações: explícita, ou programática (Bean-Managed - BMT), e implícita, ou declarativa (Container-Managed - CMT) 3

Commit e Rollback Uma transação engloba uma unidade de trabalho. Durante o processo, várias sub-operações são realizadas e resultados temporários são obtidos. No final, a transação é cometida (isto é o commit) e o resultado final é feito durável se cada sub-operação funcionar com sucesso. Caso alguma sub-operação falhe, um processo para reverter as alterações temporárias realizadas é iniciado. Isto é o rollback, e os dados envolvidos voltam aos estados que tinham antes do início da transação Estado Inicial Transação ocorrendo Transação desfeita (rolled-back) Falha! Sucesso! Estado Final Transação cometida 4

Transações são Ácidas! ACID - características essenciais de : ela deve ser Atômica, Consistente, Isolada e Durável Atômica Garante que todas as operações sejam tratadas como uma única unidade de trabalho. Todas as tarefas de uma unidade transacional devem funcionar sem erros ou todo o processo é revertido. Consistente O estado do sistema após deve manter-se consistente (transações devem englobar processos de negócio completos) Isolada Transação deve poder executar sem interferência de outros processos. Isto é possível utilizando sincronização. Durável Dados alterados durante a transações devem ser guardados em meio persistente até que a transação complete com sucesso 5

Demarcação de transações O controle de transações em J2EE resume-se a demarcação de transações Consiste apenas do controle de quando ela será iniciada e quando será concluída (ou desfeita) Há várias formas de demarcar transações Podem ser demarcadas no cliente (comuns, servlets, beans, etc.) e propagadas para os componentes Podem ser demarcadas no servidor, de duas formas: no container (implícita), usando declarações no DD, ou no bean (explícita), usando APIs como JTA, JDBC ou JMS 6

JTS e JTA JTS - Java Transaction Service é um mapeamento Java-CORBA da especificação Object Transaction Service (OTS 1.1) JTS é usado por fabricantes de containers Desenvolvedores de EJBs não precisam usar JTS (suporte por parte do container é opcional) Classes: org.omg.costransactions e outras JTA - Java Transaction API é uma especificação de interfaces para o sistema de transações JTA é utilizado por desenvolvedores de beans que têm controle explícito (programático) de transações (BMT) Suporte por parte do container é obrigatório Classes: javax.transaction.usertransaction e outras 7

Demarcação explícita de transações Consiste em utilizar alguma API de controle de transações diretamente no código É preciso informar ao container que bean está usando Bean-Managed Transactions (BMT) através do deployment descriptor: <transaction-type>bean</transaction-type> No código, use uma API para demarcar o início e o fim das transações: JTA, JDBC ou JMS Métodos de Connection (java.sql) Métodos de QueueSession ou TopicSession (javax.jms) Métodos de UserTransaction (javax.transaction) 8

Transações com JDBC - exemplo (...) public void ship (String productid, String orderid, int quantity) { try { con.setautocommit(false); // con é java.sql.connection updateorderitem(productid, orderid); updateinventory(productid, quantity); con.commit(); } catch (Exception e) { try { con.rollback(); throw new EJBException("Transaction failed: " + e.getmessage()); } catch (SQLException sqx) { throw new EJBException("Rollback failed: " + sqx.getmessage()); } } } WarehouseBean.java 9

Transações explícitas com JTA Estado de variável de instância NÃO será revertido em caso de rollback() (...) public void withdrawcash(double amount) { UserTransaction ut = sessionctx.getusertransaction(); try { double mbstate = machinebalance; ut.begin(); updatechecking(amount); machinebalance -= amount; insertmachine(machinebalance); ut.commit(); } catch (Exception ex) { try { ut.rollback(); machinebalance = mbstate; } catch (SystemException syex) { throw new EJBException EJBContext do bean (SessionContext ou MessageDrivenContext) ("Rollback failed: " + syex.getmessage()); } throw new EJBException ("Transaction failed: " + ex.getmessage()); } } TellerBean.java 10

Propagação de transações Transações terminam no mesmo lugar onde começaram Pode-se melhorar a performance de uma operação que faz muitas chamadas (principalmente se forem chamadas a Entity Beans) colocando-a no contexto de O contexto da transação será propagado para todos os métodos chamados (se não iniciarem nova transação) Se métodos chamados iniciarem nova transação, a transação principal será suspensa até que o método termine Session EJB Object Session Bean Entity EJB Local Object Entity Bean Session EJB Object Transação suspensa (será reiniciada quando método retornar) Session Bean Transação iniciada no container Entity EJB Local Object Entity EJB Local Object Entity Bean Entity Bean 11

Controle implícito (declarativo) Container-Managed Transactions (CMT) Controle de transações totalmente gerenciado pelo container Não permite o uso de métodos commit() e rollback() de java.sql.connection ou javax.jms.session dentro do código Única forma de controlar transações em Entity Beans No deployment descriptor, espeficique o uso de CMT abaixo de <session> ou <message-driven> <transaction-type>container</transaction-type> Depois, defina a política de transações para cada método <assembly-descriptor> <container-transaction> <method>... </method> <trans-attribute>required</trans-attribute> </container-transaction> (...) </assembly-descriptor> 12

Demarcação declarativa - exemplo <ejb-jar> <enterprise-beans> <session> <ejb-name>bankejb</ejb-name> <home>j2eetut.bank.bankhome</home> <remote>j2eetut.bank.bank</remote> <ejb-class>j2eetut.bank.bankbean</ejb-class> <session-type>stateful</session-type> <transaction-type>container</transaction-type> (...) </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>bankejb</ejb-name> <method-name>getsavingbalance</method-name> </method> (... outros <method>...) <trans-attribute>required</trans-attribute> </container-transaction> (...) </assembly-descriptor> </ejb-jar> O método getsavingsbalance(...) do bean BankEJB tem controle de transações demarcado durante a sua execução usando a política Required bank-ejb-jar.xml 13

Atributos (políticas transacionais) em CMT O elemento <trans-attribute> define a política transacional do componente Define como ele irá reagir quando o seu método for chamado por um cliente dentro ou fora do contexto de Os valores suportados para este elemento (depende do tipo de bean) são NotSupported Supports Required RequiresNew Mandatory Never Use este sempre que possível em Entity Beans, Message-driven beans e Session Beans 14

Required Indica que o método tem que ser chamado dentro do escopo de Se não existe transação, uma nova é criada e dura até que o método termine (é propagada para todos os métodos chamados) Se já existe iniciada pelo cliente, o bean é incluído no seu escopo durante a chamada do método não está no contexto (EJB ou aplicação) chama metodo() que tem atributo Required EJB Bean cria nova transação está no contexto de (EJB ou aplicação) chama metodo() que tem atributo Required Bean é incluido na transação EJB 15

Supports Indica que o método suporta transações Será incluído no escopo da transação do cliente se existir Se ele for chamado fora do escopo de ele realizará suas tarefa sem transações e pode chamar objetos que não suportam transações não está no contexto (EJB ou aplicação) chama metodo() que tem atributo Supports Método é executado sem transação EJB está no contexto de (EJB ou aplicação) chama metodo() que tem atributo Supports Bean é incluido na sua transação EJB 16

RequiresNew Indica que uma nova transação, iniciada no escopo do bean, é sempre criada Estando ou não o cliente no escopo de, o bean irá iniciar uma nova transação que iniciará e terminará no bean. não está no contexto (EJB ou aplicação) chama metodo() que tem atributo RequiresNew EJB Bean cria nova transação está no contexto de (EJB ou aplicação) Transação é suspensa chama metodo() que tem atributo RequiresNew EJB Bean cria nova transação Transação é reiniciada 17

NotSupported Indica que o método não suporta transações Se o método for chamado pelo cliente no escopo de uma transação, a mesma será suspensa enquanto durar a chamada do método (não haverá propagação de transações do cliente) não está no contexto (EJB ou aplicação) chama metodo() que tem atributo NotSupported Método é executado sem transação EJB está no contexto de (EJB ou aplicação) Transação é suspensa chama metodo() que tem atributo NotSupported Transação é reiniciada Método executado sem transação EJB 18

Mandatory Indica que o método só pode ser chamado no escopo de do cliente Se o método for chamado fora de, ele causará javax.transaction.transactionrequiredexception (ou javax.ejb.transactionrequiredlocalexception) não está no contexto (EJB ou aplicação) chama metodo() que tem atributo Mandatory Exception Método provoca exceção EJB está no contexto de (EJB ou aplicação) chama metodo() que tem atributo Mandatory Bean é incluido na sua transação EJB 19

Never Indica que o método nunca pode ser chamado no escopo de Se o cliente que chama o método for parte de uma transação, o bean irá provocar um RemoteException (ou EJBException em clientes locais) não está no contexto (EJB ou aplicação) chama metodo() que tem atributo Never Método é executado sem transação EJB está no contexto de (EJB ou aplicação) chama metodo() que tem atributo Never Remote ou EJBException Método provoca exceção EJB 20

Suporte de atributos por tipo de bean Nem todos os atributos são suportados em qualquer tipo de bean. A tabela abaixo relaciona os atributos suportados por cada tipo. Atributo Stateful com SessionSynchronization Session Beans Stateful Stateless Entity Beans Message Driven Beans Required RequiresNew Supports NotSupported Mandatory Never Fonte: [2] 21

Transações e exceções A especificação J2EE classifica exceções em 2 tipos System exceptions Application exceptions System exceptions São exceções que indicam erros no servidor e serviços usados pela aplicação São instâncias de RemoteException e RuntimeException Causam rollback automático de transações Application exceptions São exceções que indicam erros na lógica da aplicação Consistem de todas as subclasses de Exception exceto as classes que são System Exceptions Por mais graves que sejam, não causam rollback 22

Conclusões O serviço de transações é importante para garantir a integridade dos dados Use sempre que necessário (obrigatório em Entity Beans) Use CMT sempre que possível Muito mais simples Menos risco de deadlock e gargalos de performance Separação de papéis (deployer pode ajustar o mehor emprego de políticas transacionais) Utilize apenas onde realmente for necessário Nem sempre um método precisa estar em Se bem planejadas, o uso de transações pode melhorar a performance de aplicações EJB A sincronização (load/store) ocorre uma vez por transação 23

Fontes [1] Ed Roman et al. Mastering Enteprise JavaBeans, 2nd. Edition, Chapter 10: Transactions. John Wiley & Sons, 2002. [2] Linda de Michiel et al. Enterprise JavaBeans 2.1 Specification, Chapter 17: Support for Transactions. Sun Microsystems, 2003. [3] Richard Monson-Haefel. Enterprise JavaBeans, 3rd. Edition. O'Reilly and Associates, 2001 [4] Dale Green. J2EE Tutorial: Transactions. Sun J2EE Tutorial, Sun Microsystems, 2002 [5] Jim Farley et al. Java Enterprise in a Nutshell, 2nd. Edition. O'Reilly & Associates 2002. 24

helder@argonavis.com.br argonavis.com.br Revisão 1.5 - Junho 2003 25