[Resolvido] Struts2 - Enviar valor do Interceptor para a Action

Fala Galera,

É o seguinte. Estou trabalhando novamente com o Struts2. E decidi implementar o uso de JPA com o hibernate. Mes estou com um dificuldade que gostaria que vocês, se possível me ajudassem. É o seguinte. Dentro de um interceptor que intercepta todas as actions do sistema o seguinte código:

public class ConexaoInterceptor implements Interceptor{
	
	private static final long serialVersionUID = -4319863830820604374L;
	private EntityManagerFactory factory;
	
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		this.factory.close();
	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		this.factory = Persistence.createEntityManagerFactory("Arquitetura");
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		EntityManager manager = this.factory.createEntityManager();
		invocation.getInvocationContext().getValueStack().setValue("manager", manager);
		manager.getTransaction().begin();
		
		String result = invocation.invoke();
		
		try{
			manager.getTransaction().commit();
		}catch(Exception e){
			manager.getTransaction().rollback();
		}finally{
			manager.clear();
		}
		
		return result;
	}

}

Como vocês podem ver, eu envio o EntityManager para as actions. Dessa forma preciso apenas declarar um objeto EntityManager e seu get e set que o Struts mesmo faz o trabalho de populá-lo. Porém existem algumas Actions que precisam devolver um Json, pois estão respondendo a uns plugins do JQuery. Ai entra uma treta, pq o Json tenta transformar o objeto EntityManager em Json, e dá bug. Pensando existem duas possibilidades de resolver esse problema, porém não sei como e por isso queria perguntar a vcs.

  • Tem como declarar um objeto que a Action com @ParentPackage(“json-default”) não transforme em json. Sei lá, tipo colocar uma annotation @NaoViraJason?? HAhaha …

  • É possível eu enviar um objeto do interceptor para as Actions mas sem precisar declará-lo. Tentei esse código abaixo mas não funcionou:

	private EntityManager getEntityManager() {
	
		ValueStack stack = ActionContext.getContext().getValueStack();
		EntityManager manager = (EntityManager) stack.findValue("manager");
		return manager;
	}

Valeuuu galera. Se tiverem um terceira opinião e que resolva meu problema, eu agradeço.

Ninguém tem uma dica??

Ninguém que já mexeu com Struts2 sabe como passar objetos do interceptor para action?!?!?!

Fala Hell,

Então, não consegui encontrar nem uma solução via Struts2, porém encontrei uma forma de fazer esse acesso ao EntityManger que resolve pro meu lado. Melhor, acho que essa forma de fazer pode ajudar em qualquer projeto com outro framework, como o JSF. Eu utilizei um padrão de acesso ao EntityManager via threadLocal. Para melhor esclarecer, deem uma olhada no link abaixo. Espero que sirva para alguém, como serviu pra mim:

http://www.naildrivin5.com/daveblog5000/?p=39