Entity / abstract

8 respostas
albjava
tenho essa classe:
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;
  }

}

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

8 Respostas

sapulha

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

Como vc vai utilizar seu EJB ?

luis.soares

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.

luis.soares

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 ???

luis.soares

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

Abraço.

J

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.

J

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.

J

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

J

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?

Criado 10 de novembro de 2006
Ultima resposta 10 de nov. de 2006
Respostas 8
Participantes 4