JPA Demonstração das Estratégias Optimistic Locking e Pessimistic Locking
|
|
|
- Pedro Lucas Cerveira Peralta
- 7 Há anos
- Visualizações:
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 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
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
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
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
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
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
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
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
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
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
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,
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
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
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
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
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
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
Tecnologias Java JDBC. Marcio Seiji Oyamada [email protected]
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
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:
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
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.
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
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
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
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
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
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
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)
[email protected]
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
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
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
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
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
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
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
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;
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
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
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
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
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
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,
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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/
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:
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]
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
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
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
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
