next up previous
Next: O padrão serviço/sessão de Up: entidades-e-servicos Previous: A controvérsia sobre entidades

As interfaces de uma entidade

Tanto no EJB (até a versão 2.1) como no CCM, os componentes tipo entidade representam uma coleção homogênea de objetos persistentes. Tal coleção pode ser um conjunto de contas correntes, ou de produtos, funcionários, clientes, etc. Nesses dois modelos, um componente tipo entidade tem duas interfaces: a interface das instâncias e a interface home.

A interface das instâncias é a interface comum a todos os elementos da coleção de objetos. Exemplo: interface ContaCorrente, no caso de uma coleção de contas correntes.

A interface home tem um papel duplo: de fábrica (factory) que sabe criar novos elementos para a coleção de objetos (exemplo: criação de uma nova ContaCorrente) e de buscador (finder) capaz de encontrar elementos com determinadas propriedades (exemplo: buscar ContaCorrente pelo nome do titular). Tanto o EJB como o CCM usam o termo home para a interface usada para fabricação e busca de elementos da coleção (instâncias do componente). Pode-se considerar que a interface home é a interface de uma coleção de objetos e que a interface das instâncias é a interface de cada elemento da coleção.

A prática usual em EJB e CCM é dar à interface home o nome da interface das instâncias, com o sufixo Home. Este é um exemplo bem simples, em IDL, de interface de instância (Customer) e sua correspondente interface home (CustomerHome):

    interface Customer {
        long getId();
        string getName();
        string getPhone();
        void setPhone(in string phone);
    };

    interface CustomerHome {
        Customer create(in long id, in string name, in string phone) raises(CreateException);
        void remove(in long id) raises(RemoveException);
        Customer findById(in long id) raises(NotFoundException);
        CustomerList findByName(in string name);
        CustomerList findByPhone(in string phone);
    };
Embora as interfaces acima não sejam de componentes EJB (que têm suas interfaces definidas em Java) nem de componentes CCM (pois elas não satisfazem certas condições que não vêm ao caso aqui), elas ilustram o conceito de entidade nesses modelos de componentes. Ambos os modelos dão suporte à geração automática de código que faz acesso a um banco de dados para leitura ou atualização do estado persistente das entidades. Além disso, ambientes EJB e CCM cuidam automáticamente de certos ``aspectos de sistema'' como segurança, transações e controle de concorrência, além de manter e gerenciar pools de threads e de conexões com servidores de bancos de dados. Lidar com esses aspectos dificulta bastante a construção de aplicações servidoras a partir do zero. O EJB e o CCM resolvem esse problema oferecendo um ``servidor genérico e extensível'' que cuida dos aspectos de sistema e permite que nele sejam implantados componentes voltados especificamente para as aplicações. Esse tipo de servidor EJB ou CCM é denominado servidor de aplicações.


next up previous
Next: O padrão serviço/sessão de Up: entidades-e-servicos Previous: A controvérsia sobre entidades
Francisco Reverbel
2006-04-18