Entity / abstract

tenho essa classe: [code]package br.com.http.dataminer.base.tbcountry.ejb;

import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.ejb.FinderException;
import java.sql.Date;
import java.util.Collection;

public abstract class TbCountryBean implements EntityBean {

EntityContext entityContext;

public Object ejbCreate( Double idCountry) throws CreateException {

setIdCountry(idCountry);

return null;

}

public void ejbPostCreate(Double idCountry) throws CreateException {

}

public void ejbRemove() throws RemoveException {
}

public abstract void setIdCountry(Double idCountry);

public abstract Double getIdCountry();

public abstract void setName(String name);

public abstract String getName();

public void ejbLoad(){
}

public void ejbStore(){
}

public void ejbActivate(){
}

public void ejbPassivate(){
}

public void setEntityContext(EntityContext entityContext) {
this.entityContext = entityContext;
}

public void unsetEntityContext() {
this.entityContext = null;
}

}
[/code]

Nop JBoss aponta erro que a classe não pode ser abstrata?
pq?

Classe abstrata não pode ser instanciada, lembra???

Como vc vai utilizar seu EJB ?

Uma classe abstrata não tem implementação, não pode ser instanciada.
Logo, uma classe abstrata não pode ser Entity.
Porque você precisa que ele seja abstrata ?

Abraço.

JOMI, o fato de ser um CMP ou um BMP não muda em nada o fato de ela ser abstrata. O conceito é um só. Classes abstratas não podem ser instanciadas.
O próprio JBoss está apontando esta inconsistência.
Qual o argumento técnico de que uma Entity Bean deva ser abstract ???

Opa, agora sim, JOMI !
Valeu pelas explicações.

Abraço.

luis.soares e sapulha, a classe tem que ser abstrata pois seria um EJB Entity CMP (Container Managed Persistence).
AlbJava, dê uma olhada se no DD ejb-jar.xml vc declarou certo.

luis.soares, um Entity Bean do tipo CMP deve ser declarado como abstract conforme a Especificacao. Um BMP nao.
O EJB vc não instancia, o Container trata isso. Vc so tem que fazer um lookup na JNDI do EJB para usa-la e nao instanciar.

http://java.sun.com/developer/technicalArticles/ebeans/EJB20CMP/

Explicando melhor, o Bean Class vc declara como abstract no Entity CMP. Vc vai utilizá fazendo um lookup no seu Home e utilizando os metodos que ele fornece por exemplo create (criará o registro na base), findByPrimaryKey (encontrar um registro especifico atraves da chave primaria que vc declara no DD) ou outros metodos bussines que vc definir como por exemplo, getAllCustomers e etc. Com o Session Bean o create se comporta de forma diferente, vc utiliza para pegar o EJBObject (Remota)

Concordo que classes abstratas vc nao pode instanciar. Isso é correto, porem estamos falando de EJB e o Bean quem trata é o Container mesmo vc declarando ele como abstract. Se vc instanciar o Bean, com certeza vai dar erro, vc so conversa com o Bean atraves do Home que devolve o Component.

Ta claro?