Notícias

Named Queries no Banco de Dados...

Plugin do JGenesis no Netbeans 5.0 disponível

BeanManagers e BDs agora no servidor...

Outros links:

Hibernate

Spring

Ireport

Java

Introdução

O JGenesis é uma framework para o desenvolvimento de aplicações Java que implementa alguns Padrões de Projeto, como DAO (Data Access Object), BO (Business Object), BD (Business Delgate) e MVC (Model-View-Controller). Ele reúne algumas outras frameworks, como o Hibernate, para o mapeamento objeto-relacional, e o Spring, um container peso leve que fornece diversos serviços para aplicações J2EE sem EJB. A camada de apresentação é implementada e integrada com Swing, onde seus componentes permitem a construção de formulários em tempo bastante ágil, inclusive, no estilo Drag and Dop, com a IDE Netbeans.

Arquitetura da Aplicação

As aplicações seguem a arquitetura cliente-servidor. No servidor fica toda as regras de negócio do sistema, enquanto no cliente, somente a interface com o usuário. A comunicação entre os dois pode ser feita através do protocolo HTTP, ou de RMI.

Principais Componentes

O JGenesis fornece vários componentes, alguns uilizados no lado servidor, outros no lado cliente. Os componentes utilizados com maior frequência serão breviamente explicados a seguir:

  • No lado servidor:
    • JGenesisDAO - Interface de acesso ao dados persistentes;
    • BasicHibernateDAO - Implementação da interface JGenesisDAO que utiliza o Hibernate para a persistencia de objetos em um banco de dados relacional;
    • JGenesisBO - Interface para a lógica de negócio dos objetos persistentes;
    • BasicBOImpl - Implementação da interface JGenesisBO encapsulando um JGenesisDAO, e com o básico que um BO deve oferecer. Caso alguma execeção a nível de DAO ocorra, ou seja, um DAOException, esta será encapsulada em um BOException.
    • InfoBO - Interface com métodos que retornam informações úteis do servidor, como a data e o time zone;
    • InfoBOImpl - Implementação da interface InfoBO;
  • No lado clinte:
    • PersistentBD - Implementação do padrão Business Delegate, utilizado pelo cliente para invocar métodos (que podem ser, inclusive, remotos)do BO;
    • BeanManager - Responsável por gerenciar objetos de uma classe persistente, em outras palavras, de um Bean. Ele aciona a lógica de negócio (JGenesisBO) através do PersistentBD;
    • Componentes Swing:
    • JGBeanNavigator - Barra de ferramentas para a navegação e a alteração de uma coleção de beans gerenciada por um BeanManager;
    • JGButtonPanel - Especialização de JPanel criado para organizar botões, que normalmente não estão associados a uma ação que venha a manipular os Beans do formulário, como fechar uma janela, exibir diálogo para consultas, imprimir relatório, etc;
    • BeanSetTableManager - Responsável por gerenciar objetos uma tabela (JTable) de beans. É comumente usado na criação de formulários mestre-detalhe;
    • JGStatusBar - Uma barra de status que exibe o Tooltip do componente em foco no formulário, e uma barra de progresso que é acionada quando alguma operação é realizada por algum BeanManager, como por exemplo, uma pesquisa;
    • JGFindBean - Especialização de JDialog para a criação de janela de buscas;
    • JGFindButton - Botão que invoca uma janela de consulta JGFindBean;
    • JGTextField e "sua turma mascarada" - São caixa de texto que exibem campos de um objeto, como o nome, telefone, data, etc;
    • JGComboBox - Combobox usado para listar os possíveis objetos que uma propriedade pode receber, como o lado 1 de uma associação 1 - N;
    • A maioria desses componentes devem ser vinculados a um BeanManager, através do método setBeanManager(), e a uma propriedade do Bean, através do método setTargetField();

Arquivos de Configuração

Os arquivos de configuração utilizados para o desenvolvimento com o JGenesis se resumem em três categorias:

  • Arquivos do Hibernate: Estes incluem os arquivos de mapemento dos Beans (*.hbm.xml) e um arquivo com a configuração da fábrica de sessão (hibernate.conf.xml), onde também são definidos os arquivos de mapeamento dos Beans. Não é necessário definir o data source, este será definido em um arquivo de configuração do JGenesis. Também é importante verificar que o arquivo hibernate.properties não será usado (carregado), e suas propriedades devem ser passadas para o hibernate.conf.xml. Entretanto, o arquivo de propriedaes pode ser criado para ser usado pelo Hibernate Tools.
  • Arquivos do JGenesis: Os arquivos de configuração do JGenesis definem os data sources, declaram os DAOs e os BOs da aplicação, e indicam que protocolo será usado para a comunicação entre o cliente e o servidor. Eles facilitam a utilização do Spring, já que todas as configurações dessa framework comuns em todos os projetos, são feitas programaticamente pelo JGenesis.
    • jgenesis.xml - Declara os (data sources), as fábricas de sessões (hibernate), os DAOs e o query loader (data source onde as named queries estão declaradas). Por padrão é utilizado o HibernateBasicDAO, com uma referência chamada basicDAO, portanto este não precisa ser declarado. Caso este não atenda suas necessidades, outra implementação de JGenesisDAO deve ser declarada nesse arquivo.
    • jgenesis-bo.xml - Declara os BOs e alguns parâmetros para a comunicação entre clção (RMI ou HTTP). Por padrão, são utilizados dois BOs, o basicBO, instância de BasicBOImpl, e infoBO, instância de InfoBOImpl. Estes também não precisam ser declarados.
  • Arquivo do Log4J: O arquivo de propriedades da API de logging Log4j, chamado log4j.properties.

Named Queries

O JGenesis utiliza consultas nomeadas, externas ao código-fonte, que facilitam consideravelmente a construção e a manutenção das aplicações. Essas queries, normalmente declaradas nos arquivos de mapeamento do Hibernate, também podem ser armazenadas em um banco de dados, dessa forma, a aplicação servidora pode ser startada mais rapidamente, já que podemos definir que queries devem ou não ser carregadas durante a inicialização. Além disso, esse recurso permite que pedaços de queries sejam reutilizados, resultando em um menor número de queries a serem mantidadas no projeto.

Classes Utilitárias

Algumas classes utilitárias, encontradas no pacote org.jgenesis.helper ajudam consideravelmente a realização de tarefas comuns, como por exemplo: a manipulação de datas, arquivos, strings; validações; funções hash; visualização de relatórios; etc. Ou seja, antes de fazer qualquer algorítimo do gênero, consulte esse pacote!