JPA Demonstração das Estratégias Optimistic Locking e Pessimistic Locking

Tamanho: px
Começar a partir da página:

Download "JPA Demonstração das Estratégias Optimistic Locking e Pessimistic Locking"

Transcrição

1 JPA Demonstração das Estratégias Optimistic Locking e Pessimistic Locking Locking é uma técnica para tratamento de concorrência em transações em bases de dados. Quando duas ou mais transações em bases de dados acedem ao mesmo dado, locking permite assegurar que apenas uma transação de cada vez consegue mudar esse dado. Em JPA há duas estratégias para tratar o locking: optimistic locking pessimistic locking. Como exemplo vamos considerar as atualizações do saldo de uma conta após dois depósitos realizados aproximadamente ao mesmo tempo. programa1 programa2 Inicia transação Inicia transação Lê objeto Lê objeto Efetua depósito 1 Efetua depósito 2 Efetua commit Efetua commit Quando dois programas podem modificar o mesmo dado, se ambos os programas realizam a sequência ler-modificar-escrever de um modo intercalado podem corromper esse dado. Só o último depósito afeta o saldo perdendo-se a primeira modificação. No exemplo que vamos apresentar, uma conta tem o saldo inicial de 100. O programa1 efetua um depósito de 20 e o programa2 efetua um depósito de 30 na mesma conta, realizando as sequências ler-modificar-escrever de um modo intercalado. A primeira modificação do saldo perde-se e só o último depósito afeta o saldo, obtendose o saldo final de 130.

2 Setup 1. H2 em modo servidor para permitir múltiplas ligações simultâneas Configurar driver na Unidade de Persistência Configurar h2 para modo Servidor preencher JDBC URL com JDBC URL: jdbc:h2:tcp://localhost/~/bd/contas Ficheiro persistence.xml: <?xml version="1.0" encoding="utf-8"?> <persistence version="2.1" xmlns=" xmlns:xsi=" xsi:schemalocation=" <persistence-unit name="jpa2pu" transaction-type="resource_local"> <provider>org.eclipse.persistence.jpa.persistenceprovider</provider> <class>conta</class> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/bd/contas"/> <property name="javax.persistence.jdbc.user" value=""/> <property name="javax.persistence.jdbc.driver" value="org.h2.driver"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.schema-generation.database.action" value="create"/> <property name="eclipselink.logging.level.sql" value="fine"/> <property name="eclipselink.logging.parameters" value="true"/> </properties> </persistence-unit> </persistence> 2. Criar as classes Conta, Iniciar, Util, UtilizadorA e public class = GenerationType.IDENTITY) private int id; private double saldo; private Conta() { public Conta(double depositoinicial) { this.saldo = depositoinicial; public double getsaldo() { return saldo; public void depositar(double deposito) { saldo += deposito;

