5
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 JDBC, Hibernate

Embed Size (px)

Citation preview

Page 1: Conceitos JDBC, Hibernate

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”;

Page 2: Conceitos JDBC, Hibernate

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).

Page 3: Conceitos JDBC, Hibernate

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.

Page 4: Conceitos JDBC, Hibernate

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().

Page 5: Conceitos JDBC, Hibernate

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.