@Test public void testPersistenceWorkItemsUserTransaction() throws Exception { final Environment env = KnowledgeBaseFactory.newEnvironment(); env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf); env.set( EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager()); final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); final Collection<KnowledgePackage> kpkgs = getProcessWorkItems(); kbase.addKnowledgePackages(kpkgs); final Properties properties = new Properties(); properties.setProperty("drools.commandService", SingleSessionCommandService.class.getName()); properties.setProperty( "drools.processInstanceManagerFactory", JPAProcessInstanceManagerFactory.class.getName()); properties.setProperty( "drools.workItemManagerFactory", JPAWorkItemManagerFactory.class.getName()); properties.setProperty( "drools.processSignalManagerFactory", JPASignalManagerFactory.class.getName()); properties.setProperty("drools.timerService", JpaJDKTimerService.class.getName()); final SessionConfiguration config = new SessionConfiguration(properties); SingleSessionCommandService service = new SingleSessionCommandService(kbase, config, env); final int sessionId = service.getSessionId(); final UserTransaction ut = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction"); ut.begin(); final StartProcessCommand startProcessCommand = new StartProcessCommand(); startProcessCommand.setProcessId("org.drools.test.TestProcess"); ProcessInstance processInstance = service.execute(startProcessCommand); System.out.println("Started process instance " + processInstance.getId()); ut.commit(); final TestWorkItemHandler handler = TestWorkItemHandler.getInstance(); WorkItem workItem = handler.getWorkItem(); assertNotNull(workItem); service.dispose(); service = new SingleSessionCommandService(sessionId, kbase, config, env); ut.begin(); GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand(); getProcessInstanceCommand.setProcessInstanceId(processInstance.getId()); processInstance = service.execute(getProcessInstanceCommand); assertNotNull(processInstance); ut.commit(); service.dispose(); service = new SingleSessionCommandService(sessionId, kbase, config, env); ut.begin(); CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand(); completeWorkItemCommand.setWorkItemId(workItem.getId()); service.execute(completeWorkItemCommand); ut.commit(); workItem = handler.getWorkItem(); assertNotNull(workItem); service.dispose(); service = new SingleSessionCommandService(sessionId, kbase, config, env); ut.begin(); getProcessInstanceCommand = new GetProcessInstanceCommand(); getProcessInstanceCommand.setProcessInstanceId(processInstance.getId()); processInstance = service.execute(getProcessInstanceCommand); ut.commit(); assertNotNull(processInstance); service.dispose(); service = new SingleSessionCommandService(sessionId, kbase, config, env); ut.begin(); completeWorkItemCommand = new CompleteWorkItemCommand(); completeWorkItemCommand.setWorkItemId(workItem.getId()); service.execute(completeWorkItemCommand); ut.commit(); workItem = handler.getWorkItem(); assertNotNull(workItem); service.dispose(); service = new SingleSessionCommandService(sessionId, kbase, config, env); ut.begin(); getProcessInstanceCommand = new GetProcessInstanceCommand(); getProcessInstanceCommand.setProcessInstanceId(processInstance.getId()); processInstance = service.execute(getProcessInstanceCommand); ut.commit(); assertNotNull(processInstance); service.dispose(); service = new SingleSessionCommandService(sessionId, kbase, config, env); ut.begin(); completeWorkItemCommand = new CompleteWorkItemCommand(); completeWorkItemCommand.setWorkItemId(workItem.getId()); service.execute(completeWorkItemCommand); ut.commit(); workItem = handler.getWorkItem(); assertNull(workItem); service.dispose(); service = new SingleSessionCommandService(sessionId, kbase, config, env); ut.begin(); getProcessInstanceCommand = new GetProcessInstanceCommand(); getProcessInstanceCommand.setProcessInstanceId(processInstance.getId()); processInstance = service.execute(getProcessInstanceCommand); ut.commit(); assertNull(processInstance); service.dispose(); }
@Test public void testPersistenceSubProcess() { final Environment env = KnowledgeBaseFactory.newEnvironment(); env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf); env.set( EnvironmentName.TRANSACTION_MANAGER, TransactionManagerServices.getTransactionManager()); final Properties properties = new Properties(); properties.setProperty("drools.commandService", SingleSessionCommandService.class.getName()); properties.setProperty( "drools.processInstanceManagerFactory", JPAProcessInstanceManagerFactory.class.getName()); properties.setProperty( "drools.workItemManagerFactory", JPAWorkItemManagerFactory.class.getName()); properties.setProperty( "drools.processSignalManagerFactory", JPASignalManagerFactory.class.getName()); properties.setProperty("drools.timerService", JpaJDKTimerService.class.getName()); final SessionConfiguration config = new SessionConfiguration(properties); final RuleBase ruleBase = RuleBaseFactory.newRuleBase(); final Package pkg = getProcessSubProcess(); ruleBase.addPackage(pkg); SingleSessionCommandService service = new SingleSessionCommandService(ruleBase, config, env); final int sessionId = service.getSessionId(); final StartProcessCommand startProcessCommand = new StartProcessCommand(); startProcessCommand.setProcessId("org.drools.test.TestProcess"); RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance) service.execute(startProcessCommand); System.out.println("Started process instance " + processInstance.getId()); final long processInstanceId = processInstance.getId(); final TestWorkItemHandler handler = TestWorkItemHandler.getInstance(); final WorkItem workItem = handler.getWorkItem(); assertNotNull(workItem); service.dispose(); service = new SingleSessionCommandService(sessionId, ruleBase, config, env); GetProcessInstanceCommand getProcessInstanceCommand = new GetProcessInstanceCommand(); getProcessInstanceCommand.setProcessInstanceId(processInstanceId); processInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand); assertNotNull(processInstance); final Collection<NodeInstance> nodeInstances = processInstance.getNodeInstances(); assertEquals(1, nodeInstances.size()); final SubProcessNodeInstance subProcessNodeInstance = (SubProcessNodeInstance) nodeInstances.iterator().next(); final long subProcessInstanceId = subProcessNodeInstance.getProcessInstanceId(); getProcessInstanceCommand = new GetProcessInstanceCommand(); getProcessInstanceCommand.setProcessInstanceId(subProcessInstanceId); RuleFlowProcessInstance subProcessInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand); assertNotNull(subProcessInstance); service.dispose(); service = new SingleSessionCommandService(sessionId, ruleBase, config, env); final CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand(); completeWorkItemCommand.setWorkItemId(workItem.getId()); service.execute(completeWorkItemCommand); service.dispose(); service = new SingleSessionCommandService(sessionId, ruleBase, config, env); getProcessInstanceCommand = new GetProcessInstanceCommand(); getProcessInstanceCommand.setProcessInstanceId(subProcessInstanceId); subProcessInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand); assertNull(subProcessInstance); getProcessInstanceCommand = new GetProcessInstanceCommand(); getProcessInstanceCommand.setProcessInstanceId(processInstanceId); processInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand); assertNull(processInstance); service.dispose(); }
@Test public void testPersistenceVariables() throws NamingException, NotSupportedException, SystemException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException { MyEntity myEntity = new MyEntity("This is a test Entity with annotation in fields"); MyEntityMethods myEntityMethods = new MyEntityMethods("This is a test Entity with annotations in methods"); MyEntityOnlyFields myEntityOnlyFields = new MyEntityOnlyFields( "This is a test Entity with annotations in fields and without accesors methods"); MyVariableSerializable myVariableSerializable = new MyVariableSerializable("This is a test SerializableObject"); EntityManager em = ((EntityManagerFactory) ctx.getBean("myEmf")).createEntityManager(); em.getTransaction().begin(); em.persist(myEntity); em.persist(myEntityMethods); em.persist(myEntityOnlyFields); em.getTransaction().commit(); em.close(); log.info("---> get bean jpaSingleSessionCommandService"); StatefulKnowledgeSession service = (StatefulKnowledgeSession) ctx.getBean("jpaSingleSessionCommandService"); int sessionId = service.getId(); log.info("---> created SingleSessionCommandService id: " + sessionId); log.info("### Starting process ###"); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("x", "SomeString"); parameters.put("y", myEntity); parameters.put("m", myEntityMethods); parameters.put("f", myEntityOnlyFields); parameters.put("z", myVariableSerializable); WorkflowProcessInstance processInstance = (WorkflowProcessInstance) service.startProcess("com.sample.ruleflow", parameters); log.info("Started process instance {}", processInstance.getId()); TestWorkItemHandler handler = TestWorkItemHandler.getInstance(); WorkItem workItem = handler.getWorkItem(); assertNotNull(workItem); service.dispose(); EntityManagerFactory emf = (EntityManagerFactory) ctx.getBean("myEmf"); // List< ? > result = emf.createEntityManager().createQuery( "select i from // VariableInstanceInfo i" ).getResultList(); // assertEquals( 5, // result.size() ); log.info("### Retrieving process instance ###"); /* Environment env = KnowledgeBaseFactory.newEnvironment(); env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf ); env.set( EnvironmentName.TRANSACTION_MANAGER, ctx.getBean( "txManager" ) ); env.set( EnvironmentName.OBJECT_MARSHALLING_STRATEGIES, new ObjectMarshallingStrategy[]{ // new JPAPlaceholderResolverStrategy(env), new SerializablePlaceholderResolverStrategy( ClassObjectMarshallingStrategyAcceptor.DEFAULT ) } ); */ final Environment env = (Environment) ctx.getBean("env2"); KnowledgeStoreService kstore = (KnowledgeStoreService) ctx.getBean("kstore1"); KnowledgeBase kbase1 = (KnowledgeBase) ctx.getBean("kbase1"); service = kstore.loadStatefulKnowledgeSession(sessionId, kbase1, null, env); processInstance = (WorkflowProcessInstance) service.getProcessInstance(processInstance.getId()); assertNotNull(processInstance); assertNotNull(processInstance); assertEquals("SomeString", processInstance.getVariable("x")); assertEquals( "This is a test Entity with annotation in fields", ((MyEntity) processInstance.getVariable("y")).getTest()); assertEquals( "This is a test Entity with annotations in methods", ((MyEntityMethods) processInstance.getVariable("m")).getTest()); assertEquals( "This is a test Entity with annotations in fields and without accesors methods", ((MyEntityOnlyFields) processInstance.getVariable("f")).test); assertEquals( "This is a test SerializableObject", ((MyVariableSerializable) processInstance.getVariable("z")).getText()); assertNull(processInstance.getVariable("a")); assertNull(processInstance.getVariable("b")); assertNull(processInstance.getVariable("c")); service.dispose(); }