Arquitetura de Projeto EE

Colegas,

Estou migrando uma b[/b] aplicação JSF 1.2 + Spring 2 + Hibernate 3 para uma solução b[/b] JSF 1.2 + EJB3/JPA + Hibernate e estou com dúvidas quanto a definição da arquitetura.

Na aplicação b[/b] o projeto está divido na seguinte estrutura :

 - Dá Página até o banco faço o seguinte caminho:
       1) Minhas páginas XHTML + o Framework Faceletes para montar os templates.
       2) A página acessa ManagedBeans do JSF
       3) Esse ManagedBean tem uma classe "Manager" (uma abstração para uma camada de serviços) injetada.
          Exemplo:
              [code]
              public class UsuarioBean {
              
              	public UserManager mgr;
              	.
              	.
              	get and sets
              
              }
             [/code]
       4) Esse UserManager é um bean do Spring que faz o papel de uma camada de serviços.
       5) Nesse UserManager é injetado um DAO ( que também está mapeado como um bean do Spring ), por exemplo:           

[code]
public class UserManagerImpl implements UserManager{
private UserDAO dao;

				public void setUserDAO(UserDAO dao) {
			        this.dao = dao;
			    }
			    
	    		public User login(User user) {
    				return this.dao.login(user);
				}
}
[/code]  
       6) E esse DAO que é um DAOHibernate ( extends HibernateDaoSupport ) acessa um POJO :  
           		public class UserDAOHibernate extends HibernateDaoSupport implements UserDAO {
           			
           			public User login(User user) {
    					DetachedCriteria c = DetachedCriteria.forClass(User.class);
        				c.add(Restrictions.eq("userName",user.getUserName()));
						c.add(Restrictions.eq("password",user.getPassword()));	
        				List results = getHibernateTemplate().findByCriteria(c);
        				if (results == null || results.isEmpty()){
            				return null;
        				} 
        				return (User)results.get(0);
    				}
	  7) Esse POJO é uma classe JPA, mapeada como um @Entity.

Na aplicação b[/b] o projeto está divido na seguinte estrutura :

      - Modulo EAR que encapsula módulos EJB e um módulo WAR.
      
      Aqui moram minhas dúvidas.
      
      - Dá Página até o banco é feito o seguinte caminho: 
       1) Minhas páginas XHTML + o Framework Faceletes para montar os templates.
       2) A página acessa ManagedBeans do JSF
       3) Esse ManagedBean faz um lookup numa classe Facade
          Exemplo:

[code]
public class UsuarioBean {

                private void listUsuarios() {
                    UsuarioFacadeLocal usuarioFacade = (UsuarioFacadeLocal) lookupUsuarioFacade();
			        List usuarios = usuarioFacade.findAll();
			        for (Iterator it = usuarios.iterator(); it.hasNext();) {
			            Usuario elem = (Usuario) it.next();
			            System.out.println(elem.getNome());			            
			        }
			    }			        
		        
		        private UsuarioFacadeLocal lookupUsuarioFacade() {
			        try {
			            Context c = new InitialCon	text();
			            return (UsuarioFacadeLocal) c.lookup("ModuloEAR/UsuarioFacade/local");
			        }
			        catch(NamingException ne) {
			            Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
			            throw new RuntimeException(ne);
			        }
			    }
[/code]		        
		        
       4) Na implementação da classe UsuarioFacade eu tenho os métodos ( que seriam os métodos DAOs da arquitetura antiga ) para salvar/excluir/pesquisar.
       [code]
       			@Stateless
				public class UsuarioFacade implements UsuarioFacadeLocal {

				    @PersistenceContext
				    private EntityManager em;
				    
				    /** Creates a new instance of UsuarioFacade */
				    public UsuarioFacade() {
				    }

				    public void create(Usuario usuario) {
				        em.persist(usuario);
				    }

				    public void edit(Usuario usuario) {
				        em.merge(usuario);
				    }
       [/code]
	Buenas,
	   Minhas dúvidas :
	   
	   1) Esta arquitura [b](B)[/b] pode ser melhorada como ?
	   2) A arquitura [b](B)[/b] não está muito acoplada ?
	   3) Para cada Entity, por exemplo, Cliente, Fornecedor, Profissao eu teria que ter um EJB ?
	   
	   Eu gostaria de opniões sugestões o que for possível.
	   Um grande abraço,
	   Leandro.

Respondi este post no JavaFree:

http://www.javafree.org/javabb/viewtopic.jbb?t=865534

@braços,