-
1. Re: Multi JVM
swiderski.maciej Jan 19, 2015 1:33 AM (in response to vitalia)there is no need to share ksession between jvms. It's enough to use Per Process instance strategy that will give you single process instance bound to ksession and that will be used by single customer. The only thing you need to add is the correlation between your customer and the given process instance. You can do it in two ways:
- use correlation key support in jbpm
- add some logic into your system that will map process instance id with your customer id
Why this is needed? It's because to get hold of RuntimeEngine when using per process instance strategy process instance id is always needed.
HTH
-
2. Re: Re: Multi JVM
vitalia Jan 28, 2015 4:02 AM (in response to swiderski.maciej)ok! thank you for replay.
I got another qestion.
I configure RuntimeManager and RuntimeEngine next way:
@Bean( name = "manager" ) public RuntimeManager getRuntimeManager() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.getEmpty().addAsset( ResourceFactory.newClassPathResource( "com/sample/catalog.bpmn" ), ResourceType.BPMN2 ).get(); return RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager( environment ); } @Bean @DependsOn( "manager" ) public RuntimeEngine getRuntimeEngine() { runtimeEngine = getRuntimeManager().getRuntimeEngine( ProcessInstanceIdContext.get() ); return runtimeEngine; }
and I try to test next situation - run one ksession and start two ProcessInstances in it. then close everything - ksession, RuntimeManager, RuntimeEngine . then get new instances of those and continue processInstance. but I cant get access to ProcessIntances I got in first test But if I do the same but without restart RuntimeManager, RuntimeEngine just get new ksession - I can continue ProcessInstances.
Help me please how to solve my problem !
PS of course I use persistance in my project
Best regards!
-
3. Re: Multi JVM
swiderski.maciej Jan 29, 2015 1:34 AM (in response to vitalia)make sure that you create runtime manager only once within your application and then reuse that instance throughout the life time of the system. Then on each request get RuntimeEngine out of it and work with its ksession and task service, once done dispose runtime engine via runtime manager. Don't dispose ksession manually.
That way you'll get all pieces configured and ready to use in your system.
HTH
-
4. Re: Multi JVM
vitalia Jan 29, 2015 2:35 AM (in response to swiderski.maciej)ok, I got it!
But dear Maciej I have one more question - Is it right that I can't run another RuntimeEngine on second JVM and upload ksessions stored in persistance (this ksession were run under another RuntimeManager on first JVM)
Best regards!
-
5. Re: Multi JVM
swiderski.maciej Feb 2, 2015 1:30 AM (in response to vitalia)it is completely fine when you use per process instance strategy. Not when you use singleton as they both JVM will work on same instance and thus cause optimistic lock exceptions.
HTH