3 public class Iniciar { public static void main(string[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA2PU"); EntityManager em = emf.createentitymanager(); em.gettransaction().begin(); Conta conta = new Conta(100); em.persist(conta); em.gettransaction().commit(); em.close(); emf.close(); public class Util { public static void parar(string msg) { try { System.out.println(msg); System.in.read(); catch (Exception e) { public class UtilizadorA { public static void main(string[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA2PU"); EntityManager em = emf.createentitymanager(); em.gettransaction().begin(); Conta conta = em.find(conta.class, 1); Util.parar("A: Saldo=" + conta.getsaldo() + " Continuar?"); conta.depositar(20); Util.parar("A: Saldo=" + conta.getsaldo() + " Continuar?"); em.gettransaction().commit(); em.close(); emf.close(); System.out.println("A (Fim) - Saldo: " + conta.getsaldo()); public class UtilizadorB { public static void main(string[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA2PU"); EntityManager em = emf.createentitymanager(); em.gettransaction().begin(); Conta conta = em.find(conta.class, 1); Util.parar("B: Saldo=" + conta.getsaldo() + " Continuar?"); conta.depositar(30); Util.parar("B: Saldo=" + conta.getsaldo() + " Continuar?"); em.gettransaction().commit(); em.close(); emf.close(); System.out.println("B (Fim) - Saldo: " + conta.getsaldo());

4 3. Iniciar h2 em modo servidor h2: h2\bin\h2.bat 4. Executar o método main da classe Iniciar A base de dados é criada. 5. Inspecionar a base de dados criada usando a página H2 Console Sem Locking 6. Executar intercaladamente os métodos main da classe UtilizadorA e da classe UtilizadorB. Aplicação funciona incorretamente: Só o último depósito afeta o saldo perdendo-se a primeira modificação. Numa conta com o saldo de 100 são efetuados dois depósitos, um de 20 e outro de 30, resultando num saldo final de apenas 130.

5 Com Optimistic Locking Para usar a estratégia otimista é necessário adicionar uma propriedade dedicada à persistência para guardar na base de dados o número da versão da public class Conta private int versionid = GenerationType.IDENTITY) private int id; private double saldo; private Conta() { public Conta(double depositoinicial) { this.saldo = depositoinicial; public double getsaldo() { return saldo; public void depositar(double deposito) { saldo += deposito; Este campo de dados versão: Não deve ser modificado pela aplicação Pode ser numérico ou timestamp mas um valor numérico é recomendado É definido pela No commit da transação a coluna versão da entidade: Na estratégia optimistic é incrementada se o estado da entidade mudou durante a transação Na estratégia optimistic_force_increment é incrementada mesmo se o estado da entidade não mudou durante a transação Em qualquer uma das duas estratégias otimistas, se no commit da transação, a entidade tem na base de dados uma versão diferente da versão que tinha quando foi carregada, uma exceção OptimisticLockException é lançada, significando que outro programa entretanto modificou a entidade. Podemos apanhar esta exceção e decidir o que fazer. O locking otimista deixa transações concorrentes processar simultaneamente, permitindo ler e atualizar uma entidade, mas deteta colisões, verificando no commit se a versão foi atualizada na base de dados desde que a entidade foi lido, caso em que lança uma exceção.

6 A estratégia otimista deve ser usada quando se assume que a maior parte das transações concorrentes não entram em conflito. As vantagens desta estratégia são não necessitar de colocar locks na base de dados o que dá melhor escalabilidade. A desvantagem é que a aplicação deve refrescar e voltar a tentar atualizações que falhem. Locking de uma entidade Existem 5 tipos de locking: OPTIMISTIC OPTIMISTIC_FORCE_INCREMENT PESSIMISTIC_READ PESSIMISTIC_WRITE PESSIMISTIC_FORCE_INCREMENT 7. Classe Conta com atributo version Alteração apenas da classe Conta para inclusão do atributo version. Sem try catch Necessário criar novamente a base de dados porque agora a tabela Conta tem mais uma coluna (versionid) Executar intercaladamente os métodos main da classe UtilizadorA e da classe UtilizadorB Aplicação funciona incorretamente Programa termina com exceção lançada.

7 Método main do UtilizadorB: UPDATE CONTA SET SALDO =?, VERSIONID =? WHERE ((ID =?) AND (VERSIONID =?)) bind => [130.0, 2, 1, 1] Este método main termina com exceção lançada: The object cannot be updated because it has changed or been deleted since it was last read. Só o primeiro depósito afeta o saldo perdendo-se a última modificação. Nesta versão do programa duas transações concorrentes tentam atualizar o saldo de um objeto conta. No commit da primeira transação JPA incrementa o atributo versionid da conta na base de dados. Quando a segunda transação efetua o commit, JPA lança uma exceção OptimisticLockException porque o atributo versionid da entidade conta é diferente do valor que tinha quando a entidade conta foi lida, e a transação é rolled back. A aplicação deve refrescar e voltar a tentar efetuar updates que falham. Com try catch public class UtilizadorC { public static void main(string[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA2PU"); EntityManager em = emf.createentitymanager();

8 boolean depositado = false; do { try { em.gettransaction().begin(); Conta conta = em.find(conta.class, 1); Util.parar("C: Saldo=" + conta.getsaldo() + " Continuar?"); conta.depositar(20); Util.parar("C: Saldo=" + conta.getsaldo() + " Continuar?"); em.gettransaction().commit(); depositado = true; catch (final Exception e) { System.out.println("Saldo mudou desde que foi lido. Tente outra vez."); while (!depositado); em.close(); emf.close(); public class UtilizadorD { public static void main(string[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA2PU"); EntityManager em = emf.createentitymanager(); boolean depositado = false; do { try { em.gettransaction().begin(); Conta conta = em.find(conta.class, 1); Util.parar("C: Saldo=" + conta.getsaldo() + " Continuar?"); conta.depositar(30); Util.parar("C: Saldo=" + conta.getsaldo() + " Continuar?"); em.gettransaction().commit(); depositado = true; catch (final Exception e) { System.out.println("Saldo mudou desde que foi lido. Tente outra vez."); while (!depositado); em.close(); emf.close(); Executar intercaladamente os métodos main da classe UtilizadorC e da classe UtilizadorD Aplicação funciona corretamente

9 Output do método main de UtilizadorD: SELECT ID, SALDO, VERSIONID FROM CONTA WHERE (ID =?) bind => [1] C: Saldo=100.0 Continuar? C: Saldo=130.0 Continuar? UPDATE CONTA SET SALDO =?, VERSIONID =? WHERE ((ID =?) AND (VERSIONID =?)) bind => [130.0, 2, 1, 1] org.eclipse.persistence.exceptions.optimisticlockexception Exception Description: The object cannot be updated because it has changed or been deleted since it was last read. Saldo mudou desde que foi lido. Tente outra vez. SELECT ID, SALDO, VERSIONID FROM CONTA WHERE (ID =?) bind => [1] C: Saldo=120.0 Continuar? C: Saldo=150.0 Continuar? UPDATE CONTA SET SALDO =?, VERSIONID =? WHERE ((ID =?) AND (VERSIONID =?)) bind => [150.0, 3, 1, 2] A aplicação funciona corretamente. O primeiro depósito é efetuado, o segundo depósito lança a exceção OptimisticLockException, mas a aplicação volta a tentar e efetua corretamente o segundo depósito. Ao adicionar o atributo version a uma entidade, JPA usa, por omissão, a estratégia Optimistic Locking, se nenhuma outra estratégia é configurada.

10 Com Pessimistic Locking 8. Configurar as aplicaçãoes com a estratégia pessimistic locking O lock numa entidade é colocado pelo EntityManager (em). Pode ser especificado com um dos seguintes valores: LockModeType.OPTIMISTIC LockModeType.OPTIMISTIC_FORCE_INCREMENT LockModeType.PESSIMISTIC_READ LockModeType.PESSIMISTIC_WRITE LockModeType.PESSIMISTIC_FORCE_INCREMENT Pode ser colocado: Quando a entidade é carregada da base de dados através do método find Conta conta = em.find(conta.class, contapk, LockModeType.PESSIMISTIC_WRITE); Através do método refresh em.refresh(conta, LockModeType.PESSIMISTIC_WRITE); Quando carregada através de uma query: Query query = em.createquery(...); query.setlockmode(lockmodetype.pessimistic_write); Depois de ser carregada da base de dados: em.lock(conta, LockModeType. PESSIMISTIC_WRITE); O modo lock de uma entidade pode ser obtido: LockModeType modolock = em.getlockmode(entity); No locking pessimistic, em vez de esperar até ao commit da transação, na esperança de que nenhuma outra transação tenha mudado os dados, um lock na base de dados é obtido imediatamente. Assim a transação nunca falha, contudo também não permite execução paralela de transações. O locking pessimistic é efetuado ao nível da base de dados enquanto o locking optimistic é efetuado ao nível da entidade. Locks pessimistas são propagados para a base de dados usando queries SQL. Se existe um lock pessimista, a aplicação espera pela base de dados até o lock ser liberto, não lançando exceção. public class UtilizadorA { public static void main(string[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA2PU");

11 EntityManager em = emf.createentitymanager(); em.gettransaction().begin(); Conta conta = em.find(conta.class, 1); em.lock(conta, LockModeType.PESSIMISTIC_WRITE); Util.parar("A: Saldo=" + conta.getsaldo() + " Continuar?"); conta.depositar(20); Util.parar("A: Saldo=" + conta.getsaldo() + " Continuar?"); em.gettransaction().commit(); em.close(); emf.close(); public class UtilizadorB { public static void main(string[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA2PU"); EntityManager em = emf.createentitymanager(); em.gettransaction().begin(); Conta conta = em.find(conta.class, 1); em.lock(conta, LockModeType.PESSIMISTIC_WRITE); Util.parar("B: Saldo=" + conta.getsaldo() + " Continuar?"); conta.depositar(30); Util.parar("B: Saldo=" + conta.getsaldo() + " Continuar?"); em.gettransaction().commit(); em.close(); emf.close(); Executar intercaladamente os métodos main da classe UtilizadorA e da classe UtilizadorB UtilizadorA: SELECT ID, SALDO, VERSIONID FROM CONTA WHERE (ID =?) FOR UPDATE bind => [1] UtilizadorB: SELECT ID, SALDO, VERSIONID FROM CONTA WHERE (ID =?) FOR UPDATE bind => [1] org.h2.jdbc.jdbcsqlexception: Timeout trying to lock table. Caused by: org.h2.jdbc.jdbcsqlexception: Concurrent update in table "CONTA": another transaction has updated or deleted the same row [ ] Caused by: java.lang.illegalstateexception: Entry is locked [ /101]

12 O método main da classe UtilizadorB termina com exceção lançada devido a Timeout. A ligação (EntityManager) deste programa não consegue obter um lock na base de dados porque outra ligação (EntityManager de UtilizadorA) mantém o lock. Para obter o lock seria necessário que a ligação do utilizadora libertasse o lock durante o lock timeout cujo valor, por omissão, é 1000 ms. O lock timeout pode ser colocado individualmente para cada ligação ou para toda a aplicação na Persistence Unity : <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/bd/contas;lock_timeout=80000"/> Ficheiro persistence.xml: <?xml version="1.0" encoding="utf-8"?> <persistence version="2.1"... > <persistence-unit name="jpa2pu" transaction-type="resource_local"> <provider>org.eclipse.persistence.jpa.persistenceprovider</provider> <class>jpa2.conta</class> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/bd/contas;lock_timeout=80000"/> <property name="javax.persistence.jdbc.user" value=""/> <property name="javax.persistence.jdbc.driver" value="org.h2.driver"/>... </properties> </persistence-unit> </persistence> Agora as aplicações funcionam corretamente Começamos por executar a classe Iniciar para colocar o objeto conta com a versão 1

13 Em seguida executamos intercaladamente os métodos main da classe UtilizadorA e da classe UtilizadorB, mas a classe UtilizadorB não consegue avançar porque não consegue obter um lock na base de dados UtilizadorA: SELECT ID, SALDO, VERSIONID FROM CONTA WHERE (ID =?) FOR UPDATE bind => [1] UPDATE CONTA SET SALDO =?, VERSIONID =? WHERE ((ID =?) AND (VERSIONID =?)) bind => [120.0, 2, 1, 1] Após a ligação do UtilizadorA libertar o lock na base de dados, o programa do UtilizadorB avança. UtilizadorB: SELECT ID, SALDO, VERSIONID FROM CONTA WHERE (ID =?) FOR UPDATE bind => [1] UPDATE CONTA SET SALDO =?, VERSIONID =? WHERE ((ID =?) AND (VERSIONID =?)) bind => [150.0, 3, 1, 2]

14 A principal vantagem de usar pessimistic locking é a garantia de que, uma vez o lock obtido, a edição terá sucesso. Útil em aplicações altamente concorrentes nas quais optimistic locking poderia causar muitos erros de locking optimistic. Uma desvantagem de usar pessimistic locking é que necessita de recursos adicionais da base de dados, obrigando a transação e a ligação à base de dados serem mantidas durante a edição. Locking na base de dados H2 H2 permite múltiplas ligações concorrentes à mesma base de dados. Para garantir que todas as ligações vejam sempre os dados consistentes, H2 usa, por omissão, locking ao nível da tabela. H2 usa 2 tipos de locks: read locks ou shared locks write locks ou exclusive locks Geração de locks: Instruções SELECT geram locks read Instruções que modificam os dados geram locks write A instrução SELECT FOR UPDATE coloca um lock write na tabela sem modificar os dados As instruções COMMIT e ROLLBACK libertam todos os locks Antes da leitura de um ou mais registos de uma tabela, a base de dados tenta adicionar um shared lock à tabela, o que só é possível se a tabela não tem um exclusive lock. Se o shared lock é adicionado com sucesso, a tabela pode ser lida. Outras ligações podem também obter um shared lock na mesma tabela. Se há um lock exclusive (write) na tabela, então a ligação que quer ler da tabela espera até que a outra ligação liberte o lock exclusive.

15 Antes da escrita numa tabela (atualizar ou apagar uma linha) é necessário obter um exclusive lock. Para obter um exclusive lock, nenhuma outra ligação pode ter qualquer lock na tabela. Se uma ligação não consegue obter o lock durante um tempo específico, então uma exceção timeout é lançada. O timeout por omissão é 1 segundo (1000 ms). Por omissão H2 usa o nível de isolamento transacional read committed : os locks read são libertos imediatamente após cada instrução os locks write são libertos quando a transação efetua o commit ou o rollback Resumo: Na estratégia otimista, que obriga a entidade a ter versão, JPA compara o número da versão desse objeto na base de dados com o número da versão do objeto em memória. Se os números das versões são diferentes, o que indica que o objeto já foi modificado por outro EntityManger, a transação falha e uma exceção OptimisticLockException é lançada. Para evitar corrupção dos dados é necessário verificar se há colisões entre programas, isto é, se há sequências ler, modificar, escrever intercaladas. Versão na entidade Lock Colisão entre programas Sem lock, lock NONE Não há verificação Exceção Sem versão PersistenceException Com versão Lock OPTIMISTIC, OPTIMISTIC_FORCE_INCREMENT, PESSIMISTIC_FORCE_INCREMENT Lock PESSIMISTIC_READ, PESSIMISTIC_WRITE Sem lock, lock NONE, OPTIMISTIC, OPTIMISTIC_FORCE_INCREMENT Lock PESSIMISTIC_READ, PESSIMISTIC_WRITE, PESSIMISTIC_FORCE_INCREMENT Nunca há colisão Exceção OptimisticLockException Nunca há colisão Mensagens das exceções: PersistenceException: Invalid lock mode type on for an entity that does not have a version locking index. Only a PESSIMISTIC lock mode type can be used when there is no version locking index. OptimisticLockException Exception Description: The object [model.conta@229c0fa6] cannot be updated because it has changed or been deleted since it was last read.

16 Resumo dos passos na execução da Demonstração das Estratégias Optimistic Locking e Pessimistic Locking Numa conta com o saldo de 100 são efetuados dois depósitos. Um programa efetua um depósito de 20 e outro programa efetua um depósito de 30. As sequências ler-modificarescrever são realizadas intercaladamente. 1 Classe Conta sem atributo Version. Programas sem qualquer estratégia de locking. Aplicação funciona incorretamente. A primeira modificação do saldo perde-se e só o último depósito afeta o saldo, obtendo-se o saldo final de Classe Conta com atributo Version. Programas sem qualquer estratégia de locking. JPA usa, por omissão, a estratégia Optimistic Locking. Aplicação funciona incorretamente. A primeira modificação do saldo é efetuada, mas a execução do segundo depósito lança a exceção OptimisticLockException. 3 Classe Conta com atributo Version. Programas sem qualquer estratégia de locking mas com try catch. Aplicação funciona corretamente. O primeiro depósito é efetuado, o segundo depósito lança a exceção OptimisticLockException, mas a aplicação volta a tentar e efetua corretamente o segundo depósito. 4 Classe Conta com ou sem atributo Version. Programas com a estratégia Pessimistic Locking e sem try catch. Aplicação funciona incorretamente. O primeiro depósito é efetuado porque obtém um lock exclusivo na tabela da base de dados. O segundo depósito tenta obter um lock exclusivo, pelo que espera até o lock da tabela ser liberto. Como o lock timeout, por omissão, é 1 segundo, ao fim deste tempo a execução do segundo depósito lança a exceção JdbcSQLException. 5 Classe Conta com ou sem atributo Version. Programas com a estratégia Pessimistic Locking e sem try catch. Lock Timeout colocado com o valor de 80 segundos na Persistence Unity. Aplicação funciona corretamente. O primeiro depósito é efetuado porque obtém um lock exclusivo na tabela da base de dados. O segundo depósito tenta obter um lock exclusivo, pelo que espera até o lock da tabela ser liberto. Obtém o lock exclusivo e efetua o depósito.

Criar uma aplicação JPA2 com EclipseLink e H2

Criar uma aplicação JPA2 com EclipseLink e H2 Criar uma aplicação JPA2 com EclipseLink e H2 1) Criar uma aplicação Java no NetBeans. File > New Project > Java, Java Application > Project name: JPA2 Finish. 2) Acrescentar ao Projeto NetBeans a biblioteca

Leia mais

JPA Java Persistence API. Prof. Ramon Chiara

JPA Java Persistence API. Prof. Ramon Chiara JPA Java Persistence API Prof. Ramon Chiara JDBC Java DataBase Connectivity Acesso a bancos de dados Independência de banco de dados JDBC Aplicação JDBC Driver Banco de Dados JDBC Java DataBase Connectivity

Leia mais

Mapeamento Lógico/Relacional com JPA

Mapeamento Lógico/Relacional com JPA Mapeamento Lógico/Relacional com JPA Elaine Quintino da Silva Doutora em Ciência da Computação pelo ICMC-USP/São Carlos Analista de Sistemas UOL PagSeguro Instrutora Globalcode Agenda! Persistência de

Leia mais

Mapeamento da herança em JPA

Mapeamento da herança em JPA Mapeamento da herança em JPA Impedance mismatch é o termo usado para descrever as dificuldades em mapear o estado de um objecto num registo de uma tabela de uma base de dados relacional. Na modelação orientada

Leia mais

Desenvolvimento para Web em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM Lamarck Heinsch Mestrando PPGI/CT/UFSM

Desenvolvimento para Web em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM Lamarck Heinsch Mestrando PPGI/CT/UFSM Desenvolvimento para Web em Java Profa Andréa Schwertner Charão DLSC/CT/UFSM Lamarck Heinsch Mestrando PPGI/CT/UFSM Tecnologias Web Java (OO) Fonte: Wikipedia Tecnologias Web em Java Java SE: Applets Java

Leia mais

Introdução. Configuração. Padrão POJO. Framework Pesistência de. Mapeamento Annotation. Objetos. Persistência. Java. Objetos. Prof.

Introdução. Configuração. Padrão POJO. Framework Pesistência de. Mapeamento Annotation. Objetos. Persistência. Java. Objetos. Prof. Introdução Configuração Padrão POJO Mapeamento Annotation Persistência Objetos Framework Pesistência de Objetos Java Prof. Enzo Seraphim O que é? Framework persistência de Objetos é uma moderna solução

Leia mais

Hibernate na sua aplicação JavaWeb

Hibernate na sua aplicação JavaWeb Hibernate na sua aplicação JavaWeb Mentoria de Projeto 01 21/10/2017 [email protected] 1 Agenda Entender a diferença entre a JPA e o Hibernate; Gerar as tabelas em um banco de dados qualquer a partir

Leia mais

Sistemas de Bases de Dados 2.º teste (com consulta limitada: 2 folhas identificadas) - Duração: 2 horas

Sistemas de Bases de Dados 2.º teste (com consulta limitada: 2 folhas identificadas) - Duração: 2 horas DI-FCT/UNL 6 de junho de 2018 Sistemas de Bases de Dados 2.º teste (com consulta limitada: 2 folhas identificadas) - Duração: 2 horas Nome: Grupo 1 (7 valores) 1 a) Quais são as 4 propriedades ACID que

Leia mais

Conexão com Banco de Dados

Conexão com Banco de Dados Conexão com Banco de Dados ORM Atualmente os novos sistemas que estão sendo desenvolvidos estão utilizando a técnica de ORM para fazer conexão e acesso a banco de dados. ORM é uma técnica de mapeamento

Leia mais

JPA DAO Genérico e JPQL

JPA DAO Genérico e JPQL JPA DAO Genérico e JPQL Paulo Ricardo Lisboa de Almeida 1 Criando um DAO JPA public abstract class GenericDAO{... Onde T definirá a chave dos objetos, e U definirá os objetos em si (da mesma forma

Leia mais

Sistemas de Informação e Bases de Dados 2012/2013. Transações. Alberto Sardinha

Sistemas de Informação e Bases de Dados 2012/2013. Transações. Alberto Sardinha Sistemas de Informação e Bases de Dados 2012/2013 Transações Alberto Sardinha Sumário! Conceito de Transação! Propriedades ACID! Transações em SQL! Referências Raghu Ramakrishnan, Database Management Systems,

Leia mais

JPA Com Hibernate. Paulo Ricardo Lisboa de Almeida. 1 Universidade Positivo

JPA Com Hibernate. Paulo Ricardo Lisboa de Almeida. 1 Universidade Positivo JPA Com Hibernate Paulo Ricardo Lisboa de Almeida 1 Modelo Necessário Modelo Necessário 2 JPA Mapeamento Direto entre as classes e o banco de dados Orientação a objetos para modelo relacional Feito através

Leia mais

Agenda. Instalação e configuração. Processamento de comandos SQL com JDBC. Driver JDBC Criação da classe de conexão

Agenda. Instalação e configuração. Processamento de comandos SQL com JDBC. Driver JDBC Criação da classe de conexão Agenda Instalação e configuração Driver JDBC Criação da classe de conexão Processamento de comandos SQL com JDBC Gerenciamento de conexões Execução simples de consultas Tratamento de exceções Instalação

Leia mais

Lock. Administração de Banco de Dados

Lock. Administração de Banco de Dados Lock Administração de Banco de Dados 1 Tópicos o Lock o Tipos de Lock o Recursos que podem ser bloqueados o Dica de Lock sobre uma Tabela o Dica de Lock em uma Sessão o Compatibilidade entre Locks 2 Lock

Leia mais

Só podem ser executados por uma Thread que detenha o lock do objecto

Só podem ser executados por uma Thread que detenha o lock do objecto Transferência de controle entre Threads Os métodos wait(), notify() notifyall(), da classe Object, Permitem a transferência de controlo de uma Thread para outra. Só podem ser executados por uma Thread

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Curso: Sistemas de Informações Arquitetura de Software Prof.: Fabrízzio A A M N Soares [email protected] Aula 7 JPA A Persistência com JPA Para configurar o JPA

Leia mais

Java - Conexão ao Banco de Dados usando JDBC

Java - Conexão ao Banco de Dados usando JDBC Java - Conexão ao Banco de Dados usando JDBC 1. Criar o modelo no DBDesigner, como mostrado a seguir. Salvar o script de criação da tabela. 2. Criar o esquema e as tabelas no MySQL (Pode usar o MySQL Query

Leia mais

Tecnologias Java JDBC. Marcio Seiji Oyamada [email protected]

Tecnologias Java JDBC. Marcio Seiji Oyamada msoyamada@gmail.com Tecnologias Java JDBC Marcio Seiji Oyamada [email protected] JDBC JDBC: Java Database Connectivity API Java para acessar dados armazenados em um Banco de Dados Conectar a um banco dados Enviar consultas

Leia mais

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP

Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP Instituto Federal de Educação, Ciência e Tecnologia de São Paulo - IFSP Campus de Caraguatatuba Tecnólogo em Análise e Desenvolvimento de Sistemas 1 0 Semestre de 2013 BD I Prof. Lineu Mialaret Aula 25:

Leia mais

Java Persistence Query Language JPQL

Java Persistence Query Language JPQL Introdução SELECT FROM WHERE GROUP BY HAVING ORDER BY Java Persistence Query Language JPQL Prof. Enzo Seraphim Definições Tornar SQL orientado a objetos Classes e propriedades ao invés de Tabelas e colunas

Leia mais

Vamos falar de Hibernate?

Vamos falar de Hibernate? Vamos falar de Hibernate? Hibernate é um framework ORM (Object-Relationship Management) muito bacana que nos permite ter muita produtividade na manipulação de objetos a serem persistidos no banco de dados.

Leia mais

DATA ACCESS OBJECT (DAO)

DATA ACCESS OBJECT (DAO) Universidade de São Paulo, Instituto de Ciências Matemáticas e de Computação DATA ACCESS OBJECT (DAO) SSC 621: Análise e Projeto Orientados a Objetos Prof. Dr. Lucas Bueno R. Oliveira 2º Semestre 2015

Leia mais

GBC043 - Sistemas de Banco de Dados Lab8 : Transações no PostgreSql

GBC043 - Sistemas de Banco de Dados Lab8 : Transações no PostgreSql GBC043 - Sistemas de Banco de Dados Lab8 : Transações no PostgreSql Ilmério Reis da Silva [email protected] www.facom.ufu.br/~ilmerio/sbd UFU/FACOM/BCC Transações Ver conjunto de slides na opção Transações

Leia mais

JPA: Persistência padronizada em Java

JPA: Persistência padronizada em Java JPA: Persistência padronizada em Java FLÁVIO HENRIQUE CURTE Bacharel em Engenharia de Computação [email protected] Programação Orientada a Objetos X Banco de Dados Relacionais = Paradigmas diferentes

Leia mais

De forma simples, para a execução de comandos SQL com JDBC, precisa-se da instancia de três classes Java. São elas: Nome da classe Função

De forma simples, para a execução de comandos SQL com JDBC, precisa-se da instancia de três classes Java. São elas: Nome da classe Função .1 JDBC A linguagem Java possui classes que permitem a com um banco de dados. Essas classes fazem parte do pacote JDBC (Java Database Connectivity), uma API (Application Program Interface) que permite

Leia mais

Lista de Exercícios 12 Transações

Lista de Exercícios 12 Transações UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO SCC0141 - Bancos de Dados e Suas Aplicações Prof. José Fernando Rodrigues Júnior 2º semestre

Leia mais

Controle de Transação

Controle de Transação Curso: Ciência da Computação Disciplina: Banco de Dados Campus Lages Controle de Transação Prof. Edjandir C. Costa [email protected] Agenda Conceitos de transação e sistema Propriedades desejáveis

Leia mais

BDII SQL TRANSAÇÃO Revisão 2

BDII SQL TRANSAÇÃO Revisão 2 exatasfepi.com.br BDII SQL TRANSAÇÃO Revisão 2 André Luís Duarte Honra a teu pai e a tua mãe (que é o primeiro mandamento com promessa), para que te vá bem, e sejas de longa vida sobre a terra.(ef 6:2,3)

Leia mais

[email protected]

ruirossi@ruirossi.pro.br Persistência Com JPA & Hibernate Rui Rossi dos Santos [email protected] Mediador: Rui Rossi dos Santos Slide 1 Mapeamento Objeto-Relacional Contexto: Linguagem de programação orientada a objetos

Leia mais

Modificadores de Acesso e Atributos de Classe

Modificadores de Acesso e Atributos de Classe Modificadores de Acesso e Atributos de Classe 1 Controlando o acesso p Um dos problemas mais simples que temos no nosso sistema de contas é que o método saca permite sacar mesmo que o limite tenha sido

Leia mais

Padrão J2EE Data Access Object (DAO)

Padrão J2EE Data Access Object (DAO) Introdução CRUD DAO Exemplo Padrão J2EE Data Access Object (DAO) Prof. Enzo Seraphim Motivação para usar Componentes precisam acessar e armazenar informações em armazenamento persistente As APIs de armazenamento

Leia mais

Sistemas Distribuídos Transações

Sistemas Distribuídos Transações Sistemas Distribuídos Transações Vinícius Fernandes Soares Mota 1 2 Transações Transação: Unidade lógica de trabalho abrange um conjunto de operações de manipulação de dados que executam uma única tarefa

Leia mais

Threads. O que é uma Thread? Paralelismo

Threads. O que é uma Thread? Paralelismo Threads em Java 1 O que é uma Thread? Paralelismo Threads Multi- threading é o mecanismo de concorrência suportado explicitamente pela linguagem Java. Os mecanismos de gerenciamento e sincronização de

Leia mais

Banco de Dados I 6 Transações e Controle de Concorrência

Banco de Dados I 6 Transações e Controle de Concorrência Banco de Dados I 6 Transações e Controle de Concorrência Grinaldo Lopes de Oliveira (grinaldo( [email protected]) Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas * Material com créditos

Leia mais

Orientação a Objetos Básica

Orientação a Objetos Básica Orientação a Objetos Básica Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/ 1 Objetivos

Leia mais

Evento.java. package dominio;

Evento.java. package dominio; Evento.java package dominio; import java.util.date; import java.util.set; import javax.persistence.entity; import javax.persistence.fetchtype; import javax.persistence.generatedvalue; import javax.persistence.generationtype;

Leia mais

Introdução à JPA-Java Persistence API

Introdução à JPA-Java Persistence API Introdução à JPA-Java Persistence API Prof. Pasteur Ottoni de Miranda Jr. DCC PUC Minas www.pasteurjr.blogspot.com 1-Entidades São objetos de domínio de problema persistentes. Representam uma tabela em

Leia mais

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento. Introdução Atributos, métodos e encapsulamento [email protected] Atributos Ipos de acesso: private, public, protected e default Encapsulamento Métodos Construtores Criando objetos Departamento de Ciências

Leia mais

Utilizando Swing com Hibernate

Utilizando Swing com Hibernate Programando com Java Artigo http://mballem.wordpress.com/ Utilizando Swing com Hibernate Utilizando a SessionFactory Autor Marcio Ballem: é formado em Sistemas de Informação e possui certificação Oracle

Leia mais

Linguagem de Programação II Implementação

Linguagem de Programação II Implementação Linguagem de Programação II Implementação Prof. Alessandro Borges 2 Tópicos Criando objeto Definindo valores para os atributos do objeto Método construtor Definindo valores padrão para os atributos dos

Leia mais

Criação de uma aplicação Web ASP.NET MVC 4

Criação de uma aplicação Web ASP.NET MVC 4 Criação de uma aplicação Web ASP.NET MVC 4 usando Code First, com Roles (VS2012) Baseado no artigo de Scott Allen Roles in ASP.NET MVC4 : http://odetocode.com/blogs/scott/archive/2012/08/31/seeding membership

Leia mais

Antes de iniciar execute o script do banco de dados no SQLYOG ou outra ferramenta de sua preferência

Antes de iniciar execute o script do banco de dados no SQLYOG ou outra ferramenta de sua preferência Tutorial JPA em ambiente Eclipse Antes de iniciar execute o script do banco de dados no SQLYOG ou outra ferramenta de sua preferência 1-Selecione a perspectiva Java JPA: window, open perspective, other,

Leia mais

Interfaces POO. Prof. Marcio Delamaro

Interfaces POO. Prof. Marcio Delamaro Interfaces POO Prof. Marcio Delamaro Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP 1/41 O que é interface É um template de classe Outras classes podem seguir esse template Chamamos isso

Leia mais

ESQUEMA AULA PRÁTICA 0 Familiarização com o Ambiente de Desenvolvimento NetBeans Construção do primeiro programa em java.

ESQUEMA AULA PRÁTICA 0 Familiarização com o Ambiente de Desenvolvimento NetBeans Construção do primeiro programa em java. P. Fazendeiro & P. Prata POO FP0/1 ESQUEMA AULA PRÁTICA 0 Familiarização com o Ambiente de Desenvolvimento NetBeans Construção do primeiro programa em java. 0 Iniciar o ambiente de desenvolvimento integrado

Leia mais

Tipos de dados e comandos POO

Tipos de dados e comandos POO Tipos de dados e comandos POO Prof. Marcio Delamaro 1/46 Objetivo Vamos ver quais são os tipo de dados primitivos da linguagem Vamos ver quais são os principais comandos 2/46 Tipos Tipo Tamanho int 4 bytes

Leia mais

CONEXÃO JAVA - BANCO DE DADOS

CONEXÃO JAVA - BANCO DE DADOS CONEXÃO JAVA - BANCO DE DADOS RAQUEL, HEITOR, TIAGO, GEWTON Instituição Federal do Rio Grande do Norte- www.cefetrn.br JDBC JAVA DATABASE CONNECTIVITY INTRODUÇÃO API JDBC possibilita ao programador de

Leia mais

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis Introdução a classes e objetos Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis Estruturas de Seleção if... else Operador condicional (? : ) switch Aula de Hoje Estruturas de Repetição: while/do... while/for

Leia mais

Desenvolvimento Web com Java. Sérgio Lopes Caelum -

Desenvolvimento Web com Java. Sérgio Lopes Caelum - Desenvolvimento Web com Java Sérgio Lopes Caelum - http://www.caelum.com.br [email protected] Sérgio Lopes Desenvolvedor Java desde 2002 Instrutor de Java pela Caelum Trabalho com Web e Celulares

Leia mais

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares Programação Orientada a Objetos Classes Abstratas Sérgio Soares [email protected] Até aqui Quando usar herança? Ao redefinir um método manter o comportamento herdado! 2 Adivinhem... Surge um novo requisito

Leia mais

Simulado de Linguagem de Programação Java

Simulado de Linguagem de Programação Java Simulado de Linguagem de Programação Java 1. Descreva o processo de criação de programas em Java, desde a criação do código-fonte até a obtenção do resultado esperado, por meio de sua execução. Cite as

Leia mais

Tratamento de Exceções

Tratamento de Exceções Tratamento de Exceções Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno [email protected] Fonte: Material da Profª Karina Oliveira Introdução Exceções São eventos que

Leia mais

1) Responda de acordo com os conceitos de orientação a objetos (0,5).

1) Responda de acordo com os conceitos de orientação a objetos (0,5). Avalição II (Teórica) 22/06/2017 Disciplina Linguagem de Programação II Prof. Wagner, dos Santos C. de Jesus Curso Engenharia da Computação Questões Solução da Avaliação 1) Responda de acordo com os conceitos

Leia mais

Publicar uma aplicação ASP.NET Core com base de dados SqlServer no Azure usando Visual Studio e um perfil para publicação (publish profile)

Publicar uma aplicação ASP.NET Core com base de dados SqlServer no Azure usando Visual Studio e um perfil para publicação (publish profile) Publicar uma aplicação ASP.NET Core com base de dados SqlServer no Azure usando Visual Studio e um perfil para publicação (publish profile) 1. Instalar no Visual Studio 2017 o workload Azure Development

Leia mais

OO Orientação a Objetos

OO Orientação a Objetos OO Orientação a Objetos 1 Métodos com retorno p Um método sempre tem que definir o que retorna, nem que defina que não há retorno (void); p Um método pode retornar um valor para o código que o chamou.

Leia mais

Programação Orientada por Objectos 2010/11. 2º Exame 28 de Junho de 2011

Programação Orientada por Objectos 2010/11. 2º Exame 28 de Junho de 2011 Programação Orientada por Objectos 2010/11 2º Exame 28 de Junho de 2011 Instruções (leia com cuidado): Escreva de forma CLARA o seu nome e número em todas as folhas. O exame contém 8 páginas dividido em

Leia mais

Administração de Banco de Dados

Administração de Banco de Dados Administração de Banco de Dados Adriano J. Holanda http://holanda.xyz 4/9/05 Transação O modelo de transação do PostgreSQL considera que as operações ocorrem entre e e marcação de tempo para a transação

Leia mais

Variáveis primitivas e Controle de fluxo

Variáveis primitivas e Controle de fluxo Variáveis primitivas e Controle de fluxo Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/

Leia mais

Array em Java. Figura 1 - Exemplo de um array de inteiros

Array em Java. Figura 1 - Exemplo de um array de inteiros Array em Java 1. Objetivos Nesta lição, abordaremos Array em Java. Primeiro, definiremos o que é array e, então, discutiremos como declará-los e usá-los. Ao final desta lição, o estudante será capaz de:

Leia mais

Programação Estruturada e Orientada a Objetos

Programação Estruturada e Orientada a Objetos INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE Programação Estruturada e Orientada a Objetos Docente: Éberton da Silva Marinho e-mail: [email protected] [email protected]

Leia mais

OO - Orientação a Objetos

OO - Orientação a Objetos OO - Orientação a Objetos 1 Motivação p Orientação a objetos é uma maneira de programar que ajuda na organização e resolve muitos problemas enfrentados pela programação procedural; p Imaginem em um grande

Leia mais

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas UNIP - Ciência da Computação e Sistemas de Informação Estrutura de Dados AULA Pilhas Estrutura de Dados A Estrutura de Dados Pilha Pilha é uma estrutura de dados usada em programação, que tem uma regra

Leia mais

Consistência e Replicação

Consistência e Replicação Consistência e Replicação - Razões para a replicação - Replicação para obter escalabilidade - Modelos de consistência centrados nos dados 1 Razões para a replicação Fiabilidade - Enquanto pelo menos um

Leia mais

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos) Mecanismos de controlo de acesso Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a cada classe e cada membro da classe (dados e métodos) Modificadores de acesso: public protected private

Leia mais