@Override
 public byte[] handle(byte[] requestBa) {
   ClassLoadingCodeRunnerClient.RemoteCodeRequest request =
       (ClassLoadingCodeRunnerClient.RemoteCodeRequest)
           SerializationHelper.toObject(requestBa, getClass().getClassLoader());
   ClassLoadingCodeRunnerClient.log.debug("handling {}", request);
   try {
     return SerializationHelper.toByteArray(handle(request));
   } catch (Exception e) {
     return SerializationHelper.toByteArray(new FailureResponse(e));
   } finally {
     ClassLoadingCodeRunnerClient.log.debug(
         "handling " + request.getClass().getSimpleName() + " done");
   }
 }
Example #2
0
  @Test
  public void testLocalVariableMVELConsequence() throws Exception {
    final PackageBuilder builder = new PackageBuilder();
    builder.addPackageFromDrl(
        new InputStreamReader(
            getClass().getResourceAsStream("test_LocalVariableMVELConsequence.drl")));
    final Package pkg = builder.getPackage();

    RuleBase ruleBase = getRuleBase();
    ruleBase.addPackage(pkg);
    ruleBase = SerializationHelper.serializeObject(ruleBase);

    final WorkingMemory workingMemory = ruleBase.newStatefulSession();

    final List list = new ArrayList();
    workingMemory.setGlobal("results", list);

    workingMemory.insert(new Person("bob", "stilton"));
    workingMemory.insert(new Person("mark", "brie"));

    try {
      workingMemory.fireAllRules();

      assertEquals("should have fired twice", 2, list.size());

    } catch (Exception e) {
      e.printStackTrace();
      fail("Should not raise any exception");
    }
  }
Example #3
0
  @Test
  @Ignore
  public void testStatefulSessionsCreation() throws Exception {

    final PackageBuilder builder = new PackageBuilder();
    builder.addPackageFromDrl(
        new InputStreamReader(getClass().getResourceAsStream("test_OutOfMemoryError.drl")));
    final Package pkg = builder.getPackage();

    RuleBase ruleBase = getRuleBase();
    ruleBase.addPackage(pkg);
    ruleBase = SerializationHelper.serializeObject(ruleBase);

    int i = 0;

    SessionConfiguration conf = new SessionConfiguration();
    conf.setKeepReference(
        true); // this is just for documentation purposes, since the default value is "true"
    try {
      for (i = 0; i < 300000; i++) {
        final StatefulSession session = ruleBase.newStatefulSession(conf, null);
        session.dispose();
      }
    } catch (Throwable e) {
      System.out.println("Error at: " + i);
      e.printStackTrace();
      fail("Should not raise any error or exception.");
    }
  }
  private StatelessSession getSession() throws Exception {
    final PackageBuilder builder = new PackageBuilder();
    builder.addPackageFromDrl(
        new InputStreamReader(getClass().getResourceAsStream("literal_rule_test.drl")));
    final Package pkg = builder.getPackage();

    RuleBase ruleBase = getRuleBase();
    ruleBase.addPackage(pkg);
    ruleBase = SerializationHelper.serializeObject(ruleBase);
    StatelessSession session = ruleBase.newStatelessSession();

    session = SerializationHelper.serializeObject(session);
    session.setGlobalResolver(this.globalResolver);

    session.setGlobal("list", this.list);
    session.setGlobal("cheesery", this.cheesery);
    return session;
  }
Example #5
0
  private void readStageAck(SelectionKey key) throws IOException {
    SocketChannel socketChannel = (SocketChannel) key.channel();

    ByteBuffer byteBuffer = readBufferMap.get(socketChannel);
    int value = socketChannel.read(byteBuffer);

    if (value < 0) {
      Integer slaveIndex = slave2Index.get(socketChannel);
      log.warn("Slave stopped! Index: " + slaveIndex + ". Remote socket is: " + socketChannel);
      key.cancel();
      if (slaveIndex == null || slaves[slaveIndex] != socketChannel) {
        throw new IllegalStateException("Socket " + socketChannel + " should have been there!");
      }
      throw new IOException("Slave stopped");
    } else if (byteBuffer.position() >= 4) {
      int expectedSize = byteBuffer.getInt(0);
      if ((expectedSize + 4) > byteBuffer.capacity()) {
        ByteBuffer replacer = ByteBuffer.allocate(expectedSize + 4);
        replacer.put(byteBuffer.array(), 0, byteBuffer.position());
        readBufferMap.put(socketChannel, replacer);
        if (log.isTraceEnabled())
          log.trace(
              "Expected size("
                  + expectedSize
                  + ")"
                  + " is > ByteBuffer's capacity("
                  + byteBuffer.capacity()
                  + ")"
                  + ".Replacing "
                  + byteBuffer
                  + " with "
                  + replacer);
        byteBuffer = replacer;
      }
      if (log.isTraceEnabled())
        log.trace(
            "Expected size: "
                + expectedSize
                + ". byteBuffer.position() == "
                + byteBuffer.position());
      if (byteBuffer.position() == expectedSize + 4) {
        log.trace("Received response from " + socketChannel);
        Object response = SerializationHelper.deserialize(byteBuffer.array(), 4, expectedSize);
        byteBuffer.clear();
        responses.add(response);
      }
    }
  }
