PersisterHelper.writeToStreamWithHeader(context,
_session);
}
private static ProtobufMessages.KnowledgeSession serializeSession(MarshallerWriteContext context) throws IOException {
ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
wm.getAgenda().unstageActivations();
ProtobufMessages.RuleData.Builder _ruleData = ProtobufMessages.RuleData.newBuilder();
final boolean multithread = wm.isPartitionManagersActive();
if (multithread) {
wm.stopPartitionManagers();
}
long time = 0;
if (context.wm.getTimerService() instanceof PseudoClockScheduler) {
time = context.clockTime;
}
_ruleData.setLastId(wm.getFactHandleFactory().getId());
_ruleData.setLastRecency(wm.getFactHandleFactory().getRecency());
InternalFactHandle handle = context.wm.getInitialFactHandle();
if ( handle != null ) {
ProtobufMessages.FactHandle _ifh = ProtobufMessages.FactHandle.newBuilder()
.setType(ProtobufMessages.FactHandle.HandleType.INITIAL_FACT)
.setId(handle.getId())
.setRecency(handle.getRecency())
.build();
_ruleData.setInitialFact(_ifh);
}
writeAgenda(context, _ruleData);
writeNodeMemories(context, _ruleData);
for (WorkingMemoryEntryPoint wmep : wm.getEntryPoints().values()) {
org.drools.marshalling.impl.ProtobufMessages.EntryPoint.Builder _epb = ProtobufMessages.EntryPoint.newBuilder();
_epb.setEntryPointId(wmep.getEntryPointId());
writeObjectTypeConfiguration(context,
((InternalWorkingMemoryEntryPoint) wmep).getObjectTypeConfigurationRegistry(),
_epb);
writeFactHandles(context,
_epb,
((NamedEntryPoint) wmep).getObjectStore());
_ruleData.addEntryPoint(_epb.build());
}
writeActionQueue(context,
_ruleData);
writeTruthMaintenanceSystem(context,
_ruleData);
ProtobufMessages.KnowledgeSession.Builder _session = ProtobufMessages.KnowledgeSession.newBuilder()
.setMultithread(multithread)
.setTime(time)
.setRuleData(_ruleData.build());
if (processMarshaller != null) {
Builder _pdata = ProtobufMessages.ProcessData.newBuilder();
if (context.marshalProcessInstances) {
context.parameterObject = _pdata;
processMarshaller.writeProcessInstances(context);
}
if (context.marshalWorkItems) {
context.parameterObject = _pdata;
processMarshaller.writeWorkItems(context);
}
// this now just assigns the writer, it will not write out any timer information
context.parameterObject = _pdata;
processMarshaller.writeProcessTimers(context);
_session.setProcessData(_pdata.build());
}
Timers _timers = writeTimers(context.wm.getTimerService().getTimerJobInstances(),
context);
if (_timers != null) {
_session.setTimers(_timers);
}
if (multithread) {
wm.startPartitionManagers();
}
return _session.build();
}