/** * Creates new instance of JPA audit logger with given Environment * NOTE: this will build the logger but it is not registered directly on a session: once received, * it will need to be registered as an event listener * @param env Environment instance to be used * @return new instance of JPA audit logger */ public static AbstractAuditLogger newJPAInstance(Environment env) { return new JPAWorkingMemoryDbLogger(env); }
/** * This method persists the entity given to it. * </p> * This method also makes sure that the entity manager used for persisting the entity, joins the existing JTA transaction. * @param entity An entity to be persisted. */ private void persist(Object entity, KieRuntimeEvent event) { EntityManager em = getEntityManager(event); Object tx = joinTransaction(em); em.persist(entity); leaveTransaction(em, tx); }
@Override public void beforeNodeLeft(ProcessNodeLeftEvent event) { NodeInstanceLog log = (NodeInstanceLog) builder.buildEvent(event, null); persist(log, event); }
@Override public void afterVariableChanged(ProcessVariableChangedEvent event) { List<org.kie.api.runtime.manager.audit.VariableInstanceLog> variables = indexManager.index(getBuilder(), event); for (org.kie.api.runtime.manager.audit.VariableInstanceLog log : variables) { persist(log, event); } }
/** * This method persists the entity given to it. * </p> * This method also makes sure that the entity manager used for persisting the entity, joins the existing JTA transaction. * @param entity An entity to be persisted. */ private void persist(Object entity) { EntityManager em = getEntityManager(); UserTransaction ut = joinTransaction(em); em.persist(entity); if (!sharedEM) { flush(em, ut); } }
public void logEventCreated(LogEvent logEvent) { switch (logEvent.getType()) { case LogEvent.BEFORE_RULEFLOW_CREATED: RuleFlowLogEvent processEvent = (RuleFlowLogEvent) logEvent; addProcessLog(processEvent); break; case LogEvent.AFTER_RULEFLOW_COMPLETED: processEvent = (RuleFlowLogEvent) logEvent; updateProcessLog(processEvent); break; case LogEvent.BEFORE_RULEFLOW_NODE_TRIGGERED: RuleFlowNodeLogEvent nodeEvent = (RuleFlowNodeLogEvent) logEvent; addNodeEnterLog(nodeEvent.getProcessInstanceId(), nodeEvent.getProcessId(), nodeEvent.getNodeInstanceId(), nodeEvent.getNodeId(), nodeEvent.getNodeName()); break; case LogEvent.BEFORE_RULEFLOW_NODE_EXITED: nodeEvent = (RuleFlowNodeLogEvent) logEvent; addNodeExitLog(nodeEvent.getProcessInstanceId(), nodeEvent.getProcessId(), nodeEvent.getNodeInstanceId(), nodeEvent.getNodeId(), nodeEvent.getNodeName()); break; case LogEvent.AFTER_VARIABLE_INSTANCE_CHANGED: RuleFlowVariableLogEvent variableEvent = (RuleFlowVariableLogEvent) logEvent; addVariableLog(variableEvent.getProcessInstanceId(), variableEvent.getProcessId(), variableEvent.getVariableInstanceId(), variableEvent.getVariableId(), variableEvent.getObjectToString()); break; default: // ignore all other events } }
em.joinTransaction(); } catch (TransactionRequiredException e) { ut = findUserTransaction(); try { if( ut != null && ut.getStatus() == Status.STATUS_NO_TRANSACTION ) {
@SuppressWarnings("unchecked") private void updateProcessLog(RuleFlowLogEvent processEvent) { EntityManager em = getEntityManager(); UserTransaction ut = joinTransaction(em); List<ProcessInstanceLog> result = em.createQuery( "from ProcessInstanceLog as log where log.processInstanceId = ? and log.end is null") .setParameter(1, processEvent.getProcessInstanceId()).getResultList(); if (result != null && result.size() != 0) { ProcessInstanceLog log = result.get(result.size() - 1); log.setEnd(new Date()); if (processEvent instanceof ExtendedRuleFlowLogEvent) { log.setStatus(((ExtendedRuleFlowLogEvent) processEvent).getProcessInstanceState()); log.setOutcome(((ExtendedRuleFlowLogEvent) processEvent).getOutcome()); } em.merge(log); } if (!sharedEM) { flush(em, ut); } }
ut = findUserTransaction(); try { if( ut != null && ut.getStatus() == Status.STATUS_NO_TRANSACTION ) {
/** * Creates new instance of JPA audit logger * NOTE: this will build the logger but it is not registered directly on a session: once received, * it will need to be registered as an event listener * @return new instance of JPA audit logger */ public static AbstractAuditLogger newJPAInstance() { return new JPAWorkingMemoryDbLogger(); }
@Override public void afterProcessCompleted(ProcessCompletedEvent event) { long processInstanceId = event.getProcessInstance().getId(); EntityManager em = getEntityManager(event); Object tx = joinTransaction(em); ProcessInstanceLog log = (ProcessInstanceLog) ((ProcessInstanceImpl) event.getProcessInstance()).getMetaData().get("ProcessInstanceLog"); if (log == null) { List<ProcessInstanceLog> result = em.createQuery( "from ProcessInstanceLog as log where log.processInstanceId = :piId and log.end is null") .setParameter("piId", processInstanceId).getResultList(); if (result != null && result.size() != 0) { log = result.get(result.size() - 1); } } if (log != null) { log = (ProcessInstanceLog) builder.buildEvent(event, log); em.merge(log); } leaveTransaction(em, tx); }
@Override public void beforeProcessStarted(ProcessStartedEvent event) { ProcessInstanceLog log = (ProcessInstanceLog) builder.buildEvent(event); persist(log, event); ((ProcessInstanceImpl) event.getProcessInstance()).getMetaData().put("ProcessInstanceLog", log); }
switch (type) { case JPA: logger = new JPAWorkingMemoryDbLogger(ksession); break; case JMS:
@Override public void afterSLAViolated(SLAViolatedEvent event) { EntityManager em = getEntityManager(event); Object tx = joinTransaction(em); if (event.getNodeInstance() != null) { leaveTransaction(em, tx);
@Override public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) { NodeInstanceLog log = (NodeInstanceLog) builder.buildEvent(event); persist(log, event); ((NodeInstanceImpl) event.getNodeInstance()).getMetaData().put("NodeInstanceLog", log); }
@Override public ProcessInstance startProcess(String processId) { if (session == null) { // load the process KieBase kbase = createKnowledgeBase(); // create a new session Properties properties = new Properties(); properties.put("drools.processInstanceManagerFactory", "org.jbpm.process.instance.impl.DefaultProcessInstanceManagerFactory"); properties.put("drools.processSignalManagerFactory", "org.jbpm.process.instance.event.DefaultSignalManagerFactory"); SessionConfiguration config = SessionConfiguration.newInstance(properties); session = kbase.newKieSession(config, createEnvironment(context)); new JPAWorkingMemoryDbLogger(session); session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); } return session.startProcess(processId); }
private void addNodeEnterLog(long processInstanceId, String processId, String nodeInstanceId, String nodeId, String nodeName) { NodeInstanceLog log = new NodeInstanceLog( NodeInstanceLog.TYPE_ENTER, processInstanceId, processId, nodeInstanceId, nodeId, nodeName); persist(log); }
@Override public ProcessInstance startProcess(String processName) { if( ksession == null ) { KieBase kbase = createKnowledgeBase(); Properties properties = new Properties(); properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory"); properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory"); KieSessionConfiguration conf = SessionConfiguration.newInstance(properties); Environment env = createEnvironment(context); env.set("IS_JTA_TRANSACTION", false); ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, conf, env); ksession.addEventListener(new JPAWorkingMemoryDbLogger(emf, env)); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); } return ksession.startProcess(processName); }
private void addNodeExitLog(long processInstanceId, String processId, String nodeInstanceId, String nodeId, String nodeName) { NodeInstanceLog log = new NodeInstanceLog( NodeInstanceLog.TYPE_EXIT, processInstanceId, processId, nodeInstanceId, nodeId, nodeName); persist(log); }
public static final void main(String[] args) { try { //load the process KieBase kbase = createKnowledgeBase(); // create a new session KieSession session = kbase.newKieSession(); new JPAWorkingMemoryDbLogger(session); UIWorkItemHandler uiHandler = new UIWorkItemHandler(); session.getWorkItemManager().registerWorkItemHandler("Human Task", uiHandler); uiHandler.setVisible(true); new ProcessInstanceExecutorFrame(session).setVisible(true); } catch (Throwable t) { t.printStackTrace(); } }