Search in sources :

Example 11 with DroolsObjectOutputStream

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();
}
Also used : DroolsObjectInputStream(org.drools.core.common.DroolsObjectInputStream) ArrayList(java.util.ArrayList) ByteArrayOutputStream(java.io.ByteArrayOutputStream) DroolsObjectOutputStream(org.drools.core.common.DroolsObjectOutputStream) ObjectOutputStream(java.io.ObjectOutputStream) KiePackage(org.kie.api.definition.KiePackage) ByteArrayInputStream(java.io.ByteArrayInputStream) Collection(java.util.Collection) KieSession(org.kie.api.runtime.KieSession) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) DroolsObjectOutputStream(org.drools.core.common.DroolsObjectOutputStream) ObjectInputStream(java.io.ObjectInputStream) DroolsObjectInputStream(org.drools.core.common.DroolsObjectInputStream) Test(org.junit.Test)

Example 12 with DroolsObjectOutputStream

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());
    }
}
Also used : Context(org.kie.api.marshalling.ObjectMarshallingStrategy.Context) ObjectMarshallingStrategy(org.kie.api.marshalling.ObjectMarshallingStrategy) Builder(org.drools.core.marshalling.impl.ProtobufMessages.Header.StrategyIndex.Builder) Output(com.google.protobuf.ByteString.Output) DroolsObjectOutputStream(org.drools.core.common.DroolsObjectOutputStream)

Example 13 with DroolsObjectOutputStream

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());
    }
}
Also used : ObjectOutput(java.io.ObjectOutput) ByteArrayOutputStream(java.io.ByteArrayOutputStream) DroolsObjectOutputStream(org.drools.core.common.DroolsObjectOutputStream)

Example 14 with DroolsObjectOutputStream

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);
    }
}
Also used : DroolsObjectInputStream(org.drools.core.common.DroolsObjectInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) DroolsObjectOutputStream(org.drools.core.common.DroolsObjectOutputStream)

Example 15 with DroolsObjectOutputStream

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();
        }
    }
}
Also used : GZIPOutputStream(java.util.zip.GZIPOutputStream) DroolsObjectOutputStream(org.drools.core.common.DroolsObjectOutputStream)

Aggregations

DroolsObjectOutputStream (org.drools.core.common.DroolsObjectOutputStream)17 ByteArrayOutputStream (java.io.ByteArrayOutputStream)11 DroolsObjectInputStream (org.drools.core.common.DroolsObjectInputStream)9 ByteArrayInputStream (java.io.ByteArrayInputStream)8 Test (org.junit.Test)7 ObjectInputStream (java.io.ObjectInputStream)6 KieBase (org.kie.api.KieBase)6 ObjectOutputStream (java.io.ObjectOutputStream)4 KieSession (org.kie.api.runtime.KieSession)4 ObjectOutput (java.io.ObjectOutput)3 ArrayList (java.util.ArrayList)3 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)3 Marshaller (org.kie.api.marshalling.Marshaller)3 FileOutputStream (java.io.FileOutputStream)2 IOException (java.io.IOException)2 OptionalDataException (java.io.OptionalDataException)2 Collection (java.util.Collection)2 KiePackage (org.kie.api.definition.KiePackage)2 KnowledgeBuilder (org.kie.internal.builder.KnowledgeBuilder)2 Output (com.google.protobuf.ByteString.Output)1