Código X no Banco. Código na Aplicação. Dez variáveis que influenciam na tomada de decisão de um projeto Orientado a Objetos.

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

Download "Código X no Banco. Código na Aplicação. Dez variáveis que influenciam na tomada de decisão de um projeto Orientado a Objetos."

Transcrição

1 Erik Aceiro Antonio erikblogger.blogspot.com/): Graduado em Ciência da Computação (Mackenzie). Mestre em Engenharia (Mackenzie) com ênfase em Automação de Sistemas de Comunicações Ópticas. Doutorando em Engenharia de Software pela UFSCar sobre Atividades de VV&T. Possui as certificações SCJP 6.0 e LPI 101. Professor universitário da Anhanguera de Rio Claro e engenheiro de Software Master na VARITUS-TI. Tem experiência na implantação de TDD (Test-Drive-Development), Refactory, Padrões de Arquitetura.Web Services, JPA, EJB e J2ME. Código X no Banco Dez variáveis que influenciam na tomada de decisão de um projeto Orientado a Objetos. Código na Aplicação Separação de Interesses, do termo em inglês Separation of Concern (SoC), esse é um conceito antigo e amplamente usado no desenvolvimento de projetos complexos e com requisitos altos de escalabilidade, portabilidade e com facilidade de manutenção. O desenvolvimento em Java confundese, às vezes, com o uso de Stored Procedures (SPs), portanto, qual é a melhor opção, código no Banco de Dados ou o Código na Aplicação. Este artigo pretende discutir e apresentar dez variáveis para conduzir a decisão de se escolher manter o código no banco de dados ou na aplicação. egundo Martin Fowler, obter alta granularidade não é uma tarefa fácil. A granularidade é um tipo de métrica empregada em orientação a objetos e outros tipos de paradigmas que têm como característica medir o grau que uma parte do sistema deve ser fatorado (ou dividido em outras partes), de forma que se possa criar um componente que possa ser reaproveitado/reutilizado. Existem dois tipos de granulariade conhecidas: granularidade grossa e granularidade fina. A primeira relaciona um alto grau de acoplamento e um sistema pouco coeso e a segunda mede o inverso, um sistema fracamente acoplado e fortemente coeso [1]. Outro conceito importante em Orientação a Objetos é o nível de separação de interesses que se deseja alcançar. Separação de Interesses ou Separation of Concern (SoC) do inglês, é um conceito antigo e amplamente usado em sistemas que tenham um certo grau de complexidade. Provavelmente o primeiro a ter introduzido o termo separação de interesses foi Dijkstra em 1974 no seu artigo On the role of scientific thought, onde relaciona o termo com os inúmeros aspectos e possibilidades existentes de pensamento. Em geral, é desejável que se tenha níveis de granularidade coerentes com o projeto 56

