use of org.drools.core.common.DroolsObjectOutputStream in project drools by kiegroup.
the class SerializedPackageMergeTwoSteps2Test method testBuildAndSerializePackagesInTwoSteps2.
@Test
public void testBuildAndSerializePackagesInTwoSteps2() throws IOException, ClassNotFoundException {
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
// Read the two serialized knowledgePackages
for (String fileName : SerializedPackageMergeTwoSteps1Test.BINPKG) {
Collection<KiePackage> kpkgs = null;
byte[] data = null;
try {
data = Files.readAllBytes(Paths.get(fileName));
} catch (java.nio.file.NoSuchFileException ex) {
// bin file does not exist, finish test
return;
}
kpkgs = _deserializeFromBytes(data);
if (kpkgs != null)
kbase.addPackages(kpkgs);
}
Collection<KiePackage> knowledgePackagesCombined = kbase.getKiePackages();
// serialize
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new DroolsObjectOutputStream(baos);
out.writeObject(knowledgePackagesCombined);
out.flush();
out.close();
// deserialize
ObjectInputStream in = new DroolsObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
Collection<KiePackage> deserializedPackages = (Collection<KiePackage>) in.readObject();
// Use the deserialized knowledgePackages
InternalKnowledgeBase kbase2 = KnowledgeBaseFactory.newKnowledgeBase();
kbase2.addPackages(deserializedPackages);
KieSession ksession = kbase2.newKieSession();
List<String> list = new ArrayList<String>();
ksession.setGlobal("list", list);
ksession.insert(new org.drools.compiler.Person("John"));
ksession.fireAllRules();
assertEquals(2, list.size());
ksession.dispose();
}
use of org.drools.core.common.DroolsObjectOutputStream in project drools by kiegroup.
the class PersisterHelper method writeStrategiesIndex.
private static void writeStrategiesIndex(MarshallerWriteContext context, ProtobufMessages.Header.Builder _header) throws IOException {
for (Entry<ObjectMarshallingStrategy, Integer> entry : context.usedStrategies.entrySet()) {
Builder _strat = ProtobufMessages.Header.StrategyIndex.newBuilder().setId(entry.getValue().intValue()).setName(entry.getKey().getName());
Context ctx = context.strategyContext.get(entry.getKey());
if (ctx != null) {
Output os = ByteString.newOutput();
ctx.write(new DroolsObjectOutputStream(os));
_strat.setData(os.toByteString());
os.close();
}
_header.addStrategy(_strat.build());
}
}
use of org.drools.core.common.DroolsObjectOutputStream in project drools by kiegroup.
the class KnowledgeBaseImpl method writeExternal.
/**
* Handles the write serialization of the Package. Patterns in Rules may reference generated data which cannot be serialized by default methods.
* The Package uses PackageCompilationData to hold a reference to the generated bytecode. The generated bytecode must be restored before any Rules.
*/
public void writeExternal(final ObjectOutput out) throws IOException {
ObjectOutput droolsStream;
boolean isDrools = out instanceof DroolsObjectOutputStream;
ByteArrayOutputStream bytes;
out.writeBoolean(isDrools);
if (isDrools) {
droolsStream = out;
bytes = null;
} else {
bytes = new ByteArrayOutputStream();
droolsStream = new DroolsObjectOutputStream(bytes);
}
// must write this option first in order to properly deserialize later
droolsStream.writeBoolean(this.config.isClassLoaderCacheEnabled());
droolsStream.writeObject(((ProjectClassLoader) rootClassLoader).getStore());
droolsStream.writeObject(this.config);
droolsStream.writeObject(this.pkgs);
// Rules must be restored by an ObjectInputStream that can resolve using a given ClassLoader to handle seaprately by storing as
// a byte[]
droolsStream.writeObject(this.id);
droolsStream.writeInt(this.workingMemoryCounter.get());
droolsStream.writeObject(this.processes);
droolsStream.writeUTF(this.factHandleFactory.getClass().getName());
droolsStream.writeObject(buildGlobalMapForSerialization());
this.eventSupport.removeEventListener(KieBaseEventListener.class);
droolsStream.writeObject(this.eventSupport);
droolsStream.writeObject(this.reteooBuilder);
droolsStream.writeObject(this.rete);
droolsStream.writeObject(this.resolvedReleaseId);
if (!isDrools) {
droolsStream.flush();
droolsStream.close();
bytes.close();
out.writeObject(bytes.toByteArray());
}
}
use of org.drools.core.common.DroolsObjectOutputStream in project drools by kiegroup.
the class ClassUtils method deepClone.
public static <T extends Externalizable> T deepClone(T origin, ClassLoader classLoader, Map<String, Object> cloningResources) {
if (origin == null) {
return null;
}
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DroolsObjectOutputStream oos = new DroolsObjectOutputStream(baos);
if (cloningResources != null) {
cloningResources.forEach((k, v) -> oos.addCustomExtensions(k, v));
}
oos.writeObject(origin);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
DroolsObjectInputStream ois = new DroolsObjectInputStream(bais, classLoader);
if (cloningResources != null) {
cloningResources.forEach((k, v) -> ois.addCustomExtensions(k, v));
}
Object deepCopy = ois.readObject();
return (T) deepCopy;
} catch (IOException ioe) {
throw new RuntimeException(ioe);
} catch (ClassNotFoundException cnfe) {
throw new RuntimeException(cnfe);
}
}
use of org.drools.core.common.DroolsObjectOutputStream in project drools by kiegroup.
the class DroolsStreamUtils method streamOut.
/**
* This method would stream out the given object to the given output stream uncompressed or compressed
* depending on the given flag. The output contents could only be read by the corresponding "streamIn"
* methods of this class.
* @param out
* @param object
* @throws IOException
*/
public static void streamOut(OutputStream out, Object object, boolean compressed) throws IOException {
if (compressed) {
out = new GZIPOutputStream(out);
}
DroolsObjectOutputStream doos = null;
try {
doos = new DroolsObjectOutputStream(out);
doos.writeObject(object);
} finally {
if (doos != null) {
doos.close();
}
if (compressed) {
out.close();
}
}
}
Aggregations