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.