Á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