Example #6
0
 @Override
 public List<DistStageAck> runStage(int stageId, Map<String, Object> masterData, int numSlaves)
     throws IOException {
   responses.clear();
   clearBuffer();
   mcastBuffer.putInt(stageId);
   mcastBuffer =
       SerializationHelper.serializeObjectWithLength((Serializable) masterData, mcastBuffer);
   mcastBuffer(numSlaves);
   flushBuffers(numSlaves);
   ArrayList<DistStageAck> list = new ArrayList<>(responses.size());
   for (Object o : responses) {
     list.add((DistStageAck) o);
   }
   return list;
 }
  @SuppressWarnings("unchecked")
  private ClassLoadingCodeRunnerClient.RemoteCodeResponse handle(
      ClassLoadingCodeRunnerClient.RemoteCodeRequest request) {
    if (request instanceof ClassLoadingCodeRunnerClient.GetToClientMessagesRequest) {
      List<ClassLoadingCodeRunnerClient.RemoteCodeMessage> messages = new ArrayList<>();
      try {
        messages.add(toClient.take());
      } catch (InterruptedException e) {
        throw new RuntimeException(e);
      }
      toClient.drainTo(messages);
      ClassLoadingCodeRunnerClient.log.debug("sending to client: {}", messages);
      return new ToClientMessagesResponse(messages);
    } else if (request instanceof ClassLoadingCodeRunnerClient.SendToServerMessagesRequest) {
      ClassLoadingCodeRunnerClient.SendToServerMessagesRequest sendToServerMessagesRequest =
          (ClassLoadingCodeRunnerClient.SendToServerMessagesRequest) request;
      for (ClassLoadingCodeRunnerClient.RemoteCodeMessage message :
          sendToServerMessagesRequest.messages) {
        ClassLoadingCodeRunnerClient.log.debug("handling toServer message " + message);
        if (message instanceof ClassLoadingCodeRunnerClient.ServerCodeExitReceived) {
          toServerDeserializer.shutdown();
          exitConfirmationReceived.release();
        } else if (message instanceof ClassLoadingCodeRunnerClient.SendResourceMessage) {
          classLoader.addResource((ClassLoadingCodeRunnerClient.SendResourceMessage) message);
        } else if (message instanceof ClassLoadingCodeRunnerClient.SendJarsMessage) {
          classLoader.addJars(((ClassLoadingCodeRunnerClient.SendJarsMessage) message).jars);
        } else if (message instanceof ClassLoadingCodeRunnerClient.CustomMessageWrapper) {
          toServerDeserializer.execute(
              () -> {
                ClassLoadingCodeRunnerClient.CustomMessageWrapper wrapper =
                    (ClassLoadingCodeRunnerClient.CustomMessageWrapper) message;
                TMessage wrappedMessage =
                    (TMessage) SerializationHelper.toObject(wrapper.message, classLoader);
                ClassLoadingCodeRunnerClient.log.debug(
                    "received and deserialized custom message {}", wrappedMessage);
                toServer.add(wrappedMessage);
              });
        } else {
          throw new UnsupportedOperationException("Unknown message " + message);
        }
      }

      return new EmptyResponse();
    } else {
      throw new UnsupportedOperationException(request.getClass().getName());
    }
  }
 @SuppressWarnings("unchecked")
 @Override
 public void run() {
   try {
     ((MessageHandlingServerCode<TMessage>)
             SerializationHelper.toObject(codeDelegate, classLoader))
         .run(this);
     toClient.add(new ServerCodeExited(null));
   } catch (Throwable e) {
     ClassLoadingCodeRunnerClient.log.info("Error occurred: ", e);
     toClient.add(new ServerCodeExited(e));
   } finally {
     try {
       exitConfirmationReceived.acquire();
     } catch (InterruptedException e) {
       throw new RuntimeException(e);
     }
   }
 }
Example #9
0
 @Test
 public void testMVELUsingGlobalsInDebugMode() throws Exception {
   MVELDebugHandler.setDebugMode(true);
   try {
     final PackageBuilder builder = new PackageBuilder();
     builder.addPackageFromDrl(
         new InputStreamReader(getClass().getResourceAsStream("test_MVELGlobalDebug.drl")));
     final Package pkg = builder.getPackage();
     RuleBase ruleBase = getRuleBase();
     ruleBase.addPackage(pkg);
     ruleBase = SerializationHelper.serializeObject(ruleBase);
     final StatefulSession session = ruleBase.newStatefulSession();
     session.dispose();
     MVELDebugHandler.setDebugMode(false);
   } catch (Exception e) {
     MVELDebugHandler.setDebugMode(false);
     e.printStackTrace();
     fail("Should not raise exceptions");
   }
 }
