Search in sources :

Example 16 with ContentMarshallerContext

use of org.kie.internal.task.api.ContentMarshallerContext in project jbpm by kiegroup.

the class PerCaseRuntimeManager method init.

@Override
public void init() {
    TaskContentRegistry.get().addMarshallerContext(getIdentifier(), new ContentMarshallerContext(environment.getEnvironment(), environment.getClassLoader()));
    boolean owner = false;
    TransactionManager tm = null;
    if (environment.usePersistence()) {
        tm = getTransactionManagerInternal(environment.getEnvironment());
        owner = tm.begin();
    }
    try {
        // need to init one session to bootstrap all case - such as start timers
        KieSession initialKsession = factory.newKieSession();
        // there is a need to call getProcessRuntime otherwise the start listeners are not registered
        initialKsession.execute(new ExecutableCommand<Void>() {

            private static final long serialVersionUID = 1L;

            @Override
            public Void execute(org.kie.api.runtime.Context context) {
                KieSession ksession = ((RegistryContext) context).lookup(KieSession.class);
                ((InternalKnowledgeRuntime) ksession).getProcessRuntime();
                return null;
            }
        });
        factory.onDispose(initialKsession.getIdentifier());
        initialKsession.execute(new DestroyKSessionCommand(initialKsession, this));
        if (!"false".equalsIgnoreCase(System.getProperty("org.jbpm.rm.init.timer"))) {
            if (mapper instanceof JPAMapper) {
                List<Long> ksessionsToInit = ((JPAMapper) mapper).findKSessionToInit(this.identifier);
                for (Long id : ksessionsToInit) {
                    initialKsession = factory.findKieSessionById(id);
                    initialKsession.execute(new DisposeKSessionCommand(initialKsession, this));
                }
            }
        }
        if (tm != null) {
            tm.commit(owner);
        }
    } catch (Exception e) {
        if (tm != null) {
            tm.rollback(owner);
        }
        throw new RuntimeException("Exception while initializing runtime manager " + this.identifier, e);
    }
}
Also used : TransactionManager(org.drools.persistence.api.TransactionManager) JPAMapper(org.jbpm.runtime.manager.impl.mapper.JPAMapper) KieSession(org.kie.api.runtime.KieSession) ContentMarshallerContext(org.kie.internal.task.api.ContentMarshallerContext)

Example 17 with ContentMarshallerContext

use of org.kie.internal.task.api.ContentMarshallerContext in project jbpm by kiegroup.

the class PerRequestRuntimeManager method init.

@Override
public void init() {
    TaskContentRegistry.get().addMarshallerContext(getIdentifier(), new ContentMarshallerContext(environment.getEnvironment(), environment.getClassLoader()));
    configureRuntimeOnTaskService(newTaskService(taskServiceFactory), null);
}
Also used : ContentMarshallerContext(org.kie.internal.task.api.ContentMarshallerContext)

Example 18 with ContentMarshallerContext

use of org.kie.internal.task.api.ContentMarshallerContext in project jbpm by kiegroup.

the class UserTaskServiceImpl method getAttachmentContentById.

@Override
public Object getAttachmentContentById(String deploymentId, Long taskId, Long attachmentId) {
    UserTaskInstanceDesc task = dataService.getTaskById(taskId);
    validateTask(deploymentId, taskId, task);
    RuntimeManager manager = getRuntimeManager(task);
    if (manager == null) {
        logger.warn("Cannot find runtime manager for task {}", taskId);
        return null;
    }
    RuntimeEngine engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get(task.getProcessInstanceId()));
    try {
        // perform actual operation
        TaskService taskService = engine.getTaskService();
        Attachment attachment = ((InternalTaskService) taskService).getAttachmentById(attachmentId);
        long documentContentId = attachment.getAttachmentContentId();
        if (documentContentId > 0) {
            Content contentById = taskService.getContentById(documentContentId);
            if (contentById == null) {
                return null;
            }
            ContentMarshallerContext ctx = TaskContentRegistry.get().getMarshallerContext(task.getDeploymentId());
            Object unmarshall = ContentMarshallerHelper.unmarshall(contentById.getContent(), ctx.getEnvironment(), ctx.getClassloader());
            return unmarshall;
        }
        return null;
    } finally {
        disposeRuntimeEngine(manager, engine);
    }
}
Also used : RuntimeEngine(org.kie.api.runtime.manager.RuntimeEngine) InternalTaskService(org.kie.internal.task.api.InternalTaskService) UserTaskService(org.jbpm.services.api.UserTaskService) TaskService(org.kie.api.task.TaskService) Content(org.kie.api.task.model.Content) RuntimeManager(org.kie.api.runtime.manager.RuntimeManager) InternalRuntimeManager(org.kie.internal.runtime.manager.InternalRuntimeManager) Attachment(org.kie.api.task.model.Attachment) InternalAttachment(org.kie.internal.task.api.model.InternalAttachment) InternalTaskService(org.kie.internal.task.api.InternalTaskService) UserTaskInstanceDesc(org.jbpm.services.api.model.UserTaskInstanceDesc) ContentMarshallerContext(org.kie.internal.task.api.ContentMarshallerContext)

