Upload
adlin2009
View
828
Download
0
Embed Size (px)
Citation preview
Conceitos sobre JDBC, Hibernate eProgramação Concorrente – Edmilson Prata – UNIGRANRIO – 2008 Pág. 1
Conceitos sobre JDBC, Hibernate e
Programação Concorrente
Edmilson Prata – UNIGRANRIO – 2008
Sobre Framework:
• Conjunto de classes/interfaces reutilizáveis que define/promove uma estrutura de comportamentos genéricos.
• A utilização de um framework implica em especializar suas classes abstratas e realizar suas interfaces, tornando-as concretas, permitindo assim instanciar os seus objetos.
• “Um framework é uma arquitetura de alto nível, consistindo de classes que são especialmente projetadas para serem refinadas e usadas em grupo”.
Conceitos de JDBC:
• O JDBC é genérico: Cada fabricante de SGBD pode gerar um driver JDBC para o produto que estiver construindo. Para isto, deve-se basicamente realizar (implementar) as interfaces definidas em java.sql (“realizar/especializar o framework”).
• Quando nós criamos um programa para acessar um SGBD com JDBC, declaramos variáveis que sãoreferências para objetos de uma interface definida em “java.sql”.
• URL JDBC: É uma String que indica 3 informações: 1) que driver a aplicação deverá utilizar, 2) a localização do SGBD, 3) o nome do banco de dados a ser utilizado.
Passos necessários para se estabelecer uma conexão com o banco de dados utilizando o JDBC:
• Carregar o driver JDBC que será responsável pela comunicação com o SGBD. Para isto devemos utilizar a classe Class e o seu método estático forName();
• Solicitar que o “Gerenciador de Drivers” do Java faça uma conexão com a base de dados. Isto poderá ser feito utilizando-se a classe DriverManager, que é o Gerenciador de Drivers propriamente dito, e o seu método estático “getConnection”;
Conceitos sobre JDBC, Hibernate eProgramação Concorrente – Edmilson Prata – UNIGRANRIO – 2008 Pág. 2
Exemplo de conexão com o banco de dados: import java.sql.*; … Connection conexao; try{
// Carregando driver ODBC-JDBC Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Abrindo uma conexão com o via ODBC conexao=DriverManager.getConnection("jdbc:odbc:Test e", conta, senha); // As transações serão efetivadas apenas após o com mit manual conexao.setAutoCommit(false);
} Catch (ClassNotFoundException cnfe) {
System.out.println(“Não encontrado o driver JDBC-OD BC:"+ cnfe.getMessage( ) );
} Catch (SQLExceptionsql e) {
System.out.println(“Erro na conexão: " + sqle.getMe ssage( ) ); }
Principais classes envolvidas na conexão e execução de consultas com o banco via JDBC:
� Class: Classe do pacote “java.lang” que possui o objetivo de descrever os metadados de uma determinada classe. Com o seu método estático forName nós carregamos o driver JDBC que permitirá uma conexão com um SGBD.
Exemplo: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
� DriverManager: É o “Gerenciador de Drivers” do Java, pertencente ao JDBC, que também é responsável pelas conexões com os SGBDs. O método desta classe utilizado para estabelecer uma conexão com um BD é o “getConnection”. Será preciso informar ao método a URL JDBC, a conta e a senha de um usuário com autorização para estabelecer a conexão.
Exemplo:
Connection conexao;
conexao=DriverManager.getConnection("jdbc:odbc:Exem plo", conta, senha);
� ClassNotFoundException: Classe de exceção que é disparada quando o método forName, da classe Class, não encontrar o bytecode da classe especificada no parâmetro, ou seja, quando o driver JDBC não for encontrado.
� SQLException: É a classe de exceção que indica a ocorrência de algum erro com o JDBC, que pode ser por exemplo um problema com uma consulta SQL, um problema com o SGBD, etc. Todos os métodos JDBC podem disparar esta exceção e, por isto, somos obrigados a colocar as mensagens dentro de um bloco de “try...catch”.
� PreparedStatement: Classe cujas instâncias preparam a execução de um comando SQL para ser enviado ao SGBD. Ela é geralmente utilizada em consultas pré-definidas e que apresentam variações apenas nos dados a serem passados como parâmetros. Estes são identificados pelo caractere de interrogação (?), na String SQL a ser submetida.
� ResultSet: Classe cujas instâncias representam o resultado de uma consulta. Ela funciona como um cursor sobre as tuplas retornadas pela consulta realizada no banco. Para a navegação podemos utilizar os métodos: boolean next(), boolean first(), boolean last(), boolean absolute(posição), entre outros (ver Javadoc).
Conceitos sobre JDBC, Hibernate eProgramação Concorrente – Edmilson Prata – UNIGRANRIO – 2008 Pág. 3
Conceitos sobre Hibernate:
• O que é: Hibernate é um toolkit de persistência open source cujo propósito é prover um mecanismo para persistência de objetos em um banco de dados relacional.
• Qual a vantagem do Hibernate: Ele oferece vários recursos que facilitam o mapeamento do modelo orientado a objeto para o relacional e vice-versa. Isto simplifica o trabalho de persistir os objetos em um modelo (o relacional) que não é orientado a objetos. Com o Hibernate, a impressão que temos durante a codificação é que estamos trabalhando com um SGBDOO, apesar de estarmos trabalhando com um SGBD Relacional.
O que é preciso para se trabalhar com o Hibernate:
• Acrescentar ao projeto (CLASSPATHTH) os arquivos “.jar” necessários para o funcionamento do Hibernate. São eles o “jar” do próprio Hibernate e todos os contidos na pasta “lib” do Hibernate;
• Configurar o arquivo de configuração do Hibernate chamado “Hibernate.cfg.xml”;
• Criar um arquivo XML para mapear cada classe de domínio cujos objetos serão persistidos e acrescentar este arquivo no “Hibernate.cfg.xml”.
Conceitos de Programação concorrente:
• Concorrência: Quando dois ou mais trechos de código são executados “simultaneamente” pelo mesmo computador;
• Processos (idéia básica): Cada programa é um processo cujos recursos de máquina são administrados pelo SO (sistema operacional);
• Programa com Concorrência: Quando dois ou mais trechos de código de um programa são executados “simultaneamente”;
o 1a. Estratégia – Criação de sub-processos. Entretanto, criar novos processos é uma tarefa demorada e custosa para o SO;
o 2a. Estratégia – Utilização de Threads. São muito mais leve que um processo.
Processos:
• Processo é o conjunto de recursos, código/instruções (programa) e interação dos agentes envolvidos (usuário, sistema operacional, etc.) necessários para a realização de uma missão;
• O processo tem um objetivo a ser alcançado, ou seja, o produção de um bem tangível ou a prestação de um serviço;
• Um processo pode comportar várias tarefas menores.
Conceitos sobre JDBC, Hibernate eProgramação Concorrente – Edmilson Prata – UNIGRANRIO – 2008 Pág. 4
Threads
• Thread é uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas simultaneamente;
• Compartilham os recursos do processo ao qual pertencem;
• Como são sub-processos, as threads não existem sem o processo;
• Precisa ser suportado pelo sistema operacional para funcionarem (sistemas multithreads ou multitarefas);
• Permite a um programa simples executar várias coisas simultaneamente.
Como criar uma Thread?
É possível criarmos Threads com Java de duas formas:
• Através da especialização da classe Thread;
• Através da implementação da interface Runnable.
Especializando a classe Thread:
• Criamos uma classe que seja especialização de Thread;
• Instanciamos um objeto desta classe e enviamos para ele a mensagem start();
• A JVM irá criar uma thread que irá executar o método run(). Este método deverá ser definido dentro da especialização.
• Exemplo:
public class EspecializacaoDeThread extends Thread { public void run() { // instruções a serem executadas... } }
Implementando a Interface Runnable
• Estratégia utilizada quando a classe já for especialização de alguém, ou seja, não é possível especializar a classe Thread;
• Basta implementar a interface Runnable e definir o método run();
• Para iniciar a tarefa é preciso criar um objeto de Thread passando no construtor o objeto da classe que implementa Runnable. Ex:
Thread tarefa = new Thread(objetoDaImplementacaoDeRunnable); tarefa .start();
• Uma idéia bem prática é criar-se um atributo do tipo Thread na classe e no construtor chamar o método start().
Conceitos sobre JDBC, Hibernate eProgramação Concorrente – Edmilson Prata – UNIGRANRIO – 2008 Pág. 5
• Exemplo:
public class ImplementacaoDeRunnable implements Runnable { Thread tarefa = new Thread( this); public ImplementacaoDeRunnable() { tarefa .start(); } public void run() { // instruções a serem executadas... try { //intervalo próxima execução: long tempoEmMilisegundos = 3000; //pausa na tarefa: Thread. sleep(tempoEmMilisegundos); //nova execução:
run(); } catch (Exception e) { e.printStackTrace(); } } }
Palavra reservada synchronized:
Métodos sincronizados são aqueles que só começam a ser executados se o objeto não estiver executando o método indicado ou quando o método previamente chamado terminar.
Um objeto pode executar concorrentemente N métodos não sincronizados em N threads diferentes (1 método para cada thread), mas apenas um método sincronizado por vez nas N threads.