diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/package-names-white-list b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/package-names-white-list
new file mode 100644
index 0000000000..7d9718a971
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/package-names-white-list
@@ -0,0 +1 @@
+org.kie.server.testing.definition_project.**
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/pom.xml
new file mode 100644
index 0000000000..1c18c350e2
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/pom.xml
@@ -0,0 +1,24 @@
+
+
+ 4.0.0
+
+
+ org.kie.server.testing
+ common-parent
+ 1.0.0.Final
+
+
+ definition-project
+ 1.0.1.Final
+ definition-project
+
+
+
+
+ org.kie
+ kie-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/project.imports b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/project.imports
new file mode 100644
index 0000000000..6aa7e18adb
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/project.imports
@@ -0,0 +1,10 @@
+
+
+
+
+ java.lang.Number
+
+
+
+ 1.0
+
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/CreateProposal-taskform.form b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/CreateProposal-taskform.form
new file mode 100644
index 0000000000..adb966e425
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/CreateProposal-taskform.form
@@ -0,0 +1,76 @@
+
+
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/HRInterview-taskform.form b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/HRInterview-taskform.form
new file mode 100644
index 0000000000..45c5f8ce3a
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/HRInterview-taskform.form
@@ -0,0 +1,91 @@
+
+
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kie-deployment-descriptor.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kie-deployment-descriptor.xml
new file mode 100644
index 0000000000..0c93c609f8
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kie-deployment-descriptor.xml
@@ -0,0 +1,48 @@
+
+
+ org.jbpm.domain
+ org.jbpm.domain
+ JPA
+ JPA
+ SINGLETON
+
+
+
+
+
+
+ mvel
+ new org.jbpm.process.workitem.bpmn2.ServiceTaskHandler(ksession, classLoader)
+
+ Service Task
+
+
+ mvel
+ new org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler()
+
+ Log
+
+
+ mvel
+ new org.jbpm.process.instance.impl.demo.DoNothingWorkItemHandler()
+
+ Email
+
+
+ mvel
+ new org.jbpm.process.workitem.webservice.WebServiceWorkItemHandler(ksession, classLoader)
+
+ WebService
+
+
+ mvel
+ new org.jbpm.process.workitem.rest.RESTWorkItemHandler()
+
+ Rest
+
+
+
+
+
+
+
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kmodule.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kmodule.xml
new file mode 100644
index 0000000000..2ba4076c16
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kmodule.xml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/SignContract-taskform.form b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/SignContract-taskform.form
new file mode 100644
index 0000000000..ebb093f3e5
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/SignContract-taskform.form
@@ -0,0 +1,68 @@
+
+
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/TechInterview-taskform.form b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/TechInterview-taskform.form
new file mode 100644
index 0000000000..7c1db4031e
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/TechInterview-taskform.form
@@ -0,0 +1,138 @@
+
+
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/WorkDefinitions.wid b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/WorkDefinitions.wid
new file mode 100644
index 0000000000..bab13059d0
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/WorkDefinitions.wid
@@ -0,0 +1,61 @@
+import org.drools.core.process.core.datatype.impl.type.StringDataType;
+import org.drools.core.process.core.datatype.impl.type.ObjectDataType;
+
+[
+ [
+ "name" : "Email",
+ "parameters" : [
+ "From" : new StringDataType(),
+ "To" : new StringDataType(),
+ "Subject" : new StringDataType(),
+ "Body" : new StringDataType()
+ ],
+ "displayName" : "Email",
+ "icon" : "defaultemailicon.gif"
+ ],
+
+ [
+ "name" : "Log",
+ "parameters" : [
+ "Message" : new StringDataType()
+ ],
+ "displayName" : "Log",
+ "icon" : "defaultlogicon.gif"
+ ],
+
+ [
+ "name" : "WebService",
+ "parameters" : [
+ "Url" : new StringDataType(),
+ "Namespace" : new StringDataType(),
+ "Interface" : new StringDataType(),
+ "Operation" : new StringDataType(),
+ "Parameter" : new StringDataType(),
+ "Endpoint" : new StringDataType(),
+ "Mode" : new StringDataType()
+ ],
+ "results" : [
+ "Result" : new ObjectDataType(),
+ ],
+ "displayName" : "WS",
+ "icon" : "defaultservicenodeicon.png"
+ ],
+
+ [
+ "name" : "Rest",
+ "parameters" : [
+ "Url" : new StringDataType(),
+ "Method" : new StringDataType(),
+ "ConnectTimeout" : new StringDataType(),
+ "ReadTimeout" : new StringDataType(),
+ "Username" : new StringDataType(),
+ "Password" : new StringDataType()
+ ],
+ "results" : [
+ "Result" : new ObjectDataType(),
+ ],
+ "displayName" : "REST",
+ "icon" : "defaultservicenodeicon.png"
+ ]
+
+]
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/hiring-svg.svg b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/hiring-svg.svg
new file mode 100644
index 0000000000..af7c2a511c
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/hiring-svg.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/hiring-taskform.form b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/hiring-taskform.form
new file mode 100644
index 0000000000..13c69faea5
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/hiring-taskform.form
@@ -0,0 +1,32 @@
+
+
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/hiring.bpmn2 b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/hiring.bpmn2
new file mode 100644
index 0000000000..a7527101db
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/hiring.bpmn2
@@ -0,0 +1,565 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _416C6A67-B7EC-400B-9F2B-0F53B3FEDEB4
+
+
+ _416C6A67-B7EC-400B-9F2B-0F53B3FEDEB4
+ _202CE0F7-63B3-4A5D-B5A9-9C9C5EB87468
+
+
+
+
+
+
+
+
+
+
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_GroupIdInput
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_CommentInput
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_in_nameInput
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_TaskNameInput
+
+
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_out_nameOutput
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_out_ageOutput
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_out_mailOutput
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_out_scoreOutput
+
+
+
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_TaskNameInput
+
+ HRInterview
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_TaskNameInput
+
+
+
+ name
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_in_nameInput
+
+
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_GroupIdInput
+
+ HR
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_GroupIdInput
+
+
+
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_CommentInput
+
+
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_CommentInput
+
+
+
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_out_ageOutput
+ age
+
+
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_out_mailOutput
+ mail
+
+
+ _6998ACD3-21DC-421D-AC04-BA7D375B0B21_out_scoreOutput
+ hr_score
+
+
+
+
+ _202CE0F7-63B3-4A5D-B5A9-9C9C5EB87468
+ _4976D9C3-B97A-48F7-B794-32307FF855D6
+
+
+
+
+
+
+
+
+
+
+
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_in_nameInput
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_in_ageInput
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_in_mailInput
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_GroupIdInput
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_CommentInput
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_TaskNameInput
+
+
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_out_skillsOutput
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_out_scoreOutput
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_out_twitterOutput
+
+
+
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_TaskNameInput
+
+ TechInterview
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_TaskNameInput
+
+
+
+ name
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_in_nameInput
+
+
+ age
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_in_ageInput
+
+
+ mail
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_in_mailInput
+
+
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_GroupIdInput
+
+ IT
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_GroupIdInput
+
+
+
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_CommentInput
+
+
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_CommentInput
+
+
+
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_out_skillsOutput
+ skills
+
+
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_out_scoreOutput
+ tech_score
+
+
+ _FADFBC55-C369-4F58-B04B-3AD20337F215_out_twitterOutput
+ twitter
+
+
+
+
+ _4976D9C3-B97A-48F7-B794-32307FF855D6
+ _7C032B11-46FC-4599-94B7-8FCA9AA05437
+
+
+
+
+
+
+
+
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_in_tech_scoreInput
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_in_hr_scoreInput
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_GroupIdInput
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_CommentInput
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_TaskNameInput
+
+
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_out_offeringOutput
+
+
+
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_TaskNameInput
+
+ CreateProposal
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_TaskNameInput
+
+
+
+ tech_score
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_in_tech_scoreInput
+
+
+ hr_score
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_in_hr_scoreInput
+
+
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_GroupIdInput
+
+ Accounting
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_GroupIdInput
+
+
+
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_CommentInput
+
+
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_CommentInput
+
+
+
+ _12435ADA-3C57-414C-8DDD-5D236E462BD8_out_offeringOutput
+ offering
+
+
+
+
+ _7C032B11-46FC-4599-94B7-8FCA9AA05437
+ _3357BAA4-262A-41BA-9C29-7845432CCB8A
+
+
+
+
+ _3357BAA4-262A-41BA-9C29-7845432CCB8A
+ _B7EF3CD8-7D33-4464-81B4-69522F1799D5
+
+
+
+
+
+
+
+
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_in_offeringInput
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_in_nameInput
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_GroupIdInput
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_CommentInput
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_TaskNameInput
+
+
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_out_signedOutput
+
+
+
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_TaskNameInput
+
+ SignContract
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_TaskNameInput
+
+
+
+ offering
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_in_offeringInput
+
+
+ name
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_in_nameInput
+
+
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_GroupIdInput
+
+ HR
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_GroupIdInput
+
+
+
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_CommentInput
+
+
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_CommentInput
+
+
+
+ _D9B752FE-4900-4172-B8C9-31CC838E18A5_out_signedOutput
+ signed
+
+
+
+
+ _B7EF3CD8-7D33-4464-81B4-69522F1799D5
+ _AABB6FDC-F7B4-40FB-A691-969E83285E16
+
+
+
+
+
+
+ _BB384E33-D98D-4809-9063-53675BC5D27E_TaskNameInput
+
+ Twitter
+ _BB384E33-D98D-4809-9063-53675BC5D27E_TaskNameInput
+
+
+
+
+
+
+ _AABB6FDC-F7B4-40FB-A691-969E83285E16
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _k9I54LzKEeKT6qCaqCIbfQ
+ _k9I54LzKEeKT6qCaqCIbfQ
+
+
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/java/org/kie/server/integrationtests/jbpm/ContainerUpdateUiIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/java/org/kie/server/integrationtests/jbpm/ContainerUpdateUiIntegrationTest.java
new file mode 100644
index 0000000000..fbf667b71a
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-all/src/test/java/org/kie/server/integrationtests/jbpm/ContainerUpdateUiIntegrationTest.java
@@ -0,0 +1,139 @@
+/*
+ * 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.jbpm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotEquals;
+
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.kie.server.api.model.ReleaseId;
+import org.kie.server.api.model.instance.TaskSummary;
+import org.kie.server.integrationtests.shared.KieServerAssert;
+import org.kie.server.integrationtests.shared.KieServerDeployer;
+
+public class ContainerUpdateUiIntegrationTest extends JbpmKieServerBaseIntegrationTest {
+
+ private static final ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "definition-project",
+ "1.0.0.Final");
+ private static final ReleaseId releaseId101 = new ReleaseId("org.kie.server.testing", "definition-project",
+ "1.0.1.Final");
+
+ private static final String CONTAINER_ID = "definition-project";
+ private static final String HIRING_PROCESS_ID = "hiring";
+
+ @BeforeClass
+ public static void buildAndDeployArtifacts() {
+ KieServerDeployer.buildAndDeployCommonMavenParent();
+ KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/definition-project").getFile());
+ KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/definition-project-101").getFile());
+ }
+
+ @Before
+ public void cleanContainers() {
+ disposeAllContainers();
+ createContainer(CONTAINER_ID, releaseId);
+ }
+
+ @Test
+ public void testGetProcessFormAfterContainerUpdate() throws Exception {
+ String result = uiServicesClient.getProcessForm(CONTAINER_ID, HIRING_PROCESS_ID, "en");
+ assertNotNull(result);
+ assertTrue("Form doesn't contain original label!", result.contains("Candidate Name"));
+
+ // Update container to new version.
+ KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, releaseId101));
+
+ result = uiServicesClient.getProcessForm(CONTAINER_ID, HIRING_PROCESS_ID, "en");
+ assertNotNull(result);
+ assertTrue("Form doesn't contain updated label!", result.contains("Candidate First Name And Surename"));
+ }
+
+ @Test
+ public void testGetTaskFormAfterContainerUpdate() throws Exception {
+ long processInstanceId = processClient.startProcess(CONTAINER_ID, HIRING_PROCESS_ID);
+ assertTrue(processInstanceId > 0);
+ try {
+ String result = getFirstTaskForm(processInstanceId);
+ assertNotNull(result);
+ assertTrue("Form doesn't contain original label!", result.contains("Candidate Name"));
+
+ // Update container to new version and restart process.
+ processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
+ KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, releaseId101));
+ processInstanceId = processClient.startProcess(CONTAINER_ID, HIRING_PROCESS_ID);
+
+ result = getFirstTaskForm(processInstanceId);
+ assertNotNull(result);
+ assertTrue("Form doesn't contain updated label!", result.contains("Candidate Whole Name"));
+ } finally {
+ processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
+ }
+ }
+
+ @Test
+ public void testGetProcessImageViaUIClientTest() throws Exception {
+ String originalResult = uiServicesClient.getProcessImage(CONTAINER_ID, HIRING_PROCESS_ID);
+ assertNotNull(originalResult);
+ assertFalse(originalResult.isEmpty());
+
+ // Update container to new version.
+ KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, releaseId101));
+
+ String updatedResult = uiServicesClient.getProcessImage(CONTAINER_ID, HIRING_PROCESS_ID);
+ assertNotNull(updatedResult);
+ assertFalse(updatedResult.isEmpty());
+ assertNotEquals("Process image wasn't updated!", originalResult, updatedResult);
+ }
+
+ @Test
+ public void testGetProcessInstanceImageViaUIClientTest() throws Exception {
+ long processInstanceId = processClient.startProcess(CONTAINER_ID, HIRING_PROCESS_ID);
+ assertTrue(processInstanceId > 0);
+ try {
+ String originalResult = uiServicesClient.getProcessInstanceImage(CONTAINER_ID, processInstanceId);
+ assertNotNull(originalResult);
+ assertFalse(originalResult.isEmpty());
+
+ // Update container to new version and restart process.
+ processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
+ KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, releaseId101));
+ processInstanceId = processClient.startProcess(CONTAINER_ID, HIRING_PROCESS_ID);
+
+ String updatedResult = uiServicesClient.getProcessInstanceImage(CONTAINER_ID, processInstanceId);
+ assertNotNull(updatedResult);
+ assertFalse(updatedResult.isEmpty());
+ assertNotEquals("Process instance image wasn't updated!", originalResult, updatedResult);
+ } finally {
+ processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
+ }
+ }
+
+ private String getFirstTaskForm(long processInstanceId) {
+ List tasks = taskClient.findTasksByStatusByProcessInstanceId(processInstanceId, null, 0, 10);
+ assertNotNull(tasks);
+ assertEquals(1, tasks.size());
+
+ Long taskId = tasks.get(0).getId();
+ return uiServicesClient.getTaskForm(CONTAINER_ID, taskId, "en");
+ }
+}
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/pom.xml
new file mode 100644
index 0000000000..75a5d736f3
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/pom.xml
@@ -0,0 +1,22 @@
+
+ 4.0.0
+
+ org.kie.server.testing
+ common-parent
+ 1.0.0.Final
+
+
+ container-isolation-kjar1
+ 1.0.1.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-kjar101/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-kjar101/src/main/java/org/kie/server/testing/Person.java
new file mode 100644
index 0000000000..1dfc9a36a8
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/filtered-resources/kjars-sources/container-isolation-kjar101/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 kjar101";
+ }
+}
\ 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/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
new file mode 100644
index 0000000000..dceb13a1bd
--- /dev/null
+++ 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
@@ -0,0 +1,6 @@
+
+
+
+
+
+
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
new file mode 100644
index 0000000000..940b8afec5
--- /dev/null
+++ 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
@@ -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.
+*/
+
+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/ContainerUpdateIntegrationTest.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateIntegrationTest.java
new file mode 100644
index 0000000000..a39bf263fb
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-drools/src/test/java/org/kie/server/integrationtests/drools/ContainerUpdateIntegrationTest.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 static org.junit.Assert.*;
+
+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;
+
+public class ContainerUpdateIntegrationTest extends DroolsKieServerBaseIntegrationTest {
+ private static final ReleaseId kjar1 = new ReleaseId("org.kie.server.testing", "container-isolation-kjar1",
+ "1.0.0.Final");
+ private static final ReleaseId kjar101 = new ReleaseId("org.kie.server.testing", "container-isolation-kjar1",
+ "1.0.1.Final");
+
+ 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 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-kjar101").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, kjar101));
+
+ person = createInstance(PERSON_CLASS_NAME);
+ commands = new ArrayList>();
+ BatchExecutionCommand batchExecution2 = commandsFactory.newBatchExecution(commands, KIE_SESSION_101);
+
+ 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 kjar101'!", "Person from kjar101", valueOf(outcome2, "id"));
+ }
+}
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/package-names-white-list b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/package-names-white-list
new file mode 100644
index 0000000000..7d9718a971
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/package-names-white-list
@@ -0,0 +1 @@
+org.kie.server.testing.definition_project.**
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/pom.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/pom.xml
new file mode 100644
index 0000000000..1c18c350e2
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/pom.xml
@@ -0,0 +1,24 @@
+
+
+ 4.0.0
+
+
+ org.kie.server.testing
+ common-parent
+ 1.0.0.Final
+
+
+ definition-project
+ 1.0.1.Final
+ definition-project
+
+
+
+
+ org.kie
+ kie-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/project.imports b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/project.imports
new file mode 100644
index 0000000000..6aa7e18adb
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/project.imports
@@ -0,0 +1,10 @@
+
+
+
+
+ java.lang.Number
+
+
+
+ 1.0
+
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/java/org.jbpm.data/Person.java b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/java/org.jbpm.data/Person.java
new file mode 100644
index 0000000000..54963d01ba
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/java/org.jbpm.data/Person.java
@@ -0,0 +1,48 @@
+/*
+ * 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.jbpm.data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "person-object")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Person implements java.io.Serializable {
+
+ private String name;
+
+ public Person() {
+ }
+
+ public Person(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override public String toString() {
+ return "Person{" +
+ "name='" + name + '\'' +
+ '}';
+ }
+}
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kie-deployment-descriptor.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kie-deployment-descriptor.xml
new file mode 100644
index 0000000000..0c93c609f8
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kie-deployment-descriptor.xml
@@ -0,0 +1,48 @@
+
+
+ org.jbpm.domain
+ org.jbpm.domain
+ JPA
+ JPA
+ SINGLETON
+
+
+
+
+
+
+ mvel
+ new org.jbpm.process.workitem.bpmn2.ServiceTaskHandler(ksession, classLoader)
+
+ Service Task
+
+
+ mvel
+ new org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler()
+
+ Log
+
+
+ mvel
+ new org.jbpm.process.instance.impl.demo.DoNothingWorkItemHandler()
+
+ Email
+
+
+ mvel
+ new org.jbpm.process.workitem.webservice.WebServiceWorkItemHandler(ksession, classLoader)
+
+ WebService
+
+
+ mvel
+ new org.jbpm.process.workitem.rest.RESTWorkItemHandler()
+
+ Rest
+
+
+
+
+
+
+
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kmodule.xml b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kmodule.xml
new file mode 100644
index 0000000000..2ba4076c16
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/META-INF/kmodule.xml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/WorkDefinitions.wid b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/WorkDefinitions.wid
new file mode 100644
index 0000000000..bab13059d0
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/WorkDefinitions.wid
@@ -0,0 +1,61 @@
+import org.drools.core.process.core.datatype.impl.type.StringDataType;
+import org.drools.core.process.core.datatype.impl.type.ObjectDataType;
+
+[
+ [
+ "name" : "Email",
+ "parameters" : [
+ "From" : new StringDataType(),
+ "To" : new StringDataType(),
+ "Subject" : new StringDataType(),
+ "Body" : new StringDataType()
+ ],
+ "displayName" : "Email",
+ "icon" : "defaultemailicon.gif"
+ ],
+
+ [
+ "name" : "Log",
+ "parameters" : [
+ "Message" : new StringDataType()
+ ],
+ "displayName" : "Log",
+ "icon" : "defaultlogicon.gif"
+ ],
+
+ [
+ "name" : "WebService",
+ "parameters" : [
+ "Url" : new StringDataType(),
+ "Namespace" : new StringDataType(),
+ "Interface" : new StringDataType(),
+ "Operation" : new StringDataType(),
+ "Parameter" : new StringDataType(),
+ "Endpoint" : new StringDataType(),
+ "Mode" : new StringDataType()
+ ],
+ "results" : [
+ "Result" : new ObjectDataType(),
+ ],
+ "displayName" : "WS",
+ "icon" : "defaultservicenodeicon.png"
+ ],
+
+ [
+ "name" : "Rest",
+ "parameters" : [
+ "Url" : new StringDataType(),
+ "Method" : new StringDataType(),
+ "ConnectTimeout" : new StringDataType(),
+ "ReadTimeout" : new StringDataType(),
+ "Username" : new StringDataType(),
+ "Password" : new StringDataType()
+ ],
+ "results" : [
+ "Result" : new ObjectDataType(),
+ ],
+ "displayName" : "REST",
+ "icon" : "defaultservicenodeicon.png"
+ ]
+
+]
diff --git a/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/usertask.bpmn2 b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/usertask.bpmn2
new file mode 100644
index 0000000000..779be38d30
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/filtered-resources/kjars-sources/definition-project-101/src/main/resources/usertask.bpmn2
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _7DD40B5F-AE51-4DEA-99E3-79E8B02542F4
+
+
+ _7DD40B5F-AE51-4DEA-99E3-79E8B02542F4
+ _3A18378C-AF7E-4A46-9E3F-439990743823
+
+
+
+
+
+
+
+ _44BE4412-91B0-4707-89DD-D45CECA36413__stringInputX
+ _44BE4412-91B0-4707-89DD-D45CECA36413__personInputX
+ _44BE4412-91B0-4707-89DD-D45CECA36413_SkippableInputX
+
+
+ _44BE4412-91B0-4707-89DD-D45CECA36413_string_OutputX
+ _44BE4412-91B0-4707-89DD-D45CECA36413_person_OutputX
+
+
+
+ stringData
+ _44BE4412-91B0-4707-89DD-D45CECA36413__stringInputX
+
+
+ personData
+ _44BE4412-91B0-4707-89DD-D45CECA36413__personInputX
+
+
+ _44BE4412-91B0-4707-89DD-D45CECA36413_SkippableInputX
+
+ false
+ _44BE4412-91B0-4707-89DD-D45CECA36413_SkippableInputX
+
+
+
+ _44BE4412-91B0-4707-89DD-D45CECA36413_string_OutputX
+ stringData
+
+
+ _44BE4412-91B0-4707-89DD-D45CECA36413_person_OutputX
+ personData
+
+
+
+ yoda
+
+
+
+
+
+ _3A18378C-AF7E-4A46-9E3F-439990743823
+ _75C9F602-54EC-4C49-8B5F-90A1527ED698
+
+
+
+
+
+ _87C563E0-EB8C-4184-BDB0-219E05780A0E_string2_InputX
+ _87C563E0-EB8C-4184-BDB0-219E05780A0E_person2_InputX
+ _87C563E0-EB8C-4184-BDB0-219E05780A0E_SkippableInputX
+
+
+
+
+ stringData
+ _87C563E0-EB8C-4184-BDB0-219E05780A0E_string2_InputX
+
+
+ personData
+ _87C563E0-EB8C-4184-BDB0-219E05780A0E_person2_InputX
+
+
+ _87C563E0-EB8C-4184-BDB0-219E05780A0E_SkippableInputX
+
+ true
+ _87C563E0-EB8C-4184-BDB0-219E05780A0E_SkippableInputX
+
+
+
+
+ yoda
+
+
+
+
+
+ _75C9F602-54EC-4C49-8B5F-90A1527ED698
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _u5JCEPpbEeSqMsMWx6c2wQ
+ _u5JCEPpbEeSqMsMWx6c2wQ
+
+
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
new file mode 100644
index 0000000000..a4786c63f5
--- /dev/null
+++ b/kie-server-parent/kie-server-tests/kie-server-integ-tests-jbpm/src/test/java/org/kie/server/integrationtests/jbpm/ContainerUpdateIntegrationTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.jbpm;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.kie.server.api.model.ReleaseId;
+import org.kie.server.api.model.ServiceResponse;
+import org.kie.server.api.model.definition.UserTaskDefinition;
+import org.kie.server.api.model.definition.UserTaskDefinitionList;
+import org.kie.server.api.model.instance.TaskSummary;
+import org.kie.server.integrationtests.shared.KieServerAssert;
+import org.kie.server.integrationtests.shared.KieServerDeployer;
+
+public class ContainerUpdateIntegrationTest extends JbpmKieServerBaseIntegrationTest {
+
+ private static final ReleaseId releaseId = new ReleaseId("org.kie.server.testing", "definition-project",
+ "1.0.0.Final");
+ private static final ReleaseId releaseId101 = new ReleaseId("org.kie.server.testing", "definition-project",
+ "1.0.1.Final");
+
+ @BeforeClass
+ public static void buildAndDeployArtifacts() {
+ KieServerDeployer.buildAndDeployCommonMavenParent();
+ KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/definition-project").getFile());
+ KieServerDeployer.buildAndDeployMavenProject(ClassLoader.class.getResource("/kjars-sources/definition-project-101").getFile());
+ }
+
+ @Before
+ public void cleanContainers() {
+ disposeAllContainers();
+ createContainer(CONTAINER_ID, releaseId);
+ }
+
+ @Test
+ public void testUserTaskWithUpdatedContainer() throws Exception {
+ Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK);
+
+ try {
+ List tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10);
+ assertEquals(1, tasks.size());
+ assertEquals("First task", tasks.get(0).getName());
+ assertTrue("Task should be skippable.", tasks.get(0).getSkipable().booleanValue());
+
+ // Update container to new version and restart process.
+ processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
+ KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, releaseId101));
+ processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK);
+
+ tasks = taskClient.findTasksAssignedAsPotentialOwner(USER_YODA, 0, 10);
+ assertEquals(1, tasks.size());
+ assertEquals("Updated first task", tasks.get(0).getName());
+ assertFalse("Task shouldn't be skippable.", tasks.get(0).getSkipable().booleanValue());
+ } finally {
+ processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
+ }
+ }
+
+ @Test
+ 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);
+ assertEquals("First task", firstTaskDefinition.getName());
+ assertTrue("Task should be skippable.", firstTaskDefinition.isSkippable());
+
+ // Update container to new version.
+ KieServerAssert.assertSuccess(client.updateReleaseId(CONTAINER_ID, releaseId101));
+
+ userTaskDefinitions = processClient.getUserTaskDefinitions(CONTAINER_ID, PROCESS_ID_USERTASK);
+ assertEquals(2, userTaskDefinitions.getItems().size());
+
+ firstTaskDefinition = userTaskDefinitions.getItems().get(0);
+ assertEquals("Updated first task", firstTaskDefinition.getName());
+ assertFalse("Task shouldn't be skippable.", firstTaskDefinition.isSkippable());
+ }
+
+ @Test
+ public void testUpdateContainerWithActiveProcessInstance() throws Exception {
+ Long processInstanceId = processClient.startProcess(CONTAINER_ID, PROCESS_ID_USERTASK);
+
+ 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());
+ } finally {
+ processClient.abortProcessInstance(CONTAINER_ID, processInstanceId);
+ }
+ }
+}