java -indonésia -real -anos -"de programação" através

Propaganda
Área Departamental de Engenharia de Electrónica e Telecomunicações e de Computadores
LEIC
Programação em Sistemas Computacionais
Quarta série de exercícios – Verão de 2011/2012
Implemente as funcionalidades indicadas usando as linguagens C e Java, tendo o cuidado de eliminar repetições
no código fonte e de isolar funcionalidades distintas em ficheiros fonte próprios. Entregue o código,
devidamente indentado e comentado, e um relatório com a descrição das soluções. Inclua na entrega o makefile
que permita gerar os ficheiros binários finais a partir do código fonte. O relatório deverá ser um guia para a
compreensão do código desenvolvido e não uma mera tradução deste para língua natural. Contacte o docente se
tiver dúvidas. Encoraja-se a discussão de problemas e soluções com colegas de outros grupos, mas recorda-se
que a partilha directa de soluções leva, no mínimo, à anulação das entregas de todos os envolvidos.
Introdução
A necessidade de pesquisar informação persistente é recorrente em aplicações informáticas. Para esse fim é
comum utilizar bases de dados relacionais. Contudo, em muitos cenários é possível utilizar alternativas mais
leves. Estão disponíveis variadas bibliotecas open-source, para diferentes linguagens, que suportam pesquisas
eficientes sobre ficheiros de dados, muitas vezes através de tabelas de hash persistentes. A biblioteca TinyCdb é
disso um exemplo. Esta biblioteca foi pensada para suportar pesquisas eficientes em bases de dados quasi
constantes. A API fornecida está organizada em dois grupos distintos: um primeiro grupo que permite construir
uma base de dados a partir de pares chave/valor e um segundo grupo que permite pesquisar valores associados a
determinada chave (sendo possível a existência de vários valores com a mesma chave). Sempre que é necessário
acrescentar pares chave/valor é construída uma nova base de dados.
A Java Native Interface (JNI) é uma infra-estrutura que permite utilizar bibliotecas nativas em aplicações Java.
Com este trabalho pretende-se desenvolver uma biblioteca JNI que permita utilizar os serviços da biblioteca
TinyCdb em aplicações escritas em Java.
Para instalar a biblioteca TinyCdb utilize o comando:
sudo apt-get install libcdb-dev
Objectivos
Pretende-se desenvolver uma biblioteca JNI que permita tirar partido dos serviços de persistência de dados
fornecidos pela biblioteca TinyCdb em programas escritos na linguagem Java.
Os serviços são expostos em Java através das classes CdbCreator e Cdb, apresentadas nos diagramas UML
abaixo e cujas interfaces públicas são fornecidas em anexo.
A class CdbCreator serve para criar uma base de dados nova. O método add permite a criação de pares
chave/valor, fornecidos na forma de arrays de bytes. No final é chamado o método close.
A classe Cdb permite pesquisas sobre uma base de dados já construída. A pesquisa é suportada pelo método
get, que recebe uma chave e retorna um iterador sobre todos os valores associados a essa chave.
É fornecida em anexo uma aplicação em Java semelhante à do exercício 4 da 1ª Série. A aplicação permite a
criação de uma base de dados de filmes e a pesquisa de filmes pelo seu título.
Enunciado
1. Desenvolver a biblioteca JNI para suportar os serviços oferecidos pelas classes CdbCreator e Cdb e
acrescentar às classes CdbCreator e Cdb o necessário para tirar partido da biblioteca JNI implementada.
(continua)
2. [OPCIONAL] Acrescentar à aplicação Java fornecida a possibilidade de pesquisar os filmes de um dado
realizador e os filmes em que um dado actor participou. Para implementar eficientemente estas duas
pesquisas é necessário criar duas bases de dados adicionais:
 base de dados de realizadores, que contém pares chave/valor em que a chave é o nome de um
realizador e o valor é o nome de um filme que dirigiu;
 base de dados de actores, que contém pares chave/valor em que a chave é o nome de um actor e o
valor é o nome de um filme em que participou.
NOTA: Para converter objectos Java em arrays de bytes (seriação) e reconstituir objectos Java a partir de arrays
de bytes (desseriação) fornece-se a classe ByteArraySerializer, cuja utilização se ilustra no programa anexo.
Data limite de entrega: 1 de Julho de 2012
ISEL, 8 de Junho de 2012
Bom trabalho!
Jorge Martins & João Trindade
Download