JDBC
Transparências sobre JDBC
Driver Oracle
Introdução a JDBC
Exercício 1
Exemplo:
static {
// escreva aqui o código para registrar o driver JDBC
}
Dicas:
Você encontrará as classes da API JDBC dentro do pacote java.sql.
Olhe a apresentação sobre JDBC.
Exercício 2
-
Utilize a classe DataSource do exemplo anterior para escrever uma aplicação (classe
GerenciaTabelas) para acessar o banco de dados. Escreva métodos para criar e remover a tabela abaixo.
Nome da tabela: SeuNome_PRODUTO
Colunas:
codigo INT PRIMARY KEY (codigo)
nome VARCHAR(30)
preco REAL
quantidade INT
Dicas:
Utilize os comandos SQL: CREATE TABLE e DROP TABLE.
Exercício 3
- Complete a definição do Sistema Exemplo criando a classe
RepositorioProdutosBDR que implementa a interface
RepositorioProdutos e usa o banco de dados como meio para persistência dos dados.
- Remova o comentário da linha 25 da classe gui.Programa
e teste o sistema. Antes
de testar o sistema execute a classe GerenciaTabelas
para criar as tabelas a serem utilizadas.
RMI
Introdução
a RMI
Exercício 1
- Torne a classe fachada.Estoque do Sistema
Exemplo um servidor RMI, de modo que a classe gui.Programa
se comunique com a mesma remotamente (via RMI).
Concorrência em Java
Transparências sobre concorrência
Exercício 1
- Defina a classe Contador como uma subclasse de
Thread, que imprime números de 0 a 10. Crie a classe
TesteContador que deve definir o método main
que cria e inicia a execução do thread Contador.
Teste o resultado executando a classe TesteContador.
- Altere as classes Contador e TesteContador de modo que a classe
Contador seja definida como uma implementação da interface
Runnable. Teste o resultado.
- Agora altere o método main da classe TesteContador para criar dois ou mais
threads Contador e inicialize a execução dos mesmos.
Dicas:
- Na última parte do exercício, onde é pedido para alterar o método
main da classe TesteContador, você deve inicialmente criar os
threads e em seguida inicializá-los, de modo a obter um melhor resultado na visualização da execução concorrente.
- Como o loop do exemplo é apenas de 1 a 10 pode ser que não seja visualizado um
interleaving ente as execuções dos threads. Caso isto ocorra aumente o tamanho do
loop.
Exercício 2
- Defina uma classe Mailbox que tem um
atributo message do tipo String.
A classe Mailbox deve ter dois métodos: storeMessage
e retrieveMessage. O método storeMessage
recebe um String e, se o mesmo tiver sido
consumido (message == null), armazena no
atributo message do Mailbox.
Caso contrário, quem chamou o método storeMessage
deve esperar até que alguém consuma a mensagem (chamando o método retrieveMessage).
De forma similar, o método retrieveMessage
retorna o valor da mensagem, caso ela tenha sido produzida/armazenada (message
!= null). Caso contrário quem chamou o método deve esperar até que
alguém produza uma mensagem (chamando o método storeMessage).
- Crie a classe Producer, que é um thread
e deve ter um atributo do tipo Mailbox e no seu método
run deve ser definido um loop que executa o método
storeMessage do Mailbox, armazenando
mensagens no Mailbox.
- Defina um a classe Consumer, que também
é um thread, e que deve consumir mensagens (chamando o método retrieveMessage)
escritas em no seu atributo do tipo Mailbox.
- Crie uma classe de teste com um método main que cria um
Producer e um Consumer que
compartilham o mesmo Mailbox e iniciam a execução.
- Altere a classe de teste para criar mais de um produtor e/ou consumidor para o mesmo
Mailbox.
Dicas:
- Utilize os métodos wait
e notifiAll para implementar os métodos
da classe Mailbox.
- Na última parte do exercício, onde é pedido para alterar a classe de teste, você deve adicionar um atributo de identificação
(String) nas classes Producer e
Consumer, de modo a permitir que sejam identificados tanto que está consumindo uma mensagem, quanto que esta produzindo a mesma. Para tal concatene o identificador dos objetos a mensagem a ser enviada (no caso do produtor) ou a mensagem a ser impressa (no caso do consumidor).
Exercício 3
- Conforme discutido em sala de aula, analise o Sistema Exemplo e
identifique se existem situações passíveis de controle de concorrência.