Example 19 with ContentMarshallerContext

use of org.kie.internal.task.api.ContentMarshallerContext in project jbpm by kiegroup.

the class UserTaskServiceImpl method getTaskInputContentByTaskId.

@SuppressWarnings("unchecked")
@Override
public Map<String, Object> getTaskInputContentByTaskId(String deploymentId, Long taskId) {
    UserTaskInstanceDesc task = dataService.getTaskById(taskId);
    validateTask(deploymentId, taskId, task);
    RuntimeManager manager = getRuntimeManager(task);
    if (manager == null) {
        logger.warn("Cannot find runtime manager for task {}", taskId);
        return null;
    }
    RuntimeEngine engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get(task.getProcessInstanceId()));
    try {
        TaskService taskService = engine.getTaskService();
        // perform actual operation
        Task taskInstanceById = taskService.getTaskById(taskId);
        long documentContentId = taskInstanceById.getTaskData().getDocumentContentId();
        if (documentContentId > 0) {
            Content contentById = taskService.getContentById(documentContentId);
            if (contentById == null) {
                return new HashMap<String, Object>();
            }
            ContentMarshallerContext ctx = TaskContentRegistry.get().getMarshallerContext(task.getDeploymentId());
            Object unmarshall = ContentMarshallerHelper.unmarshall(contentById.getContent(), ctx.getEnvironment(), ctx.getClassloader());
            Map<String, Object> data = (Map<String, Object>) unmarshall;
            for (Object variable : data.values()) {
                if (variable instanceof LazyLoaded<?>) {
                    ((LazyLoaded<?>) variable).load();
                }
            }
            return data;
        }
        return new HashMap<String, Object>();
    } finally {
        disposeRuntimeEngine(manager, engine);
    }
}
Also used : RuntimeEngine(org.kie.api.runtime.manager.RuntimeEngine) Task(org.kie.api.task.model.Task) HashMap(java.util.HashMap) InternalTaskService(org.kie.internal.task.api.InternalTaskService) UserTaskService(org.jbpm.services.api.UserTaskService) TaskService(org.kie.api.task.TaskService) RuntimeManager(org.kie.api.runtime.manager.RuntimeManager) InternalRuntimeManager(org.kie.internal.runtime.manager.InternalRuntimeManager) LazyLoaded(org.kie.internal.utils.LazyLoaded) Content(org.kie.api.task.model.Content) UserTaskInstanceDesc(org.jbpm.services.api.model.UserTaskInstanceDesc) HashMap(java.util.HashMap) Map(java.util.Map) ContentMarshallerContext(org.kie.internal.task.api.ContentMarshallerContext)

Example 20 with ContentMarshallerContext

use of org.kie.internal.task.api.ContentMarshallerContext in project jbpm by kiegroup.

the class AddTaskInputsCommand method execute.

