HelloWorld implementation against the calculus API added.
(does not fully work (yet) because the gargabe collection doesn't work with CommChannels)
diff --git a/src/test/java/org/apache/ode/jacob/examples/helloworld/HelloWorld.java b/src/test/java/org/apache/ode/jacob/examples/helloworld/HelloWorld.java
index 5c4b78b..51a5a18 100644
--- a/src/test/java/org/apache/ode/jacob/examples/helloworld/HelloWorld.java
+++ b/src/test/java/org/apache/ode/jacob/examples/helloworld/HelloWorld.java
@@ -20,12 +20,16 @@
import static org.apache.ode.jacob.Jacob.*;
+import org.apache.ode.jacob.ChannelRef;
import org.apache.ode.jacob.JacobObject;
+import org.apache.ode.jacob.Message;
+import org.apache.ode.jacob.MessageListener;
import org.apache.ode.jacob.examples.sequence.Sequence;
import org.apache.ode.jacob.oo.Channel;
import org.apache.ode.jacob.oo.ReceiveProcess;
import org.apache.ode.jacob.oo.Synch;
import org.apache.ode.jacob.oo.Val;
+import org.apache.ode.jacob.soup.CommChannel;
import org.apache.ode.jacob.soup.jackson.JacksonExecutionQueueImpl;
import org.apache.ode.jacob.soup.jackson.JacobModule;
import org.apache.ode.jacob.vpu.JacobVPU;
@@ -215,6 +219,63 @@
instance(new HWSequence(greeting, out, null));
}
+ protected void calculusHelloWorld() {
+ // new(out)
+ final CommChannel out = newCommChannel(Val.class, "calculusHelloWorld-out");
+ // new(x)
+ final CommChannel x = newCommChannel(Val.class, "calculusHelloWorld-x");
+
+ // *(?out(str).!sysout(str))
+ subscribe(true, out, new PrinterMessageListener());
+ // *(?x(str).!out(str))
+ subscribe(true, x, new ForwarderMessageListener(out));
+ // !out(hello) | !out(world)
+ instance(new StringEmitterRunnable("Hello", x));
+ instance(new StringEmitterRunnable("World", x));
+ }
+
+ static class PrinterMessageListener implements MessageListener {
+
+ @Override
+ public void onMessage(Message msg) {
+ System.out.println(msg.getBody());
+ }
+
+ }
+
+ static class ForwarderMessageListener implements MessageListener {
+ private CommChannel to;
+
+ @JsonCreator
+ public ForwarderMessageListener(@JsonProperty("to") CommChannel to) {
+ this.to = to;
+ }
+
+ @Override
+ public void onMessage(Message msg) {
+ Message msg2 = new Message(new ChannelRef(to), null, msg.getAction());
+ msg2.setBody(msg.getBody());
+ sendMessage(msg2);
+ }
+ }
+
+ static class StringEmitterRunnable extends JacobObject implements Runnable {
+ private String str;
+ private CommChannel to;
+
+ @JsonCreator
+ public StringEmitterRunnable(@JsonProperty("str") String str, @JsonProperty("to") CommChannel to) {
+ this.str = str;
+ this.to = to;
+ }
+
+ public void run() {
+ Message msg = new Message(new ChannelRef(to), null, "printHW");
+ msg.setBody(str);
+ sendMessage(msg);
+ }
+ }
+
static class HWSequence extends Sequence {
private final String[] greetings;
@@ -255,9 +316,10 @@
@Override
public void run() {
- simpleHelloWorld();
- reliableHelloWorld();
- sequencedHelloWorld();
+// simpleHelloWorld();
+// reliableHelloWorld();
+// sequencedHelloWorld();
+ calculusHelloWorld();
}
public static void main(String args[]) throws Exception {
@@ -294,7 +356,7 @@
public static JacksonExecutionQueueImpl loadAndRestoreQueue(ObjectMapper mapper, JacksonExecutionQueueImpl in) throws Exception {
byte[] json = mapper.writeValueAsBytes(in);
// print json
- //System.out.println(new String(json));
+ System.out.println(new String(json));
JacksonExecutionQueueImpl q2 = mapper.readValue(json, JacksonExecutionQueueImpl.class);
return q2;
}