Problema de LIE com EJB3 + JPA + JSF

Pessoal,
Estou tentando desenvolver um projeto piloto com o que há de mais destaque hoje em JavaEE, de ponta a ponta, ou seja, desde a persistência com JPA até a camada de visão para web com JSF, e ainda utilizando os recursos de injeção de dependência do EJB3. Para isso, estou utilizando o Netbeans6 e Glassfish v2 (equivalente ao SunApp 9.1, se não me engano).
Para essa aplicação, considerei o seguinte modelo

Categoria - 1 ----- 0..* - Produto

Segue o código das entidades:

[code]@Entity
public class Categoria implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String nomeCategoria;
@OneToMany(cascade={CascadeType.ALL}, mappedBy=“categoria”, targetEntity=Produto.class)
private Set produtos = new HashSet();

// Getters e setters

}

@Entity
public class Produto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String nomeProduto;
private Double preco;
@ManyToOne
@JoinColumn(name = “idcategoria”, nullable=false)
private Categoria categoria;

// Getters e setters

}
[/code]

Criei uma [b]Enterprise Application[/b] no Netbeans e a arquitetura dela eu peguei emprestado da aplicação de exemplo do livro [b]"Java Persistence with Hibernate"[/b], que utiliza DAO's na camada de persistência. Esses DAO's estão declarados como como Stateless session beans e possuem uma variável que mantém o EntityManager, que é obtido via injeção de dependência, através da anotação @PersistenceContext, conforme código abaixo:
// Interface para um DAO genérico
public interface GenericDAO<T, ID extends Serializable> {
    T findById(ID id, boolean lock);
    Collection<T> findAll();
    Collection<T> findByExample(T exampleInstance, String... excludeProperty);
    T makePersistent(T entity);
    void makeTransient(T entity);
}

// Implementação de um DAO com EJB3
public abstract class GenericEJB3DAO<T,ID extends Serializable>  implements GenericDAO<T, ID> {
    private Class<T> entityBeanType;    
    @PersistenceContext
    private EntityManager em;
    public GenericEJB3DAO() {
        this.entityBeanType = (Class<T>) ((ParameterizedType) getClass()
                                .getGenericSuperclass()).getActualTypeArguments()[0];
    }

    // Implementação dos outros métodos da interface GenericDAO...
}

// DAO para a entidade Categoria
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class CategoriaDAOEJB3 extends GenericEJB3DAO<Categoria, Long> implements CategoriaDAO { }
No meu controlador eu chamo os DAO's que eu preciso via injeção de dependência, através da anotação @EJB, conforme mostrado abaixo:
// Interface do controlador
public interface CategoriaManager {
    public List obtemTodasCategorias();
    public void salvaCategoria(Categoria c);
    public Categoria obtemCategoria(Long idCategoria);
}

@Stateless
public class CategoriaManagerBean implements CategoriaManager {
    
    @EJB
    CategoriaDAO categoriaDAO;

    public List obtemTodasCategorias() {        
        return (List) categoriaDAO.findAll();
    }

    // Implementação dos outros métodos da interface CategoriaManager 
  
}
Criei então uma página JSF que exibe todas as categorias e seus respectivos produtos. Para isso eu injeto o controlador para fazer o serviço, conforme abaixo:
// Backing bean
public class listcategoria extends AbstractPageBean {    
    
    @EJB 
    CategoriaManager categoriaManager;

    // Chamada para o método categoriaManager.obtemTodasCategorias()

    // Outros atributos e métodos do backing bean...

}
É justamente aí o cerne da questão: quando essa página tenta exibir os produtos me é retornado a famigerada [i]LazyInitializationException[/i] (LIE):
WebModule[/ejb3teste-war]failed to lazily initialize a collection of role: modelo.Categoria.produtos, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: modelo.Categoria.produtos, no session or session was closed
...
A minha dúvida é: qual a solução mais apropriada para se evitar LIE numa arquitetura de sistemas como essa, considerando que utilizar relacionamentos não-Lazy não é uma opção, por questões de performance e considerando também que eu não quero abrir mão de utilizar os DAO's e também considerando que eu não quero utilizar o Seam (que é a solução sugerida no livro)?
Tem mais um detalhe, vai haver certos casos em que eu precisarei implementar uma espécie de wizard, com várias telas de entrada de dados, misturando entidades persistidas com entidades transients, onde tudo deve ser gravado somente na última tela, que, pelo que eu é o que eles chamam de conversação. Então uma solução para o Lazy deveria levar em conta também essa situação.    

Desculpem o post longo, mas é que já estou há algum tempo tentando resolver esse problema.

Agradeço desde já qualquer ajuda.