Skip to content

Commit

Permalink
BZ-1070097 - History commands sent via JMS require deploymentId to be…
Browse files Browse the repository at this point in the history
… set

(cherry picked from commit f5f8e84)
  • Loading branch information
Marco Rietveld committed Mar 20, 2014
1 parent 7cd6d62 commit 9983948
Show file tree
Hide file tree
Showing 9 changed files with 134 additions and 61 deletions.
Expand Up @@ -26,12 +26,19 @@

public abstract class AuditCommand<T> implements GenericCommand<T> {

protected AuditLogService auditLogService;
protected AuditLogService auditLogService = null;

public AuditCommand() {
}

public void setAuditLogService(AuditLogService auditLogService) {
this.auditLogService = auditLogService;
}

protected void setLogEnvironment(Context cntxt) {
if( auditLogService != null ) {
return;
}
if( ! (cntxt instanceof KnowledgeCommandContext) ) {
throw new UnsupportedOperationException("This command must be executed by a " + KieSession.class.getSimpleName() + " instance!");
}
Expand Down
Expand Up @@ -38,6 +38,7 @@
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.kie.api.KieBase;
import org.kie.api.cdi.KSession;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.Environment;
Expand Down Expand Up @@ -67,7 +68,28 @@
public abstract class AbstractAuditLogServiceTest extends AbstractBaseTest {

private static final Logger logger = LoggerFactory.getLogger(AbstractAuditLogServiceTest.class);

public static KnowledgeBase createKnowledgeBase() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(new ClassPathResource("ruleflow.rf"), ResourceType.DRF);
kbuilder.add(new ClassPathResource("ruleflow2.rf"), ResourceType.DRF);
kbuilder.add(new ClassPathResource("ruleflow3.rf"), ResourceType.DRF);
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}

public static StatefulKnowledgeSession createKieSession(KieBase kbase, Environment env) {
// create a new session
Properties properties = new Properties();
properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory");
properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory");
KieSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties);
StatefulKnowledgeSession session = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, config, env);

return session;
}

public static void runTestLogger1(KieSession session, AuditLogService auditLogService) throws Exception {
session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());

Expand Down
Expand Up @@ -72,16 +72,7 @@ public class AuditLogServiceTest extends AbstractAuditLogServiceTest {
private KieSession session;
private AuditLogService auditLogService;

private KnowledgeBase createKnowledgeBase() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(new ClassPathResource("ruleflow.rf"), ResourceType.DRF);
kbuilder.add(new ClassPathResource("ruleflow2.rf"), ResourceType.DRF);
kbuilder.add(new ClassPathResource("ruleflow3.rf"), ResourceType.DRF);
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}


@Before
public void setUp() throws Exception {
context = setupWithPoolingDataSource(JBPM_PERSISTENCE_UNIT_NAME);
Expand All @@ -90,14 +81,13 @@ public void setUp() throws Exception {
KnowledgeBase kbase = createKnowledgeBase();
// create a new session
Environment env = createEnvironment(context);
Properties properties = new Properties();
properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory");
properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory");
KieSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties);
session = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, config, env);
session = createKieSession(kbase, env);

// working memory logger
AbstractAuditLogger dblogger = AuditLoggerFactory.newInstance(Type.JPA, session, null);
assertNotNull(dblogger);
assertTrue(dblogger instanceof JPAWorkingMemoryDbLogger);

auditLogService = new JPAAuditLogService(env);
}

Expand Down
Expand Up @@ -71,16 +71,6 @@ public class CommandBasedAuditLogServiceTest extends AbstractAuditLogServiceTest
private KieSession session;
private AuditLogService auditLogService;

private KnowledgeBase createKnowledgeBase() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(new ClassPathResource("ruleflow.rf"), ResourceType.DRF);
kbuilder.add(new ClassPathResource("ruleflow2.rf"), ResourceType.DRF);
kbuilder.add(new ClassPathResource("ruleflow3.rf"), ResourceType.DRF);
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}

@Before
public void setUp() throws Exception {
context = setupWithPoolingDataSource(JBPM_PERSISTENCE_UNIT_NAME);
Expand All @@ -89,11 +79,9 @@ public void setUp() throws Exception {
KnowledgeBase kbase = createKnowledgeBase();
// create a new session
Environment env = createEnvironment(context);
Properties properties = new Properties();
properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory");
properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory");
KieSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties);
session = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, config, env);
session = createKieSession(kbase, env);

// working memory logger
AbstractAuditLogger dblogger = AuditLoggerFactory.newInstance(Type.JPA, session, null);
assertNotNull(dblogger);
assertTrue(dblogger instanceof JPAWorkingMemoryDbLogger);
Expand Down
@@ -0,0 +1,90 @@
package org.jbpm.process.audit;

import static org.jbpm.persistence.util.PersistenceUtil.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.util.HashMap;
import java.util.List;

import org.jbpm.process.audit.command.AuditCommand;
import org.jbpm.process.audit.command.ClearHistoryLogsCommand;
import org.jbpm.process.audit.command.FindNodeInstancesCommand;
import org.jbpm.process.audit.command.FindProcessInstancesCommand;
import org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.kie.api.KieBase;
import org.kie.api.runtime.Environment;
import org.kie.api.runtime.KieSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class StandaloneAuditLogServiceTest extends AbstractAuditLogServiceTest {

private static final Logger logger = LoggerFactory.getLogger(StandaloneAuditLogServiceTest.class);
private HashMap<String, Object> context;

private AuditLogService auditLogService;
private KieSession ksession;

@Before
public void setUp() throws Exception {
// persistence
context = setupWithPoolingDataSource(JBPM_PERSISTENCE_UNIT_NAME);

// create a new session
Environment env = createEnvironment(context);
KieBase kbase = createKnowledgeBase();
ksession = createKieSession(kbase, env);
new JPAWorkingMemoryDbLogger(ksession);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());

// log service
auditLogService = new JPAAuditLogService(env);
}

