protected Environment createEnvironment(EntityManagerFactory emf) { Environment env = EnvironmentFactory.newEnvironment(); env.set(ENTITY_MANAGER_FACTORY, emf); env.set(TRANSACTION_MANAGER, com.arjuna.ats.jta.TransactionManager.transactionManager()); if (sessionPersistence) { ObjectMarshallingStrategy[] strategies = (ObjectMarshallingStrategy[]) env.get(OBJECT_MARSHALLING_STRATEGIES); List<ObjectMarshallingStrategy> listStrategies =new ArrayList<ObjectMarshallingStrategy>(Arrays.asList(strategies)); listStrategies.add(0, new ProcessInstanceResolverStrategy()); strategies = new ObjectMarshallingStrategy[listStrategies.size()]; env.set(OBJECT_MARSHALLING_STRATEGIES, listStrategies.toArray(strategies)); } return env; }
/** * Fill the process instance .kruntime and .process fields with the appropriate values. * @param processInstance * @param streamContext */ private void connectProcessInstanceToRuntimeAndProcess(ProcessInstance processInstance, Object streamContext) { ProcessInstanceImpl processInstanceImpl = (ProcessInstanceImpl) processInstance; InternalKnowledgeRuntime kruntime = processInstanceImpl.getKnowledgeRuntime(); // Attach the kruntime if not present if ( kruntime == null ) { kruntime = retrieveKnowledgeRuntime( streamContext ); processInstanceImpl.setKnowledgeRuntime( kruntime ); } // Attach the process if not present if ( processInstance.getProcess() == null ) { String processId = processInstance.getProcessId(); if (processId != null) { Process process = kruntime.getKieBase().getProcess( processId ); if (process != null) { processInstanceImpl.setProcess( process ); } } } }
public Object read(ObjectInputStream is) throws IOException, ClassNotFoundException { long processInstanceId = is.readLong(); ProcessInstanceManager pim = retrieveProcessInstanceManager( is ); ProcessInstance processInstance = pim.getProcessInstance( processInstanceId ); if (processInstance == null) { RuleFlowProcessInstance result = new RuleFlowProcessInstance(); result.setId( processInstanceId ); result.internalSetState(ProcessInstance.STATE_COMPLETED); return result; } else { connectProcessInstanceToRuntimeAndProcess( processInstance, is ); return processInstance; } }
@Test public void testAccept() { KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); KieSession ksession = kbase.newKieSession(); WorkflowProcessImpl process = new WorkflowProcessImpl(); RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance(); processInstance.setState(ProcessInstance.STATE_ACTIVE); processInstance.setProcess(process); processInstance.setKnowledgeRuntime((InternalKnowledgeRuntime) ksession); ProcessInstanceResolverStrategy strategy = new ProcessInstanceResolverStrategy(); assertTrue( strategy.accept(processInstance) ); Object object = new Object(); assertTrue( ! strategy.accept(object) ); }
ProcessInstanceResolverStrategy strategy = new ProcessInstanceResolverStrategy(); ObjectMarshallingStrategy[] strategies = { strategy, marshallingConfig.isMarshallWorkItems(), ksession.getEnvironment()); strategy.write(writerContext, processInstance); baos.close(); writerContext.close(); ProcessInstanceManager pim = ProcessInstanceResolverStrategy.retrieveProcessInstanceManager(writerContext); assertNotNull(pim); assertNotNull(ProcessInstanceResolverStrategy.retrieveKnowledgeRuntime(writerContext)); assertTrue(processInstance == pim.getProcessInstance(serializedProcessInstanceId)); EnvironmentFactory.newEnvironment()); readerContext.wm = ((StatefulKnowledgeSessionImpl) ksession).getInternalWorkingMemory(); Object procInstObject = strategy.read(readerContext); assertTrue(procInstObject != null && procInstObject instanceof ProcessInstance ); assertTrue(processInstance == procInstObject);
public void write(ObjectOutputStream os, Object object) throws IOException { ProcessInstance processInstance = (ProcessInstance) object; connectProcessInstanceToRuntimeAndProcess( processInstance, os ); os.writeLong( processInstance.getId() ); }
public byte[] marshal(Context context, ObjectOutputStream os, Object object) throws IOException { ProcessInstance processInstance = (ProcessInstance) object; connectProcessInstanceToRuntimeAndProcess( processInstance, os ); return PersisterHelper.longToByteArray( processInstance.getId() ); }
listStrategies.add(0, new ProcessInstanceResolverStrategy()); strategies = new ObjectMarshallingStrategy[listStrategies.size()]; copy.set(EnvironmentName.OBJECT_MARSHALLING_STRATEGIES, listStrategies.toArray(strategies));
public Object unmarshal(Context context, ObjectInputStream is, byte[] object, ClassLoader classloader) throws IOException, ClassNotFoundException { long processInstanceId = PersisterHelper.byteArrayToLong( object ); ProcessInstanceManager pim = retrieveProcessInstanceManager( is ); // load it as read only to avoid any updates to the data base ProcessInstance processInstance = pim.getProcessInstance( processInstanceId, true ); if (processInstance == null) { RuleFlowProcessInstance result = new RuleFlowProcessInstance(); result.setId( processInstanceId ); result.internalSetState(ProcessInstance.STATE_COMPLETED); return result; } else { connectProcessInstanceToRuntimeAndProcess( processInstance, is ); return processInstance; } }
/** * Fill the process instance .kruntime and .process fields with the appropriate values. * @param processInstance * @param streamContext */ private void connectProcessInstanceToRuntimeAndProcess(ProcessInstance processInstance, Object streamContext) { ProcessInstanceImpl processInstanceImpl = (ProcessInstanceImpl) processInstance; InternalKnowledgeRuntime kruntime = processInstanceImpl.getKnowledgeRuntime(); // Attach the kruntime if not present if ( kruntime == null ) { kruntime = retrieveKnowledgeRuntime( streamContext ); processInstanceImpl.setKnowledgeRuntime( kruntime ); } // Attach the process if not present if ( processInstance.getProcess() == null ) { String processId = processInstance.getProcessId(); if (processId != null) { Process process = kruntime.getKieBase().getProcess( processId ); if (process != null) { processInstanceImpl.setProcess( process ); } } } }
public void write(ObjectOutputStream os, Object object) throws IOException { ProcessInstance processInstance = (ProcessInstance) object; connectProcessInstanceToRuntimeAndProcess( processInstance, os ); os.writeLong( processInstance.getId() ); }
@Before public void before() { context = setupWithPoolingDataSource(JBPM_PERSISTENCE_UNIT_NAME); // load up the knowledge base Environment env = PersistenceUtil.createEnvironment(context); env.set(OBJECT_MARSHALLING_STRATEGIES, new ObjectMarshallingStrategy[] { new ProcessInstanceResolverStrategy(), new JPAPlaceholderResolverStrategy(env), new SerializablePlaceholderResolverStrategy(ClassObjectMarshallingStrategyAcceptor.DEFAULT) } ); if( useLocking ) { env.set(USE_PESSIMISTIC_LOCKING, true); } KieBase kbase = loadKnowledgeBase(); // create session ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env); Assert.assertTrue("Valid KnowledgeSession could not be created.", ksession != null && ksession.getIdentifier() > 0); }
public Object read(ObjectInputStream is) throws IOException, ClassNotFoundException { long processInstanceId = is.readLong(); ProcessInstanceManager pim = retrieveProcessInstanceManager( is ); ProcessInstance processInstance = pim.getProcessInstance( processInstanceId ); if (processInstance == null) { RuleFlowProcessInstance result = new RuleFlowProcessInstance(); result.setId( processInstanceId ); result.internalSetState(ProcessInstance.STATE_COMPLETED); return result; } else { connectProcessInstanceToRuntimeAndProcess( processInstance, is ); return processInstance; } }
public byte[] marshal(Context context, ObjectOutputStream os, Object object) throws IOException { ProcessInstance processInstance = (ProcessInstance) object; connectProcessInstanceToRuntimeAndProcess( processInstance, os ); return PersisterHelper.longToByteArray( processInstance.getId() ); }
private List<ObjectMarshallingStrategy> getStrategies() { List<ObjectMarshallingStrategy> strategies = new ArrayList<ObjectMarshallingStrategy>(); int customMarshaller = 0; for (String marshaller : objectMarshallersOrder ){ if (ELEMENT_SERIALIZABLE_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ if ( serializablePlaceholderResolverStrategyAcceptor == null ) { serializablePlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new SerializablePlaceholderResolverStrategy(serializablePlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_IDENTITY_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ if ( identityPlaceholderResolverStrategyAcceptor == null ) { identityPlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new IdentityPlaceholderResolverStrategy(identityPlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_PROCESS_INSTANCE_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ strategies.add(new ProcessInstanceResolverStrategy()); } else if (ELEMENT_JPA_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ if ( jpaPlaceHolderResolverStrategyEnv != null ) { strategies.add(new JPAPlaceholderResolverStrategy(jpaPlaceHolderResolverStrategyEnv)); } else { strategies.add(new JPAPlaceholderResolverStrategy(environment)); } } else if (ELEMENT_CUSTOM_MARSHALLING_STRATEGY.equalsIgnoreCase(marshaller)){ strategies.add(customMarshallingStrategies.get(customMarshaller)); customMarshaller++; } } return strategies; }
public Object unmarshal(Context context, ObjectInputStream is, byte[] object, ClassLoader classloader) throws IOException, ClassNotFoundException { long processInstanceId = PersisterHelper.byteArrayToLong( object ); ProcessInstanceManager pim = retrieveProcessInstanceManager( is ); // load it as read only to avoid any updates to the data base ProcessInstance processInstance = pim.getProcessInstance( processInstanceId, true ); if (processInstance == null) { RuleFlowProcessInstance result = new RuleFlowProcessInstance(); result.setId( processInstanceId ); result.internalSetState(ProcessInstance.STATE_COMPLETED); return result; } else { connectProcessInstanceToRuntimeAndProcess( processInstance, is ); return processInstance; } }
private List<ObjectMarshallingStrategy> getStrategies() { List<ObjectMarshallingStrategy> strategies = new ArrayList<ObjectMarshallingStrategy>(); int customMarshaller = 0; for (String marshaller : objectMarshallersOrder ){ if (ELEMENT_SERIALIZABLE_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ if ( serializablePlaceholderResolverStrategyAcceptor == null ) { serializablePlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new SerializablePlaceholderResolverStrategy(serializablePlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_IDENTITY_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ if ( identityPlaceholderResolverStrategyAcceptor == null ) { identityPlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new IdentityPlaceholderResolverStrategy(identityPlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_PROCESS_INSTANCE_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ strategies.add(new ProcessInstanceResolverStrategy()); } else if (ELEMENT_JPA_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ if ( jpaPlaceHolderResolverStrategyEnv != null ) { strategies.add(new JPAPlaceholderResolverStrategy(jpaPlaceHolderResolverStrategyEnv)); } else { strategies.add(new JPAPlaceholderResolverStrategy(environment)); } } else if (ELEMENT_CUSTOM_MARSHALLING_STRATEGY.equalsIgnoreCase(marshaller)){ strategies.add(customMarshallingStrategies.get(customMarshaller)); customMarshaller++; } } return strategies; }
private List<ObjectMarshallingStrategy> getStrategies() { List<ObjectMarshallingStrategy> strategies = new ArrayList<ObjectMarshallingStrategy>(); int customMarshaller = 0; for (String marshaller : objectMarshallersOrder) { if (ELEMENT_SERIALIZABLE_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)) { if (serializablePlaceholderResolverStrategyAcceptor == null) { serializablePlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new SerializablePlaceholderResolverStrategy(serializablePlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_IDENTITY_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)) { if (identityPlaceholderResolverStrategyAcceptor == null) { identityPlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new IdentityPlaceholderResolverStrategy(identityPlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_PROCESS_INSTANCE_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)) { strategies.add(new ProcessInstanceResolverStrategy()); } else if (ELEMENT_JPA_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)) { if (jpaPlaceHolderResolverStrategyEnv != null) { strategies.add(new JPAPlaceholderResolverStrategy(jpaPlaceHolderResolverStrategyEnv)); } else { strategies.add(new JPAPlaceholderResolverStrategy(environment)); } } else if (ELEMENT_CUSTOM_MARSHALLING_STRATEGY.equalsIgnoreCase(marshaller)) { strategies.add(customMarshallingStrategies.get(customMarshaller)); customMarshaller++; } } return strategies; }
private List<ObjectMarshallingStrategy> getStrategies() { List<ObjectMarshallingStrategy> strategies = new ArrayList<ObjectMarshallingStrategy>(); int customMarshaller = 0; for (String marshaller : objectMarshallersOrder) { if (ELEMENT_SERIALIZABLE_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)) { if (serializablePlaceholderResolverStrategyAcceptor == null) { serializablePlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new SerializablePlaceholderResolverStrategy(serializablePlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_IDENTITY_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)) { if (identityPlaceholderResolverStrategyAcceptor == null) { identityPlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new IdentityPlaceholderResolverStrategy(identityPlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_PROCESS_INSTANCE_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)) { strategies.add(new ProcessInstanceResolverStrategy()); } else if (ELEMENT_JPA_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)) { if (jpaPlaceHolderResolverStrategyEnv != null) { strategies.add(new JPAPlaceholderResolverStrategy(jpaPlaceHolderResolverStrategyEnv)); } else { strategies.add(new JPAPlaceholderResolverStrategy(environment)); } } else if (ELEMENT_CUSTOM_MARSHALLING_STRATEGY.equalsIgnoreCase(marshaller)) { strategies.add(customMarshallingStrategies.get(customMarshaller)); customMarshaller++; } } return strategies; }
private List<ObjectMarshallingStrategy> getStrategies() { List<ObjectMarshallingStrategy> strategies = new ArrayList<ObjectMarshallingStrategy>(); int customMarshaller = 0; for (String marshaller : objectMarshallersOrder ){ if (ELEMENT_SERIALIZABLE_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ if ( serializablePlaceholderResolverStrategyAcceptor == null ) { serializablePlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new SerializablePlaceholderResolverStrategy(serializablePlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_IDENTITY_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ if ( identityPlaceholderResolverStrategyAcceptor == null ) { identityPlaceholderResolverStrategyAcceptor = ClassObjectMarshallingStrategyAcceptor.DEFAULT; } strategies.add(new IdentityPlaceholderResolverStrategy(identityPlaceholderResolverStrategyAcceptor)); } else if (ELEMENT_PROCESS_INSTANCE_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ strategies.add(new ProcessInstanceResolverStrategy()); } else if (ELEMENT_JPA_PLACEHOLDER_RESOLVER_STRATEGY.equalsIgnoreCase(marshaller)){ if ( jpaPlaceHolderResolverStrategyEnv != null ) { strategies.add(new JPAPlaceholderResolverStrategy(jpaPlaceHolderResolverStrategyEnv)); } else { strategies.add(new JPAPlaceholderResolverStrategy(environment)); } } else if (ELEMENT_CUSTOM_MARSHALLING_STRATEGY.equalsIgnoreCase(marshaller)){ strategies.add(customMarshallingStrategies.get(customMarshaller)); customMarshaller++; } } return strategies; }