Sérgio Lopes Sakabatō, the reversed blog!

Primeiros problemas com plataforma NetBeans03 Jun 2008

Isto de vermos que existe imensa documentação antes de começarmos um projecto e de conhecermos as tecnologias tem um contra: realmente existem imensas fontes sobre a plataforma Netbeans mas nem todos estão actualizadas e mesmo as que estão, tendem a explicar apenas as coisas mais simples, e pior, nem sempre da forma mais directa. Depois de iniciar o desenvolvimento da aplicação, as deficiências na documentação, começaram a aparecer que nem cogumelos em tempo de chuva, que é como quem diz, em quantidades por demais superiores ao que o meu cérebro consegue aguentar! E naturalmente, estou pelos cabelos com tudo isto!

Não que a plataforma seja má ou que considere uma má escolha ter enveredado por este caminho, apenas que algumas coisas podiam ser mais evidentes, estar melhor documentadas, ou pura e simplesmente serem mais simples de atingir.

Um pouco de referência: A aplicação está ser desenvolvida em Java, usando a plataforma Netbeans, e uma camada de persistência conseguida através de bases de dados relacionais. A abstracção em relação ao SGBD usado é criada através do uso de uma tecnologia ORM, neste caso o Hibernate. Ora a plataforma impõem uma forma modular de desenvolvimento, o que implica ter de planear a aplicação em pedaços que possam encaixar uns nos outros e, ao mesmo tempo, possam ser substituídos por blocos que cumpram os contractos de comunicação, podendo implementar esses mesmos contractos como bem entenderem. Além desta pequena dificuldade, a comunicação entre módulos é feita com base em dependências, pelo que a inclusão do Hibernate teve de ser feita tendo em atenção estas dependências e as forma como os seus métodos estariam acessíveis está relacionada com o tipo e ordem de dependências existentes entre os módulos.

Para quem já usou o Hibernate, falar do pesadelo que é configurar o correcto mapeamento das entidades, não é coisa nova. Para os que não usaram, não tenho palavras para o descrever! Já tinha usado a tecnologia antes, em aplicações Java standards e em aplicações JEE, nada me preparou para isto. A documentação é uma confusão, não sendo nada fácil de ler, está escrita de um forma que em muitos casos torna os exemplos ambíguos e complexos para além da necessidade. Como exemplo posso dizer-vos que durante as primeiras 2 semanas em que estive a trabalhar com a camada de persistência, o mapeamento das entidades estava, na sua maioria, errado! Nada disto é surpreendente, afinal todos sabemos como um programador a aprender comete asneiras. Nada será de estranhar senão o facto de que todo o sistema esteve a funcionar, como devia, devo realçar, até ao momento em que tive de acrescentar um único atributo novo a uma entidade, e, naturalmente, tudo veio por aí abaixo. Classes que deixaram de ser guardadas na base de dados, excepções por tudo o que era acesso à base de dados, uma completa panóplia de erros que nunca tinha conhecido. Resultado: voltar a ler toda a documentação da tecnologia, na forma do manual de referência constituído pelas 80 e qualquer coisa páginas de texto em Times New Roman, tamanho 8, para poupar papel e impressão. Depois de uma tarde inteira de volta das entidades, revendo todos os atributos, cardinalidades das relações e direcção das mesmas, consegui colocar o sistema de novo a funcionar, embora não me perguntem como porque, a bem da verdade, não sei bem o que fiz :(.

Primeiro problema: partilhar a instância do objecto que controla a ligação à base de dados por todos os módulos que precisem de aceder aos dados. A instância tem de ser única, tem de ser acessível de forma universal e tem de estar instanciada quando a aplicação estiver pronta a ser usada.

Segundo problema: tenho uma instância… não, tenho duas… mas que raio!, são três?… cogumelos outra vez?!

Terceiro problema: como aceder aos dados? Quem faz as pesquisas e como garantir que os dados estão coerentes para que se possam criar interfaces gráficas com o utilizador.

Quarto problema: criar nós a partir dos dados da base de dados. Tarefa que não foi nada fácil.

Quinto problema: e agora queria uns “menuzitos” por aqui… hum… assim não…. Mas, se é tão simples criar um menu com base no que está seleccionado como é que crio um quando não existe um nó seleccionado? Pois, exemplos de como criar um menu de contexto baseado no que está seleccionado não faltam, agora baseado no que não está, é que é mais complicado.

Estes são, entre outros, os problemas que terei de resolver esta semana, isto sem poder falhar, o projecto é para entregar dia 2 do mês que vem, Julho, e estou atrasadíssimo, deveria estar na 6ª iteração do desenvolvimento mas pelo andar das coisas estou na 2ª 1/2… Parece-me que serei capaz de os resolver entretanto, pelo menos se não me aparecer mais um imprevisto relacionado com a falta completa de documentação para o que pretendo fazer; a ver vamos.

P.S.: Se queriam ver a solução para este problema, tenho pena mas não será hoje, é tarde, estou cansado e não me apetece escrever mais, além disso, sempre me oferece uma desculpa para mais uns 5 textos :D