Index: /objectmq/src/omq/ztest/calculator/Calculator.java
===================================================================
--- /objectmq/src/omq/ztest/calculator/Calculator.java	(revision 7)
+++ /objectmq/src/omq/ztest/calculator/Calculator.java	(revision 7)
@@ -0,0 +1,24 @@
+package omq.ztest.calculator;
+
+import omq.Remote;
+import omq.client.annotation.AsyncMethod;
+import omq.client.annotation.RemoteInterface;
+import omq.client.annotation.SyncMethod;
+
+@RemoteInterface
+public interface Calculator extends Remote {
+	@SyncMethod(timeout = 1500)
+	public int add(int x, int y);
+
+	@SyncMethod(retry = 1, timeout = 1500)
+	public int inc();
+
+	@AsyncMethod
+	public void asyncAdd(int x, int y);
+
+	@AsyncMethod(generateEvent = "SUBS")
+	public int subs(int x, int y);
+
+	@AsyncMethod
+	public void mult(int x, int y);
+}
Index: /objectmq/src/omq/ztest/calculator/CalculatorImpl.java
===================================================================
--- /objectmq/src/omq/ztest/calculator/CalculatorImpl.java	(revision 7)
+++ /objectmq/src/omq/ztest/calculator/CalculatorImpl.java	(revision 7)
@@ -0,0 +1,48 @@
+package omq.ztest.calculator;
+
+import omq.server.remote.request.RemoteObject;
+
+public class CalculatorImpl extends RemoteObject implements Calculator {
+	private int x = 0;
+	private int asyncAdd = 0;
+
+	public CalculatorImpl() throws Exception {
+		super();
+	}
+
+	private static final long serialVersionUID = 1L;
+
+	public int add(int x, int y) {
+		return x + y;
+	}
+
+	public void asyncAdd(int x, int y) {
+		asyncAdd = x + y;
+	}
+
+	public int inc() {
+		return ++x;
+	}
+
+	public int subs(int x, int y) {
+		return x - y;
+	}
+
+	public void mult(int x, int y) {
+		int mult = (x * y);
+		try {
+			this.notify(mult);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public int getAsyncAdd() {
+		return asyncAdd;
+	}
+
+	public void setAsyncAdd(int asyncAdd) {
+		this.asyncAdd = asyncAdd;
+	}
+
+}
Index: /objectmq/src/omq/ztest/calculator/CalculatorTest.java
===================================================================
--- /objectmq/src/omq/ztest/calculator/CalculatorTest.java	(revision 7)
+++ /objectmq/src/omq/ztest/calculator/CalculatorTest.java	(revision 7)
@@ -0,0 +1,122 @@
+package omq.ztest.calculator;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Properties;
+
+import omq.common.broker.Broker;
+import omq.common.util.ParameterQueue;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class CalculatorTest {
+	private static CalculatorImpl calc;
+	private static Calculator remoteCalc;
+
+	@BeforeClass
+	public static void startServer() throws Exception {
+		Properties env = new Properties();
+		env.setProperty(ParameterQueue.USER_NAME, "guest");
+		env.setProperty(ParameterQueue.USER_PASS, "guest");
+
+		// Get host info of rabbimq (where it is)
+		env.setProperty(ParameterQueue.SERVER_HOST, "127.0.0.1");
+		env.setProperty(ParameterQueue.SERVER_PORT, "5672");
+
+		// Get info about the queue & the exchange where the RemoteListener will
+		// listen to.
+		env.setProperty(ParameterQueue.RPC_EXCHANGE, "rpc_exchange");
+		env.setProperty(ParameterQueue.RPC_QUEUE, "rpc_queue");
+		env.setProperty(ParameterQueue.RPC_ROUTING_KEY, "rpc");
+
+		calc = new CalculatorImpl();
+
+		Broker.initBroker(env);
+		Broker.bind(Calculator.class.getSimpleName(), calc);
+	}
+
+	@BeforeClass
+	public static void startClient() throws Exception {
+		Properties env = new Properties();
+		env.setProperty(ParameterQueue.USER_NAME, "guest");
+		env.setProperty(ParameterQueue.USER_PASS, "guest");
+
+		// Set host info of rabbimq (where it is)
+		env.setProperty(ParameterQueue.SERVER_HOST, "127.0.0.1");
+		env.setProperty(ParameterQueue.SERVER_PORT, "5672");
+
+		// Set info about where the message will be sent
+		env.setProperty(ParameterQueue.RPC_EXCHANGE, "rpc_exchange");
+		env.setProperty(ParameterQueue.RPC_ROUTING_KEY, "rpc");
+
+		// Set info about the queue & the exchange where the ResponseListener
+		// will listen to.
+		env.setProperty(ParameterQueue.RPC_REPLY_QUEUE, "reply_queue");
+		env.setProperty(ParameterQueue.EVENT_REPLY_QUEUE, "event_queue");
+
+		Broker.initBroker(env);
+
+		remoteCalc = (Calculator) Broker.lookup(Calculator.class.getSimpleName(), Calculator.class);
+	}
+
+	@Test
+	public void sync_method_add() throws Exception {
+		int x = 10;
+		int y = 20;
+
+		int sync = remoteCalc.add(x, y);
+		int sum = x + y;
+
+		assertEquals(sum, sync);
+	}
+
+	@Test
+	public void async_method_subs_SUBS_event() throws Exception {
+		SubsListener subs = new SubsListener("SUBS");
+		remoteCalc.addListener(subs);
+
+		int x = 10;
+		int y = 20;
+
+		int z = x - y;
+
+		try {
+			remoteCalc.subs(x, y);
+		} catch (Exception e) {
+		}
+
+		Thread.sleep(200);
+
+		assertEquals(z, subs.getResult());
+
+	}
+
+	@Test
+	public void async_method_add_no_event() throws Exception {
+		int x = 100;
+		int y = 22;
+		int result = x + y;
+
+		remoteCalc.asyncAdd(x, y);
+		Thread.sleep(200);
+
+		assertEquals(calc.getAsyncAdd(), result);
+	}
+
+	@Test
+	public void async_method_mult_notify_event() throws Exception {
+		int x = 2;
+		int y = 3;
+		int mult = x * y;
+
+		MultListener m = new MultListener();
+		remoteCalc.addListener(m);
+
+		remoteCalc.mult(x, y);
+		Thread.sleep(200);
+
+		assertEquals(mult, m.getMult());
+	}
+
+}
Index: /objectmq/src/omq/ztest/calculator/MultListener.java
===================================================================
--- /objectmq/src/omq/ztest/calculator/MultListener.java	(revision 7)
+++ /objectmq/src/omq/ztest/calculator/MultListener.java	(revision 7)
@@ -0,0 +1,21 @@
+package omq.ztest.calculator;
+
+import omq.common.event.Event;
+import omq.common.event.EventListener;
+
+public class MultListener extends EventListener {
+	private int mult = 0;
+
+	@Override
+	public void notifyEvent(Event event) {
+		mult = (Integer) event.getObj();
+	}
+
+	public int getMult() {
+		return mult;
+	}
+
+	public void setMult(int mult) {
+		this.mult = mult;
+	}
+}
Index: /objectmq/src/omq/ztest/calculator/SubsListener.java
===================================================================
--- /objectmq/src/omq/ztest/calculator/SubsListener.java	(revision 7)
+++ /objectmq/src/omq/ztest/calculator/SubsListener.java	(revision 7)
@@ -0,0 +1,25 @@
+package omq.ztest.calculator;
+
+import omq.common.event.Event;
+import omq.common.event.EventListener;
+
+public class SubsListener extends EventListener {
+	private int result;
+
+	public SubsListener(String topic) {
+		super(topic);
+	}
+
+	public void notifyEvent(Event event) {
+		result = (Integer) event.getObj();
+	}
+
+	public int getResult() {
+		return result;
+	}
+
+	public void setResult(int result) {
+		this.result = result;
+	}
+
+}
