Você está na página 1de 5

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. 1
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:Teste", conta,
senha);
// As transações serão efetivadas apenas após o commit manual
conexao.setAutoCommit(false);
}
Catch (ClassNotFoundException cnfe) {
System.out.println(“Não encontrado o driver JDBC-ODBC:"+
cnfe.getMessage( ) );
}
Catch (SQLExceptionsql e) {
System.out.println(“Erro na conexão: " + sqle.getMessage( ) );
}

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:Exemplo", 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. 2
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. 3
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. 4
• 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.

Conceitos sobre JDBC, Hibernate eProgramação Concorrente – Edmilson Prata – UNIGRANRIO – 2008 Pág. 5