📄 persistenceservicehibernateimpl.java.svn-base
字号:
/**
* 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 + -