Como criar uma aplicação sem EJB preparada para migrar para EJB3 mais tarde?

Preciso montar uma arquitetura em MVC onde primeiramente será bem simples:
Apenas JSP e Servlet, só clases java simples com regras de negócio e acesso a banco de dados via JDBC.

Hoje esta aplicação irá ficar em apenas um servidor único.

Mas amanhã ela deve estar preparada para migrar para o modelo EJB3.

Como eu devo prepara-la para quando chegar a hora desta migração, esta ocorra da forma menos trabalhosa possivel?

Vi duas sugestões:

1- usando business delegate e façade. Onde minhas classes de negocios iriam implementar uma interface, que mais para frente seria a interface dos meus EJB’s, e todos os meus objetos de negócio seriam do tipo desta interface.

2- usar uma fabrica (Abstract Factory) onde sempre seriam retornados objetos também do tipo da interface.

Alguma dessas sugestões é mais correta? Ou existe outra forma de fazer isto?

vc pode criar suas classes normalmente desde que:

  • Sempre crie uma interface para definir os métodos que vc vai usar;
  • Todas as classes tenham um construtor padrão;

O principal problema que vc deve mudar depois é a chamada às classes que serão gerenciados pelo EJB. Sem EJB, vc deve instanciar seus objetos usando “new SuaClasse();” e, com EJB, vc faz lookup da sua classe usando a classe InitialContext.

Mas tome muito cuidado durante o desenvolvimento sem EJB. Dependendo de como vc fizer, pode acabar ficando com muitos objetos consumindo memória no servidor, já que não haverá um container fazendo o controle.

Mas eu vou usar ejb 3… não vou precisar fazer o lookup manual…

o que eu preciso saber então é como organizar o código, de forma a implementar o delegate e o façade e as interfaces dos meus objetos de negócios no pacote certo. E é nisto que estou com dúvida.

Onde devo codificar os delegates? E os façades?

Só criando interfaces para as minhas classes de negócio será suficiente?

Aqui no trabalho passamos por esse problema e usamos a seguinte solução… Nao sei se eh a melhor porque ainda nao fizemos a migracao, mas parece funcionar bem.

1 - Como disse o rissato, todas as classes tem interface e um construtor padrao
2 - Elas sao mapeadas como atributos nos Managed Bean dos JSF
3 - Ao recuperar uma classe de negocio, vemos se a mesma foi “injetada” pelo repositorio. Caso contrario, usamos um ServiceLocator para buscar no Spring e entao no InitialContext.

Acho que atende…

Que tal ja fazer a aplicacao usando algum EJB3-like ? Se voce nao quer usar um AS enorme, pode experimentar:

http://docs.jboss.org/ejb3/embedded/embedded.html

Infelizmente nao faco ideia se essas geringoncas funcionam de verdade :confused:

Qualquer abordagem que escolha usar, crie CENTENAS de testes de integracao\teste funcionais automatizados para garantir que tua aplicacao vai continuar funcionando apos a migracao.