Iniciar variável (Entity Manager) de um Managed Bean diretamenta pelo Faces-config.xml

Pessoal, estou com o seguinte problema:
Quero iniciar um bean com um objeto EntityManager através do faces-config. Estou usando o padrão Open Session, no qual em um filtro, abro uma transação e passo o objeto EntityManager para o objeto Request. Depois que eu passo via request, eu quero recuperá-lo no Faces-config.xml, para que meu bean seja inicializado com ele.
Eu já tentei usar <value>#{requestScope.entityManager}… <value>#{entityManager… , mas não tive sucesso.
A única maneira com a qual eu conseguir foi diretamente no código do bean:

public CadastroBean() { this.usuario = new Usuario(); HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); this.manager = (EntityManager) request.getAttribute("entityManager"); dao = new UsuarioDAO(manager); }
Gostaria de saber se é possível o mesmo resultado pelo faces-config.xml.
Para este projeto estou usando o JSF 1.2. Pesquisando, descobri que usando o JSF 2.0, isso é possível com annotations, mas gostaria de fazer mesmo com JSF 1.2
Seque abaixo meus códigos:
[color=red]FILTRO [/color]

[code]package control.filters;

import java.io.IOException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**

  • @author Hromenique Cezniowscki Leite Batista
  • Filtro que comanda o ciclo de vida de um EntityManager que é passado para as classes de négocios

*/
public class EntityManagerFilter implements Filter {

private EntityManagerFactory factory; 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
	EntityManager manager = this.factory.createEntityManager();
	//atributo a ser passado junto com o request
	request.setAttribute("entityManager", manager);
	manager.getTransaction().begin();
	
	chain.doFilter(request, response);
	
	try{
		manager.getTransaction().commit();
	}
	catch (Exception e) {
		manager.getTransaction().rollback();
	}
	finally{
		manager.close();
	}		
}

public void init(FilterConfig arg0) throws ServletException {
	this.factory = Persistence.createEntityManagerFactory("trab_solucoes_web");
	
}

public void destroy() {
	this.factory.close();
	
}

}
[/code]
[color=red]BEAN [/color]

import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;

import model.dao.classes.UsuarioDAO;
import model.entities.Usuario;

/**
 * @author Hromenique Cezniowscki Leite Batista</br> </br>
 * Classe que desempenha o papel de Managed Bean da página cadastro.xhtml. Responsável pela regras de négocios para cadastro de novos usuários.
 *
 */
public class CadastroBean {

	/*VARIÁVEIS*/
	private EntityManager manager;
	private Usuario usuario;
	private String confirmacaoEmail;
	private String confirmacaoSenha;	
	private UsuarioDAO dao;

	
	/*CONSTRUTORES*/
	public CadastroBean() {
		this.usuario = new Usuario();
		//HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
		//this.manager = (EntityManager) request.getAttribute(&quot;entityManager&quot;);		
		dao = new UsuarioDAO(manager);		
	}
	
	/*MÉTODOS*/
	public void salvar(ActionEvent event){
		//No ínicio o login é igual ao email.
		this.usuario.setLogin(this.usuario.getEmail());
		dao.salvar(this.usuario);
		//return &quot;sucesso&quot;;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getConfirmacaoEmail() {
		return confirmacaoEmail;
	}

	public void setConfirmacaoEmail(String confirmacaoEmail) {
		this.confirmacaoEmail = confirmacaoEmail;
	}

	public String getConfirmacaoSenha() {
		return confirmacaoSenha;
	}

	public void setConfirmacaoSenha(String confirmacaoSenha) {
		this.confirmacaoSenha = confirmacaoSenha;
	}

	public UsuarioDAO getDao() {
		return dao;
	}

	public void setDao(UsuarioDAO dao) {
		this.dao = dao;
	}

	public EntityManager getManager() {
		return manager;
	}

	public void setManager(EntityManager manager) {
		this.manager = manager;
	}
}

[color=red]FACES-CONFIG [/color]

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"&gt;
 
 &lt;application&gt;
  &lt;view-handler&gt;com.sun.facelets.FaceletViewHandler&lt;/view-handler&gt;
 &lt;/application&gt;

 &lt;!-- ####################### BEANS ###################################################################################################### --&gt;
 &lt;managed-bean&gt;
  &lt;managed-bean-name&gt;cadastroBean&lt;/managed-bean-name&gt;
  &lt;managed-bean-class&gt;control.beans.CadastroBean&lt;/managed-bean-class&gt;
  &lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt; 
  
  &lt;managed-property&gt;
  &lt;property-name&gt;manager&lt;/property-name&gt;
  &lt;value&gt;#{requestScope.entityManager}&lt;/value&gt; &lt;!-- AQUI É ONDE EU QUERO INICIAR O BEAN COM OBJETO PASSADO VIA FILTRO, UTILIZANDO INJEÇÃO DE DEPENDÊNCIA --&gt;
  &lt;/managed-property&gt;
 &lt;/managed-bean&gt; 
 &lt;/faces-config&gt;

Abraços

Hromenique, Bom dia…

Você conseguiu uma solução para isso? Também estou com o problema há algum tempo e não consigo resolver…

Desculpa a demora em responde o tópico.
Então, não conseguir resolver isso ainda.
Como citado na primeira postagem só encontrei uma forma de fazer isso com annotations, usando JSF 2.0.

O mais engraçado, é que teoricamente tudo o que é possível por meio de annotations, deveria ser possível através do faces-config.xml.
Contudo, eu acabei abandonando a idéia de usar Open Session, pois um dos beans tem escopo de sessão e só era possível usar uma única vez e na próxima requisição o bean guardava o estado que o EntityManager estava fechado.

Contudo, mesmo assim estou interessado em saber como fazer esse tipo de injeção de valor através do faces-config para o JSF 1.2.

[quote]Hromenique
Como citado na primeira postagem só encontrei uma forma de fazer isso com annotations, usando JSF 2.0.

[/quote]

Você utilizou o Jboss para fazer dessa forma?

Então,
eu retirei essa linha de uma apostila. Até onde me lembro, na apostila eles usavam a implementação Mojarra do JSF, esse tipo de annotation é válida para qualquer implementação do JSF 2.0. Não sei se isso responde a sua pergunta.

Respondeu sim, também ja consegui resolver meu problema.

Obrigado…

Olha acho que porque algumas frameworks como o jsf ja cria uma entity manager factory quando voçê usa a anotação @ManagedBean , e não pode haver mais de uma no projeto , isto poque tendo mais de um pode haver uma concorrencia ao ascesso ao banco
então você usa a do próprio framework utilizando a anotação @PersistenceContext