Integrando Java com O 2 Srgio Soares GENTe

  • Slides: 19
Download presentation
Integrando Java com O 2 Sérgio Soares GENTe © Sérgio Soares 1

Integrando Java com O 2 Sérgio Soares GENTe © Sérgio Soares 1

Princípios gerais para a Integração z. Não comprometer reusabilidade, extensibilidade, eficiência z. Manter independência

Princípios gerais para a Integração z. Não comprometer reusabilidade, extensibilidade, eficiência z. Manter independência dos objetos de negócio em relação ao mecanismo de acesso a dados © Sérgio Soares 2

Arquitetura em camadas Classe Fachada Mecanismo de Persistência Classes Coleção de Negócio Classes Coleção

Arquitetura em camadas Classe Fachada Mecanismo de Persistência Classes Coleção de Negócio Classes Coleção de Dados Classes Básicas © Sérgio Soares BD 3

Definindo um meio de persistência z. Implementar uma classe mecanismo de persistência z. Implementar

Definindo um meio de persistência z. Implementar uma classe mecanismo de persistência z. Implementar coleções de dados © Sérgio Soares 4

public interface Mecanismo. Persistencia { boolean conectar() throws /*. . . */; boolean desconectar()

public interface Mecanismo. Persistencia { boolean conectar() throws /*. . . */; boolean desconectar() throws /*. . . */; void iniciar. Transacao() throws /*. . . */; void confirmar. Transacao() throws /*. . . */; void cancelar. Transacao() throws /*. . . */; } // Coleção Dados public interface Repositorio. Pessoas { void inserir(Pessoa p); void remover(String cpf); Pessoa consultar(String cpf); //. . . } © Sérgio Soares 5

Integrando o sistema ao SGBDOO O 2 z. Utilizar a API O 2 JB

Integrando o sistema ao SGBDOO O 2 z. Utilizar a API O 2 JB (Java Bindings) y. Extensão da API JRB x. JB também pode ser utilizado para BDR y. Gerencia os objetos em memória ximplementa o mecanismo de cache y. Utiliza a máquina O 2 (O 2 Engine) xeficiência (BDOO) z. Definir um schema no SGBD O 2 © Sérgio Soares 6

O 2 JB - O 2 Java Bindings z. O 2 Java Bindings y.

O 2 JB - O 2 Java Bindings z. O 2 Java Bindings y. Não altera as classes persistentes (básicas) x. JRB adiciona métodos no código fonte y. Importa as classes persistentes para o schema do O 2 y. Impacto apenas na coleção de dados e mecanismo de persistência © Sérgio Soares 7

Importando classe para o schema do O 2 o 2 jb_import -confirm -url o

Importando classe para o schema do O 2 o 2 jb_import -confirm -url o 2: your_server: your_system -schema your_schema Pessoa z. Realiza um pós-processamento no bytecode y. Não altera o código fonte y. JB vs. JRB © Sérgio Soares 8

API O 2 JB class Database { void connect() {} void disconnect() {} void

API O 2 JB class Database { void connect() {} void disconnect() {} void open(String base) {} void close(String base) {} static void persist(Object o) {} static void delete(Object o) {} //. . . } © Sérgio Soares 9

API O 2 JB class Transaction { void begin() {} void commit() {} void

API O 2 JB class Transaction { void begin() {} void commit() {} void abort() {} //. . . } © Sérgio Soares 10

API O 2 JB class Extent { static Extent all(String class. Name) {} static

API O 2 JB class Extent { static Extent all(String class. Name) {} static Extent proper(String class. Name) {} Extent where(String condition) {} Extent order. By(String condition) {} Object element() {} Enumeration elements() {} int size() {} } Recupera elementos do SGBD © Sérgio Soares 11

Clase Extent person. Extent; person. Extent = Extent. all("Person"); person. Extent = Extent. proper("Person");

Clase Extent person. Extent; person. Extent = Extent. all("Person"); person. Extent = Extent. proper("Person"); person. Extent = Extent. all("Person"). where( "this. name = "John" and this. age = 36“ ); person. Extent = Extent. all("Person"). order. By("this. name"); Person p; for (Enumeration e = person. Extent. elements(); e. has. More. Elements() ; ) { p = (Person)e. next. Element(); System. out. println(p. name); } © Sérgio Soares 12

class Mecanismo. Persistencia. O 2 JB implements Mecanismo. Persistencia { private Database db; private

class Mecanismo. Persistencia. O 2 JB implements Mecanismo. Persistencia { private Database db; private Transaction transaction; //. . . void iniciar. Transacao() /*. . . */ { //. . . transaction. begin(); //. . . } void confirmar. Transacao() /*. . . */ { //. . . transaction. commit(); //. . . } © Sérgio Soares 13

import com. ardentsoftware. jb. api. *; public class Repositorio. Pessoa. BDOO implements Repositorio. Pessoa

import com. ardentsoftware. jb. api. *; public class Repositorio. Pessoa. BDOO implements Repositorio. Pessoa { //. . . public void inserir(Pessoa p) /*. . . */ { //. . . Database. persist(pessoa); //. . . } public boolean existe(String cpf) /*. . . */{ //. . . Extent ext = Extent. all("Pessoa"). where( "this. cpf = ""+ cpf +"""); return (ext. size() > 0); } © Sérgio Soares 14

void atualizar(Pessoa pessoa) /*. . . */ { //. . . Extent ext =

void atualizar(Pessoa pessoa) /*. . . */ { //. . . Extent ext = Extent. all("Pessoa"). where("this. cpf = ""+ pessoa. get. Cpf() +"""); if(ext. size() == 1) { p = (Pessoa) ext. element(); p. atualizar(pessoa); } //. . . } Supondo que os objetos retornados são clones! © Sérgio Soares 15

Persistência não transparente z. Importar as classes com a opção –noop y. Não realiza

Persistência não transparente z. Importar as classes com a opção –noop y. Não realiza o pós-processamento y. Os atributos não são atualizados ou recuperados automaticamente do SGBD y. Necessidade de aumentar a performance do sistema © Sérgio Soares 16

API O 2 JB class Database { //. . . static void access(Object o)

API O 2 JB class Database { //. . . static void access(Object o) {} static void mark. Modify(Object o) {} } © Sérgio Soares 17

Acessando e atualizando objetos shadow O o; . . . transaction = new Transaction();

Acessando e atualizando objetos shadow O o; . . . transaction = new Transaction(); P p = o. get. P(); // p é shadow, attr não recup Database. access(p); // p deixa de ser shadow. . . transaction. begin(); // p volta a ser shadow (consist) Database. access(p); // p é recarregado Database. mark. Modify(p); // p é bloq para armazenamento if(. . . ) transaction. commit(); // p é armazenado else transaction. abort(); // p é removido da cache © Sérgio Soares 18

Referências z. Ardent Software. Ardent Java Bindings for O 2 and Relational Databases. O

Referências z. Ardent Software. Ardent Java Bindings for O 2 and Relational Databases. O 2 Manual, august 1998. © Sérgio Soares 19