Example #10
0
  @Test
  @Ignore
  public void testAgendaLoop() throws Exception {
    final PackageBuilder builder = new PackageBuilder();
    builder.addPackageFromDrl(
        new InputStreamReader(getClass().getResourceAsStream("test_OutOfMemory.drl")));
    final Package pkg = builder.getPackage();

    RuleBase ruleBase = getRuleBase();
    ruleBase.addPackage(pkg);
    ruleBase = SerializationHelper.serializeObject(ruleBase);
    final WorkingMemory workingMemory = ruleBase.newStatefulSession();

    workingMemory.insert(new Cheese("stilton", 1));

    workingMemory.fireAllRules(3000000);

    // just for profiling
    // Thread.currentThread().wait();
  }
  private StatelessKnowledgeSession getSession2(Resource resource) throws Exception {
    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(resource, ResourceType.DRL);

    if (kbuilder.hasErrors()) {
      System.out.println(kbuilder.getErrors());
    }

    assertFalse(kbuilder.hasErrors());
    Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();

    KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();

    kbase.addKnowledgePackages(pkgs);
    kbase = SerializationHelper.serializeObject(kbase);
    StatelessKnowledgeSession session = kbase.newStatelessKnowledgeSession();

    session.setGlobal("list", this.list);
    session.setGlobal("cheesery", this.cheesery);
    return session;
  }
 @Override
 public void fromData(DataInput in) throws IOException, ClassNotFoundException {
   super.fromData(in);
   this.excludedServers = SerializationHelper.readServerLocationSet(in);
 }
  @Test
  public void testQuery() throws Exception {
    String str = "";
    str += "package org.drools.test  \n";
    str += "import org.drools.Cheese \n";
    str += "query cheeses \n";
    str += "    stilton : Cheese(type == 'stilton') \n";
    str += "    cheddar : Cheese(type == 'cheddar', price == stilton.price) \n";
    str += "end\n";

    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL);

    if (kbuilder.hasErrors()) {
      fail(kbuilder.getErrors().toString());
    }

    KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

    kbase = SerializationHelper.serializeObject(kbase);

    StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
    Cheese stilton1 = new Cheese("stilton", 1);
    Cheese cheddar1 = new Cheese("cheddar", 1);
    Cheese stilton2 = new Cheese("stilton", 2);
    Cheese cheddar2 = new Cheese("cheddar", 2);
    Cheese stilton3 = new Cheese("stilton", 3);
    Cheese cheddar3 = new Cheese("cheddar", 3);

    Set set = new HashSet();
    List list = new ArrayList();
    list.add(stilton1);
    list.add(cheddar1);
    set.add(list);

    list = new ArrayList();
    list.add(stilton2);
    list.add(cheddar2);
    set.add(list);

    list = new ArrayList();
    list.add(stilton3);
    list.add(cheddar3);
    set.add(list);

    List<Command> cmds = new ArrayList<Command>();
    cmds.add(CommandFactory.newInsert(stilton1));
    cmds.add(CommandFactory.newInsert(stilton2));
    cmds.add(CommandFactory.newInsert(stilton3));
    cmds.add(CommandFactory.newInsert(cheddar1));
    cmds.add(CommandFactory.newInsert(cheddar2));
    cmds.add(CommandFactory.newInsert(cheddar3));

    cmds.add(CommandFactory.newQuery("cheeses", "cheeses"));

    ExecutionResults batchResult =
        (ExecutionResults) ksession.execute(CommandFactory.newBatchExecution(cmds));

    org.drools.runtime.rule.QueryResults results =
        (org.drools.runtime.rule.QueryResults) batchResult.getValue("cheeses");
    assertEquals(3, results.size());
    assertEquals(2, results.getIdentifiers().length);
    Set newSet = new HashSet();
    for (org.drools.runtime.rule.QueryResultsRow result : results) {
      list = new ArrayList();
      list.add(result.get("stilton"));
      list.add(result.get("cheddar"));
      newSet.add(list);
    }
    assertEquals(set, newSet);
  }
 public ClassLoadingServerCode(MessageHandlingServerCode<TMessage> codeDelegate) {
   this.codeDelegate = SerializationHelper.toByteArray(codeDelegate);
 }
Example #15
0
 private void mcastObject(Serializable object, int numSlaves) throws IOException {
   clearBuffer();
   mcastBuffer = SerializationHelper.serializeObjectWithLength(object, mcastBuffer);
   mcastBuffer(numSlaves);
 }
 @Override
 public void toData(DataOutput out) throws IOException {
   super.toData(out);
   SerializationHelper.writeServerLocationSet(this.excludedServers, out);
 }
 @Override
 public void sendToClient(TMessage msg) {
   toClient.add(new CustomMessageWrapper(SerializationHelper.toByteArray(msg)));
 }