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 -