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!