
org.activiti.engine.impl.persistence.entity.JobEntityManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of activiti-engine Show documentation
Show all versions of activiti-engine Show documentation
workflow engine base on bboss and activiti.
The newest version!
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.engine.impl.persistence.entity;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.impl.JobQueryImpl;
import org.activiti.engine.impl.Page;
import org.activiti.engine.impl.cfg.TransactionListener;
import org.activiti.engine.impl.cfg.TransactionState;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.jobexecutor.ExclusiveJobAddedNotification;
import org.activiti.engine.impl.jobexecutor.JobExecutor;
import org.activiti.engine.impl.jobexecutor.JobExecutorContext;
import org.activiti.engine.impl.jobexecutor.MessageAddedNotification;
import org.activiti.engine.impl.persistence.AbstractManager;
import org.activiti.engine.impl.util.ClockUtil;
import org.activiti.engine.runtime.Job;
/**
* @author Tom Baeyens
* @author Daniel Meyer
*/
public class JobEntityManager extends AbstractManager {
public void send(MessageEntity message) {
message.insert();
hintJobExecutor(message);
}
public void schedule(TimerEntity timer) {
Date duedate = timer.getDuedate();
if (duedate==null) {
throw new ActivitiIllegalArgumentException("duedate is null");
}
timer.insert();
// Check if this timer fires before the next time the job executor will check for new timers to fire.
// This is highly unlikely because normally waitTimeInMillis is 5000 (5 seconds)
// and timers are usually set further in the future
JobExecutor jobExecutor = Context.getProcessEngineConfiguration().getJobExecutor();
int waitTimeInMillis = jobExecutor.getWaitTimeInMillis();
if (duedate.getTime() < (ClockUtil.getCurrentTime().getTime()+waitTimeInMillis)) {
hintJobExecutor(timer);
}
}
protected void hintJobExecutor(JobEntity job) {
JobExecutor jobExecutor = Context.getProcessEngineConfiguration().getJobExecutor();
JobExecutorContext jobExecutorContext = Context.getJobExecutorContext();
TransactionListener transactionListener = null;
if(job.isExclusive()
&& jobExecutorContext != null
&& jobExecutorContext.isExecutingExclusiveJob()) {
// lock job & add to the queue of the current processor
Date currentTime = ClockUtil.getCurrentTime();
job.setLockExpirationTime(new Date(currentTime.getTime() + jobExecutor.getLockTimeInMillis()));
job.setLockOwner(jobExecutor.getLockOwner());
transactionListener = new ExclusiveJobAddedNotification(job.getId());
} else {
// notify job executor:
transactionListener = new MessageAddedNotification(jobExecutor);
}
Context.getCommandContext()
.getTransactionContext()
.addTransactionListener(TransactionState.COMMITTED, transactionListener);
}
public void cancelTimers(ExecutionEntity execution) {
List timers = Context
.getCommandContext()
.getJobEntityManager()
.findTimersByExecutionId(execution.getId());
for (TimerEntity timer: timers) {
timer.delete();
}
}
public JobEntity findJobById(String jobId) {
return (JobEntity) getDbSqlSession().selectOne("selectJob", jobId);
}
@SuppressWarnings("unchecked")
public List findNextJobsToExecute(Page page) {
Date now = ClockUtil.getCurrentTime();
return getDbSqlSession().selectList("selectNextJobsToExecute", now, page);
}
@SuppressWarnings("unchecked")
public List findJobsByExecutionId(String executionId) {
return getDbSqlSession().selectList("selectJobsByExecutionId", executionId);
}
@SuppressWarnings("unchecked")
public List findExclusiveJobsToExecute(String processInstanceId) {
Map params = new HashMap();
params.put("pid", processInstanceId);
params.put("now",ClockUtil.getCurrentTime());
return getDbSqlSession().selectList("selectExclusiveJobsToExecute", params);
}
@SuppressWarnings("unchecked")
public List findUnlockedTimersByDuedate(Date duedate, Page page) {
final String query = "selectUnlockedTimersByDuedate";
return getDbSqlSession().selectList(query, duedate, page);
}
@SuppressWarnings("unchecked")
public List findTimersByExecutionId(String executionId) {
return getDbSqlSession().selectList("selectTimersByExecutionId", executionId);
}
@SuppressWarnings("unchecked")
public List findJobsByQueryCriteria(JobQueryImpl jobQuery, Page page) {
final String query = "selectJobByQueryCriteria";
return getDbSqlSession().selectList(query, jobQuery, page);
}
@SuppressWarnings("unchecked")
public List findJobsByConfiguration(String jobHandlerType, String jobHandlerConfiguration) {
Map params = new HashMap();
params.put("handlerType", jobHandlerType);
params.put("handlerConfiguration", jobHandlerConfiguration);
return getDbSqlSession().selectList("selectJobsByConfiguration", params);
}
public long findJobCountByQueryCriteria(JobQueryImpl jobQuery) {
return (Long) getDbSqlSession().selectOne("selectJobCountByQueryCriteria", jobQuery);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy