Sistema Online de Acompanhamento Didático

menu



6. Banco de dados

Uma das partes mais interessantes do projeto é a independência de banco de dados. Para atingir este objetivo, criamos um subprojeto chamado Gerbo, que a partir de um arquivo XML, gera arquivos java que fazem o mapeamento objeto relacional. Também conhecido como camada de persistência.

O que é este mapeamento? Normalmente, quando você lida com SQL em java, você tem chamadas para a API JDBC dentro do código java, algo que deixa seu código bastante ilegível, não orientado a objetos, e "hardcoded". O mapeamento muda tudo isso. Você passa a trabalhar exclusivamente com objetos, você não tem mais SQLs pelo seu código fonte, em vez disso, eles ficam em um arquivo de configuração. Para ilustrar, está aqui um exemplo técnico. Normalmente uma inserção no banco de dados utilizando código Java seria algo do tipo:
Connection c = DriverManager.getConnection(connectionString);
Statement s = c.createStatement();
s.execute("INSERT INTO usuarios ..." + "Neo");
Utilizando o subprojeto gerbo:
Usuario user = new Usuario();
user.setName("Neo");
user.save();
Se houver a necessidade de mudança de banco de dados, basta editar o arquivo de configuração(Database.properties) e colocar um arquivo com as SQLs apropriadas. O Panda já foi testando, com sucesso, utilizando o MySQL 3.23, MySQL 4.x e o PostGreSQL 7.2, sem alterar uma única linha de código java.

Também foram utilizados PreparedStatements em vez de Statements, o que delega o "escaping" das strings e binários ao driver de conexão. Um ConnectionPool (classe DatabaseBroker) foi utilizado para evitar o estresse de operações I/O com o banco de dados, já que o java sempre se utiliza de sockets para fazer a conexão ao banco. Ele faz o compartilhamento de N conexões (que pode ser configurado através de um arquivo) e fica dependendo da thread que pegou a conexão para devolvê-la a pool, caso contrário fica dependendo do garbage collector.
login

2001 - 2002 panda.ime.usp.br