3.2. Using a Process in Your Application
There are two things you need to do to be able to execute processes from within your application:
Firstly, you need to create a knowledge base that contains the definition of the process,
Secondly you need to start the process by creating a session to communicate with the process engine.
- Creating a knowledge base: once you have a valid process, you can add it to your knowledge base. Note that this process is almost identical to that for adding rules to the knowledge base: only the type of knowledge that is added is changed:
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource("MyProcess.rf"), ResourceType.DRF );KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource("MyProcess.rf"), ResourceType.DRF );Copy to Clipboard Copied! Toggle word wrap Toggle overflow After adding all your knowledge to the builder (you can add more than one process, and even rules), create a new knowledge base:KnowledgeBase kbase = kbuilder.newKnowledgeBase();
KnowledgeBase kbase = kbuilder.newKnowledgeBase();Copy to Clipboard Copied! Toggle word wrap Toggle overflow Warning
This will throw an exception if the knowledge base contains errors (because it will not be able to parse your processes correctly). - Starting a process: processes are only executed if you explicitly state that they should be. This is because you could potentially define a lot of processes in your knowledge base and the engine has no way to know when you would like to start each of them. To activate a particular process, call the
startProcessmethod:StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); ksession.startProcess("com.sample.MyProcess");StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); ksession.startProcess("com.sample.MyProcess");Copy to Clipboard Copied! Toggle word wrap Toggle overflow ThestartProcessmethod's parameter represents the ID. of the process to be started. This process ID. needs to be specified as a property of the process, shown in the Properties View when you click the background canvas.Important
If your process also needs to execute rules, you must also call theksession.fireAllRules()method.Note
You can specify additional parameters to pass input data to the process. To do so, use thestartProcess(String processId, Map parameters)method. This method takes an additional set of parameters as name-value pairs and copies to the newly-created process instance as top-level variables.Note
To start a process from within a rule consequence, or from inside a process action, use the predefinedkcontextparameter:kcontext.getKnowledgeRuntime().startProcess("com.sample.MyProcess");kcontext.getKnowledgeRuntime().startProcess("com.sample.MyProcess");Copy to Clipboard Copied! Toggle word wrap Toggle overflow