}
}
public static void writeSession(MarshallerWriteContext context) throws IOException {
//context.out.println( "... write session");
ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
wm.getAgenda().unstageActivations();
final boolean multithread = wm.isPartitionManagersActive();
// is multi-thread active?
if ( multithread ) {
context.writeBoolean( true );
wm.stopPartitionManagers();
} else {
context.writeBoolean( false );
}
long time = 0;
if ( context.wm.getTimerService() instanceof PseudoClockScheduler ) {
time = context.clockTime;
}
context.writeLong( time );
context.writeInt( wm.getFactHandleFactory().getId() );
context.writeLong( wm.getFactHandleFactory().getRecency() );
////context.out.println( "FactHandleFactory int:" + wm.getFactHandleFactory().getId() + " long:" + wm.getFactHandleFactory().getRecency() );
context.writeLong( wm.getPropagationIdCounter() );
//context.out.println( "PropagationCounter long:" + wm.getPropagationIdCounter() );
InternalFactHandle handle = context.wm.getInitialFactHandle();
context.writeInt( handle.getId() );
context.writeLong( handle.getRecency() );
//context.out.println( "InitialFact int:" + handle.getId() + " long:" + handle.getRecency() );
writeAgenda( context );
writeInitialFactHandleRightTuples( context );
for ( WorkingMemoryEntryPoint wmep : wm.getEntryPoints().values() ) {
context.stream.writeShort( PersisterEnums.ENTRY_POINT );
context.stream.writeUTF( wmep.getEntryPointId() );
writeFactHandles( context, (( NamedEntryPoint )wmep).getObjectStore() );
}
context.stream.writeShort( PersisterEnums.END );
writeInitialFactHandleLeftTuples( context );
writePropagationContexts( context );
writeActivations( context );
writeActionQueue( context );
writeTruthMaintenanceSystem( context );
if ( context.marshalProcessInstances && processMarshaller != null ) {
processMarshaller.writeProcessInstances( context );
}
else {
context.stream.writeShort( PersisterEnums.END );
}
if ( context.marshalWorkItems && processMarshaller != null ) {
processMarshaller.writeWorkItems( context );
}
else {
context.stream.writeShort( PersisterEnums.END );
}
if ( processMarshaller != null ) {
// this now just assigns the writer, it will not write out any timer information
processMarshaller.writeProcessTimers( context );
}
else {
context.stream.writeShort( PersisterEnums.END );
}
// Only works for JpaJDKTimerService
writeTimers( context.wm.getTimerService().getTimerJobInstances(), context );
if ( multithread ) {
wm.startPartitionManagers();
}
//context.out.println( "--- write session --- END");
}