container managed persistent bean kellyton brito projeto compose - 27.06.2003
TRANSCRIPT
CMP – Motivação
Desenvolver beans portáveis, com implementação da lógica persistente
independente da lógica do bean.
CMP – Conceito Básico
● O desenvolvedor não implementa a lógica persistente (operações de armazenamento)
● A lógica persistente é implementada pelo EJB Container de forma automatizada
CMP – Entity Beans como Subclasses
● Torna o Bean Portável● Separa o Entity Bean de sua representação
persistente● Superclasse contém a lógica do bean e é
implementada pelo desenvolvedor● Subclasse contém a lógica de persistência e é
gerada pelo Container
CMP – Atributos
● Na Superclasse não é declarado nenhum atributo persistente.
● Atributos do bean mantidos na Subclasse● Superclasse declarada como classe abstrata para
acessar métodos da subclasse● Atributos descritos no descritor xml
CMP – Definição de Atributos● Atributos definidos no descritor xml...
<cmp-version>2.x</cmp-version>
<abstract-schema-name>ProductBean</abstract-schema-name>
<cmp-field>
<field-name>chave</field-name>
</cmp-field>
<cmp-field>
<field-name>nome</field-name>
</cmp-field>
<cmp-field>
<field-name>saldo</field-name>
</cmp-field>
...
CMP – Acesso aos atributos
● Métodos de acesso aos atributos são mantidos na subclasse
● Métodos de get/set “triviais” são gerados automaticamente pelo container no formato
“get” + “nomeDoCampo”
(1ª letra no nome em maiúscula)
● Métodos de acesso aos atributos definidos na SuperClasse como abstratos
● Outros métodos definidos de maneira tradicional
CMP – Acesso aos Campos na SuperClasse
public abstract class meuBean implements EntityBean {
protected EntityContext ctx;
public abstract int getChave();
public abstract void setChave(int chave);
public abstract String void getNome();
public abstract void setNome(String nome);
...
}
CMP – Métodos de Busca
● Chamados pelo Home Object● EJB Container implementa os métodos de busca● Descrição da busca no descritor xml.
– Facilita a portabilidade● Utilização do EJB-QL: SQL orientado a objeto● Pode utilizar ejbSelect() para efetuar operações
sobre um conjunto entity beans
CMP – Implementação das Buscas● Definição da “implementação” da busca feita no
descritor (xml)...
<query>
<query-method>
<method-name>findByName</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<ejb-ql>
<![CDATA[SELECT OBJECT(a) FROM ProductBean AS a WHERE name = ?1]]>
</ejb-ql>
</query>...
CMP – Arquivos Gerados● Pelo desenvolvedor do Bean:
– Remote Interface– Local Interface– Home Interface– Local Home Interface– Bean Abstract Class– Primary Key Class– Deployment Descriptor– *Container-Specific Deployment Descriptor
CMP – Arquivos Gerados● Pelo Container (automaticamente)
– Beam SubClass– EJB Local Object– Ejb Object– Home Object– Local Home Object
CMP – Remote Interface● Contém a assinatura dos métodos que o cliente
pode acessar
public interface Product extends EJBObject {
public String getNome() throws RemoteException;
public void setNome(String name) throws RemoteException;
...
}
CMP – Local Interface● Contém a assinatura dos métodos que o cliente
pode acessar de forma local● A única diferença para a Remote Interface é que
não lança RemoteException
public interface Product extends EJBLocalObject {
public String getNome();
public void setNome(String nome);
...
}
CMP – Home Interface
● Contém os métodos de “create”, buscas e ordenação
public interface ProductHome extends EJBHome {
Product create (tipo1 parametro1, tipo2 parametro2, tipo3 parametro3) throws CreateException, RemoteException)
public Product findByPrimaryKey (ProductPK key) throws FinderExceptiom RemoteException;
public Collection findByName (String name) throws FinderExceptiom RemoteException;
...
}
CMP – Home Interface● Contém os métodos de “create”, buscas e
ordenação● A única diferença para a Home Interface é que
não lanca RemoteExceptionpublic interface ProductHome extends EJBHome {
Product create (tipo1 parametro1, tipo2 parametro2, tipo3 parametro3) throws CreateException, RemoteException)
public Product findByPrimaryKey (ProductPK key) throws FinderExceptiom RemoteException;
public Collection findByName (String name) throws FinderExceptiom RemoteException;
...
}
CMP – Primary Key
Classe que contém a chave primária do entity bean.
CMP – Bean● Contém:
– Métodos abstratos de get/set:public abstract String getName();
public abstract void setName(String name);
– Métodos “padrões” chamados pelo Containerpublic void ejbActivate() {}
public void ejbRemove() {}
public void ejbPassivate() {}
public void ejbLoad() {}
public void ejbStore() {}
public void setEntityContext(EntityContext ctx) {}
public void unsetEntityContext() {}
public void ejbPostCreate (“parametros do create”) {}
public void ejbCreate (“parametros do create”){}
CMP – Descritor XML● A “alma” do CMP
– Definições Gerais<ejb-name></ejb-name>
<home></home>
<persistent-type>Container</persistent-type>
Definições de campos<cmp-field>
<field-name></field-name>
</cmp-field>
– Definições de Queries– Assembly descriptor: ???
CMP – Discussão
● O gerenciamento da persistência feito pelo Container não prejudica por demais o desempenho?
CMP – Dúvidas
● Dúvidas?
Referências➔ Mastering Enterprise JavaBeans, 2nd Edition