/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * 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.kie.spring.jbpm; import java.util.Arrays; import java.util.Collection; import javax.persistence.EntityManagerFactory; import org.drools.persistence.api.TransactionManagerFactory; import org.jbpm.runtime.manager.impl.deploy.DeploymentDescriptorImpl; import org.jbpm.runtime.manager.impl.jpa.EntityManagerFactoryManager; import org.jbpm.runtime.manager.impl.migration.MigrationException; import org.jbpm.runtime.manager.impl.migration.MigrationManager; import org.jbpm.runtime.manager.impl.migration.MigrationSpec; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.kie.api.runtime.manager.Context; import org.kie.api.runtime.manager.RuntimeEngine; import org.kie.api.runtime.manager.RuntimeManager; import org.kie.api.runtime.process.ProcessInstance; import org.kie.internal.runtime.manager.InternalRuntimeManager; import org.kie.internal.runtime.manager.context.ProcessInstanceIdContext; import static org.junit.Assert.*; @RunWith(Parameterized.class) public class KieSpringProcessInstanceMigrationServiceImplTest extends AbstractJbpmSpringParameterizedTest { private static final String ADDTASKAFTERACTIVE_ID_V1 = "process-migration-testv1.AddTaskAfterActive"; private static final String ADDTASKAFTERACTIVE_ID_V2 = "process-migration-testv2.AddTaskAfterActive"; @Parameterized.Parameters(name = "{index}: {0}") public static Collection<Object[]> contextPath() { Object[][] data = new Object[][]{ {JTA_EMF_SINGLETON_PATH, ProcessInstanceIdContext.get()} }; return Arrays.asList(data); } @After public void cleanup() { System.clearProperty("org.kie.txm.factory.class"); TransactionManagerFactory.resetInstance(); EntityManagerFactoryManager.get().clear(); if (context != null) { context.close(); context = null; } } public KieSpringProcessInstanceMigrationServiceImplTest(String contextPath, Context<?> runtimeManagerContext) { super(contextPath, runtimeManagerContext); } @Test public void testMigrateSingleProcessInstance() { System.setProperty("org.kie.txm.factory.class", "org.kie.spring.persistence.KieSpringTransactionManagerFactory"); TransactionManagerFactory.resetInstance(); EntityManagerFactoryManager.get().addEntityManagerFactory("org.jbpm.persistence.spring.jta", context.getBean("jbpmEMF", EntityManagerFactory.class)); RuntimeManager firstManager = getManager(); ((DeploymentDescriptorImpl) ((InternalRuntimeManager) firstManager). getDeploymentDescriptor()).setAuditPersistenceUnit("org.jbpm.persistence.spring.jta"); ((DeploymentDescriptorImpl) ((InternalRuntimeManager) firstManager). getDeploymentDescriptor()).setPersistenceUnit("org.jbpm.persistence.spring.jta"); assertNotNull(firstManager); RuntimeManager secondManager = getSecondManager(); ((DeploymentDescriptorImpl) ((InternalRuntimeManager) secondManager). getDeploymentDescriptor()).setAuditPersistenceUnit("org.jbpm.persistence.spring.jta"); ((DeploymentDescriptorImpl) ((InternalRuntimeManager) secondManager). getDeploymentDescriptor()).setPersistenceUnit("org.jbpm.persistence.spring.jta"); assertNotNull(secondManager); RuntimeEngine engine = firstManager.getRuntimeEngine(runtimeManagerContext); ProcessInstance instance = engine.getKieSession().startProcess(ADDTASKAFTERACTIVE_ID_V1); assertNotNull(instance); long processInstanceId = instance.getId(); assertNotNull(processInstanceId); org.kie.api.runtime.manager.audit.ProcessInstanceLog log = engine.getAuditService().findProcessInstance(processInstanceId); assertEquals(ProcessInstance.STATE_ACTIVE, log.getStatus().intValue()); assertEquals(ADDTASKAFTERACTIVE_ID_V1, log.getProcessId()); MigrationSpec migrationSpec = new MigrationSpec(firstManager.getIdentifier(), processInstanceId, secondManager.getIdentifier(), ADDTASKAFTERACTIVE_ID_V2); MigrationManager migrationManager = new MigrationManager(migrationSpec); org.jbpm.runtime.manager.impl.migration.MigrationReport report = null; try { report = migrationManager.migrate(); } catch (MigrationException e) { report = e.getReport(); } assertNotNull(report); assertTrue(report.isSuccessful()); log = engine.getAuditService().findProcessInstance(processInstanceId); assertEquals(ProcessInstance.STATE_ACTIVE, log.getStatus().intValue()); assertEquals(ADDTASKAFTERACTIVE_ID_V2, log.getProcessId()); firstManager.disposeRuntimeEngine(engine); } }