@After
public void tearDown() throws Exception {
cleanUp(context);
}

private <T> T setAuditLogServiceAndExecute(AuditCommand<T> cmd) {
cmd.setAuditLogService(auditLogService);
return cmd.execute(null);
}

// TESTS ----------------------------------------------------------------------------------------------------------------------

@Test
public void setAuditLogServiceForCommandTest() {
String PROCESS_ID = "com.sample.ruleflow";
// record the initial count to compare to later
List<ProcessInstanceLog> processInstances = setAuditLogServiceAndExecute(new FindProcessInstancesCommand(PROCESS_ID));
int initialProcessInstanceSize = processInstances.size();

// start process instance
long processInstanceId = ksession.startProcess(PROCESS_ID).getId();

logger.debug("Checking process instances for process '{}'", PROCESS_ID);
processInstances = setAuditLogServiceAndExecute(new FindProcessInstancesCommand(PROCESS_ID));
assertEquals(initialProcessInstanceSize + 1, processInstances.size());
ProcessInstanceLog processInstance = processInstances.get(initialProcessInstanceSize);

logger.debug( "{} -> {} - {}",processInstance.toString(), processInstance.getStart(), processInstance.getEnd());

assertNotNull(processInstance.getStart());
assertNotNull("ProcessInstanceLog does not contain end date.", processInstance.getEnd());
assertEquals(processInstanceId, processInstance.getProcessInstanceId());
assertEquals(PROCESS_ID, processInstance.getProcessId());
List<NodeInstanceLog> nodeInstances = setAuditLogServiceAndExecute(new FindNodeInstancesCommand(processInstanceId));
assertEquals(6, nodeInstances.size());

setAuditLogServiceAndExecute(new ClearHistoryLogsCommand());
nodeInstances = setAuditLogServiceAndExecute(new FindNodeInstancesCommand(processInstanceId));
assertEquals(0, nodeInstances.size());
processInstances = setAuditLogServiceAndExecute(new FindProcessInstancesCommand(PROCESS_ID));
assertEquals(0, processInstances.size());
}
}
Expand Up @@ -16,6 +16,7 @@

package org.jbpm.process.audit;

import static org.jbpm.process.audit.AbstractAuditLogServiceTest.*;
import static org.jbpm.persistence.util.PersistenceUtil.createEnvironment;

import java.util.Properties;
Expand Down Expand Up @@ -47,13 +48,8 @@ public ProcessInstance startProcess(String processName) {
RuleBase ruleBase = createKnowledgeBase();
KieBase kbase = new KnowledgeBaseImpl(ruleBase);

Properties properties = new Properties();
properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory");
properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory");

KieSessionConfiguration conf = (KieSessionConfiguration) new SessionConfiguration(properties);
Environment env = createEnvironment(context);
ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, conf, env);
ksession = createKieSession(kbase, env);

new JPAWorkingMemoryDbLogger(ksession);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
Expand Down
Expand Up @@ -16,6 +16,7 @@

package org.jbpm.process.audit;

import static org.jbpm.process.audit.AbstractAuditLogServiceTest.*;
import static org.jbpm.persistence.util.PersistenceUtil.createEnvironment;

import java.util.Properties;
Expand Down Expand Up @@ -69,18 +70,11 @@ public ProcessInstance startProcess(String processName) {
RuleBase ruleBase = createKnowledgeBase();
KieBase kbase = new KnowledgeBaseImpl(ruleBase);

Properties properties = new Properties();
properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory");
properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory");

KieSessionConfiguration conf = (KieSessionConfiguration) new SessionConfiguration(properties);
Environment env = createEnvironment(context);
ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, conf, env);
ksession = createKieSession(kbase, env);

ksession.addEventListener(new JPAWorkingMemoryDbLogger(emf));
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());


}
return ksession.startProcess(processName);
}
Expand Down
@@ -1,5 +1,6 @@
package org.jbpm.process.audit.jms;

import static org.jbpm.process.audit.AbstractAuditLogServiceTest.*;
import static org.jbpm.persistence.util.PersistenceUtil.*;
import static org.junit.Assert.*;

Expand Down Expand Up @@ -271,23 +272,9 @@ public void testAsyncAuditLoggerCompleteDirectCreation() throws Exception {
assertTrue(processInstances.isEmpty());
}

private KnowledgeBase createKnowledgeBase() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(new ClassPathResource("ruleflow.rf"), ResourceType.DRF);
kbuilder.add(new ClassPathResource("ruleflow2.rf"), ResourceType.DRF);
kbuilder.add(new ClassPathResource("ruleflow3.rf"), ResourceType.DRF);
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}

public StatefulKnowledgeSession createSession(KnowledgeBase kbase, Environment env) {

Properties properties = new Properties();
properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory");
properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory");
KieSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties);
StatefulKnowledgeSession session = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, config, env);
StatefulKnowledgeSession session = createKieSession(kbase, env);
session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
return session;
}
Expand Down
1 change: 0 additions & 1 deletion jbpm-audit/src/test/resources/logback-test.xml
Expand Up @@ -9,7 +9,6 @@
</encoder>
</appender>

<logger name="org.jbpm" level="info"/>
<logger name="bitronix.tm" level="error"/>
<logger name="org.hibernate" level="warn"/>
<logger name="org.hibernate.tool.hbm2ddl" level="warn"/>
Expand Down

0 comments on commit 9983948

Please sign in to comment.