2 desenvolvido. Para se alcançar esses níveis deve-se realizar um "tradeoff" entre os princípios de orientação a objetos e as necessidades do projeto, algumas variáveis que devem ser identificadas e controladas como pontos de prova são: (1) desenvolvedores com conhecimento na linguagem; (2) flexibilidade; (3) portabilidade; (4) desempenho; (5) tempo de desenvolvimento; (6) capacidade de testar o sistema e efetuar a depuração; (7) escalabilidade; (8) compreensão do código; (9) duplicidade; (10) encapsulamento. Esses dez princípios enumerados anteriormente estão diretamente associados com dois fatores constantes ao desenvolvimento de software Banco de Dados (BD) e Linguagem de Programação (LP). Essas duas constantes levam a decisões de projetos importantes, um deles é se a codificação da regra de negócio do sistema deve estar localizada no banco de dados de dados, na forma de Stored Procedure (SP) ou codificada na aplicação. O artigo primeiro trata da motivação quanto à separação de interesses, mostrando exemplos de código de banco de dados entrelaçado com o código da aplicação, em seguida é apresentada uma discussão sobre as dez variáveis de controle com foco em medidas de desempenho e manutenção, finalmente uma tabela relaciona o código com no banco ou na aplicação que auxilia na tomada de decisões. Separação de interesses A separação de interesses é uma abordagem que inclui diversos aspectos simultaneamente. Às vezes, tal separação não é perfeitamente possível, mas é ainda uma técnica disponível para o efetivo ordenamento dos pensamentos. A seguir, são apresentadas três formas de separação de interesses para uma aplicação simples de persistência de dados. Essa separação pode ser encontrada em um projeto orientado a objetos quando encapsulamos o comportamento de um objeto na forma de um método (veja a Listagem 1). Listagem 1. Código em Java para recuperar o pedido atual. class LogicaPedido{ Collection<Pedido> result; //... public Collection<Pedido> pedidomesatual(){ int clienteid = daocliente.buscacliente( eva ); for(pedido datapedido: daopedido.buscapedidopeloid(clienteid)) if( datapedido.pedidoatual() ) result.add(datapedido); return result; class DAOCliente{ public int busca_cliente(string nome) throws SQLException{ String sql= SELECT FROM cliente WHERE nome=? ; //Rotina para usar o PreparedStatement return id; class DAOPedido{ public Collection<Pedido> busca_pedido(int id) throws SQLException{ String sql= SELECT FROM pedido WHERE id=? ; Collection<Pedido> pedidos; //Rotina para usar o PreparedStatement return pedidos; A listagem anterior mostra apenas o DAOCliente e DAOPedido. Na listagem é possível observar claramente a separação de interesses entre a aplicação e o código SQL do banco de dados. A separação de interesses foi obtida com auxílio do padrão de projeto DAO, nesse caso o padrão de projeto consegue separar com alta granularidade os componentes do sistema responsáveis pela camada de persistência, centralizando assim a responsabilidade da lógica. Um modelo ideal para esse exemplo, seria a integração dos padrões DAO e MVC [4,5,9]. Em contrapartida, uma segunda abordagem é apresentada na Listagem 2. Listagem 2. Código em Java para recuperar o pedido atual com SQL. class LogicaPedido{ Collection<Pedido> result; //outras variaveis de instancias DAOCliente DAOPedido public Collection<Pedido> pedidomesatual() throws SQLException{ int clienteid; String nome; PreparedStatemente st; Collection<?> result; String sql = SELECT DISTINCT MONTH(ip.data) AS mes FROM itens_ pedido ip INNER JOIN pedido p ON ip.pedidoid = p.pedidoid INNER JOIN cliente c ON p.clienteid = c.clienteid WHERE (c.nome =?) AND(ip.produto = tablet ) GROUP BY ip.pedidoid, ip.data, c.nome HAVING (SUM(ip.preco) > 5000) ; //criar PreparedStatement //... ResultSet rs = st.executequery(sql); while(rs.next()){ result.add(rs.getdate( mes ).tostring()); return result; A Listagem 2 é um exemplo de código em Java que usa diretamente uma associação com a linguagem SQL. Embora o exemplo SQL não seja complexo, essa listagem é um exemplo claro que à medida que a aplicação vai necessitando de novos recursos e consultas, o código SQL pode se tornar cada vez mais complicado e de difícil manutenção. Outro exemplo é mostrado na Listagem 3, onde é usado para retornar um Pedido uma Stored Procedure (SP) em Postgres/plpgsql. Essa SP usa um cursor para retornar um conjunto de itens, esse cursor é aberto com um comando SQL equivalente ao da Listagem 2, observe no entanto as diferenças entre as formas de declaração entre as listagens anteriores. Como se pode observar, da primeira listagem até a última (Listagem de 1 a 3), que o nível de abstração e semântica vai do maior para um menor grau de abstração. A Listagem 3 não apresenta um nível desejável de SoC e também viola condições e conceitos importantes de orientação a objetos como encapsulamento e reutilização de código. Pode-se observar que essa listagem apresenta um alto nível de acoplamento e baixa coesão, pois a função fn_retorna_pedido() não pode ser um componente e "plugada" facilmente em outras partes do sistema (observe os métodos da Listagem 1). 57

3 Listagem 3. Código de uma Stored Procedure em Postgres/ plpgsql. CREATE OR REPLACE FUNCTION fn_retorna_pedido(integer) RETURNS TEXT AS $$ DECLARE BEGIN END; $$ ppedido ALIAS FOR $1; cursor col_data result result:= ; REFCURSOR; exemplo.itens_pedido.data%type; TEXT; OPEN cursor FOR SELECT DISTINCT MONTH(ip.data) AS mes LOOP FROM itens_pedido ip INNER JOIN pedido p ON ip.pedidoid = p.pedidoid INNER JOIN cliente c ON p.clienteid = c.clienteid WHERE (c.nome = ppedido) AND (ip.produto = IPhone ) GROUP BY ip.pedidoid, ip.data, c.nome HAVING (SUM(ip.preco) > 5000); FETCH cursor INTO col_data EXIT WHEN NOT FOUND; result:=result col_data \n ; / é uma concatenacao END LOOP; RETURN result; LANGUAGE plpgsql VOLATILE Desenvolvedores com conhecimento na Linguagem A figura 1 ilustra dez Linguagens de Programação (LPs) em função da porcentagem/popularidade dos principais motores de buscas da Internet (veja a figura 1). As linguagens de referência no índice TIOBE (mês de referência junho de 2010), com aproveitamento acima de 50% são as linguagens C/C++ e Java. É conveniente notar que segundo o índice TIOBE, essas linguagens são as mais populares a partir dos principais motores de buscas atuais. Nota-se uma mínima popularidade em relação à família de linguagens PL/SQL (3,94%) contra (90,17%) da linguagem Java. Essa característica tem um impacto direto na quantidade de desenvolvedores que tem conhecimento sobre linguagem de banco de dados (SP), isso pode em certo sentido prejudicar o bom desenvolvimento do sistema, caso o sistema seja desenvolvido com prazos críticos e com pessoal não treinado. Portabilidade e desempenho Linguagem de Programação como PL/SQL são linguagens que estão diretamente ligadas a banco de dados, como Oracle, mys- QL, Postgres, SQL Server, Informix, Sybase, DB2, entre outros. Segundo Martin Fowler, existe uma dependência direta entre um sistema de banco de dados e a capacidade do sistema se tornar mais flexível. O código totalmente implementado no banco de dados caracteriza por outro lado um alto desempenho se comparado com as chamadas preparadas em Java. O desempenho do banco de dados se comparado com rotinas alocadas no pool de conexão da linguagem Java e servidores de aplicação como o Apache Tomcat e Glassfish podem, para consultas complexas, executar dezenas de vezes mais rápidas. Esse resultado, em alguns casos, é tomado como o primeiro na decisão de projeto e arquitetura de um sistema, no entanto tal prática deve ser claramente analisada. Como primeira comparação, considere uma implementação em linguagem C para uma tarefa de troca de valores, esse tipo de operação é muito comum para algoritmos de ordenação como o Bubble Sort. A Listagem 4 mostra um exemplo de uma chamada em Assembly (AT&T) para realizar uma operação de troca. Listagem 4. Código em Linguagem de Máquina integrado com C para operações de troca. void troca_lm(int a, int b){ int atemp,btemp; asm ( movl %2, %%eax; movl %3, %%ebx; movl %%eax, %%edx; movl %%ebx, %%eax; movl %%edx, %%ebx; movl %%eax, %0; movl %%ebx, %1; : =r (atemp), =r (btemp) / saida : r (a), r (b) / entrada : %eax, %ebx, %edx / registradores usados ); Figura 1. Dez linguagens de programação (adaptado TIOBE [2]. 58

4 A figura 2 ilustra o tempo de troca em linguagem C com a integração da Linguagem de Montagem LM-AT&T (curva em vermelho), o tempo em linguagem C puro sem o uso de LM (curva em vermelho) e uma curva de Speedup (curva em azul). Para mais informações sobre código em LM (ver links) [8]. resultados apresentados (figura 2) obteve-se valores de Speedup de aproximadamente 1,3. Como era de se esperar, observa-se uma ligeira melhora da linguagem de montagem sobre a linguagem C. Essa melhora deve-se a capacidade da linguagem C acessar diretamente registradores otimizando assim a aplicação. É importante notar que mesmo a linguagem de montagem tendo um resultado melhor, o algoritmo Figura 2. Número de troca em função do tempo para código em C e AT&T. A curva de Speedup é definida como o tempo de execução de uma linguagem serial sobre o tempo de execução de uma linguagem em paralelo. Essa medida geralmente é empregada em sistemas paralelos e distribuídos e tem como objetivo investigar o quanto uma linguagem é melhor em relação à outra. No livro Introduction to Assembly Language Programmmin (ver livros) o autor usa este tipo de medida como uma razão entre o tempo de execução da linguagem C sobre o tempo de execução da linguagem de Montagem para mostrar o seu desempenho. Um valor de Speedup maior que 1 indica que a Linguagem de Montagem (LM) é melhor (executa em menor tempo) que a linguagem C. Para os Figura 3. Diagrama de pacotes do DAO. empregado não é a melhor implementação. Esse exemplo mostra claramente a necessidade de SoC em uma aplicação, permitindo assim obter maiores desempenhos. De uma forma semelhante, Stored Procedures (SP) permitem ao programador obter valores elevados de desempenho, contudo o desenvolvedor deve conhecer em detalhes a linguagem e reconhecer que também não são todos os pontos ou partes do sistema que devem ser implemen- Figura 4. Diagrama de classes do DAO. 59

5 tados no banco de dados. Para esse caso simples de uma troca, o problema em C torna-se trivial, mas para outros tipos de rotinas se torna praticamente inaceitável o uso de linguagem de montagem. A linguagem C com o uso da inner function asm() permite facilmente a integração de código de máquina em um programa estruturado. Pode-se constatar também que o desenvolvimento em linguagem C em ambientes Linux é totalmente facilitado pela adoção de técnicas de depuração como o uso da ferramenta de depuração como o GDB (ver links). Para permitir uma análise comparativa semelhante, foram feitas medidas de desempenho em Java usando JDBC, Bash/Linux e também o pgadmin. As figuras 3 e 4 mostram os diagramas de pacotes e também de classes usados neste artigo para os testes em Java. Para o desenvolvimento foi usado o Design Pattern DAO, do livro J2EE Core (ver livros) e também o Framework JUnit 4.0 para realizar testes de Unidade e Integração com o DAO. A figura 5 mostra o modelo DER do diagrama do banco de dados criado em Postgres/SQL e também duas SPs criadas para a persistência e remoção de dados do banco (típicas rotinas de CRUD Create, Recover, Update, Delete). A Listagem 6 mostra a SP em Postgres/plpgsql para a inserção de apenas um registro no banco de dados e a Listagem 7 mostra uma rotina com um loop para inserir vários registros no banco. Listagem 6. Procedure em Postgres para a inserção de apenas um registros no banco. CREATE OR REPLACE FUNCTION mundoj.fn_insere(character varying) RETURNS void AS $BODY$ DECLARE pnome ALIAS FOR $1; BEGIN INSERT INTO mundoj.pessoa (nome) VALUES(pnome); END; $BODY$ Listagem 7. Procedure em Postgres para a inserção de vários registros no banco. CREATE OR REPLACE FUNCTION mundoj.fn_insere_pessoa(integer) RETURNS void AS $BODY$ DECLARE total ALIAS FOR $1; i INTEGER; BEGIN i:=1; END; LOOP INSERT INTO mundoj.pessoa (NOME) VALUES( EVA ); i:=i+1; EXIT WHEN i>total; END LOOP; $BODY$ Figura 5. Modelo DER do banco de dados testado. A Listagem 5 mostra a criação da tabela pessoa do modelo anterior, repare que nessa listagem foi omitida as outras tabelas, mas a sua criação segue o mesmo princípio em SQL. Listagem 5. Procedure em Postgres para a inserção de vários registros no banco. CREATE TABLE mundoj.pessoa ( ); id serial NOT NULL, nome character varying(255) NOT NULL, endereco character varying(255), cpf character varying(11) NOT NULL, data_nascimento date, site character varying(255) ALTER TABLE mundoj.pessoa ADD CONSTRAINT pk_id_pessoa PRIMARY KEY(id); Além das SPs para inserção de dados foram desenvolvidos scripts em Bash/Linux para simular a inserção de vários registros no banco com e sem o uso de SPs. As listagens 8 e 9 mostram os scripts em Bash/Linux para simular esse resultado para registros, o restante do script foi omitido por simplicidade. Os valores de tempo foram obtidos com o uso do comando time do Linux, um exemplo de saída é mostrado (Listagem 10). Listagem 8. Procedure em Postgres para a inserção de vários registros no banco. if [ $1 -eq 1000 ]; then echo processando 1000 inserts for i in { ; do psql -U postgres -h mundoj -c \ INSERT INTO mundoj.pessoa (nome) VALUES ( eva${i ) > /dev/null done fi 60

6 Listagem 9. Procedure em Postgres para a inserção (via Stored Procedure) de vários registros no banco. if [ $1 -eq 1000 ]; then echo processando 1000 inserts for i in { ; do psql -U postgres -h mundoj -c \ SELECT mundoj.fn_insere( eva ) > /dev/null; done fi Listagem 10. Obtenção dos valores de tempo. time /opt/postgresql/8.4/bin/psql -U postgres -h estudos -c SE- LECT mundoj.fn_insere( eva ) > /dev/null; real 0m0.127s user 0m0.004s sys 0m0.008s A partir da Listagem 10 pode-se constatar três estatísticas de tempo. Estes tempos consistem de (I) o tempo real de invocação e término da execução do comando psql, (II) o tempo de CPU do usuário, ou seja, o tempo de processamento apenas no processador, também conhecido como CPU-Bound, e (III) o tempo de sistema da CPU, ou melhor dizendo, o tempo de IO-Bound da CPU para operações de interrupções. Listagem 11. Interface DAO para o objeto Pessoa. Interface que representa um DAO comum para o objeto Erik Aceiro Antonio public interface DAOPessoa { Método que insere uma pessoa no banco de Pessoa um objeto do pacote SQLException - lança uma exception caso não consiga inserir public void inserepessoa(pessoa p) throws SQLException; Método que atualiza uma pessoa no banco de id um inteiro válido para a chave da SQLException - lança uma exception caso não consiga inserir public void removepessoapeloid(int id) throws SQLException; Método retorna uma pessoa no banco de id um inteiro válido para a chave da SQLException - lança uma exception caso não consiga inserir cont. Listagem 11. Interface DAO para o objeto Pessoa. public Pessoa retornapessoapeloid(int id) throws SQLException; Método que atualiza uma pessoa no banco de dados. A atualização ocorre pelo Pessoa um objeto do pacote SQLException - lança uma exception caso não consiga inserir public void atualizapessoa(pessoa p) throws SQLException; Observe que para o comando time apresentar o resultado corretamente, o Postgres deve ser configurado sem a senha de autenticação, pois em caso contrário o psql irá solicitar uma senha de autenticação. As listagens 12 e 13 mostram o DAOPessoa e também o caso de teste no JUnit. Listagem 12. Implementação do DAO para o objeto Pessoa. Classe que implementa a interface Erik Aceiro Antonio public class DAOPessoaImp implements DAOPessoa { /campos comuns a todos os métodos private ResultSet resultset; private PreparedStatement prepstatement; private Statement statement; private DAOConnector daoconnector; private Connection conn; /métodos principais do DAOPessoa public DAOPessoaImp() throws SQLException, ClassNotFoundException { conn = public boolean inserepessoa(pessoa p) throws SQLException { int pos=0; String sql = INSERT INTO mundoj.pessoa (nome, endereco, cpf, data_ nascimento, escolaridade, , site) VALUES (?,?,?,?,?,?,?) ; prepstatement = conn.preparestatement(sql); for(int j=1; j<=10; j++){ System.out.println( resultados para +(j100)); long starttime = System.currentTimeMillis(); for(int i=0; i< (100j); i++){ pos=0; prepstatement.setstring(++pos, p.getnome()); prepstatement.setstring(++pos, p.getendereco()); prepstatement.setstring(++pos, p.getcpf()); 61

7 cont. Listagem 12. Implementação do DAO para o objeto Pessoa. prepstatement.setdate(++pos, new Date(p.getDataNascimento().getTime())); prepstatement.setstring(++pos,p.getescolaridade()); prepstatement.setstring(++pos,p.get ()); prepstatement.setstring(++pos,p.getsite()); prepstatement.execute(); long stoptime long diff = System.currentTimeMillis(); = (stoptime-starttime); System.out.println(String.format( total %02d.%03ds,(diff/60), (diff%60))); return true; //outros métodos do DAO devem ser implementados aqui //Fecha o DAOImp Listagem 13. Caso de Teste com o JUnit 4.0 para a inserção de 100 até registros. public class CasoDeTesteInserePessoa { private DAOPessoaImp public static void setupbeforeclass() throws Exception public static void teardownafterclass() throws Exception public void setup() throws Exception { dao = new DAOPessoaImp(); A figura 6 mostra uma captura do IDE Eclipse para a operação de inserção da listagem anterior (ver listagens 12 e 13). Figura 6. JUnit no Eclipse com os tempos de execução para o DAO. Para fornecer um comparativo entre o tempo de execução das operações de inserção os gráficos das figuras 8 e 9 mostram os tempos em Java usando instruções preparadas do banco (JDBC), tempo de execução com e sem o uso de SPs em Bash/Linux, e instruções com SP executadas diretamente pela interface do pgadmin. A partir dos gráficos observa-se que o tempo de execução para cada uma das aplicações é diferente. A linguagem Java é a que apresentou um melhor tempo de resposta (quanto mais para baixo for a curva melhor o tempo). A figura 9 mostra a relação do melhor tempo obtido em Java em relação ao melhor tempo de execução da Stored Procedure (SP). O melhor tempo da SP foi obtido a partir do comando time do Linux. A figura 8 também mostra que o desempenho do pgadmin é inferior à linguagem Java e também apresenta uma grande instabilidade, mostrando grandes picos dos resultados de inserções. Essa característica está relacionada com a maneira como o pgadmin cria e gerencia os DataSources de conexão. A figura 10 também mostra a razão de Speedup (melhor tempo em Java sobre o melhor tempo do banco), a curva de Speedup em verde mostra praticamente que o desempenho do banco em relação à linguagem Java é muito superior, o maior valor de Speedup obtido foi de 200 para public void teardown() throws Exception { dao = public void testinserepessoa() throws SQLException{ Pessoa p = new Pessoa(); p.setnome( Erik ); p.setendereco( Rio Claro/SP ); p.setcpf( ); Figura 8. Tempo de execução para a instrução INSERT/SQL. // cria uma data GregorianCalendar greg = new GregorianCalendar(); greg.set(2010, 9, 23); p.setdatanascimento( greg.gettime() ); // atribui a data para objeto p.setescolaridade( programador ); p.set ( ); p.setsite( ); Assert.assertTrue( dao.inserepessoa(p) ); 62 Figura 10. Tempo de execução e Speedup para a instrução INSERT/SQL.

8 Escalabilidade Quando o número de acessos no Twitter dispararou, este passou a usar uma forma combinada e otimizada de MySQL/memcached e mais de 45 módulos rodando com Apache Cassandra. Este ambiente misto permite hoje 50 milhões de tweets/dia, atualmente o twitter tem uma base de 125 milhões de usuários, veja (Twitter & Performance: An Update, O Facebook, outro gigante das redes sociais, gera cerca de 60 milhões de fotos por semana. Esses dois cenários mostram a grande importância da escalabilidade. Escalabilidade está associada com elasticidade e é uma propriedade de sistemas, redes ou processos em assimilar uma carga crescente de trabalho de forma comportada. Existem dois tipos de escalabilidade. Escalabilidade Vertical e Escalabilidade Horizontal. Escalabilidade Vertical um mesmo nó expandido com mais memória, processadores e discos. Escalabilidade Horizontal aumento no número de nós. Para se Escalar Horizontalmente existe algumas técnicas como: Cache, Fila, Master/Slave e Particionamento. Cada uma delas tem suas vantagens e desvantagens, mas o principal destaque está associado com alteração da regras de negócios associadas ao mapeamento relacional, tornando dessa forma sistemas de banco de dados relacionais com interesses e regras de negócios localizadas no banco mais difíceis de serem escalados, pois nessas situações é preciso uma reengenharia na estrutura e arquitetura de projeto. Uma solução alternativa para escalar sistemas atualmente empregada são os bancos de dados NoSQL, que usam mecanismos de mapeamento baseado em chave-valor, alguns exemplos são Bigtable da Google, Dynamo e CouchDB que usa soluções em JSON. Manutenção Neste artigo tratamos de diversos aspectos Transversais, ou seja, os requisitos não-funcionais. Contudo, interesses de Manutenção também devem ser considerados. As variáveis de Manutenabilidade que influenciam o desenvolvimento estão relacionadas com princípios de programação e Orientação a Objetos, como, por exemplo: Duplicidade de Código; Encapsulamento e Proteção; Flexibilidade para Reúso; Compreensão do código; Tempo de Desenvolvimento e Atividades de VV&T (Validação, Verificação & Teste). Encapsulamento e proteção Indica a capacidade de se usar código com proteção de acesso. Neste caso, o princípio de Encapsulamento de um objeto. Em Java o encapsulamento de um atributo/método é obtido via a palavrachave private. Tornar um campo de uma classe oculta para acesso externo garante proteção evitando que um campo seja alterado de forma indevida e diminui o acoplamento com outra classe, aumentando as chances de reúso. Veja o exemplo da Listagem 14, em que um objeto Mock simula um cadastro de Pedido e o número do pedido é alterado antes de ser inserido em um banco de dados, neste caso se o objeto umpedido tivesse sido instanciado com o valor que realmente deveria ser persistido no banco de dados o objeto que o usuário vê e o que é inserido passam a ser diferentes tornando a aplicação inconsistente. Listagem 14. Sem encapsulamento. Classe Mock que simula um Pedido public class Pedido{ int numeropedido; //... public class CadastroPedidoMockBD{ public void inserepedido(pedido umpedido){ Pedido novopedido = umpedido; novopedido.numeropedido = 1000; /altera o valor do pedido lista.add(p); //prossegue e insere no banco inconsistência!! Com a linguagem Java é possível corrigir isso com a palavra-chave private, essa alteração é mostrada na Listagem 15. No caso de banco de dados relacionais não existe um operador ou palavrachave que controle o acesso a certas variáveis e que impeça o acoplamento indevido com outros componentes. Vale apena ressaltar, que mesmo a linguagem em alguns casos é possível acessar um atributo privado como no caso da Linguagem AspectJ ou através da Reflection API. Listagem 15. Com encapsulamento. Classe Mock que simula um Pedido public class Pedido{ private int numeropedido; //... public class CadastroPedidoMockBD{ public void inserepedido(pedido umpedido){ Pedido novopedido = umpedido; novopedido.numeropedido = 1000; /não é possível alterar lista.add(p); //prossegue e insere no banco Duplicidade, flexibilidade e compreensão de código Duplicidade de código reflete o quanto do código é replicado e de difícil manutenção. Em alguns casos no banco de dados com PL/SQL pode-se construir funções que podem ser reaproveitadas, contudo o reaproveitamento fica limitado a Programação Estruturada. Outro aspecto que deve ser destacado é a capacidade de reúso que linguagens Orientadas a Objetos fornecem, como é o caso da Herança e Composição. A não ser que se esteja utilizando um banco de dados Orientados a Objetos, como, por exemplo, o db4 da Db4Object Inc. a aplicação geralmente fica limitada ao escopo de programas que usam princípios de Programação Estruturada. 63

9 Depuração e atividades de VV&T Um aspecto pouco explorado quanto a Stored Procedures em banco de dados são as ferramentas de depuração e de Atividades de Testes VV&T (Validação, Verificação e Testes). Atualmente é escasso o número de ferramentas que facilitam a depuração e o teste, a ferramenta dbunit [2] é uma extensão do JUnit que permite realizar teste de unidade em banco de dados, mas que não fornece nenhuma garantia estrutural ou de cobertura. No caso do Postgres, existe o plugin edb-debugger que é disponível para download (ver links), esse plugin precisa de uma versão do Postgres fonte para ser compilado pela comando make do Linux. Uma alternativa na forma de uma distribuição binária é o uso do Postgres e pgadmin 3 distribuídos pela EnterpriseBD (ver links). A figura 11 mostra o exemplo da Stored Procedure para inserção sendo depurada pelo pgadmin [6,7]. Comparativo A tabela a seguir traz um resumo das principais variáveis discutidas neste artigo e pretende servir como indícios na tomada de decisões de projetos críticos. Essa tabela é uma adaptação do modelo de qualidade em Engenharia de Software proposto por Boehm [10]. Transversais Manutenabilidade Variáveis Desenvolvedores PL/SQL Portabilidade Desempenho Escalabilidade Duplicidade de Código Encapsulamento e Proteção Flexibilidade para Reúso Compreensão do código Tempo de Desenvolvimento Atividades de VV&T Fator de Impacto Figura 11. Depuração com pgadmin. A depuração no pgadmin é fornecida com um plugin que permite visualizar valores para cada tipo de variável que está sendo usada dentro da Stored Procedure através de uma listagem equivalente de uma consulta em SQL. Ao lado direito é exibida uma tela de stack, que mostra a pilha de chamada. Um problema no uso do plugin é que o mesmo vem desabilitado na inicialização do pgadmin, então é necessário adicionar uma linha no arquivo de configuração do pgadmin para habilitar o programa na inicialização, como a configuração do pgadmin com o plugim de depuração está fora do escopo deste artigo, procure consultar os links de referências para obter mais informações. Com o MySQL também é possível efetuar depuração através do MySQL Query Browser. A figura 12 mostra também um exemplo de depuração no MySQL semelhante ao Postgres. Para finalizar, um aspecto importante que deve ser considerado é a deficiência causada para o desenvolvimento orientado a testes TDD (Test-Driven-Development) quando se foca no desenvolvimento de Stored Procedures com toda a regra de negócios focada no banco de dados. Nesse caso, abre-se mão de todo o ciclo de desenvolvimento Red-Green-Refactory e a facilidade de frameworks como o JUnit. Figura 12. Depuração com MySQL Query Browser. Esta tabela agrupa as Variáveis e o seu respectivo Fator de Impacto. Cada Fator de Impacto apresenta três categorias possíveis: Baixo, representado pela seta vermelha para baixo ( ), Médio ou Imparcial ilustrado pelo sinal de igual amarelo ( ) e alto com a seta verde ( ). Essa tabela ilustra uma forma de se medir o quanto um sistema desenvolvido com código no banco pode ser influenciado. Neste caso, esses valores foram extraídos a partir do próprio artigo, contudo, esses valores não são fixos e podem ser alterados de projeto para projeto. Considerações finais Este artigo teve como objetivo apresentar algumas das principais medidas para se identificar quando usar código no banco ou na aplicação. O artigo também discutiu a necessidade do uso de SoC na aplicação e também mostrou como implementar casos de teste com JUnit para efetuar teste de integração e unidade para obtenção de tempos de execução para o objeto DAO Referências [1] FOWLER, M.. Domain Logic and SQL. Disponível em <http://martinfowler.com/articles/dblogic.html> [2] DBUNIT (2010). Site Oficial. Disponível em <http://www.dbunit.org/> [3] TIOBE (2010). Índice de popularidade. Disponível em <http://www.tiobe.com/> [4] GoF (1995) - Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison- Wesley, (1995). ISBN [5] HUSTON, V. Padrões de Projeto. Disponível em<http://www.vincehuston.org/dp/a> [6] EDB (2010). Edb Debugger. Disponível em <http://pgfoundry.org/projects/edb-debugger/> [7] ENTERPRISEDB (2010). Enterprise DB e Postgres. Disponível em <http://www.enterprisedb.com/> [8] DANDAMUDI, S. P. (2000). Introduction to Assembly Language Programming: From 8086 to Pentium Processors (Undergraduate Texts in Computer Science). Sivarama P. Dandamudi, 2ed. [9] ALUR, D., MALKS, D., CRUPI, J. Core J2EE Patterns, Best Practices and Design Strategies, 2ed. Prentice Hall, 2 ed. (2003). [10] BOEHM, B. W., BROWN, J. R., KASPAR, H., LIPOW, M., MACHLEOD, G. J.. Characteristics of Software Quality (1978) 64

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com SQL Procedural Josino Rodrigues Neto josinon@gmail.com SQL Procedural Agregada em SQL-92 As ferramentas têm nomes para suas linguagens SQL procedurais/embutidas Oracle : PL/SQL Postgres PL/Pgsql SQL Server

Leia mais

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015 Manipulação de Banco de Dados com Java Ms. Bruno Crestani Calegaro (bruno.calegaro@ifsc.edu.br) Maio/ 2015 Acesso a um SGBD Em sistemas mais simples o uso de arquivos pode ser usado mas para aplicações

Leia mais

Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO.

Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO. Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO. Robson Adão Fagundes http://robsonfagundes.blogspot.com/ Mini curso Desenvolvimento de aplicação

Leia mais

UTILIZANDO CÓDIGO JAVA EM BANCO DE DADOS ORACLE

UTILIZANDO CÓDIGO JAVA EM BANCO DE DADOS ORACLE bd oracle_ UTILIZANDO CÓDIGO JAVA EM BANCO DE DADOS ORACLE Como criar procedimentos e funções em banco de dados Oracle utilizando Java O SGBD (Sistema de Gerenciamento de Banco de Dados) da Oracle possui,

Leia mais

Leonardo Gresta Paulino Murta leomurta@gmail.com

Leonardo Gresta Paulino Murta leomurta@gmail.com Leonardo Gresta Paulino Murta leomurta@gmail.com O Que é JDBC? API de acesso a banco de dados relacional do Java Faz uso do driver provido pelo banco de dados Roda SQL (create, insert, update, etc.) no

Leia mais

PL/pgSQL por Diversão e Lucro

PL/pgSQL por Diversão e Lucro PL/pgSQL por Diversão e Lucro Roberto Mello 3a. Conferência Brasileira de PostgreSQL - PGCon-BR Campinas - 2009 1 Objetivos Apresentar as partes principais do PL/pgSQL Apresentar casos de uso comum do

Leia mais

Framework utilizando reflexão e aspectos para persistência de objetos em java

Framework utilizando reflexão e aspectos para persistência de objetos em java Framework utilizando reflexão e aspectos para persistência de objetos em java Antonio Carlos Rolloff (UNIPAR) acrolloff@gmail.com Arthur Cattaneo Zavadski (UNIPAR) arthur@datacoper.com.br Maria Aparecida

Leia mais

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 11-1. INTRODUÇÃO TRIGGERS (GATILHOS OU AUTOMATISMOS) Desenvolver uma aplicação para gerenciar os dados significa criar uma aplicação que faça o controle sobre todo ambiente desde a interface, passando

Leia mais

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC Java Database Connectivity Provê acesso SQL ao banco de dados Principais

Leia mais

Oracle PL/SQL Overview

Oracle PL/SQL Overview Faculdades Network Oracle PL/SQL Overview Prof. Edinelson PL/SQL Linguagem de Programação Procedural Language / Structured Query Language Une o estilo modular de linguagens de programação à versatilidade

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

Bancos de Dados I. Integridade semântica

Bancos de Dados I. Integridade semântica Bancos de Dados I PUC-Rio Departamento de Informática (DI) Eng./Ciência da Computação e Sist. Informação Contrôle de Integridade em SGBDs: procedimentos armazenados, gatilhos e funções Prof. sergio@inf.puc-rio.br

Leia mais

Drive MySql de conexão para Eclipse

Drive MySql de conexão para Eclipse Drive MySql de conexão para Eclipse de Setembro de 0 Olá, neste artigo iremos focar em como utilizar o drive de conexão do Mysql na IDE eclipse. Veremos passo-a-passo como instalar, o que é uma coisa muito

Leia mais

(UFF) JDBC (I) TEPIS II

(UFF) JDBC (I) TEPIS II Aula 20: JDBC (I) Diego Passos Universidade Federal Fluminense Técnicas de Projeto e Implementação de Sistemas II Diego Passos (UFF) JDBC (I) TEPIS II 1 / 33 JDBC: Introdução Especificação que provê acesso

Leia mais

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 10 - PROCEDIMENTOS ARMAZENADOS - STORED PROCEDURES 1. INTRODUÇÃO Em muitas situações será necessário armazenar procedimentos escritos com a finalidade de se utilizar recursos como loop, estruturas

Leia mais

JDBC. Prof. Márcio Bueno (poonoite@marciobueno.com)

JDBC. Prof. Márcio Bueno (poonoite@marciobueno.com) JDBC Prof. Márcio Bueno (poonoite@marciobueno.com) JBDC Java Database Connectivity ou JDBC é um conjunto de classes e interfaces (API) escritas em Java que faz o envio de instruções SQL para qualquer banco

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 flaviocurte.java@gmail.com Programação Orientada a Objetos X Banco de Dados Relacionais = Paradigmas diferentes

Leia mais

Padrões de Projeto e Persistência com DAO

Padrões de Projeto e Persistência com DAO Curso de Análise de Sistemas Análise de Sistemas II Padrões de Projeto e Persistência com DAO Prof. Giuliano Prado de Morais Giglio, M.Sc. Introdução a Padrões de Projeto Padrões de Projeto foram inicialmente

Leia mais

persistência de dados

persistência de dados _sqlite Transparecendo a persistência de dados em Android com MVC Conhecendo o funcionamento do SQLite e aplicando as práticas do modelo MVC no desenvolvimento da camada DAO. Douglas Cavalheiro douglas.cavalheiro.br@gmail.com

Leia mais

Projeto de Banco de Dados

Projeto de Banco de Dados Projeto de Banco de Dados Prof. Marcelo Siedler Objetivos do documento: Apresentar os conceitos de stored procedutes e funções. Exercícios. Referência: http://dev.mysql.com/doc/refman/4.1/pt/stored-procedures.html

Leia mais

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. JDBC - Java Database Connectivity A,L,F,M

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. JDBC - Java Database Connectivity A,L,F,M JAVA Marcio de Carvalho Victorino 1 JDBC - Java Database Connectivity 2 1 JDBC conceito JDBC é uma API (Application Program Interface) para acesso a SGBD s (Sistemas Gerenciadores de Banco de Dados) relacionais

Leia mais

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL Laboratório de Banco de Dados Prof. Luiz Vivacqua PL/pgSQL A Linguagem de programação do PostgreSQL 1) Visão Geral A PL/pgSQL é uma linguagem de programação procedural para o Sistema Gerenciador de Banco

Leia mais

PostgreSQL 8.0. Diogo Biazus

PostgreSQL 8.0. Diogo Biazus PostgreSQL 8.0 Diogo Biazus PostgreSQL 7.X Totalmente ACID MVCC Tipos e operadores customizáveis Diversas linguagens procedurais Hot backup Código aberto (BSD) Facilidade de extensão PL/pgSQL, PL/Python,

Leia mais

Identificação de Interesses Transversais: Uma Visão Geral

Identificação de Interesses Transversais: Uma Visão Geral Identificação de Interesses Transversais: Uma Visão Geral Paulo Afonso Parreira Júnior paulojunior@jatai.ufg.br 24 de Maio de 2013 Agenda Breve Histórico sobre Desenvolvimento de Software Separação de

Leia mais

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL Prof. Ms. Luiz Alberto Contato: lasf.bel@gmail.com Linguagem de Programação de Banco de Dados Triggers em PostgreSQL Todos os bancos de dados comerciais possuem uma linguagem procedural auxiliar para a

Leia mais

Manipulação de Banco de Dados com Java 1. Objetivos

Manipulação de Banco de Dados com Java 1. Objetivos Manipulação de Banco de Dados com Java 1. Objetivos Demonstrar os fundamentos básicos para a manipulação de banco de dados com Java; Apresentar a sintaxe de comandos SQL usados em Java. 2. Definições A

Leia mais

Banco de Dados. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com

Banco de Dados. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Banco de Dados Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Roteiro Mapeamento de objetos para modelo relacional Estratégias de persistência Persistência JDBC Mapeando Objetos para o Modelo Relacional

Leia mais

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE Aluno: Roberto Reinert Orientador: Everaldo A. Grahl Roteiro de apresentação Introdução Objetivos Fundamentação Teórica Workflow Processo

Leia mais

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl AVALIAÇÃO DA QUALIDADE DO CÓDIGO FONTE ESCRITO EM PL/SQL Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl Roteiro Introdução Objetivos do trabalho Fundamentação teórica Desenvolvimento

Leia mais

Banco de Dados. Banco de Dados. Alcides Pamplona alcides.pamplona@gmail.com. Alcides Pamplona Linguagem de Programação CESBD 2010

Banco de Dados. Banco de Dados. Alcides Pamplona alcides.pamplona@gmail.com. Alcides Pamplona Linguagem de Programação CESBD 2010 Alcides Pamplona Linguagem de Programação CESBD 2010 Alcides Pamplona alcides.pamplona@gmail.com Tópicos API JDBC Utilizando JDBC Statement PreparedStatement Mapeamento Objeto-Relacional 2 API JDBC 3 API

Leia mais

Acesso a Bancos de Dados em Java (JDBC)

Acesso a Bancos de Dados em Java (JDBC) Acesso a Bancos de Dados em Java (JDBC) Jomi Fred Hübner Universidade Regional de Blumenau Departamento de Sistemas e Computação Roteiro Introdução Objetivo da JDBC Vantagens Visão geral do acesso a SGBDs

Leia mais

Prototype, um Design Patterns de Criação

Prototype, um Design Patterns de Criação Prototype, um Design Patterns de Criação José Anízio Pantoja Maia Este artigo tem como finalidade compreender o funcionamento do padrão de projeto prototype, serão abordados os participantes que compõe

Leia mais

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos. JDBC CRIANDO O BANCO DE DADOS: Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos. CRIANDO O PROJETO JAVA PARA DESKTOP: Crie um projeto Java chamado Prograd Crie um pacote chamado

Leia mais

Evolução do Design através de Testes e o TDD

Evolução do Design através de Testes e o TDD c a p a Lucas Souza (lucas.souza@caelum.com.br): é bacharel em Engenharia da Computação pela Universidade de Ribeirão Preto, possui a certificação SCJP e trabalha com Java há 4 anos. Atualmente é desenvolvedor

Leia mais

Logado no OracleXE vamos acessar a opção:

Logado no OracleXE vamos acessar a opção: Tutorial PL/SQL O PL/SQL é uma linguagem procedural que roda diretamente no núcleo do SGBD Oracle. O objetivo deste tutorial é mostrar a criação de funções e procedimentos em PL/SQL, interagindo com comandos

Leia mais

Java na WEB Banco de Dados

Java na WEB Banco de Dados 1 Java na WEB Banco de Dados Objetivo: Ao final da aula o aluno será capaz de: Criar aplicações JSP com acesso ao Banco de Dados MySql Configurar o TomCat para acessar o MySql. Não é Objetivo: Ao final

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

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Disciplina: INF 02810 Prof.: (monalessa@inf.ufes.br) Conteúdo 1. Introdução 2. Processo de Software 3. Gerência de

Leia mais

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

FUNCTION ) RETURNS INTEGER AS $$ DECLARE PERFORM O comando PERFORM permite a execução de um comando SELECT desprezando o resultado do comando. PERFORM query; A variável especial FOUND é definida como verdadeiro se a instrução produzir pelo menos

Leia mais

JDBC Acessando Banco de Dados

JDBC Acessando Banco de Dados Acessando Banco de Dados Objetivos Entender o que são Drivers. Diferenciar ODBC, JDBC e DRIVERMANAGER. Desenvolver uma aplicação Java para conexão com Banco de Dados. Criar um objeto a partir da classe

Leia mais

Unidade 9: Middleware JDBC para Criação de Beans

Unidade 9: Middleware JDBC para Criação de Beans Programação Servidor para Sistemas Web 1 Unidade 9: Middleware JDBC para Criação de Beans Implementando MVC Nível 1 Prof. Daniel Caetano Objetivo: Preparar o aluno para construir classes de entidade com

Leia mais

Padrões Arquiteturais no Java EE 7

Padrões Arquiteturais no Java EE 7 Padrões Arquiteturais no Java EE 7 Vagner F. Le Roy Júnior Curso de Pós Graduação em Arquitetura de Software Distribuído Pontifícia Universidade Católica de Minas Gerais Belo Horizonte, MG Brasil vagnerleroy@gmail.com

Leia mais

Classes de Entidades Persistentes JDB

Classes de Entidades Persistentes JDB Classes de Entidades Persistentes JDB Brasil, Natal-RN, 07 de setembro de 2011 Welbson Siqueira Costa www.jdbframework.com Nota de Retificação: em 11/12/2011 a Listagem 3 desse tutorial sofreu uma pequena

Leia mais

Aula 1 Acesso a Banco de Dados

Aula 1 Acesso a Banco de Dados Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados Prof. Josenildo Silva jcsilva@ifma.edu.br Introdução O JDBC (Java Database Connectivity) foi criado com o intuito de fornecer aos programadores

Leia mais

Persistência de Classes em Tabelas de Banco de Dados

Persistência de Classes em Tabelas de Banco de Dados UTFPR DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). 1 Persistência de Classes em Tabelas de Banco de Dados 1) Introdução! Em algumas situações, pode ser necessário preservar os objetos

Leia mais

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger A tecnologia de banco de dados permite persistir dados de forma a compartilha-los com varias aplicações. Aplicação 1 aplicação 2 aplicação 3 SGDB Banco

Leia mais

Programação Orientada a Objetos JDBC Java Database Connectivity

Programação Orientada a Objetos JDBC Java Database Connectivity Especialização em Engenharia de Software Programação Orientada a Objetos JDBC Java Database Connectivity Sérgio Soares scbs@cin.ufpe.br Objetivos Apresentar os conceitos básicos da especificação de Java

Leia mais

Transaction Scripts: Uma Forma mais Simples de Organizar Lógica de Domínio

Transaction Scripts: Uma Forma mais Simples de Organizar Lógica de Domínio Roberto Perillo (jrcperillo@yahoo.com.br) é bacharel em Ciência da Computação e está atualmente cursando mestrado no ITA, onde já concluiu o curso de especialização em Engenharia de Software. Trabalha

Leia mais

Triggers e mais... Instituto Militar de Engenharia IME 1o. Semestre/2005 Triggers Propósito mais amplo que restrições Restrições onde se explicita o evento Regras event-condition-action (ECA) Eventos:

Leia mais

Padrões de Projeto. Prof. Jefersson Alex dos Santos (jefersson@dcc.ufmg.br) http://www.dcc.ufmg.br/~jefersson

Padrões de Projeto. Prof. Jefersson Alex dos Santos (jefersson@dcc.ufmg.br) http://www.dcc.ufmg.br/~jefersson Padrões de Projeto Prof. Jefersson Alex dos Santos (jefersson@dcc.ufmg.br) http://www.dcc.ufmg.br/~jefersson Apresentação Conceitos Definição Ponto de vista prático História Padrões de Projeto Conhecidos

Leia mais

SISTEMAS DE BANCO DE DADOS. Prof. Adriano Pereira Maranhão

SISTEMAS DE BANCO DE DADOS. Prof. Adriano Pereira Maranhão SISTEMAS DE BANCO DE DADOS Prof. Adriano Pereira Maranhão 1 REVISÃO BANCO DE DADOS I O que é banco de dados? Ou seja afinal o que é um SGBD? REVISÃO BD I REVISÃO DE BD I Um Sistema de Gerenciamento de

Leia mais

MANUAL INSTALAÇÃO WEB SERVICE

MANUAL INSTALAÇÃO WEB SERVICE MANUAL INSTALAÇÃO WEB SERVICE Recebimento de dados pelo Hospital Versão 1.1 2/9/2014 Contato suporte@gtplan.com.br Índice Introdução... 2 Requerimentos para instalação do Web Service... 2 Instalação...

Leia mais

TUTORIAL DE INTRODUÇÃO AO CEWOLF

TUTORIAL DE INTRODUÇÃO AO CEWOLF 1 TUTORIAL DE INTRODUÇÃO AO CEWOLF CRIANDO GRÁFICOS COM JSP, CEWOLF/JFREECHART E MYSQL 1. Introdução O Cewolf (http://cewolf.sourceforge.net/) é uma biblioteca que facilita a criação de gráficos dinâmicos

Leia mais

SQL Structured Query Language

SQL Structured Query Language Janai Maciel SQL Structured Query Language (Banco de Dados) Conceitos de Linguagens de Programação 2013.2 Structured Query Language ( Linguagem de Consulta Estruturada ) Conceito: É a linguagem de pesquisa

Leia mais

JDBC (Fundamentos) Sang Shin Java Technology Architect Sun Microsystems, Inc. sang.shin@sun.com www.javapassion.com

JDBC (Fundamentos) Sang Shin Java Technology Architect Sun Microsystems, Inc. sang.shin@sun.com www.javapassion.com JDBC (Fundamentos) Sang Shin Java Technology Architect Sun Microsystems, Inc. sang.shin@sun.com www.javapassion.com 1 Agenda O que é JDBC? Passo a passo do uso da API JDBC DataSource & pool de Conexões

Leia mais

Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br Programação com acesso a BD Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br 1 Modelos de Dados, Esquemas e Instâncias 2 Modelos de Dados, Esquemas e Instâncias Modelo de dados: Conjunto de conceitos

Leia mais

Sistemas de Informação

Sistemas de Informação Sistemas de Informação Rules and Triggers André Restivo Sistemas de Informação 2006/07 Rules e Triggers Nem todas as restrições podem ser definidas usando os mecanismos que estudamos anteriormente: - CHECK

Leia mais

FAPLAN - Faculdade Anhanguera Passo Fundo Gestão da Tecnologia da Informação Banco de Dados II Prof. Eder Pazinatto Stored Procedures Procedimento armazenados dentro do banco de dados Um Stored Procedure

Leia mais

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados Prof. Josenildo Silva jcsilva@ifma.edu.br Introdução O JDBC (Java Database Connectivity) foi criado com o intuito de fornecer aos programadores

Leia mais

Curso de Aprendizado Industrial Desenvolvedor WEB

Curso de Aprendizado Industrial Desenvolvedor WEB Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos II Professor: Cheli dos S. Mendes da Costa Modelo Cliente- Servidor Modelo de Aplicação Cliente-servidor Os

Leia mais

Banco de Dados. Maurício Edgar Stivanello

Banco de Dados. Maurício Edgar Stivanello Banco de Dados Maurício Edgar Stivanello Agenda Conceitos Básicos SGBD Projeto de Banco de Dados SQL Ferramentas Exemplo Dado e Informação Dado Fato do mundo real que está registrado e possui um significado

Leia mais

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS AULA 2 INTERAÇÃO COM O BANCO DE DADOS BANCO DE DADOS POSTGRESQL O PostgreSQL é um sistema gerenciador de banco de dados dos mais robustos e avançados do mundo. Seu código é aberto e é totalmente gratuito,

Leia mais

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

Lidando de Forma Eficiente com Validações Locais de Objetos Lidando de Forma Eficiente com Validações Locais de Objetos Aprenda a construir um mini-framework para validar objetos locais sem afetar a complexidade do código. Autor Paulo César M. N. A. Coutinho (pcmnac@gmail.com):

Leia mais

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

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio 32 3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio Este capítulo apresenta o framework orientado a aspectos para monitoramento e análise de processos de negócio

Leia mais

Persistência de Dados em Java com JPA e Toplink

Persistência de Dados em Java com JPA e Toplink Persistência de Dados em Java com JPA e Toplink Vinicius Teixeira Dallacqua Curso de Tecnologia em Sistemas para Internet Instituto Federal de Educação, Ciência e Tecnologia - IFTO AE 310 Sul, Avenida

Leia mais

Integrando Java com Banco de Dados

Integrando Java com Banco de Dados Especialização em Engenharia de Software Programação Orientada a Objetos JDBC Java Database Connectivity Sérgio Soares scbs@cin.ufpe.br Objetivos Apresentar os conceitos básicos da especificação de Java

Leia mais

INTRODUÇÃO. No entanto, o que pode ser considerado um produto (resultado) da criação de BDs?

INTRODUÇÃO. No entanto, o que pode ser considerado um produto (resultado) da criação de BDs? BANCO DE DADOS Universidade do Estado de Santa Catarina Centro de Ciências Tecnológicas Departamento de Ciência da Computação Prof. Alexandre Veloso de Matos alexandre.matos@udesc.br INTRODUÇÃO Um Banco

Leia mais

J930. Padrões. Projeto. Introdução. argonavis.com.br. Helder da Rocha (helder@acm.org)

J930. Padrões. Projeto. Introdução. argonavis.com.br. Helder da Rocha (helder@acm.org) Padrões de J930 Projeto Introdução Helder da Rocha (helder@acm.org) argonavis.com.br O que é um padrão? Maneira testada ou documentada de alcançar um objetivo qualquer Padrões são comuns em várias áreas

Leia mais

Padrão Arquitetura em Camadas

Padrão Arquitetura em Camadas Padrão Arquitetura em Camadas Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Definição Estimula a organização

Leia mais

1Introdução Helder da Rocha (helder@acm.org)

1Introdução Helder da Rocha (helder@acm.org) J930 Padrões Projeto de 1Introdução Helder da Rocha (helder@acm.org) argonavis.com.br O que é um padrão? Maneira testada ou documentada de alcançar um objetivo qualquer Padrões são comuns em várias áreas

Leia mais

Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser

Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser A1Criando um módulo de negócio Capítulo 27 Aplicação dividida em módulos - Introdução Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser compreendido como uma solução de

Leia mais

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre. Triggers um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre. o evento pode ser INSERT, UPDATE, ou DELETE. o trigger pode ser accionado imediatamente

Leia mais

PADRÕES DE SOFTWARE. Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade. Grupo de Padrões de Software da UECE (GPS.

PADRÕES DE SOFTWARE. Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade. Grupo de Padrões de Software da UECE (GPS. PADRÕES DE SOFTWARE 1 Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade Grupo de Padrões de Software da UECE (GPS.UECE) Julho-2009 CONTEÚDO Introdução aos Padrões de Software O quê são padrões?

Leia mais

Figura 1.1 Código de inserção não baseado em Hibernate. Figura 1.2 Código de inserção baseado em Hibernate

Figura 1.1 Código de inserção não baseado em Hibernate. Figura 1.2 Código de inserção baseado em Hibernate Hibernate É um framework para mapeamento objeto/relacional para aplicações em Java. Tem como objetivo mor o mapeamento de classes Java em tabelas do banco de dados e viceversa, possibilitando a realização

Leia mais

Padrões de projeto 1

Padrões de projeto 1 Padrões de projeto 1 Design Orientado Objeto Encapsulamento Herança Polimorfismo Design Patterns 2 Responsabilidades Booch e Rumbaugh Responsabilidade é um contrato ou obrigação de um tipo ou classe. Dois

Leia mais

SISTEMA EXPERIMENTALL 15/11/2009. Olá! A partir de agora vamos conhecer a IDE NetBeans 6.7.1 efetuando um micro projeto swing.

SISTEMA EXPERIMENTALL 15/11/2009. Olá! A partir de agora vamos conhecer a IDE NetBeans 6.7.1 efetuando um micro projeto swing. 15/11/2009 Olá! A partir de agora vamos conhecer a IDE NetBeans 6.7.1 efetuando um micro projeto swing. Crie um novo projeto clicando em arquivo e em novo projeto. Escolha a opção java, aplicativo java

Leia mais

Auditoria Avançada de Persistência com Hibernate, JPA e Envers

Auditoria Avançada de Persistência com Hibernate, JPA e Envers a r t i g o José Yoshiriro Ajisaka Ramos (jyoshiriro@gmail.com): bacharel em Sistema de Informação (IESAM). Mestrando em Ciência da Computação (UFPA). Instrutor na Equilibrium Web e na UAB. Engenheiro

Leia mais

SQL BANCO DE DADOS. Linguagem de consulta SQL. Linguagem de consulta SQL. Linguagem de Consulta Estruturada

SQL BANCO DE DADOS. Linguagem de consulta SQL. Linguagem de consulta SQL. Linguagem de Consulta Estruturada Revisão de tpicos anteriores BANCO DE DADOS Linguagem de consulta SQL Roberto Duarte Fontes Brasília - DF roberto@fontes.pro.br Projeto de banco de dados Modelagem Conceitual (independe da implementação)

Leia mais

PostgreSQL o SGBD das 1001 linguagens Diogo Biazus diogob@gmail.com

PostgreSQL o SGBD das 1001 linguagens Diogo Biazus diogob@gmail.com PostgreSQL o SGBD das 1001 linguagens Diogo Biazus diogob@gmail.com Um dos grandes diferenciais do PostgreSQL em relação à maioria dos outros sistemas de bancos de dados é a presença de diversas linguagens

Leia mais

Programação Orientada a Objetos no C#.NET usando Padrões de Projeto MARCELO SANTOS DAIBERT E MARCO ANTÔNIO PEREIRA ARAÚJO

Programação Orientada a Objetos no C#.NET usando Padrões de Projeto MARCELO SANTOS DAIBERT E MARCO ANTÔNIO PEREIRA ARAÚJO POO Programação Orientada a Objetos no C#.NET usando Padrões de Projeto MARCELO SANTOS DAIBERT E MARCO ANTÔNIO PEREIRA ARAÚJO Marcelo Santos Daibert (marcelo@daibert.net) é professor do Curso de Bacharelado

Leia mais

Acesso a Bancos de Dados (JDBC) Autor: Cleyton Maciel (clayton.maciel@ifrn.edu.br) Adaptação: Pedro Baesse (pedro.baesse@ifrn.edu.

Acesso a Bancos de Dados (JDBC) Autor: Cleyton Maciel (clayton.maciel@ifrn.edu.br) Adaptação: Pedro Baesse (pedro.baesse@ifrn.edu. Acesso a Bancos de Dados (JDBC) Autor: Cleyton Maciel (clayton.maciel@ifrn.edu.br) Adaptação: Pedro Baesse (pedro.baesse@ifrn.edu.br) JDBC Conceito Tipos Transações Tipos SQL e JAVA Conexão JDBC Implementação

Leia mais

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária Cascavel Novembro de 2009 Pedro Patitucci Finamore Daniel Bordignon Cassanelli Marco Antonio da Rosa DIAGRAMAS DE CLASSE E SEQUÊNCIA

Leia mais

Auditoria de sistemas Deixe que seu banco de dados faça o trabalho por você

Auditoria de sistemas Deixe que seu banco de dados faça o trabalho por você Auditoria de sistemas Deixe que seu banco de dados faça o trabalho por você por Cristóferson Guimarães Magalhães Bueno e Odilon Corrêa da Silva 1 O objetivo deste artigo é demonstrar como criar um sistema

Leia mais

Introdução à Padrões de Projeto. Glauber Magalhães Pires

Introdução à Padrões de Projeto. Glauber Magalhães Pires Introdução à Padrões de Projeto Glauber Magalhães Pires Agenda O que são padrões de projeto? Para que servem e por que utilizá-los? Elementos constituintes Como escolher o padrão a ser usado? Como são

Leia mais

Programação com Acesso a Banco de Dados

Programação com Acesso a Banco de Dados Campus Ipanguaçu Curso: Técnico em Informática Programação com Acesso a Banco de Dados AULA 17 ACESSO A BANCO DE DADOS COM JDBC PROF.: CLAYTON M. COSTA 2 011.2 Introdução Aplicação + Banco de Dados: Funcionalidade

Leia mais

BD SQL Server. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

BD SQL Server. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04 BD SQL Server SGBD SQL Server Licenciatura em Engenharia Informática e Computação Bases de Dados 2003/04 BD SQL Server Criação da Ligação ao SGBD Entrar no Microsoft SQL Server / Enterprise Manager Criar

Leia mais

Listando, gravando, alterando e excluindo registro do banco de dados com JSP

Listando, gravando, alterando e excluindo registro do banco de dados com JSP SISTEMAS DE INFORMAÇÃO 3º ANO PROGRAMAÇÃO II PROF. RONALDO FERREIRA DA SILVA JavaServer Pages JavaServer Pages (JSP) é uma tecnologia que ajuda os desenvolvedores de software a criarem páginas web geradas

Leia mais

Integridade dos Dados

Integridade dos Dados 1 Integridade dos Dados Integridade dos Dados Melissa Lemos melissa@inf.puc-rio.br A integridade dos dados é feita através de restrições, que são condições obrigatórias impostas pelo modelo. Restrições

Leia mais

CURSO DESENVOLVEDOR JAVA Edição 2009

CURSO DESENVOLVEDOR JAVA Edição 2009 CURSO DESENVOLVEDOR JAVA Edição 2009 O curso foi especialmente planejado para os profissionais que desejam trabalhar com desenvolvimento de sistemas seguindo o paradigma Orientado a Objetos e com o uso

Leia mais

Tecnologias Java JDBC. Marcio Seiji Oyamada msoyamada@gmail.com

Tecnologias Java JDBC. Marcio Seiji Oyamada msoyamada@gmail.com Tecnologias Java JDBC Marcio Seiji Oyamada msoyamada@gmail.com 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

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger a tecnologia de banco de dados permite persistir dados de forma a compartilha-los com varias aplicações. Aplicação 1 aplicação 2 aplicação 3 SGDB Banco

Leia mais

Autor: Ricardo Francisco Minzé Júnior - ricardominze@yahoo.com.br Desenvolvendo aplicações em camadas com PHP 5.

Autor: Ricardo Francisco Minzé Júnior - ricardominze@yahoo.com.br Desenvolvendo aplicações em camadas com PHP 5. Desenvolvendo aplicações em camadas com PHP 5. Talvez a primeira vista você ache estranha a palavra Camada em programação, mas o que vem a ser Camada? Segundo o dicionário: Camada 1 - Qualquer matéria

Leia mais

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural Resumo: Perguntas a fazer ao elaborar um projeto arquitetural Sobre entidades externas ao sistema Quais sistemas externos devem ser acessados? Como serão acessados? Há integração com o legado a ser feita?

Leia mais

Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia

Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia Sistemas de Informação Ling.Prog.V Prof. Roberto Couto Lima Fonte: Curso Java Prof. Fabricio Leonard Leopoldino (Universo)

Leia mais

Java JDBC Aplicação Java com Acesso a um SGBD. Ricardo Terra (rterrabh [at] gmail.com) Java JDBC Maio, 2010

Java JDBC Aplicação Java com Acesso a um SGBD. Ricardo Terra (rterrabh [at] gmail.com) Java JDBC Maio, 2010 Java JDBC Aplicação Java com Acesso a um SGBD Ricardo Terra rterrabh [at] gmail.com Ricardo Terra (rterrabh [at] gmail.com) Java JDBC Maio, 2010 1 CV Nome: Ricardo Terra Email: rterrabh [at] gmail.com

Leia mais

Sumário Agradecimentos... 19 Sobre.o.autor... 20 Prefácio... 21 Capítulo.1..Bem-vindo.ao.MySQL... 22

Sumário Agradecimentos... 19 Sobre.o.autor... 20 Prefácio... 21 Capítulo.1..Bem-vindo.ao.MySQL... 22 Sumário Agradecimentos... 19 Sobre o autor... 20 Prefácio... 21 Capítulo 1 Bem-vindo ao MySQL... 22 1.1 O que é o MySQL?...22 1.1.1 História do MySQL...23 1.1.2 Licença de uso...23 1.2 Utilizações recomendadas...24

Leia mais

CIÊNCIA E TECNOLOGIA DO RIO

CIÊNCIA E TECNOLOGIA DO RIO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE BANCO DE DADOS II Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@ifrn.edu.br Curso de Tecnologia

Leia mais

DSS 09/10. DSS 09/10 Que métodos é que fazem parte de cada camada? Aplicações Multi-camada JDBC. Aula 3 DSS 09/10

DSS 09/10. DSS 09/10 Que métodos é que fazem parte de cada camada? Aplicações Multi-camada JDBC. Aula 3 DSS 09/10 Universidade do Minho Departamento de Informática Aplicações Multi-camada JDBC Aula 3 António Nestor Ribeiro /António Ramires Fernandes/ José Creissac Campos {anr,arf,jose.campos@di.uminho.pt 2 Programação

Leia mais

FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE

FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE Formando: Dyckson Dyorgio Dolla Orientador: Prof. Everaldo Artur Grahl Julho / 2001 ROTEIRO DA

Leia mais

Módulo 5 - JDBC java.sql - Conexão com Banco de Dados

Módulo 5 - JDBC java.sql - Conexão com Banco de Dados Aplicações de Linguagem de Programação Orientada a Objetos 2ºsem/2012 (Professor: Tiago) Módulo 5 - JDBC java.sql - Conexão com Banco de Dados Fazer o download do drive de conexão com o BD: http://jdbc.postgresql.org/download.html

Leia mais