⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 persistenceservicehibernateimpl.java.svn-base

📁 Fire-Workflow-Engine-All-In-One-20090208 包含全部文档
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
/**
 * Copyright 2007-2008 陈乜云(非也,Chen Nieyun)
 * All rights reserved. 
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation。
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses. *
 */
package org.fireflow.engine.persistence.hibernate;

import java.sql.SQLException;
import java.util.List;

import java.util.Vector;
import org.fireflow.engine.IProcessInstance;
import org.fireflow.engine.ITaskInstance;
import org.fireflow.engine.IWorkItem;
import org.fireflow.engine.RuntimeContext;
import org.fireflow.engine.definition.WorkflowDefinition;
import org.fireflow.engine.impl.JoinPoint;
import org.fireflow.engine.impl.ProcessInstance;
import org.fireflow.engine.impl.TaskInstance;
import org.fireflow.engine.impl.WorkItem;
import org.fireflow.engine.persistence.IPersistenceService;
import org.fireflow.kenel.IJoinPoint;
import org.fireflow.kenel.IToken;
import org.fireflow.kenel.impl.Token;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.orm.hibernate3.SessionHolder;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.support.TransactionSynchronizationManager;

/**
 * The hibernate implementation of persistence service
 * 
 * @author chennieyun
 */
public class PersistenceServiceHibernateImpl extends HibernateDaoSupport implements IPersistenceService {
    protected RuntimeContext rtCtx = null;
    
    public void setRuntimeContext(RuntimeContext ctx){
        this.rtCtx = ctx;
    }
    public RuntimeContext getRuntimeContext(){
        return this.rtCtx;
    }     
    /**
     * Save processInstance
     * @param processInstance
     */
    public void saveOrUpdateProcessInstance(IProcessInstance processInstance) {
        Session thisSession = this.getSession();
        System.out.println("===Inside PersistenceServiceHibernateImpl:: the session is " + thisSession.hashCode());
        System.out.println("===Inside PersistenceServiceHibernateImpl:: the flushmodel is " + thisSession.getFlushMode());
        System.out.println("===Inisde PersistenceServiceHibernateImpl:: is transactionnal? " + SessionFactoryUtils.isSessionTransactional(thisSession, getSessionFactory()));
        SessionHolder sessionHolder =
                (SessionHolder) TransactionSynchronizationManager.getResource(getSessionFactory());
        System.out.println("===Inisde PersistenceServiceHibernateImpl:: the sessionHolder is " + sessionHolder);

        this.getHibernateTemplate().saveOrUpdate(processInstance);

    }

    /**
     * Save joinpoint
     * @param joinPoint
     */
    public void saveOrUpdateJoinPoint(IJoinPoint joinPoint) {
        this.getHibernateTemplate().saveOrUpdate(joinPoint);
    }

    /* (non-Javadoc)
     * @see org.fireflow.engine.persistence.IPersistenceService#saveTaskInstance(org.fireflow.engine.ITaskInstance)
     */
    public void saveOrUpdateTaskInstance(ITaskInstance taskInstance) {
        this.getHibernateTemplate().saveOrUpdate(taskInstance);
    }
//
	/* (non-Javadoc)
     * @see org.fireflow.engine.persistence.IPersistenceService#saveWorkItem(org.fireflow.engine.IWorkItem)
     */
    public void saveOrUpdateWorkItem(IWorkItem workitem) {
        this.getHibernateTemplate().saveOrUpdate(workitem);
    }

    public void saveOrUpdateToken(IToken token) {
        this.getHibernateTemplate().saveOrUpdate(token);
    }

    public List<IJoinPoint> findJoinPointsForProcessInstance(final String processInstanceId, final String synchronizerId) {
        List result = (List) this.getHibernateTemplate().execute(new HibernateCallback() {

            public Object doInHibernate(Session arg0) throws HibernateException, SQLException {
                Criteria criteria = arg0.createCriteria(JoinPoint.class);
                criteria.add(Expression.eq("processInstance.id", processInstanceId));
                if (synchronizerId != null && !synchronizerId.trim().equals("")) {
                    criteria.add(Expression.eq("synchronizerId", synchronizerId));
                }
                return criteria.list();
            }
        });

        return result;

    }

    public List<ITaskInstance> findTaskInstancesForProcessInstance(final String processInstanceId, final String activityId) {
        List result = (List) this.getHibernateTemplate().execute(new HibernateCallback() {

            public Object doInHibernate(Session arg0) throws HibernateException, SQLException {

                Criteria criteria = arg0.createCriteria(TaskInstance.class);
                criteria.add(Expression.eq("processInstance.id", processInstanceId));
                if (activityId != null && !activityId.trim().equals("")) {
                    criteria.add(Expression.eq("activityId", activityId));
                }
                return (List<ITaskInstance>) criteria.list();
            }
        });
        return result;
    }

    /**
     * 
     */
    public List<IToken> findTokensForProcessInstance(final String processInstanceId, final String nodeId) {
        List result = (List) this.getHibernateTemplate().execute(new HibernateCallback() {

            public Object doInHibernate(Session arg0) throws HibernateException, SQLException {

                Criteria criteria = arg0.createCriteria(Token.class);

                criteria.add(Expression.eq("processInstance.id", processInstanceId));
                if (nodeId != null && !nodeId.trim().equals("")) {
                    criteria.add(Expression.eq("nodeId", nodeId));
                }

                return (List<IToken>) criteria.list();
            }
        });
        return result;
    }

//    public void updateWorkItem(IWorkItem workItem) {
//        //在hibernate中,update操作无需处理?
//        Session session = (Session) RuntimeContext.getInstance().getCurrentDBSession();
//
//        session.update(workItem);
//    }

//    public void updateTaskInstance(ITaskInstance taskInstance) {
//        //在hibernate中,update操作无需处理?
//        Session session = (Session) RuntimeContext.getInstance().getCurrentDBSession();
//
//        session.update(taskInstance);
//
//    }
    public IWorkItem findWorkItemById(String id) {
        return (IWorkItem) this.getHibernateTemplate().get(WorkItem.class, id);
    }

    public ITaskInstance findTaskInstanceById(String id) {
        return (ITaskInstance) this.getHibernateTemplate().get(TaskInstance.class, id);
    }

    public List<IWorkItem> findWorkItemsForTaskInstance(final String taskInstanceId) {
        List result = (List) this.getHibernateTemplate().execute(new HibernateCallback() {

            public Object doInHibernate(Session arg0) throws HibernateException, SQLException {
                Criteria criteria = arg0.createCriteria(WorkItem.class);
                criteria.add(Expression.eq("taskInstance.id", taskInstanceId));
                List<IWorkItem> _result = criteria.list();

                return _result;
            }
        });
        return result;

    }

    public List<IWorkItem> findWorkItemForTask(final String taskid) {
        List result = (List) this.getHibernateTemplate().execute(new HibernateCallback() {

            public Object doInHibernate(Session arg0) throws HibernateException, SQLException {
                Criteria criteria = arg0.createCriteria(WorkItem.class);
                criteria.add(Expression.eq("taskInstance.taskId", taskid));
                List<IWorkItem> _result = criteria.list();

                return _result;
            }
        });
        return result;
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -