Skip to content

Commit

Permalink
unification of persistence and transaction handling for jbpm and huma…
Browse files Browse the repository at this point in the history
…n task

(cherry picked from commit a054752)
  • Loading branch information
mswiderski committed Dec 17, 2013
1 parent 8987f08 commit 96cb2ea
Show file tree
Hide file tree
Showing 12 changed files with 403 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,14 @@ public class EnvironmentName {
public static final String CMD_SCOPED_ENTITY_MANAGER = "org.kie.api.persistence.jpa.CmdScopedEntityManager";
public static final String APP_SCOPED_ENTITY_MANAGER = "org.kie.api.persistence.jpa.AppScopedEntityManager";
public static final String PERSISTENCE_CONTEXT_MANAGER = "org.kie.api.persistence.PersistenceContextManager";
public static final String TASK_PERSISTENCE_CONTEXT_MANAGER = "org.kie.api.persistence.TaskPersistenceContextManager";
public static final String USE_PESSIMISTIC_LOCKING = "org.kie.api.persistence.pessimistic";

public static final String OBJECT_MARSHALLING_STRATEGIES = "org.kie.api.marshalling.ObjectMarshallingStrategies";
public static final String GLOBALS = "org.kie.Globals";
public static final String CALENDARS = "org.kie.api.time.Calendars";
public static final String DATE_FORMATS = "org.kie.build.DateFormats";

public static final String TASK_USER_GROUP_CALLBASK = "org.kie.api.task.UserGroupCallback";
public static final String TASK_USER_INFO = "org.kie.api.task.UserInfo";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package org.kie.internal.runtime.manager;

import java.util.concurrent.ConcurrentHashMap;

import org.kie.api.runtime.manager.RuntimeManager;

public class RuntimeManagerRegistry {

private static RuntimeManagerRegistry INSTANCE = new RuntimeManagerRegistry();

protected volatile ConcurrentHashMap<String, RuntimeManager> registeredManager = new ConcurrentHashMap<String, RuntimeManager>();

private RuntimeManagerRegistry() {

}

public static RuntimeManagerRegistry get() {
return INSTANCE;
}

public synchronized void register(RuntimeManager manager) {
if (registeredManager.containsKey(manager.getIdentifier())) {
throw new IllegalStateException("RuntimeManager is already registered with id " + manager.getIdentifier());
}
this.registeredManager.put(manager.getIdentifier(), manager);
}

public synchronized void remove(RuntimeManager manager) {

this.registeredManager.remove(manager.getIdentifier());
}

public synchronized void remove(String identifier) {

this.registeredManager.remove(identifier);
}

public RuntimeManager getManager(String id) {
return this.registeredManager.get(id);
}

public boolean isRegistered(String id) {
return this.registeredManager.containsKey(id);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,15 @@
*/
package org.kie.internal.task.api;

import javax.enterprise.event.Event;
import java.util.List;

import org.kie.api.task.model.Task;
import org.kie.internal.task.api.model.NotificationEvent;
public interface EventService<T> {

public interface EventService<T, V> {
void registerTaskEventListener(T listener);

void registerTaskLifecycleEventListener(V taskLifecycleEventListener);

void registerTaskNotificationEventListener(T notificationEventListener);

Event<Task> getTaskLifecycleEventListeners();

Event<NotificationEvent> getTaskNotificationEventListeners();
List<T> getTaskEventListeners();

void clearTaskLifecycleEventListeners();

void clearTasknotificationEventListeners();
void clearTaskEventListeners();
void removeTaskEventListener(T listener);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.kie.internal.task.api;

import org.kie.api.task.UserGroupCallback;
import org.kie.internal.command.Context;

public interface TaskContext extends Context {

TaskPersistenceContext getPersistenceContext();

void setPersistenceContext(TaskPersistenceContext context);

UserGroupCallback getUserGroupCallback();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.kie.internal.task.api;

import org.kie.api.task.model.Task;

public interface TaskEvent {

Task getTask();

TaskContext getTaskContext();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package org.kie.internal.task.api;

import org.kie.api.task.model.Attachment;
import org.kie.api.task.model.Comment;
import org.kie.api.task.model.Content;
import org.kie.api.task.model.Group;
import org.kie.api.task.model.I18NText;
import org.kie.api.task.model.OrganizationalEntity;
import org.kie.api.task.model.PeopleAssignments;
import org.kie.api.task.model.Task;
import org.kie.api.task.model.TaskData;
import org.kie.api.task.model.User;
import org.kie.internal.task.api.model.BooleanExpression;
import org.kie.internal.task.api.model.ContentData;
import org.kie.internal.task.api.model.Deadline;
import org.kie.internal.task.api.model.Deadlines;
import org.kie.internal.task.api.model.Delegation;
import org.kie.internal.task.api.model.EmailNotification;
import org.kie.internal.task.api.model.EmailNotificationHeader;
import org.kie.internal.task.api.model.Escalation;
import org.kie.internal.task.api.model.FaultData;
import org.kie.internal.task.api.model.Language;
import org.kie.internal.task.api.model.Notification;
import org.kie.internal.task.api.model.Reassignment;
import org.kie.internal.task.api.model.TaskDef;

public interface TaskModelFactory {

Attachment newAttachment();

BooleanExpression newBooleanExpression();

Comment newComment();

ContentData newContentData();

Content newContent();

Deadline newDeadline();

Deadlines newDeadlines();

Delegation newDelegation();

EmailNotificationHeader newEmailNotificationHeader();

EmailNotification newEmialNotification();

Escalation newEscalation();

FaultData newFaultData();

Group newGroup();

I18NText newI18NText();

Language newLanguage();

Notification newNotification();

OrganizationalEntity newOrgEntity();

PeopleAssignments newPeopleAssignments();

Reassignment newReassignment();

TaskData newTaskData();

TaskDef newTaskDef();

Task newTask();

User newUser();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.kie.internal.task.api;

import java.util.ServiceLoader;

public class TaskModelProvider {

private static ServiceLoader<TaskModelFactory> serviceLoader = ServiceLoader.load(TaskModelFactory.class);

public static TaskModelFactory getFactory() {
for (TaskModelFactory factory : serviceLoader) {
return factory;
}

throw new IllegalStateException("Cannot find any TaskModelFactory");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
package org.kie.internal.task.api;

import java.util.HashMap;
import java.util.Map;

import org.kie.api.task.model.Attachment;
import org.kie.api.task.model.Comment;
import org.kie.api.task.model.Content;
import org.kie.api.task.model.Group;
import org.kie.api.task.model.OrganizationalEntity;
import org.kie.api.task.model.Task;
import org.kie.api.task.model.User;
import org.kie.internal.task.api.model.Deadline;

public interface TaskPersistenceContext {

Task findTask(Long taskId);

Task persistTask(Task task);

Task updateTask(Task task);

Task removeTask(Task task);

Group findGroup(String groupId);

Group persistGroup(Group group);

Group updateGroup(Group group);

Group removeGroup(Group group);

User findUser(String userId);

User persistUser(User user);

User updateUser(User user);

User removeUser(User user);

OrganizationalEntity findOrgEntity(String orgEntityId);

OrganizationalEntity persistOrgEntity(OrganizationalEntity orgEntity);

OrganizationalEntity updateOrgEntity(OrganizationalEntity orgEntity);

OrganizationalEntity removeOrgEntity(OrganizationalEntity orgEntity);

Content findContent(Long contentId);

Content persistContent(Content content);

Content updateContent(Content content);

Content removeContent(Content content);

Attachment findAttachment(Long attachmentId);

Attachment persistAttachment(Attachment attachment);

Attachment updateAttachment(Attachment attachment);

Attachment removeAttachment(Attachment attachment);

Comment findComment(Long commentId);

Comment persistComment(Comment comment);

Comment updateComment(Comment comment);

Comment removeComment(Comment comment);

Deadline findDeadline(Long deadlineId);

Deadline persistDeadline(Deadline deadline);

Deadline updateDeadline(Deadline deadline);

Deadline removeDeadline(Deadline deadline);

/*
* Query related methods
*/

<T> T queryWithParametersInTransaction(String queryName, Map<String, Object> params, Class<T> clazz);

<T> T queryAndLockWithParametersInTransaction(String queryName, Map<String, Object> params, boolean singleResult, Class<T> clazz);

<T> T queryInTransaction(String queryName, Class<T> clazz);

<T> T queryStringInTransaction(String queryString, Class<T> clazz );

<T> T queryStringWithParametersInTransaction(String queryString, Map<String, Object> params, Class<T> clazz );

<T> T queryAndLockStringWithParametersInTransaction(String queryName, Map<String, Object> params, boolean singleResult, Class<T> clazz);

int executeUpdateString(String updateString);

HashMap<String, Object> addParametersToMap(Object ... parameterValues);

/*
* Following are optional methods that are more like extension to
* default data model to allow flexible add-ons
*/
<T> T persist(T object);

<T> T find(Class<T> entityClass, Object primaryKey);

<T> T remove(T entity);

<T> T merge(T entity);

/*
* life cycle methods
*/
boolean isOpen();

void joinTransaction();

void close();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.kie.internal.task.api;

public interface TaskPersistenceContextManager {

TaskPersistenceContext getPersistenceContext();

void beginCommandScopedEntityManager();

void endCommandScopedEntityManager();

/**
* Executes the necessary actions in order to clean up and dispose of the internal fields of this instance.
*/
void dispose();
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ List<TaskSummary> getTasksByVariousFields( List<Long> workItemIds, List<Long> ta

List<TaskSummary> getTasksByVariousFields( Map<String, List<?>> parameters, boolean union);

int getCompletedTaskByUserId(String userId);
int getPendingTaskByUserId(String userId);

static String WORK_ITEM_ID_LIST = "Work item id list";
static String TASK_ID_LIST = "task id list";
static String PROCESS_INST_ID_LIST = "process instance id list";
Expand Down

0 comments on commit 96cb2ea

Please sign in to comment.