diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcClientCall.java b/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcClientCall.java index 1ad03ef89de..0a2bfe4a5b5 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcClientCall.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcClientCall.java @@ -29,14 +29,14 @@ public interface RpcClientCall { Object getCommandArg(); RpcClientCall setContextParam(String key, Object param); - Object getContextParam(String key); + T getContextParam(String key); RpcClientCall addCallbackListener(RpcCallbackListener listener); RpcClientCall setCallbackDispatcherTarget(Object target); RpcClientCall setOneway(); - void apply(); + RpcClientCall apply(); void cancel(); /** diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcClientCallImpl.java b/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcClientCallImpl.java index 32982456190..ba8dd144180 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcClientCallImpl.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcClientCallImpl.java @@ -136,7 +136,7 @@ public class RpcClientCallImpl implements RpcClientCall { } @Override - public void apply() { + public RpcClientCall apply() { // sanity check assert(_sourceAddress != null); assert(_targetAddress != null); @@ -152,6 +152,8 @@ public class RpcClientCallImpl implements RpcClientCall { _rpcProvider.sendRpcPdu(getSourceAddress(), getTargetAddress(), _rpcProvider.getMessageSerializer().serializeTo(RpcCallRequestPdu.class, pdu)); + + return this; } @Override diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcServerCall.java b/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcServerCall.java index b6dd943cbc9..4df851d9cf0 100644 --- a/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcServerCall.java +++ b/framework/ipc/src/org/apache/cloudstack/framework/messaging/RpcServerCall.java @@ -20,7 +20,7 @@ package org.apache.cloudstack.framework.messaging; public interface RpcServerCall { String getCommand(); - Object getCommandArgument(); + T getCommandArgument(); // for receiver to response call void completeCall(Object returnObject); diff --git a/framework/ipc/test/org/apache/cloudstack/framework/messaging/ClientOnlyEventDrivenStyle.java b/framework/ipc/test/org/apache/cloudstack/framework/messaging/ClientOnlyEventDrivenStyle.java new file mode 100644 index 00000000000..2fff15b28a0 --- /dev/null +++ b/framework/ipc/test/org/apache/cloudstack/framework/messaging/ClientOnlyEventDrivenStyle.java @@ -0,0 +1,28 @@ +package org.apache.cloudstack.framework.messaging; + +public class ClientOnlyEventDrivenStyle { + RpcProvider _rpcProvider; + + public void AsyncCallRpcService() { + TestCommand cmd = new TestCommand(); + _rpcProvider.newCall("host-2").setCommand("TestCommand").setCommandArg(cmd).setTimeout(10000) + .setCallbackDispatcherTarget(this) + .setContextParam("origCmd", cmd) // save context object for callback handler + .apply(); + } + + @RpcCallbackHandler(command="TestCommand") + public void OnAsyncCallRpcServiceCallback(RpcClientCall call) { + try { + TestCommand origCmd = call.getContextParam("origCmd"); // restore calling context at callback handler + + TestCommandAnswer answer = call.get(); + + } catch(RpcTimeoutException e) { + + } catch(RpcIOException e) { + + } catch(RpcException e) { + } + } +} diff --git a/framework/ipc/test/org/apache/cloudstack/framework/messaging/ClientOnlyListenerStyle.java b/framework/ipc/test/org/apache/cloudstack/framework/messaging/ClientOnlyListenerStyle.java new file mode 100644 index 00000000000..ed58382cc27 --- /dev/null +++ b/framework/ipc/test/org/apache/cloudstack/framework/messaging/ClientOnlyListenerStyle.java @@ -0,0 +1,34 @@ +package org.apache.cloudstack.framework.messaging; + +public class ClientOnlyListenerStyle { + + RpcProvider _rpcProvider; + + public void AsyncCallRpcService() { + TestCommand cmd = new TestCommand(); + _rpcProvider.newCall("host-2").setCommand("TestCommand").setCommandArg(cmd).setTimeout(10000) + .addCallbackListener(new RpcCallbackListener() { + @Override + public void onSuccess(TestCommandAnswer result) { + } + + @Override + public void onFailure(RpcException e) { + } + }).apply(); + } + + public void SyncCallRpcService() { + TestCommand cmd = new TestCommand(); + RpcClientCall call = _rpcProvider.newCall("host-2").setCommand("TestCommand").setCommandArg(cmd).setTimeout(10000).apply(); + + try { + TestCommandAnswer answer = call.get(); + } catch (RpcTimeoutException e) { + + } catch (RpcIOException e) { + + } catch (RpcException e) { + } + } +} diff --git a/framework/ipc/test/org/apache/cloudstack/framework/messaging/SampleComponent.java b/framework/ipc/test/org/apache/cloudstack/framework/messaging/SampleComponent.java index 869b661881d..cd76729d28e 100644 --- a/framework/ipc/test/org/apache/cloudstack/framework/messaging/SampleComponent.java +++ b/framework/ipc/test/org/apache/cloudstack/framework/messaging/SampleComponent.java @@ -28,10 +28,6 @@ public class SampleComponent extends ComponentEndpoint { call.completeCall("Call response"); } - @RpcCallbackHandler(command="StartCommand") - void onStartCommandCallback(RpcClientCall call) { - } - @EventHandler(topic="network.prepare") void onPrepareNetwork(String sender, String topic, Object args) { } diff --git a/framework/ipc/test/org/apache/cloudstack/framework/messaging/TestCommand.java b/framework/ipc/test/org/apache/cloudstack/framework/messaging/TestCommand.java new file mode 100644 index 00000000000..c8f62a5c749 --- /dev/null +++ b/framework/ipc/test/org/apache/cloudstack/framework/messaging/TestCommand.java @@ -0,0 +1,7 @@ +package org.apache.cloudstack.framework.messaging; + +@OnwireName(name="TestCommand") +public class TestCommand { + public TestCommand() { + } +} diff --git a/framework/ipc/test/org/apache/cloudstack/framework/messaging/TestCommandAnswer.java b/framework/ipc/test/org/apache/cloudstack/framework/messaging/TestCommandAnswer.java new file mode 100644 index 00000000000..550333b6261 --- /dev/null +++ b/framework/ipc/test/org/apache/cloudstack/framework/messaging/TestCommandAnswer.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.cloudstack.framework.messaging; + +@OnwireName(name="TestCommandAnswer") +public class TestCommandAnswer { +}