Tenho um projeto com EJB 3.1 estou querendo criar um Bean genérico com métodos padrão para minha estrutura ficou assim:
Classe que define um domínio de entidades do negócio
public interface IBaseEntity extends Serializable {
}
public interface IBaseBean<T extends IBaseEntity> extends Serializable {
public T cadastrar(T entity) throws Exception;
public Boolean completeEntity(T entity) throws Exception;
}
@Stateless
@Remote
public class BaseBean<T extends IBaseEntity, DAO extends IGenericDAO<T>> implements IBaseBean<T> {
private static final long serialVersionUID = -5981137777669254041L;
@EJB
DAO dao;
public T cadastrar(T entity) throws Exception {
if (completeEntity(entity)){
dao.merge(entity);
}
return entity;
}
public Boolean completeEntity(T entity) throws Exception {
return Boolean.TRUE;
}
}
//OBS: ClienteEntity implementa IBaseEntity
public interface IClienteBean extends IBaseBean<ClienteEntity> {
}
@Stateless
@Remote(IClienteBean.class)
public class ClienteBean extends BaseBean<ClienteEntity, IGenericDAO<ClienteEntity>> implements IClienteBean {
@Override
public Boolean completeEntity(ClienteEntity entity) throws Exception {
ClienteEntity cliente = (ClienteEntity)entity;
//valida as obrigatoriedades
return Boolean.TRUE;
}
}
public abstract class AppBaseMB<T extends IBaseEntity, BEAN extends IBaseBean<T>> implements Serializable {
private static final long serialVersionUID = 2956648193779364086L;
@EJB
private BEAN baseBean;
private T entity;
public T getEntity() {
return entity;
}
public void setEntity(T entity) {
this.entity = entity;
}
public void cadastrar() {
try {
baseBean.cadastrar(entity);
} catch (Exception e) {
System.out.println(e);
}
}
public void onTabChange(TabChangeEvent event) {
FacesMessage msg = new FacesMessage(event.getTab().getTitle());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
@ManagedBean
@ViewScoped
public class CadastrarClienteMB extends AppBaseMB<ClienteEntity, IClienteBean> {
private static final long serialVersionUID = 2125463919135769978L;
@PostConstruct
public void init() {
setEntity(new ClienteEntity());
inicializaCliente(getEntity());
}
private void inicializaCliente(Cliente cliente) {
//regra de inicialização do cliente
}
public CadastrarClienteDetailMB getCadastrarClienteDetailMB() {
return cadastrarClienteDetailMB;
}
public void setCadastrarClienteDetailMB(
CadastrarClienteDetailMB cadastrarClienteDetailMB) {
this.cadastrarClienteDetailMB = cadastrarClienteDetailMB;
}
}
Não está dando erro quando eu subo o servidor porem eu estou chamando o caso de uso com a classe CadastrarClienteMB que por sua vez utilizará o ClienteBean e como entidade do caso de uso ClienteEntity, e na classe AppBaseMB o ejb não consegue instanciar a classe correta ele deveria criar um bean para IClienteBean só que está criando para IBaseBean e sem o tipo genérico com isso eu não consigo acessar o método completeEntity sobescrito na classe ClienteBem para validar a entidade. alguém já tentou implementar alguma coisa parecida ou sabe onde pode estar o erro?
estou utilizando o JBoss 7 como container!