Sebastian Calbaza [https://community.jboss.org/people/calbazasebastian] created the discussion
"Re: Session and thread safety" To view the discussion, visit: https://community.jboss.org/message/760010#760010 -------------------------------------------------------------- Here is my thread safe ProcessPersistenceContextManager if someone needs it. It needs to be set on the Environment param (env.set(EnvironmentName.PERSISTENCE_CONTEXT_MANAGER, persistenceContextManager);) before you pass it to JPAKnowledgeService.newStatefulKnowledgeSession(kbase,null, env) ----------------------------------------- public class MyJpaProcessPersistenceContextManager implements ProcessPersistenceContextManager, PersistenceContextManager { private EntityManagerFactory emf; private ThreadLocal<EntityManager> appScopedEntityManager=new ThreadLocal<EntityManager>(); protected ThreadLocal<EntityManager> cmdScopedEntityManager=new ThreadLocal<EntityManager>(); public ProcessPersistenceContext getProcessPersistenceContext() { return new JpaProcessPersistenceContext(cmdScopedEntityManager.get()); } public MyJpaProcessPersistenceContextManager(Environment env) { this.emf = (EntityManagerFactory) env.get(EnvironmentName.ENTITY_MANAGER_FACTORY); } public PersistenceContext getApplicationScopedPersistenceContext() { if (this.appScopedEntityManager.get() == null) { this.appScopedEntityManager.set(this.emf.createEntityManager()); } return new JpaPersistenceContext(appScopedEntityManager.get()); } public PersistenceContext getCommandScopedPersistenceContext() { return new JpaPersistenceContext(this.cmdScopedEntityManager.get()); } public void beginCommandScopedEntityManager() { if (cmdScopedEntityManager.get() == null || (this.cmdScopedEntityManager.get() != null && !this.cmdScopedEntityManager.get().isOpen())) { this.cmdScopedEntityManager.set( this.emf.createEntityManager()); } cmdScopedEntityManager.get().joinTransaction(); appScopedEntityManager.get().joinTransaction(); } public void endCommandScopedEntityManager() { if (this.cmdScopedEntityManager.get()!=null){ this.cmdScopedEntityManager.get().flush(); this.cmdScopedEntityManager.get().close(); } } public ThreadLocal<EntityManager> getCmdScopedEntityManager() { return cmdScopedEntityManager; } public ThreadLocal<EntityManager> getAppScopedEntityManager() { return appScopedEntityManager; } public void dispose() { if (this.appScopedEntityManager.get() != null && this.appScopedEntityManager.get().isOpen()) { this.appScopedEntityManager.get().flush(); this.appScopedEntityManager.get().close(); } this.appScopedEntityManager.set(null); if (this.cmdScopedEntityManager.get() != null && this.cmdScopedEntityManager.get().isOpen()) { this.cmdScopedEntityManager.get().flush(); this.cmdScopedEntityManager.get().close(); } this.cmdScopedEntityManager.set(null); } } -------------------------------------------------------------- Reply to this message by going to Community [https://community.jboss.org/message/760010#760010] Start a new discussion in jBPM at Community [https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]
_______________________________________________ jboss-user mailing list [email protected] https://lists.jboss.org/mailman/listinfo/jboss-user
