@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(); }
@Test public void testTransactionsRollback() throws Exception { final List<?> list = new ArrayList<Object>(); PlatformTransactionManager txManager = (PlatformTransactionManager) ctx.getBean("txManager"); // final Environment env = KnowledgeBaseFactory.newEnvironment(); // env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, // ctx.getBean( "myEmf" ) ); // env.set( EnvironmentName.TRANSACTION_MANAGER, // txManager ); // env.set( EnvironmentName.GLOBALS, // new MapGlobalResolver() ); // // env.set( EnvironmentName.OBJECT_MARSHALLING_STRATEGIES, // new ObjectMarshallingStrategy[]{new JPAPlaceholderResolverStrategy( env ), // new // SerializablePlaceholderResolverStrategy( ClassObjectMarshallingStrategyAcceptor.DEFAULT )} ); final Environment env = (Environment) ctx.getBean("env"); final KnowledgeStoreService kstore = (KnowledgeStoreService) ctx.getBean("kstore1"); final KnowledgeBase kbRollback = (KnowledgeBase) ctx.getBean("kbRollback"); TransactionTemplate txTemplate = new TransactionTemplate(txManager); final StatefulKnowledgeSession ksession = (StatefulKnowledgeSession) txTemplate.execute( new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { StatefulKnowledgeSession kNewSession = kstore.newStatefulKnowledgeSession(kbRollback, null, env); kNewSession.setGlobal("list", list); kNewSession.insert(1); kNewSession.insert(2); return kNewSession; } }); final int sessionId = ksession.getId(); txTemplate = new TransactionTemplate(txManager); txTemplate.execute( new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { ksession.insert(3); status.setRollbackOnly(); return null; } }); txTemplate = new TransactionTemplate(txManager); txTemplate.execute( new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { ksession.fireAllRules(); return null; } }); assertEquals(2, list.size()); txTemplate = new TransactionTemplate(txManager); txTemplate.execute( new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { ksession.insert(3); ksession.insert(4); return null; } }); txTemplate = new TransactionTemplate(txManager); txTemplate.execute( new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { ksession.insert(5); ksession.insert(6); status.setRollbackOnly(); return null; } }); txTemplate = new TransactionTemplate(txManager); txTemplate.execute( new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { ksession.fireAllRules(); return null; } }); assertEquals(4, list.size()); ksession.dispose(); // now load the ksession final StatefulKnowledgeSession ksession2 = JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbRollback, null, env); txTemplate = new TransactionTemplate(txManager); txTemplate.execute( new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { ksession2.setGlobal("list", list); ksession2.insert(7); ksession2.insert(8); return null; } }); txTemplate.execute( new TransactionCallback() { public Object doInTransaction(TransactionStatus status) { ksession2.fireAllRules(); return null; } }); assertEquals(6, list.size()); }