
org.ow2.bonita.services.impl.DbThreadEventService Maven / Gradle / Ivy
/**
* Copyright (C) 2010-2012 BonitaSoft S.A.
* BonitaSoft, 31 rue Gustave Eiffel - 38000 Grenoble
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation
* version 2.1 of the License.
* This library 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 Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301, USA.
**/
package org.ow2.bonita.services.impl;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.ow2.bonita.facade.uuid.ActivityDefinitionUUID;
import org.ow2.bonita.facade.uuid.ActivityInstanceUUID;
import org.ow2.bonita.facade.uuid.ProcessInstanceUUID;
import org.ow2.bonita.persistence.EventDbSession;
import org.ow2.bonita.runtime.event.EventAdded;
import org.ow2.bonita.runtime.event.EventConstants;
import org.ow2.bonita.runtime.event.EventCouple;
import org.ow2.bonita.runtime.event.EventInstance;
import org.ow2.bonita.runtime.event.IncomingEventInstance;
import org.ow2.bonita.runtime.event.Job;
import org.ow2.bonita.runtime.event.OutgoingEventInstance;
import org.ow2.bonita.runtime.model.Execution;
import org.ow2.bonita.services.EventService;
import org.ow2.bonita.util.EnvTool;
/**
*
* @author Charles Souillard, Matthieu Chaffotte
*
*/
public class DbThreadEventService implements EventService {
private static final Logger LOG = Logger.getLogger(DbThreadEventService.class.getName());
private String persistenceServiceName;
protected DbThreadEventService() {
}
public DbThreadEventService(final String persistenceServiceName) {
super();
this.persistenceServiceName = persistenceServiceName;
}
protected EventDbSession getDbSession() {
return EnvTool.getEventServiceDbSession(persistenceServiceName);
}
private void refreshMatchers() {
EnvTool.getEventExecutor().refreshMatchers();
}
private void refreshExpressionMessageMatcher() {
EnvTool.getEventExecutor().refreshExpressionMessageEventMatcher();
}
private void refreshMessageMatcher() {
EnvTool.getEventExecutor().refreshEventMatcher();
}
@Override
@SuppressWarnings("deprecation")
public void enableEventsInFailureIncomingEvents(final ActivityInstanceUUID activityUUID) {
final Execution execution = EnvTool.getJournal().getExecutionOnActivity(activityUUID.getProcessInstanceUUID(),
activityUUID);
final List jobs = getDbSession().getJobsOfExecution(execution.getEventUUID());
final int retries = EnvTool.getEventExecutor().getRetries();
for (final Job job : jobs) {
if (job.getRetries() == 0) {
job.setRetries(retries);
}
}
refreshJobExecutor();
}
@Override
public void enablePermanentEventsInFailure(final ActivityDefinitionUUID activityUUID) {
final Job job = getDbSession().getJob(activityUUID);
final int retries = EnvTool.getEventExecutor().getRetries();
if (job.getRetries() == 0) {
job.setRetries(retries);
}
refreshJobExecutor();
}
@Override
public void fire(final OutgoingEventInstance outgoingEventInstance) {
getDbSession().save(outgoingEventInstance);
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Firing event outgoing event: " + outgoingEventInstance + "...");
}
refreshMatchers();
}
@Override
public void subscribe(final IncomingEventInstance incomingEventInstance) {
final long originalEnableTime = incomingEventInstance.getEnableTime();
incomingEventInstance.setEnableTime(Long.MAX_VALUE);
getDbSession().save(incomingEventInstance);
EnvTool.getTransaction().registerSynchronization(
new EventAdded(getDbSession(), incomingEventInstance.getId(), originalEnableTime));
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Firing event incoming event: " + incomingEventInstance + "...");
}
if (incomingEventInstance.getExpression() != null) {
refreshExpressionMessageMatcher();
} else {
refreshMessageMatcher();
}
}
@Override
public Set getIncomingEvents() {
final Set incomings = getDbSession().getIncomingEvents();
if (incomings == null) {
return Collections.emptySet();
}
return incomings;
}
@Override
public Set getOutgoingEvents() {
final Set outgoings = getDbSession().getOutgoingEvents();
if (outgoings == null) {
return Collections.emptySet();
}
return outgoings;
}
@Override
public Set getOutgoingEvents(final String eventName, final String toProcessName,
final String toActivityName, final ActivityInstanceUUID activityUUID) {
final Set outgoings = getDbSession().getOutgoingEvents(eventName, toProcessName,
toActivityName, activityUUID);
if (outgoings == null) {
return Collections.emptySet();
}
return outgoings;
}
@Override
public Set getIncomingEvents(final String eventName, final String toProcessName,
final String toActivityName, final ActivityInstanceUUID activityUUID) {
final Set incomings = getDbSession().getIncomingEvents(eventName, toProcessName,
toActivityName, activityUUID);
if (incomings == null) {
return Collections.emptySet();
}
return incomings;
}
@Override
public Set getOutgoingEvents(final ProcessInstanceUUID instanceUUID) {
final Set outgoings = getDbSession().getOutgoingEvents(instanceUUID);
if (outgoings == null) {
return Collections.emptySet();
}
return outgoings;
}
@Override
public Set getIncomingEvents(final ProcessInstanceUUID instanceUUID) {
final Set incomings = getDbSession().getIncomingEvents(instanceUUID);
if (incomings == null) {
return Collections.emptySet();
}
return incomings;
}
public Set getIncomingEvents(final ActivityDefinitionUUID activityUUID) {
final Set incomings = getDbSession().getIncomingEvents(activityUUID);
if (incomings == null) {
return Collections.emptySet();
}
return incomings;
}
@Override
public Set getIncomingEvents(final ActivityInstanceUUID activityUUID) {
final Set incomings = getDbSession().getIncomingEvents(activityUUID);
if (incomings == null) {
return Collections.emptySet();
}
return incomings;
}
@Override
public Set getBoundaryIncomingEvents(final ActivityInstanceUUID activityUUID) {
final Set incomings = getDbSession().getBoundaryIncomingEvents(activityUUID);
if (incomings == null) {
return Collections.emptySet();
}
return incomings;
}
@Override
public Set getBoundaryOutgoingEvents(final ActivityInstanceUUID activityUUID) {
final Set outgoings = getDbSession().getBoundaryOutgoingEvents(activityUUID);
if (outgoings == null) {
return Collections.emptySet();
}
return outgoings;
}
@Override
public IncomingEventInstance getIncomingEvent(final long incomingId) {
return getDbSession().getIncomingEvent(incomingId);
}
@Override
public OutgoingEventInstance getOutgoingEvent(final long outgoingId) {
return getDbSession().getOutgoingEvent(outgoingId);
}
@Override
public IncomingEventInstance getIncomingEvent(final ProcessInstanceUUID instanceUUID, final String name) {
return getDbSession().getIncomingEvent(instanceUUID, name);
}
public void removeFiredEvent(final OutgoingEventInstance outgoing) {
getDbSession().deleteIncompatibleEvents(outgoing);
getDbSession().delete(outgoing);
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Removing outgoing event: " + outgoing + "...");
}
}
@Override
public Set getOverdueEvents() {
return getDbSession().getOverdueEvents();
}
@Override
public Set getSignalIncomingEvents(final String signal) {
return getDbSession().getSignalIncomingEvents(signal);
}
public void removeSubscription(final IncomingEventInstance incoming) {
getDbSession().delete(incoming);
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Removing incoming event: " + incoming + "...");
}
}
@Override
public void removeSubscriptions(final ProcessInstanceUUID instanceUUID) {
final Set events = getIncomingEvents(instanceUUID);
if (events != null && !events.isEmpty()) {
for (final IncomingEventInstance event : events) {
removeSubscription(event);
}
}
}
@Override
public void removeSubscriptions(final ActivityDefinitionUUID activityUUID) {
final Set events = getIncomingEvents(activityUUID);
if (events != null && !events.isEmpty()) {
for (final IncomingEventInstance event : events) {
removeSubscription(event);
}
}
}
@Override
public void removeFiredEvents(final ProcessInstanceUUID instanceUUID) {
final Set events = getOutgoingEvents(instanceUUID);
if (events != null && !events.isEmpty()) {
for (final OutgoingEventInstance event : events) {
removeFiredEvent(event);
}
}
}
@Override
public void removeEvent(final EventInstance event) {
if (event instanceof OutgoingEventInstance) {
removeFiredEvent((OutgoingEventInstance) event);
} else {
removeSubscription((IncomingEventInstance) event);
}
}
@Override
public IncomingEventInstance getSignalStartIncomingEvent(final List processNames, final String signalCode) {
return getDbSession().getSignalStartIncomingEvent(processNames, signalCode);
}
@Override
public List getMessageStartIncomingEvents(final Set processNames) {
return getDbSession().getMessageStartIncomingEvents(processNames);
}
@Override
public void storeJob(final Job job) {
final int retries = EnvTool.getEventExecutor().getRetries();
job.setRetries(retries);
getDbSession().save(job);
if (LOG.isLoggable(Level.INFO)) {
LOG.info("New job: " + job + "...");
}
refreshJobExecutor();
}
private void refreshJobExecutor() {
EnvTool.getEventExecutor().refreshJobExecutor();
}
@Override
public Job getJob(final Long jobId) {
return getDbSession().getJob(jobId);
}
@Override
public void removeJob(final Job job) {
getDbSession().delete(job);
}
@Override
public void removeJob(final ActivityDefinitionUUID activityUUID) {
final Job job = getDbSession().getJob(activityUUID);
if (job != null) {
getDbSession().delete(job);
}
}
@Override
public List getExecutableJobs(final List lockedRootInstances, final int maxResult) {
return getDbSession().getExecutableJobs(lockedRootInstances, maxResult);
}
@Override
public Long getNextJobDueDate() {
return getDbSession().getNextJobDueDate();
}
@Override
public List getMessageEventCouples() {
return getDbSession().getMessageEventCouples();
}
@Override
public List getJobs() {
return getDbSession().getJobs();
}
@Override
public void removeJobs(final String executionEventUUID) {
final List jobs = getDbSession().getJobsOfExecution(executionEventUUID);
for (final Job job : jobs) {
getDbSession().delete(job);
}
}
@Override
public void removeJobs(final ProcessInstanceUUID instanceUUID) {
final List jobs = getDbSession().getJobsOfInstance(instanceUUID);
for (final Job job : jobs) {
getDbSession().delete(job);
}
}
@Override
public List getTimerJobs() {
return getDbSession().getJobs(EventConstants.TIMER);
}
@Override
public List getTimerJobs(final ProcessInstanceUUID instanceUUID) {
return getDbSession().getJobs(EventConstants.TIMER, instanceUUID);
}
@Override
public List getTimerJobs(final String eventUUID) {
return getDbSession().getJobs(EventConstants.TIMER, eventUUID);
}
@Override
public List getCorrelationKeyMessageEventCouples() {
return getDbSession().getCorrelationKeyMessageEventCouples();
}
@Override
public Long getNextEventDueDate() {
return getDbSession().getNextEventDueDate();
}
@Override
public Long getNextExpressionEventDueDate() {
return getDbSession().getNextExpressionEventDueDate();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy