Tenho uma classe chamada Layout uso CMP como mecanismo de persistencia no JBOSS, esta classe pertence ao usuario (cada usuario tem um layout no sistema onde ele pode customizar os recursos a sua necessidade "portlet´s"), agora preciso criar uma classe Layout para os sistemas da minha aplicação (cada sistema teria um layout proprio onde o administrador do sistema poderia customizar/instalar recursos e disponibiliza-los de modo conveniente "portlet´s").
A classe Layout (hoje p/ usuario) preve recursos que seriá necessarios para a classe "Layout" de sistemas, então pensei em criar uma hierarquia de classe, ou seja, a classe Layout passaria ser uma super classe e criaria duas sub classes "LayoutUser" e "LayoutSystem" como mostra o diagrama UML em anexo:
Como criar uma classe "ejb.EntityBean" e configurar o arquivo "Deployment Descriptor" para que o ambiente respeite a hierarquia criada?
Será se eu criar a classe Layout no meu pacote ".ejb" como " ejb.EntityBean" e extendendo as sub classes LayoutUser e LayoutSystem, ai as sub classes passariam a possuir as caracteristicas de uma "ejb.EntityBean" dessa forma o conteiner saberia como gerenciar a hierarquia? e as classes HOME e REMOTE como ficariam?
Agradeço desde já a atenção dispensada,
Jose Carlos de Missias
J2EE (CPM e Hierarquia de classes)
1 Resposta
Jose, voce pode criar suas subclasses, no entanto voce deve tomar alguns cuidados ao escrever as classes de implementacao e as interfaces.
Dica: escreva uma classe abstrata base (AbstractLayoutEJB), que teria os getters/setters comum aos dois Layouts. Essa classe nao deve ter nenhum metodo de criacao (ejbCreate). Voce pode tambem querer fazer as interfaces remotas (AbstractLayout) e home (AbstractLayoutHome), lembrando que voce nao pode colacar nelas nenhum metodo que receba uma interface ou classe especifica. Em especial, nenhum metodo de criacao. Em outras palavras, a interface remota deve contar apenas os getters/setters e a home deve conter apenas metodos genericos (home methods), se seu bean tem algum. Se nao, deve ficar vazia.
Agora, as suas subclasses de implementacao (UserLayoutEJB e SystemLayoutEJB), vao extendar a classe base (AbstractLayoutEJB), adicionar quaisquer getter/setters que eles possam vir a ter, adicionar os metodos de criacao (ejbCreate) e adicionar ou modificar os outros metodos do cicla de vida (ejbActivate, ejbPassivate, ejbRemove). O mesmo para as interfaces locais e remotas.
No descritor de instalacao, a classe abstrata nunca vai aparecer, apenas as duas subclasses. E voce vai ter que repetir a descricao de todos os <cmp-field/> nas duas classes – nao ha como voce indicar heranca no descritor.
Bom, voce deve ter percebido que nao eh exatamente facil lidar com heranca em EJB. Se voce quiser se livrar de um pouco desse trabalho, de uma olhada no XDoclet, que deve ajudar voce a lidar com heranca e composicao de EJB, alem de gerar para voce boa parte do codigo (interfaces, descritores de instalacao) que voce iria escrever.
[ Esta mensagem foi editada por: pazu em 24-03-2003 10:09 ]