O EJB é uma arquiterua destinada a distribuir componentes de forma resiliente, segura e escalavel. Para executar uma aplicação EJB é necessário utilizar um container EJB.
O container é responsável por controlar a segurança, o ciclo de vida e transações das aplicações.
- Alocação de processos, controle de threads, destruição de objetos
- Autenticação de usuários
Usamos quando precisamos:
- De acesso remoto
- A aplicação será distribuida
- De escalonamento:
- A aplicação irá rodar em vários servidores, clusters e failover.
- Encapsulamento de código
- A aplicação que utiliza o EJB Bean não precisa do seu código.
Ao utilizar a arquitetura EJB nós temos vantagens em relação ao RMI, são elas:
- Não precisamos implementar a segurança
- Não precisamos gerenciar o ciclo de vida de um objeto
Contudo ao utilizar o EJB nós precisamos utilizar um container EJB, coisa que o RMI não exige.
Nós temos três componentes na arquitetura EJB, são eles:
- Bean de sessão (é como o JSF BEAN)
- Beans orientados a mensagens
- Beans de entidade (Equivalente ao JPA => acesso ao banco de dados)
Os beans de sessão são utilizados para coordenar a interação entre outros beans (Entidade). Utilizamos um BS como um controlador, ou seja, ele é responsável por encapsular a lógica da aplicação.
Um CarrinhoVirtualBean provavelmente terá a lógica de adicionar itens ao carrinho, remover e proceder para a compra.
Quando utilizamos um bean de sessão nós anotamos sua classe com um desses termos:
@Local
- São beans de sessão acessíveis apenas por outros beans na mesma maquina@Remote
, são beans que podem ser invocados remotamente@Endpoint
, são beans invocados via WebService
Ao utilizar um bean de sessão nós podemos definir três tipos de BS:
- Stateless, não mantem um estado de conversa ou seja, é igual a um bean de request: é utilizado e depois morto ou reutilizado.
- Stateful, é um tipo de beam que é guardado e mantido para um usuário, ou seja, se ele foi utilizado as 10:40 e definiu algum parâmetro então as 10:41 ele manterá o mesmo estado definido anteriormente. Ele é análogo ao bean de sessão do JSF.
- Singleton - Não explicado ainda.
public class Produto implements Serializable {
}
@Remote
public interface CarrinhoRemoto {
public void addItem(Produto produto);
}
@Remote
@Statefull
public class CarrinhoVirtualBean implements CarrinhoRemoto {
private ArrayList<Produto> produtos;
@PostConstruct
public void CarrinhoVirtualBean() {
this.produtos = new ArrayList<Produto>();
}
public void addItem(Produto produto) {
this.produtos.add(produto);
}
}