Hi
1/ Here is my snapshot code which
initilize session to use bpmn:
protected
void
startProcess(T processContext) throws
ProcessException {
log.info("Executing
BPMN process : " + getProcessName().getProcessId()
+ " ...");
//
init common properties when entering in process
init(processContext);
audit(processContext);
//
process execution
//
load up the knowledge base
StatefulKnowledgeSession ksession = null;
KnowledgeRuntimeLogger fileLogger = null;
String auditFileName = getAuditFileName(getProcessName(),
processContext);
ProcessInstance processInstance = null;
try
{
ksession
= omsRulesManager.getOmsRulesService().getKnownledgeBase()
.newStatefulKnowledgeSession();
if
(log.isDebugEnabled())
{
String folder = System.getProperty("Log4j.OUTPUT_DIR");
if
(StringUtils.isEmpty(folder)) {
folder
= System.getProperty("java.io.tmpdir");
}
String fullFileName = folder + File.separator
+ auditFileName;
fileLogger = KnowledgeRuntimeLoggerFactory.newFileLogger(
ksession, fullFileName);
ksession.addEventListener(new
DebugWorkingMemoryEventListener());
ksession.addEventListener(new
DebugAgendaEventListener());
}
log.debug("Starting
workflow process : " + getProcessName().getProcessId()
+ "
...");
ksession.setGlobal("log",
log);
//
populate knowledge session global
Map<String,
Object> global = getSessionGlobal(processContext);
populateGlobalSession(ksession,
global);
Map<String,
Object> parameters = getProcessParameters(processContext);
ksession.insert((OrderContext)
processContext);
processInstance
= ksession.startProcess(getProcessName().getProcessId(), parameters);
ksession.insert(processInstance);
ksession.fireAllRules();
if(fileLogger
!= null)
{
fileLogger.close();
}
parameters
= null;
} catch
(Exception e) {
throw
new
ProcessException(e.getMessage(), e);
} finally
{
ksession.dispose();
// free memory
processInstance
= null;
ksession
= null;
}
log.info("BPMN
process : " + getProcessName().name()
+ " executed");
}
/**
* Default
* @param
processContext
* @return
*/
@SuppressWarnings("unchecked")
protected
Map<String, Object> getProcessParameters(OmsProcessContext processContext)
{
Map map = new
HashMap();
map.put("orderContext",
(OrderContext) processContext);
return
map;
}
2/ and bpmn this was very complex,
I just create small one to simulate the case
------ BEGIN BPMN -----
<?xml version="1.0"
encoding="UTF-8"?>
<definitions id="Definition"
targetNamespace="http://www.jboss.org/drools"
typeLanguage="http://www.java.com/javaTypes"
expressionLanguage="http://www.mvel.org/2.0"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL
BPMN20.xsd"
xmlns:g="http://www.jboss.org/drools/flow/gpd"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:tns="http://www.jboss.org/drools">
<itemDefinition id="_orderContextItem"
structureRef="com.bp2s.oms.process.OrderContext" />
<process processType="Private"
isExecutable="true" id="com.bp2s.oms.dealing.process.OrderReceptionProcess"
name="OrderReceptionProcess" tns:packageName="com.bp2s.oms.dealing.process"
>
<extensionElements>
<tns:import
name="com.bp2s.oms.corecontrol.ValidationResult" />
<tns:import
name="com.bp2s.oms.corecontrol.service.CoreControlTreeService"
/>
<tns:import
name="com.bp2s.oms.core.service.OrderService" />
<tns:import
name="com.bp2s.oms.corecontrol.service.CoreControlTreeService.CoreControlTree"
/>
<tns:import
name="com.bp2s.oms.core.error.OrderInErrorService" />
<tns:import
name="com.bp2s.oms.model.common.OrderStatus.Status" />
<tns:import
name="com.bp2s.oms.model.process.Disposition" />
<tns:import
name="com.bp2s.oms.model.staticdata.Fund" />
<tns:import
name="com.bp2s.oms.model.task.TaskContext" />
<tns:import
name="com.bp2s.oms.process.OmsProcessContext" />
<tns:import
name="com.bp2s.oms.process.OrderContext" />
<tns:import
name="com.bp2s.oms.process.OmsProcessContext.IncomingMode" />
<tns:import
name="com.bp2s.oms.process.OmsProcessContext.ComingFrom" />
<tns:import
name="com.bp2s.oms.status.management.OrderStatusService" />
<tns:import
name="com.bp2s.oms.task.TaskContextFactory" />
<tns:import
name="com.bp2s.oms.task.TaskContextQueue" />
<tns:import
name="com.bp2s.oms.corecontrol.CoreControlError" />
<tns:import
name="org.apache.commons.logging.Log" />
<tns:import
name="com.bp2s.oms.model.process.OrderInError" />
<tns:import
name="com.bp2s.oms.model.process.Operation" />
<tns:import
name="java.util.List" />
<tns:import
name="com.bp2s.oms.corecontrol.CoreControlError.ErrorCode" />
<tns:import
name="com.bp2s.oms.dao.StoredProcedureDAO" />
<tns:global
identifier="queue" type="TaskContextQueue" />
<tns:global
identifier="orderService" type="OrderService" />
<tns:global
identifier="coreControlTreeService" type="CoreControlTreeService"
/>
<tns:global
identifier="storedProcedureDAO" type="StoredProcedureDAO"
/>
<tns:global
identifier="taskContextFactory" type="TaskContextFactory"
/>
<tns:global
identifier="log" type="Log" />
<tns:global
identifier="orderStatusService" type="OrderStatusService"
/>
<tns:global
identifier="orderInErrorService" type="OrderInErrorService"
/>
</extensionElements>
<!-- process variables
-->
<property id="orderContext"
itemSubjectRef="_orderContextItem"/>
<!-- nodes -->
<startEvent id="_1"
name="StartProcess" />
<endEvent id="_2"
name="End" >
<terminateEventDefinition
/>
</endEvent>
<scriptTask id="_3"
name="test parameters " scriptFormat="http://www.java.com/java"
>
<script>log.info("I
am here : " + orderContext.toString());</script>
</scriptTask>
<!-- connections -->
<sequenceFlow id="_3-_2"
sourceRef="_3" targetRef="_2" />
<sequenceFlow id="_1-_3"
sourceRef="_1" targetRef="_3" />
</process>
<bpmndi:BPMNDiagram>
<bpmndi:BPMNPlane
bpmnElement="com.bp2s.oms.dealing.process.OrderReceptionProcess"
>
<bpmndi:BPMNShape
bpmnElement="_1" >
<dc:Bounds
x="324" y="82" width="48" height="48"
/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape
bpmnElement="_2" >
<dc:Bounds
x="324" y="264" width="48" height="48"
/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape
bpmnElement="_3" >
<dc:Bounds
x="240" y="168" width="217" height="48"
/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge
bpmnElement="_3-_2" >
<di:waypoint
x="348" y="192" />
<di:waypoint
x="348" y="288" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge
bpmnElement="_1-_3" >
<di:waypoint
x="348" y="106" />
<di:waypoint
x="348" y="192" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
----- END BPMN
3/ Memory dump after forcing GC
OrderContext is always here after calling
BPMN with orderContext in process parameter
Thanks in advance,
Regards,
Paul
|
Re: [jbpm-dev] process
instance BPMN and variable scope memory leak |
(Internet)
salaboy
|
|
To:
| Paul CHAU N'GUYEN
|
Cc:
| jbpm-dev |
|
03/06/2014 11:58 |
|
Can you please provide a reproducer for this:
2/ We try to change this in moving object
(prototype) to process parameters map, --> still the same issue: after
bpmn execution object is still there JVM garbage collection can not removed
it
so we can check it out?
Usually a Junit inside a maven project is
enough
On Tue, Jun 3, 2014 at 10:41 AM, <paul.chaunguyen@externe.bnpparibas.com>
wrote:
Dear all,
We are facing big issue with variable scope so application failed to out
of memory with BPMN.
Our situtation is below
1/ Initially, we put an object (prototype) as global inside BPMN -->
after bpmn execution object is still there JVM garbage collection can not
removed it
2/ We try to change this in moving object (prototype) to process parameters
map, --> still the same issue: after bpmn execution object is still
there JVM garbage collection can not removed it
3/ We try to use this object as facts but can not get the good syntax in
java dialect to process as document or user guide related BPMN is very
poor, Can you help please ?
Many thanks,
Regards,
Paul
This message and any attachments (the "message")
is
intended solely for the intended addressees and is confidential.
If you receive this message in error,or are not the intended recipient(s),
please delete it and any copies from your systems and immediately notify
the sender. Any unauthorized view, use that does not comply with its purpose,
dissemination or disclosure, either whole or partial, is prohibited. Since
the internet
cannot guarantee the integrity of this message which may not be reliable,
BNP PARIBAS
(and its subsidiaries) shall not be liable for the message if modified,
changed or falsified.
Do not print this message unless it is necessary,consider the environment.
----------------------------------------------------------------------------------------------------------------------------------
Ce message et toutes les pieces jointes (ci-apres le "message")
sont etablis a l'intention exclusive de ses destinataires et sont confidentiels.
Si vous recevez ce message par erreur ou s'il ne vous est pas destine,
merci de le detruire ainsi que toute copie de votre systeme et d'en avertir
immediatement l'expediteur. Toute lecture non autorisee, toute utilisation
de
ce message qui n'est pas conforme a sa destination, toute diffusion ou
toute
publication, totale ou partielle, est interdite. L'Internet ne permettant
pas d'assurer
l'integrite de ce message electronique susceptible d'alteration, BNP Paribas
(et ses filiales) decline(nt) toute responsabilite au titre de ce message
dans l'hypothese
ou il aurait ete modifie, deforme ou falsifie.
N'imprimez ce message que si necessaire, pensez a l'environnement.
_______________________________________________
jbpm-dev mailing list
jbpm-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jbpm-dev
--
- MyJourney @ http://salaboy.com
- Co-Founder @ http://www.jugargentina.org
- Co-Founder @ http://www.jbug.com.ar
- Salatino "Salaboy" Mauricio -