package org.infoglue.cms.util.workflow.hibernate; import java.util.HashMap; import java.util.Map; import net.sf.hibernate.HibernateException; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.cfg.Configuration; import org.apache.log4j.Logger; import org.infoglue.deliver.util.CacheController; import com.opensymphony.module.propertyset.PropertySet; import com.opensymphony.module.propertyset.PropertySetManager; import com.opensymphony.module.propertyset.cached.CachingPropertySet; import com.opensymphony.workflow.StoreException; import com.opensymphony.workflow.spi.hibernate.HibernateWorkflowStore; /** * Quickfix */ public class InfoglueHibernateWorkflowStore extends HibernateWorkflowStore { private final static Logger logger = Logger.getLogger(InfoglueHibernateWorkflowStore.class.getName()); /** * */ private SessionFactory sessionFactory; /** * */ public InfoglueHibernateWorkflowStore() {} /** * */ public InfoglueHibernateWorkflowStore(SessionFactory sessionFactory) throws StoreException { super(sessionFactory); this.sessionFactory = sessionFactory; } /** * */ public void init(Map props) throws StoreException { sessionFactory = (SessionFactory) props.get("sessionFactory"); super.init(props); } /** * */ public PropertySet getPropertySet(long entryId) { String key = "psCache_" + entryId; PropertySet ps = (PropertySet)CacheController.getCachedObject("propertySetCache", key); if(ps == null) { try { HashMap args = new HashMap(); args.put("entityName", "OSWorkflowEntry"); args.put("entityId", new Long(entryId)); InfoglueDefaultHibernateConfigurationProvider configurationProvider = new InfoglueDefaultHibernateConfigurationProvider(); configurationProvider.setSessionFactory(sessionFactory); args.put("configurationProvider", configurationProvider); ps = new CachingPropertySet(); Map args2 = new HashMap(); args2.put("PropertySet", PropertySetManager.getInstance("hibernate", args)); args2.put("bulkload", new Boolean(true)); ps.init(new HashMap(), args2); CacheController.cacheObject("propertySetCache", key, ps); //logger.info("Caching propertySet for entry: " + entryId + ":" + ps); ps = PropertySetManager.getInstance("hibernate", args); } catch(Exception e) { e.printStackTrace(); try { logger.error("\n\nRestoring the session factory...."); //sessionFactory.close(); sessionFactory = new Configuration().configure().buildSessionFactory(); InfoglueDefaultHibernateConfigurationProvider configurationProvider = new InfoglueDefaultHibernateConfigurationProvider(); configurationProvider.setSessionFactory(sessionFactory); Map args = new HashMap(); args.put("configurationProvider", configurationProvider); ps = new CachingPropertySet(); Map args2 = new HashMap(); args2.put("PropertySet", PropertySetManager.getInstance("hibernate", args)); args2.put("bulkload", new Boolean(true)); ps.init(new HashMap(), args2); } catch (HibernateException he) { he.printStackTrace(); } } } return ps; } }