From 13287931ad268e78c0be245040c61f4790a6b1be Mon Sep 17 00:00:00 2001 From: Maciej Swiderski Date: Fri, 15 Jul 2016 12:10:23 +0200 Subject: [PATCH] DROOLS-1231 - Container is not upgraded until restarted --- .../kie/server/api/KieServerConstants.java | 2 + .../api/marshalling/json/JSONMarshaller.java | 2 +- .../xstream/XStreamMarshaller.java | 22 +++- .../services/api/KieServerExtension.java | 4 + .../impl/KieContainerCommandServiceImpl.java | 2 +- .../impl/KieServerContainerExtension.java | 10 ++ .../server/services/impl/KieServerImpl.java | 29 ++++- .../DroolsKieContainerCommandServiceImpl.java | 2 +- .../drools/DroolsKieServerExtension.java | 14 ++- .../jbpm/ui/JBPMUIKieServerExtension.java | 12 +++ .../services/jbpm/JbpmKieServerExtension.java | 31 +++++- .../OptaplannerKieServerExtension.java | 10 ++ .../shared/KieServerAssert.java | 6 ++ .../src/main/resources/kjar1/rules.drl | 2 +- .../src/main/resources/META-INF/kmodule.xml | 6 +- .../src/main/resources/kjar1/rules.drl | 2 +- .../container-isolation-kjar102/pom.xml | 22 ++++ .../java/org/kie/server/testing/Person.java | 32 ++++++ .../src/main/resources/META-INF/kmodule.xml | 6 ++ .../src/main/resources/kjar1/rules.drl | 22 ++++ .../container-isolation-kjar103/pom.xml | 22 ++++ .../java/org/kie/server/testing/Person.java | 32 ++++++ .../src/main/resources/META-INF/kmodule.xml | 6 ++ .../src/main/resources/kjar1/rules.drl | 23 ++++ ...erUpdateDifferentKBaseIntegrationTest.java | 102 ++++++++++++++++++ ...UpdateDifferentPackageIntegrationTest.java | 102 ++++++++++++++++++ .../ContainerUpdateIntegrationTest.java | 4 +- .../jbpm/ContainerUpdateIntegrationTest.java | 33 ++++-- 28 files changed, 540 insertions(+), 22 deletions(-) create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/pom.xml create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/java/org/kie/server/testing/Person.java create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/resources/META-INF/kmodule.xml create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/resources/kjar1/rules.drl create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/pom.xml create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/java/org/kie/server/testing/Person.java create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/resources/META-INF/kmodule.xml create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/resources/kjar1/rules.drl create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateDifferentKBaseIntegrationTest.java create mode 100644 kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateDifferentPackageIntegrationTest.java diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/KieServerConstants.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/KieServerConstants.java index a9cb44e626..b6addeed97 100644 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/KieServerConstants.java +++ b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/KieServerConstants.java @@ -86,4 +86,6 @@ public class KieServerConstants { public static final String CAPABILITY_BPM = "BPM"; // Business Process Management public static final String CAPABILITY_BPM_UI = "BPM-UI"; // Business Process Management UI public static final String CAPABILITY_BRP = "BRP"; // Business Resource Planning + + public static final String FAILURE_REASON_PROP = "failure-reason"; } diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/json/JSONMarshaller.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/json/JSONMarshaller.java index ea9eb57c72..d8164a3786 100644 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/json/JSONMarshaller.java +++ b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/json/JSONMarshaller.java @@ -449,7 +449,7 @@ protected Object mapObject(JsonParser jp, DeserializationContext ctxt) throws IO } else { if (isFullyQualifiedClassname(field1)) { try { - Object value = deserializeObjectMapper.readValue(jp, Class.forName(field1, true, classLoader)); + Object value = deserializeObjectMapper.readValue(jp, classLoader.loadClass(field1)); jp.nextToken(); return value; diff --git a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/xstream/XStreamMarshaller.java b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/xstream/XStreamMarshaller.java index 827fb7a3af..241baba3a5 100644 --- a/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/xstream/XStreamMarshaller.java +++ b/kie-server-parent/kie-server-api/src/main/java/org/kie/server/api/marshalling/xstream/XStreamMarshaller.java @@ -15,9 +15,13 @@ package org.kie.server.api.marshalling.xstream; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; import java.util.Set; import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.mapper.MapperWrapper; import org.drools.core.runtime.help.impl.XStreamXML; import org.kie.server.api.commands.CallContainerCommand; import org.kie.server.api.commands.CommandScript; @@ -60,10 +64,25 @@ public class XStreamMarshaller private XStream xstream; private ClassLoader classLoader; + private Map classNames = new HashMap(); public XStreamMarshaller( final Set> classes, final ClassLoader classLoader ) { this.classLoader = classLoader; - this.xstream = XStreamXML.newXStreamMarshaller( new XStream( ) ); + this.xstream = XStreamXML.newXStreamMarshaller( new XStream( ) { + + protected MapperWrapper wrapMapper(MapperWrapper next) { + return new MapperWrapper(next) { + public Class realClass(String elementName) { + + Class customClass = classNames.get(elementName); + if (customClass != null) { + return customClass; + } + return super.realClass(elementName); + } + }; + } + }); this.xstream.setClassLoader( classLoader ); this.xstream.registerConverter(new BendableScoreXStreamConverter()); @@ -110,6 +129,7 @@ public XStreamMarshaller( final Set> classes, final ClassLoader classLo if (classes != null) { for (Class clazz : classes) { this.xstream.processAnnotations( clazz ); + this.classNames.put(clazz.getName(), clazz); } } } diff --git a/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/api/KieServerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/api/KieServerExtension.java index 9380a73387..efdac23e81 100644 --- a/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/api/KieServerExtension.java +++ b/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/api/KieServerExtension.java @@ -30,6 +30,10 @@ public interface KieServerExtension { void createContainer(String id, KieContainerInstance kieContainerInstance, Map parameters); + void updateContainer(String id, KieContainerInstance kieContainerInstance, Map parameters); + + boolean isUpdateContainerAllowed(String id, KieContainerInstance kieContainerInstance, Map parameters); + void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map parameters); List getAppComponents(SupportedTransports type); diff --git a/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieContainerCommandServiceImpl.java b/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieContainerCommandServiceImpl.java index c27c6e34b1..933568ba17 100644 --- a/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieContainerCommandServiceImpl.java +++ b/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieContainerCommandServiceImpl.java @@ -94,7 +94,7 @@ protected ServiceResponse callContainer(String containerId, St if (ks != null) { Class type = BatchExecutionCommandImpl.class; if (classType != null && !classType.isEmpty()) { - type = (Class) Class.forName(classType, true, kci.getKieContainer().getClassLoader()); + type = (Class) kci.getKieContainer().getClassLoader().loadClass(classType); } Command cmd = kci.getMarshaller( marshallingFormat ).unmarshall(payload, type); diff --git a/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieServerContainerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieServerContainerExtension.java index 2903e4bcc3..21febb3e5b 100644 --- a/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieServerContainerExtension.java +++ b/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieServerContainerExtension.java @@ -56,6 +56,16 @@ public void createContainer(String id, KieContainerInstance kieContainerInstance // no-op } + @Override + public void updateContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { + // no-op + } + + @Override + public boolean isUpdateContainerAllowed(String id, KieContainerInstance kieContainerInstance, Map parameters) { + return true; + } + @Override public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { // no-op diff --git a/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieServerImpl.java b/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieServerImpl.java index ec910f2079..35f915e8d3 100644 --- a/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieServerImpl.java +++ b/kie-server-parent/kie-server-services/kie-server-services-common/src/main/java/org/kie/server/services/impl/KieServerImpl.java @@ -640,8 +640,26 @@ public ServiceResponse updateContainerReleaseId(String id, ReleaseId // would likely not be worth it. At this point a decision was made to fail the execution if a concurrent // call do dispose() is executed. if (kci != null && kci.getKieContainer() != null) { - - + // before upgrade check with all extensions if that is allowed + KieModuleMetaData metaData = KieModuleMetaData.Factory.newKieModuleMetaData(releaseId, DependencyFilter.COMPILE_FILTER); + Map parameters = new HashMap(); + parameters.put(KieServerConstants.KIE_SERVER_PARAM_MODULE_METADATA, metaData); + // process server extensions + List extensions = context.getServerExtensions(); + for (KieServerExtension extension : extensions) { + boolean allowed = extension.isUpdateContainerAllowed(id, kci, parameters); + if (!allowed) { + String message = (String)parameters.get(KieServerConstants.FAILURE_REASON_PROP); + logger.warn("Container {} (for release id {}) on {} cannot be updated due to {}", id, releaseId, extension, message); + if (messages != null) { + messages.add(new Message(Severity.WARN, message)); + } + return new ServiceResponse(ServiceResponse.ResponseType.FAILURE, message); + } + logger.debug("Container {} (for release id {}) on {} ready to be updated", id, releaseId, extension); + } + kci.clearJaxbClasses(); + kci.disposeMarshallers(); Results results = kci.getKieContainer().updateToVersion(releaseId); if (results.hasMessages(Level.ERROR)) { @@ -653,6 +671,11 @@ public ServiceResponse updateContainerReleaseId(String id, ReleaseId logger.error("Error updating releaseId for container " + id + " to version " + releaseId + "\nMessages: " + results.getMessages()); return new ServiceResponse(ServiceResponse.ResponseType.FAILURE, "Error updating release id on container " + id + " to " + releaseId, kci.getResource().getReleaseId()); } else { + // once the upgrade was successful, notify all extensions so they can be upgraded (if needed) + for (KieServerExtension extension : extensions) { + extension.updateContainer(id, kci, parameters); + logger.debug("Container {} (for release id {}) on {} updated successfully", id, releaseId, extension); + } // store the current state of the server KieServerState currentState = repository.load(KieServerEnvironment.getServerId()); @@ -668,6 +691,8 @@ public ServiceResponse updateContainerReleaseId(String id, ReleaseId currentState.setContainers(new HashSet(containers)); repository.store(KieServerEnvironment.getServerId(), currentState); + logger.info("Container {} successfully updated to release id {}", id, releaseId); + messages.add(new Message(Severity.INFO, "Release id successfully updated for container " + id)); return new ServiceResponse(ServiceResponse.ResponseType.SUCCESS, "Release id successfully updated.", kci.getResource().getReleaseId()); } diff --git a/kie-server-parent/kie-server-services/kie-server-services-drools/src/main/java/org/kie/server/services/drools/DroolsKieContainerCommandServiceImpl.java b/kie-server-parent/kie-server-services/kie-server-services-drools/src/main/java/org/kie/server/services/drools/DroolsKieContainerCommandServiceImpl.java index 4bfc218123..3fda5fb5b0 100644 --- a/kie-server-parent/kie-server-services/kie-server-services-drools/src/main/java/org/kie/server/services/drools/DroolsKieContainerCommandServiceImpl.java +++ b/kie-server-parent/kie-server-services/kie-server-services-drools/src/main/java/org/kie/server/services/drools/DroolsKieContainerCommandServiceImpl.java @@ -53,7 +53,7 @@ public ServiceResponse callContainer(String containerId, Strin Class type = BatchExecutionCommandImpl.class; if (classType != null && !classType.isEmpty()) { - type = (Class) Class.forName(classType, true, kci.getKieContainer().getClassLoader()); + type = (Class) kci.getKieContainer().getClassLoader().loadClass(classType); } Command cmd = kci.getMarshaller( marshallingFormat ).unmarshall(payload, type); diff --git a/kie-server-parent/kie-server-services/kie-server-services-drools/src/main/java/org/kie/server/services/drools/DroolsKieServerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-drools/src/main/java/org/kie/server/services/drools/DroolsKieServerExtension.java index f6f87e4528..a091422486 100644 --- a/kie-server-parent/kie-server-services/kie-server-services-drools/src/main/java/org/kie/server/services/drools/DroolsKieServerExtension.java +++ b/kie-server-parent/kie-server-services/kie-server-services-drools/src/main/java/org/kie/server/services/drools/DroolsKieServerExtension.java @@ -97,7 +97,7 @@ public void createContainer(String id, KieContainerInstance kieContainerInstance String type = p + "." + c; try { logger.debug("Adding {} type into extra jaxb classes set", type); - Class clazz = Class.forName(type, true, kieContainerInstance.getKieContainer().getClassLoader()); + Class clazz = kieContainerInstance.getKieContainer().getClassLoader().loadClass(type); addExtraClass(extraClasses, clazz, filterRemoteable); logger.debug("Added {} type into extra jaxb classes set", type); @@ -116,6 +116,18 @@ public void createContainer(String id, KieContainerInstance kieContainerInstance } + @Override + public void updateContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { + disposeContainer(id, kieContainerInstance, parameters); + // just do the same as when creating container to make sure all is up to date + createContainer(id, kieContainerInstance, parameters); + } + + @Override + public boolean isUpdateContainerAllowed(String id, KieContainerInstance kieContainerInstance, Map parameters) { + return true; + } + @Override public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { diff --git a/kie-server-parent/kie-server-services/kie-server-services-jbpm-ui/src/main/java/org/kie/server/services/jbpm/ui/JBPMUIKieServerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-jbpm-ui/src/main/java/org/kie/server/services/jbpm/ui/JBPMUIKieServerExtension.java index 9e912a9f76..1f3d8cf4c9 100644 --- a/kie-server-parent/kie-server-services/kie-server-services-jbpm-ui/src/main/java/org/kie/server/services/jbpm/ui/JBPMUIKieServerExtension.java +++ b/kie-server-parent/kie-server-services/kie-server-services-jbpm-ui/src/main/java/org/kie/server/services/jbpm/ui/JBPMUIKieServerExtension.java @@ -136,6 +136,18 @@ public void createContainer(String id, KieContainerInstance kieContainerInstance } + @Override + public void updateContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { + // recreate configuration for updated container + disposeContainer(id, kieContainerInstance, parameters); + createContainer(id, kieContainerInstance, parameters); + } + + @Override + public boolean isUpdateContainerAllowed(String id, KieContainerInstance kieContainerInstance, Map parameters) { + return true; + } + @Override public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { if (!initialized) { diff --git a/kie-server-parent/kie-server-services/kie-server-services-jbpm/src/main/java/org/kie/server/services/jbpm/JbpmKieServerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-jbpm/src/main/java/org/kie/server/services/jbpm/JbpmKieServerExtension.java index ecb21d0d10..549e1b2f09 100644 --- a/kie-server-parent/kie-server-services/kie-server-services-jbpm/src/main/java/org/kie/server/services/jbpm/JbpmKieServerExtension.java +++ b/kie-server-parent/kie-server-services/kie-server-services-jbpm/src/main/java/org/kie/server/services/jbpm/JbpmKieServerExtension.java @@ -57,6 +57,7 @@ import org.jbpm.services.api.RuntimeDataService; import org.jbpm.services.api.UserTaskService; import org.jbpm.services.api.model.DeployedUnit; +import org.jbpm.services.api.model.ProcessInstanceDesc; import org.jbpm.services.api.query.QueryMapperRegistry; import org.jbpm.services.api.query.QueryService; import org.jbpm.services.task.HumanTaskServiceFactory; @@ -67,6 +68,7 @@ import org.kie.api.builder.model.KieSessionModel; import org.kie.api.executor.ExecutorService; import org.kie.api.runtime.process.ProcessInstance; +import org.kie.api.runtime.query.QueryContext; import org.kie.api.task.TaskService; import org.kie.api.task.UserGroupCallback; import org.kie.internal.runtime.conf.DeploymentDescriptor; @@ -351,12 +353,37 @@ public void createContainer(String id, KieContainerInstance kieContainerInstance // add any query param builder factories QueryParamBuilderManager.get().discoverAndAddQueryFactories(id, kieContainer.getClassLoader()); - logger.info("Container {} created successfully", id); + logger.debug("Container {} created successfully by extension {}", id, this); } catch (Exception e) { logger.error("Error when creating container {} by extension {}", id, this); } } + @Override + public boolean isUpdateContainerAllowed(String id, KieContainerInstance kieContainerInstance, Map parameters) { + // first check if there are any active process instances + List states = new ArrayList(); + states.add(ProcessInstance.STATE_ACTIVE); + states.add(ProcessInstance.STATE_PENDING); + states.add(ProcessInstance.STATE_SUSPENDED); + Collection activeProcesses = runtimeDataService.getProcessInstancesByDeploymentId(id, states, new QueryContext()); + if (!activeProcesses.isEmpty()) { + parameters.put(KieServerConstants.FAILURE_REASON_PROP, "Update of container forbidden - there are active process instances for container " + id); + return false; + } + + return true; + } + + @Override + public void updateContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { + // essentially it's a redeploy to make sure all components are up to date, + // though update of kie base is done only once on kie server level and KieContainer is reused across all extensions + disposeContainer(id, kieContainerInstance, parameters); + + createContainer(id, kieContainerInstance, parameters); + } + @Override public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { if (!deploymentService.isDeployed(id)) { @@ -381,7 +408,7 @@ public void disposeContainer(String id, KieContainerInstance kieContainerInstanc } // remove any query param builder factories QueryParamBuilderManager.get().removeQueryFactories(id); - logger.info("Container {} disposed successfully", id); + logger.debug("Container {} disposed successfully by extension {}", id, this); } @Override diff --git a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerKieServerExtension.java b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerKieServerExtension.java index e7fbaf1d0a..8859d13656 100644 --- a/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerKieServerExtension.java +++ b/kie-server-parent/kie-server-services/kie-server-services-optaplanner/src/main/java/org/kie/server/services/optaplanner/OptaplannerKieServerExtension.java @@ -96,6 +96,16 @@ public void destroy(KieServerImpl kieServer, KieServerRegistry registry) { public void createContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { } + @Override + public void updateContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { + // same as createContainer - no op + } + + @Override + public boolean isUpdateContainerAllowed(String id, KieContainerInstance kieContainerInstance, Map parameters) { + return true; + } + @Override public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map parameters) { solverServiceBase.disposeSolversForContainer( id, kieContainerInstance ); diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/src/main/java/org/kie/server/integrationtests/shared/KieServerAssert.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/src/main/java/org/kie/server/integrationtests/shared/KieServerAssert.java index a94dddcf78..b872b982a3 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/src/main/java/org/kie/server/integrationtests/shared/KieServerAssert.java +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-common/src/main/java/org/kie/server/integrationtests/shared/KieServerAssert.java @@ -29,6 +29,12 @@ public static void assertSuccess(ServiceResponse response) { type); } + public static void assertFailure(ServiceResponse response) { + ServiceResponse.ResponseType type = response.getType(); + assertEquals("Expected FAILURE, but got " + type + "! Response: " + response, ServiceResponse.ResponseType.FAILURE, + type); + } + public static void assertResultContainsString(String result, String expectedString) { assertTrue("Expecting string '" + expectedString + "' in result, but got: " + result, result.contains(expectedString)); } diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar1/src/main/resources/kjar1/rules.drl b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar1/src/main/resources/kjar1/rules.drl index 940b8afec5..b001b5ffdb 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar1/src/main/resources/kjar1/rules.drl +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar1/src/main/resources/kjar1/rules.drl @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - + package org.kie.server.testing; import org.kie.server.testing.Person; rule "Update person's id" diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/src/main/resources/META-INF/kmodule.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/src/main/resources/META-INF/kmodule.xml index dceb13a1bd..44e3c9df91 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/src/main/resources/META-INF/kmodule.xml +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/src/main/resources/META-INF/kmodule.xml @@ -1,6 +1,6 @@ - - + + - + \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/src/main/resources/kjar1/rules.drl b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/src/main/resources/kjar1/rules.drl index 940b8afec5..0cea10e98f 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/src/main/resources/kjar1/rules.drl +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/src/main/resources/kjar1/rules.drl @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +package org.kie.server.testing; import org.kie.server.testing.Person; rule "Update person's id" diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/pom.xml new file mode 100644 index 0000000000..64520fe3fa --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/pom.xml @@ -0,0 +1,22 @@ + + 4.0.0 + + org.kie.server.testing + common-parent + 1.0.0.Final + + + container-isolation-kjar1 + 1.0.2.Final + kjar + + + + + org.kie + kie-maven-plugin + + + + diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/java/org/kie/server/testing/Person.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/java/org/kie/server/testing/Person.java new file mode 100644 index 0000000000..bdb8cd7167 --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/java/org/kie/server/testing/Person.java @@ -0,0 +1,32 @@ +/* + * Copyright 2015 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.server.testing; + +public class Person { + private String id; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public void updateId() { + id = "Person from kjar102"; + } +} \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/resources/META-INF/kmodule.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/resources/META-INF/kmodule.xml new file mode 100644 index 0000000000..44e3c9df91 --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/resources/META-INF/kmodule.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/resources/kjar1/rules.drl b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/resources/kjar1/rules.drl new file mode 100644 index 0000000000..3666496851 --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar102/src/main/resources/kjar1/rules.drl @@ -0,0 +1,22 @@ +/* + * Copyright 2015 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. +*/ +import org.kie.server.testing.Person; + +rule "Update person's id" +when + $person : Person(id == null) +then + $person.updateId(); +end diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/pom.xml new file mode 100644 index 0000000000..270587f42b --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/pom.xml @@ -0,0 +1,22 @@ + + 4.0.0 + + org.kie.server.testing + common-parent + 1.0.0.Final + + + container-isolation-kjar1 + 1.0.3.Final + kjar + + + + + org.kie + kie-maven-plugin + + + + diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/java/org/kie/server/testing/Person.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/java/org/kie/server/testing/Person.java new file mode 100644 index 0000000000..4d6c55983d --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/java/org/kie/server/testing/Person.java @@ -0,0 +1,32 @@ +/* + * Copyright 2015 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.server.testing; + +public class Person { + private String id; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public void updateId() { + id = "Person from kjar103"; + } +} \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/resources/META-INF/kmodule.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/resources/META-INF/kmodule.xml new file mode 100644 index 0000000000..6489d56edc --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/resources/META-INF/kmodule.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/resources/kjar1/rules.drl b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/resources/kjar1/rules.drl new file mode 100644 index 0000000000..0cea10e98f --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar103/src/main/resources/kjar1/rules.drl @@ -0,0 +1,23 @@ +/* + * Copyright 2015 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.server.testing; +import org.kie.server.testing.Person; + +rule "Update person's id" +when + $person : Person(id == null) +then + $person.updateId(); +end diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateDifferentKBaseIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateDifferentKBaseIntegrationTest.java new file mode 100644 index 0000000000..9ec6f3e506 --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateDifferentKBaseIntegrationTest.java @@ -0,0 +1,102 @@ +/* + * Copyright 2015 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.server.integrationtests.drools; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.kie.api.KieServices; +import org.kie.api.command.BatchExecutionCommand; +import org.kie.api.command.Command; +import org.kie.api.runtime.ExecutionResults; +import org.kie.api.runtime.KieContainer; +import org.kie.server.api.model.ReleaseId; +import org.kie.server.api.model.ServiceResponse; +import org.kie.server.integrationtests.shared.KieServerAssert; +import org.kie.server.integrationtests.shared.KieServerDeployer; + +import static org.junit.Assert.*; + +public class ContainerUpdateDifferentKBaseIntegrationTest extends DroolsKieServerBaseIntegrationTest { + private static final ReleaseId kjar1 = new ReleaseId("org.kie.server.testing", "container-isolation-kjar1", + "1.0.0.Final"); + private static final ReleaseId kjar103 = new ReleaseId("org.kie.server.testing", "container-isolation-kjar1", + "1.0.3.Final"); + + private static final String CONTAINER_ID = "container-update"; + private static final String KIE_SESSION_1 = "kjar1.session"; + private static final String KIE_SESSION_103 = "kjar103.session"; + private static final String PERSON_OUT_IDENTIFIER = "person"; + private static final String PERSON_CLASS_NAME = "org.kie.server.testing.Person"; + + @BeforeClass + public static void deployArtifacts() { + KieServerDeployer.buildAndDeployCommonMavenParent(); + KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/container-isolation-kjar1").getFile()); + KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/container-isolation-kjar103").getFile()); + } + + @Before + public void cleanContainers() { + disposeAllContainers(); + createContainer(CONTAINER_ID, kjar1); + } + + @Override + protected void addExtraCustomClasses(Map> extraClasses) throws Exception { + KieContainer kieContainer = KieServices.Factory.get().newKieContainer(kjar1); + extraClasses.put(PERSON_CLASS_NAME, Class.forName(PERSON_CLASS_NAME, true, kieContainer.getClassLoader())); + } + + @Test + public void testKieSessionWithUpdatedContainer() throws Exception { + Object person = createInstance(PERSON_CLASS_NAME); + List> commands = new ArrayList>(); + BatchExecutionCommand batchExecution1 = commandsFactory.newBatchExecution(commands, KIE_SESSION_1); + + commands.add(commandsFactory.newInsert(person, PERSON_OUT_IDENTIFIER)); + commands.add(commandsFactory.newFireAllRules()); + + ServiceResponse response1 = ruleClient.executeCommandsWithResults(CONTAINER_ID, batchExecution1); + KieServerAssert.assertSuccess(response1); + ExecutionResults result1 = response1.getResult(); + + Object outcome = result1.getValue(PERSON_OUT_IDENTIFIER); + assertEquals("Person's id should be 'Person from kjar1'!", "Person from kjar1", valueOf(outcome, "id")); + + // now update container with second release id. The rule in there should set different id + // (namely "Person from kjar101") for the inserted person + KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, kjar103)); + + person = createInstance(PERSON_CLASS_NAME); + commands = new ArrayList>(); + BatchExecutionCommand batchExecution2 = commandsFactory.newBatchExecution(commands, KIE_SESSION_103); + + commands.add(commandsFactory.newInsert(person, PERSON_OUT_IDENTIFIER)); + commands.add(commandsFactory.newFireAllRules()); + + ServiceResponse response2 = ruleClient.executeCommandsWithResults(CONTAINER_ID, batchExecution2); + KieServerAssert.assertSuccess(response2); + ExecutionResults result2 = response2.getResult(); + + Object outcome2 = result2.getValue(PERSON_OUT_IDENTIFIER); + assertEquals("Person's id should be 'Person from kjar103'!", "Person from kjar103", valueOf(outcome2, "id")); + } +} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateDifferentPackageIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateDifferentPackageIntegrationTest.java new file mode 100644 index 0000000000..67169748e4 --- /dev/null +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateDifferentPackageIntegrationTest.java @@ -0,0 +1,102 @@ +/* + * Copyright 2015 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.server.integrationtests.drools; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.kie.api.KieServices; +import org.kie.api.command.BatchExecutionCommand; +import org.kie.api.command.Command; +import org.kie.api.runtime.ExecutionResults; +import org.kie.api.runtime.KieContainer; +import org.kie.server.api.model.ReleaseId; +import org.kie.server.api.model.ServiceResponse; +import org.kie.server.integrationtests.shared.KieServerAssert; +import org.kie.server.integrationtests.shared.KieServerDeployer; + +import static org.junit.Assert.*; + +public class ContainerUpdateDifferentPackageIntegrationTest extends DroolsKieServerBaseIntegrationTest { + private static final ReleaseId kjar1 = new ReleaseId("org.kie.server.testing", "container-isolation-kjar1", + "1.0.0.Final"); + private static final ReleaseId kjar102 = new ReleaseId("org.kie.server.testing", "container-isolation-kjar1", + "1.0.2.Final"); + + private static final String CONTAINER_ID = "container-update"; + private static final String KIE_SESSION_1 = "kjar1.session"; + private static final String KIE_SESSION_102 = "kjar1.session"; + private static final String PERSON_OUT_IDENTIFIER = "person"; + private static final String PERSON_CLASS_NAME = "org.kie.server.testing.Person"; + + @BeforeClass + public static void deployArtifacts() { + KieServerDeployer.buildAndDeployCommonMavenParent(); + KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/container-isolation-kjar1").getFile()); + KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/container-isolation-kjar102").getFile()); + } + + @Before + public void cleanContainers() { + disposeAllContainers(); + createContainer(CONTAINER_ID, kjar1); + } + + @Override + protected void addExtraCustomClasses(Map> extraClasses) throws Exception { + KieContainer kieContainer = KieServices.Factory.get().newKieContainer(kjar1); + extraClasses.put(PERSON_CLASS_NAME, Class.forName(PERSON_CLASS_NAME, true, kieContainer.getClassLoader())); + } + + @Test + public void testKieSessionWithUpdatedContainer() throws Exception { + Object person = createInstance(PERSON_CLASS_NAME); + List> commands = new ArrayList>(); + BatchExecutionCommand batchExecution1 = commandsFactory.newBatchExecution(commands, KIE_SESSION_1); + + commands.add(commandsFactory.newInsert(person, PERSON_OUT_IDENTIFIER)); + commands.add(commandsFactory.newFireAllRules()); + + ServiceResponse response1 = ruleClient.executeCommandsWithResults(CONTAINER_ID, batchExecution1); + KieServerAssert.assertSuccess(response1); + ExecutionResults result1 = response1.getResult(); + + Object outcome = result1.getValue(PERSON_OUT_IDENTIFIER); + assertEquals("Person's id should be 'Person from kjar1'!", "Person from kjar1", valueOf(outcome, "id")); + + // now update container with second release id. The rule in there should set different id + // (namely "Person from kjar101") for the inserted person + KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, kjar102)); + + person = createInstance(PERSON_CLASS_NAME); + commands = new ArrayList>(); + BatchExecutionCommand batchExecution2 = commandsFactory.newBatchExecution(commands, KIE_SESSION_102); + + commands.add(commandsFactory.newInsert(person, PERSON_OUT_IDENTIFIER)); + commands.add(commandsFactory.newFireAllRules()); + + ServiceResponse response2 = ruleClient.executeCommandsWithResults(CONTAINER_ID, batchExecution2); + KieServerAssert.assertSuccess(response2); + ExecutionResults result2 = response2.getResult(); + + Object outcome2 = result2.getValue(PERSON_OUT_IDENTIFIER); + assertEquals("Person's id should be 'Person from kjar102'!", "Person from kjar102", valueOf(outcome2, "id")); + } +} diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateIntegrationTest.java index a39bf263fb..6c985f5d13 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateIntegrationTest.java +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateIntegrationTest.java @@ -31,6 +31,7 @@ import org.kie.api.runtime.KieContainer; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.ServiceResponse; +import org.kie.server.client.KieServicesConfiguration; import org.kie.server.integrationtests.shared.KieServerAssert; import org.kie.server.integrationtests.shared.KieServerDeployer; @@ -42,7 +43,7 @@ public class ContainerUpdateIntegrationTest extends DroolsKieServerBaseIntegrati private static final String CONTAINER_ID = "container-update"; private static final String KIE_SESSION_1 = "kjar1.session"; - private static final String KIE_SESSION_101 = "kjar101.session"; + private static final String KIE_SESSION_101 = "kjar1.session"; private static final String PERSON_OUT_IDENTIFIER = "person"; private static final String PERSON_CLASS_NAME = "org.kie.server.testing.Person"; @@ -85,6 +86,7 @@ public void testKieSessionWithUpdatedContainer() throws Exception { // (namely "Person from kjar101") for the inserted person KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, kjar101)); + person = createInstance(PERSON_CLASS_NAME); commands = new ArrayList>(); BatchExecutionCommand batchExecution2 = commandsFactory.newBatchExecution(commands, KIE_SESSION_101); diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/ContainerUpdateIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/ContainerUpdateIntegrationTest.java index a4786c63f5..7a8eb050a8 100644 --- a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/ContainerUpdateIntegrationTest.java +++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/ContainerUpdateIntegrationTest.java @@ -19,7 +19,9 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.junit.Before; import org.junit.BeforeClass; @@ -81,7 +83,12 @@ public void testProcessDefinitionWithUpdatedContainer() throws Exception { UserTaskDefinitionList userTaskDefinitions = processClient.getUserTaskDefinitions(CONTAINER_ID, PROCESS_ID_USERTASK); assertEquals(2, userTaskDefinitions.getItems().size()); - UserTaskDefinition firstTaskDefinition = userTaskDefinitions.getItems().get(0); + Map map = mapByName(userTaskDefinitions.getItems()); + + assertTrue(map.containsKey("First task")); + assertTrue(map.containsKey("Second task")); + + UserTaskDefinition firstTaskDefinition = map.get("First task"); assertEquals("First task", firstTaskDefinition.getName()); assertTrue("Task should be skippable.", firstTaskDefinition.isSkippable()); @@ -91,7 +98,12 @@ public void testProcessDefinitionWithUpdatedContainer() throws Exception { userTaskDefinitions = processClient.getUserTaskDefinitions(CONTAINER_ID, PROCESS_ID_USERTASK); assertEquals(2, userTaskDefinitions.getItems().size()); - firstTaskDefinition = userTaskDefinitions.getItems().get(0); + map = mapByName(userTaskDefinitions.getItems()); + + assertTrue(map.containsKey("Updated first task")); + assertTrue(map.containsKey("Second task")); + + firstTaskDefinition = map.get("Updated first task"); assertEquals("Updated first task", firstTaskDefinition.getName()); assertFalse("Task shouldn't be skippable.", firstTaskDefinition.isSkippable()); } @@ -102,13 +114,20 @@ public void testUpdateContainerWithActiveProcessInstance() throws Exception { try { ServiceResponse updateReleaseId = client.updateReleaseId(CONTAINER_ID, releaseId101); - KieServerAssert.assertSuccess(updateReleaseId); - - // TODO how it should behave in this case? Throwing error or keeping old container and returning failure? - assertEquals(ServiceResponse.ResponseType.FAILURE, updateReleaseId.getType()); - assertEquals("Cannot update container, active process instances found.", updateReleaseId.getMsg()); + KieServerAssert.assertFailure(updateReleaseId); + assertEquals("Update of container forbidden - there are active process instances for container " + CONTAINER_ID, updateReleaseId.getMsg()); } finally { processClient.abortProcessInstance(CONTAINER_ID, processInstanceId); } } + + protected Map mapByName(List taskDefinitions) { + Map mapped = new HashMap(); + + for (UserTaskDefinition definition : taskDefinitions) { + mapped.put(definition.getName(), definition); + } + + return mapped; + } }