@SuppressWarnings("unchecked")
@Override
public Void execute(Context cntxt) {
    TaskContext context = (TaskContext) cntxt;
    TaskEventSupport taskEventSupport = context.getTaskEventSupport();
    TaskPersistenceContext persistenceContext = context.getPersistenceContext();
    Task task = persistenceContext.findTask(taskId);
    // security check
    if (!isBusinessAdmin(userId, task.getPeopleAssignments().getBusinessAdministrators(), context)) {
        throw new PermissionDeniedException("User " + userId + " is not business admin of task " + taskId);
    }
    long inputContentId = task.getTaskData().getDocumentContentId();
    Content outputContent = persistenceContext.findContent(inputContentId);
    Map<String, Object> initialContent = new HashMap<String, Object>();
    Map<String, Object> mergedContent = values;
    if (outputContent == null) {
        ContentMarshallerContext mcontext = context.getTaskContentService().getMarshallerContext(task);
        ContentData outputContentData = ContentMarshallerHelper.marshal(task, values, mcontext.getEnvironment());
        Content content = TaskModelProvider.getFactory().newContent();
        ((InternalContent) content).setContent(outputContentData.getContent());
        persistenceContext.persistContent(content);
        ((InternalTaskData) task.getTaskData()).setOutput(content.getId(), outputContentData);
    } else {
        ContentMarshallerContext mcontext = context.getTaskContentService().getMarshallerContext(task);
        Object unmarshalledObject = ContentMarshallerHelper.unmarshall(outputContent.getContent(), mcontext.getEnvironment(), mcontext.getClassloader());
        if (unmarshalledObject != null && unmarshalledObject instanceof Map) {
            // set initial content with data from storage before being altered by this values
            initialContent.putAll((Map<String, Object>) unmarshalledObject);
            ((Map<String, Object>) unmarshalledObject).putAll(values);
            mergedContent = ((Map<String, Object>) unmarshalledObject);
        }
        ContentData outputContentData = ContentMarshallerHelper.marshal(task, unmarshalledObject, mcontext.getEnvironment());
        ((InternalContent) outputContent).setContent(outputContentData.getContent());
        persistenceContext.persistContent(outputContent);
    }
    taskEventSupport.fireBeforeTaskInputVariablesChanged(task, context, initialContent);
    ((InternalTaskData) task.getTaskData()).setTaskInputVariables(mergedContent);
    taskEventSupport.fireAfterTaskInputVariablesChanged(task, context, mergedContent);
    return null;
}
Also used : Task(org.kie.api.task.model.Task) TaskContext(org.jbpm.services.task.commands.TaskContext) HashMap(java.util.HashMap) InternalTaskData(org.kie.internal.task.api.model.InternalTaskData) InternalContent(org.kie.internal.task.api.model.InternalContent) TaskPersistenceContext(org.kie.internal.task.api.TaskPersistenceContext) ContentData(org.kie.internal.task.api.model.ContentData) Content(org.kie.api.task.model.Content) InternalContent(org.kie.internal.task.api.model.InternalContent) PermissionDeniedException(org.jbpm.services.task.exception.PermissionDeniedException) TaskEventSupport(org.jbpm.services.task.events.TaskEventSupport) HashMap(java.util.HashMap) Map(java.util.Map) ContentMarshallerContext(org.kie.internal.task.api.ContentMarshallerContext)

Aggregations

ContentMarshallerContext (org.kie.internal.task.api.ContentMarshallerContext)21 Content (org.kie.api.task.model.Content)15 Map (java.util.Map)14 HashMap (java.util.HashMap)12 Task (org.kie.api.task.model.Task)12 InternalContent (org.kie.internal.task.api.model.InternalContent)8 ContentData (org.kie.internal.task.api.model.ContentData)6 InternalTaskData (org.kie.internal.task.api.model.InternalTaskData)5 TaskEventSupport (org.jbpm.services.task.events.TaskEventSupport)4 InternalRuntimeManager (org.kie.internal.runtime.manager.InternalRuntimeManager)4 InternalTaskService (org.kie.internal.task.api.InternalTaskService)4 TaskPersistenceContext (org.kie.internal.task.api.TaskPersistenceContext)4 TransactionManager (org.drools.persistence.api.TransactionManager)3 UserTaskService (org.jbpm.services.api.UserTaskService)3 UserTaskInstanceDesc (org.jbpm.services.api.model.UserTaskInstanceDesc)3 TaskContext (org.jbpm.services.task.commands.TaskContext)3 PermissionDeniedException (org.jbpm.services.task.exception.PermissionDeniedException)3 KieSession (org.kie.api.runtime.KieSession)3 RuntimeEngine (org.kie.api.runtime.manager.RuntimeEngine)3 RuntimeManager (org.kie.api.runtime.manager.RuntimeManager)3