Desenvolvimento de Aplicações § Dificuldades no uso de Bancos de Dados § Um leigo não sabe o que é e como funciona um BD § Mesmo um profissional da área de informática pode ter dificuldades em utilizar BDs § Difícil escrever consultas em SQL § Saída dos dados não está na forma desejada § Erros na elaboração das consultas e na interpretação dos resultados podem ser altamente prejudiciais Desenvolvimento de Aplicações § JDBC § Java EE § JDO § Integração de Sistemas § Diversos sistemas podem precisar dos dados do BD, preferencialmente sem intervenção humana 165 166 Desenvolvimento de Aplicações JDBC § Aplicações podem acessar BDs utilizando: § JDBC permite que aplicações Java acessem bases de dados § Interfaces de programação de aplicações (APIs (APIs)) § JDBC (Java DataBase Connectivity) § ODBC (Open DataBase Connectivity) § Plataformas de desenvolvimento de aplicações integradas a bancos de dados § Java Enterprise Edition + Conectores Java § Microsoft .NET + ADO.NET § Camadas/frameworks/APIs de persistência § JDO (Java Data Objects) e suas implementações § Hibernate § É necessário utilizar um driver § O driver deve ser fornecido pelo fabricante do SGBD § Acessar uma base de dados implica em: § Estabelecer uma conexão com a base de dados § Executar comandos SQL § Processar os resultados obtidos 167 JDBC 168 JDBC § Drivers JDBC Aplicação Java § JDBCJDBC-ODBC Bridge § É uma ponte do driver ODBC para JDBC § Implementado pela classe JdbcOdbcDriver § Permite que a aplicação Java veja o driver ODBC como um driver JDBC § JDBC – Native Bridge § Converte as chamadas JDBC da aplicação para chamadas de um driver nativo já instalado na máquina § O driver nativo se comunica com a base de dados através de um protocolo proprietário JDBC API Driver JDBC p/ Oracle Driver JDBC p/ ODBC Driver JDBC p/ MySQL Oracle SQL Server MySQL 169 170 JDBC JDBC § Drivers JDBC (cont.) § Para acessar a base de dados é preciso: § JDBC – Net Bridge § Componente Java que converte chamadas JDBC para um protocolo de rede § A aplicação se comunica com um servidor intermediário que gerencia qualquer conexão solicitada à base de dados § All Java JDBC Driver § Escrito 100% em Java § Opera em qualquer plataforma com uma JVM 171 § Carregar o driver JDBC: § Instanciar um objeto da classe java. java.sql. sql.Driver: Driver: Class. Class.forName( forName(driver_path); § Forma alternativa: java –Djdbc. Djdbc.drivers=driver_path application § Instanciar um objeto da classe java. java.sql. sql.Connection: Connection: Connection conn = DriverManager. DriverManager.getConnection( getConnection(URL, login, password); § URL: localização da base de dados § Login: Login: Nome do usuário da base de dados § Password: Password: senha do usuário da base de dados 172 JDBC JDBC § O envio de comandos SQL para a base de dados é feita através das classes: § O resultados de um comando SQL é recebido em um ResultSet § java.sql.Statement § java. java.sql. sql.PreparedStatement //pré compilada § Métodos das classes Statement § execute() à executa um comando qualquer § executeQuery(String executeQuery(String SQL) à executa consulta § executeUpdate(String executeUpdate(String SQL) à efetua alteração (insert, insert, update, update, delete) delete) § É retornado pelo método executeQuery() executeQuery():: java. java.sql. sql.ResultSet rs =stmt =stmt..executeQuery(SQL); executeQuery(SQL); § Os resultados são armazenados em uma lista § O método next() next() retorna um valor booleano indicando se há mais valores na lista § Se houver um novo valor, este pode ser lido com um método rs.get rs.getTipo (id ), onde Tipo é o tipo correspondente ao dado lido (ex.: String, Int, etc.) e id pode ser a posição ou o nome do campo 173 174 Java EE Java EE § Java Platform, Enterprise Edition § Java Server Pages (JSP) § Adiciona à plataforma Java suporte para: para: § Desenvolvimento de aplicações Web: § JSP, Servlets e JSF § Desenvolvimento de Serviços Web: § JAXJAX-WS, JAXP, JAXB, JAXJAX-RPC, SAAJ, JAXR § Componentes de Negócio: Negócio: EJB § Suporte a Transações: Transações: JTA § Interconexão com Sistemas Legados: Legados: Connectors § Outros Mecanismos de Comunicação Remota: Remota: § JMS e JavaMail 175 § Permite a criação de páginas Web com conteúdo dinâmico, dinâmico, gerado por código Java ou por JavaBeans § Usa APIs voltadas para a criação de HTML e XML § Servlets § Aplicações que rodam em servidores Web § São persistentes, persistentes, ao contrário de scripts CGI § Recebem requisições pela rede via HTTP ou HTTPS § Java Server Faces (JSF) § Framework para criação de interfaces Web gráficas § Acessível através da API Java e de arquivos de configuração em XML 176 Java EE Java EE § Suporte a Serviços Web no Java EE § Enterprise JavaBeans (EJB) § JAXJAX-WS (Java API for XML Web Services): provê suporte para criação de serviços web e seus clientes § JAXP (Java API for XML Processing): realiza o processamento de dados em XML § JAXB (Java API for XML Binding): faz o mapeamento entredados em XML e objetos Java § JAXJAX-RPC (Java API for XML RPC): permite o envio de chamadas remotas de procedimento a serviços web § SAAJ (SOAP with Attachments API for Java): permite o envio de mensagens SOAP, inclusive com anexos § JAXR (Java API for XML Registries): permite o acesso a registros de serviços em repositórios UDDI e ebXML § Componentes que rodam no servidor § Acessam os sistemas legados da empresa para implementar regras de negócio § Java Transaction API (JTA) § API de suporte a transações § Transações são modeladas como objetos Java § Java Connectors § Usados para integrar os sistemas legados usados nas empresas na arquitetura J2EE 177 Java EE 178 Java EE § Java Message Service (JMS) § Camadas do JEE § Serviço para comunicação remota através de mensagens assíncronas (eventos) eventos) § JavaMail § API para envio e recepção de ee-mails § Útil para aplicações Web 179 Java EE Java EE § Camadas do Java EE § Camada Cliente do JEE § Camada Cliente § Clientes Web: navegador, navegador, web services, … § Aplicações Java § Camada Web § Páginas JSP, JSF, Servlets e JavaBeans § Camada de Negócios § Componentes EJB § Camada de Sistemas de Informações Informações Empresariais Empresariais § Integração com BDs e outros sistemas legados 180 © http://java.sun.co m § Comporta dois tipos de cliente: § Clientes Web (thin) ou Aplicações Java 181 © http://java.sun.com Java EE Server 182 Java EE Java EE § Servidor Java EE § Camadas do Servidor Java EE § Possui duas camadas: § Camada Web § Composta por páginas JSP, JSF, Servlets e JavaBeans § Acessada pelos clientes Web § Camada de Negócios § Composta por componentes EJB § Usada pela camada Web e por aplicações clientes escritas em Java © http://java.sun.com Java EE Server 183 184 Java EE Java EE § Componentes EJB § Servidor Java EE § Session Beans § Executam uma tarefa durante uma sessão de interação com um deterinado cliente § Entity Beans § Representam dados armazenados em BDs § Persistência pode ser transparente § MessageMessage-Driven Beans § São consumidores de mensagens JMS § Mensagens tratadas ao serem recebidas § Fornece ambientes controlados de execução – os contêiners – para componentes Java EE § Contêiner Web: Web: para Servlets e Páginas JSP/JSF § Contêiner EJB: para Enterprise Beans § Provê acesso transparente a serviços: § Transação: JTA § Segurança: JAAS § Localização: JNDI § etc. 185 186 Java EE Java EE § Servidor Java EE § Camada de Sistemas de Informações Informações Empresariais Empresariais (EIS) § Usada pelos componentes EJB da camada de negócio para acesso a software de infrainfra-estrutura § Banco de Dados § Monitores de Transações Transações § Enterprise Resource Planning (ERP) § Customer Relationship Management (CRM) § ... e outros sistemas legados § Estes sistemas geralmente rodam em mainframes ou servidores de médio porte § Conectores permitem o acesso ao sistema legado Java EE Server © http://java.sun.com 187 188 Java EE JDO § Conectores § Java Data Objects § Integram diversos sistemas à arquitetura Java EE § Fornecidos pelo fabricante do sistema legado ou por terceiros § Para desenvolver um conector geralmente é necessário escrever código nativo para a plataforma do sistema legado e integrar ao Java usando JNI (Java Native Interface), CORBA ou sockets § Interface padrão para persistência de modelos de dados de aplicações § Com JDO, os dados de uma aplicação podem ser persistidos transparentemente em um BD § Aplicações que usam JDO são independentes do SGBD utilizado, tornandotornando-se portáveis entre BDs mesmo que o modelo de dado seja diferente § Implementada por vários fabricantes de software § Kodo JDO, intelliBO, intelliBO, OpenFusion JDO, FastObjects, FastObjects, etc. 189 190 JDO JDO § Classes JDO Persistentes § Gerenciador de Persistência § Uma classe, para ser persistente, deve implementar a interface javax. javax.jdo. jdo.spi. spi.PersistenceCapable § Esta interface define os métodos para gerenciar instâncias da classe que será persistida § Os métodos necessários para persistir instâncias da classe podem ser gerados automaticamente por um prépré-processador ou gerador de código Responsável por persistir e recuperar objetos do BD Implementa a interface javax. javax.jdo. jdo.PersistenceManager Principais métodos: § makePersistent() makePersistent():: persiste um objeto § retrieve() retrieve():: recupera um objeto § makePersistentAll() makePersistentAll():: persiste array ou coleção de objetos § retrieveAll() retrieveAll():: recupera array ou coleção § Criado com o método getPersitenceManager() getPersitenceManager() de uma fábrica (javax (javax..jdo. jdo.PersistenceManagerFactory) PersistenceManagerFactory) 191 192 § § § JDO JDO § Consultas § Transações § Criada usando o método newQuery() newQuery() do gerenciador de persistência, que retorna um objeto que implementa a interface javax. javax.jdo. jdo.Query § Na criação da consulta deve ser especificada a classe que será pesquisada, além dos mais diversos critérios da consulta § O método execute() invoca a consulta no BD e retorna uma coleção de objetos como resultado § Não é necessário escrever nenhum código SQL ou em qualquer outra linguagem de consulta 193 § Implementam a interface javax. javax.jdo. jdo.Transaction § Obtida com o método currentTransaction() currentTransaction() do gerenciador de persistência § Principais métodos: § begin() begin():: inicia a transação § commit() commit():: efetiva a transação § rollback() rollback():: aborta a transação e desfaz qualquer modificação efetuada nos dados 194