public static void writeWorkItem(MarshallerWriteContext context, WorkItem workItem) throws IOException { ObjectOutputStream stream = context.stream; stream.writeLong(workItem.getId()); stream.writeLong(workItem.getProcessInstanceId()); stream.writeUTF(workItem.getName()); stream.writeInt(workItem.getState()); // Work Item Parameters Map<String, Object> parameters = workItem.getParameters(); Collection<Object> notNullValues = new ArrayList<Object>(); for (Object value : parameters.values()) { if (value != null) { notNullValues.add(value); } } stream.writeInt(notNullValues.size()); for (String key : parameters.keySet()) { Object object = parameters.get(key); if (object != null) { stream.writeUTF(key); ObjectMarshallingStrategy strategy = context.objectMarshallingStrategyStore.getStrategyObject(object); String strategyClassName = strategy.getClass().getName(); stream.writeInt(-2); // backwards compatibility stream.writeUTF(strategyClassName); if (strategy.accept(object)) { strategy.write(stream, object); } } } }
private static void writeFactHandle( MarshallerWriteContext context, ObjectOutputStream stream, ObjectMarshallingStrategyStore objectMarshallingStrategyStore, int type, InternalFactHandle handle) throws IOException { stream.writeInt(type); stream.writeInt(handle.getId()); stream.writeLong(handle.getRecency()); if (type == 2) { // is event EventFactHandle efh = (EventFactHandle) handle; stream.writeLong(efh.getStartTimestamp()); stream.writeLong(efh.getDuration()); stream.writeBoolean(efh.isExpired()); stream.writeLong(efh.getActivationsCount()); } // context.out.println( "Object : int:" + handle.getId() + " long:" + handle.getRecency() ); // context.out.println( handle.getObject() ); Object object = handle.getObject(); // Old versions wrote -1 and tested >= 0 to see if there was a strategy available // Now, we write -2 to indicate that we write the strategy class name to the stream stream.writeInt(-2); if (object != null) { ObjectMarshallingStrategy strategy = objectMarshallingStrategyStore.getStrategyObject(object); String strategyClassName = strategy.getClass().getName(); stream.writeUTF(strategyClassName); strategy.write(stream, object); } else { stream.writeUTF(""); } if (handle.getEntryPoint() instanceof InternalWorkingMemoryEntryPoint) { String entryPoint = ((InternalWorkingMemoryEntryPoint) handle.getEntryPoint()) .getEntryPoint() .getEntryPointId(); if (entryPoint != null && !entryPoint.equals("")) { stream.writeBoolean(true); stream.writeUTF(entryPoint); } else { stream.writeBoolean(false); } } else { stream.writeBoolean(false); } }