[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting/samples/callback/statistics ...
Ron Sigal
ron_sigal at yahoo.com
Thu Nov 16 18:52:35 EST 2006
User: rsigal
Date: 06/11/16 18:52:35
Added: src/main/org/jboss/remoting/samples/callback/statistics
Tag: remoting_2_x CallbackClient.java
CallbackServer.java
Log:
JBREM-618: Sample code demonstrating CallbackPoller statistics.
Revision Changes Path
No revision
No revision
1.1.2.2 +116 -0 JBossRemoting/src/main/org/jboss/remoting/samples/callback/statistics/CallbackClient.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: CallbackClient.java
===================================================================
RCS file: CallbackClient.java
diff -N CallbackClient.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ CallbackClient.java 16 Nov 2006 23:52:35 -0000 1.1.2.2
@@ -0,0 +1,116 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.remoting.samples.callback.statistics;
+
+import java.util.HashMap;
+
+import org.jboss.remoting.Client;
+import org.jboss.remoting.InvokerLocator;
+import org.jboss.remoting.callback.Callback;
+import org.jboss.remoting.callback.CallbackPoller;
+import org.jboss.remoting.callback.HandleCallbackException;
+import org.jboss.remoting.callback.InvokerCallbackHandler;
+
+/**
+ * Sample client that demonstrates CallbackPoller tuning statistics.
+ *
+ * @author <a href="mailto:ron.sigal at jboss.com">Ron Sigal</a>
+ * @author <a href="mailto:telrod at e2technologies.net">Tom Elrod</a>
+ */
+public class CallbackClient
+{
+ // Default locator values
+ private static String transport = "socket";
+ private static String host = "localhost";
+ private static int port = 5400;
+
+
+ /**
+ * Registers callback listener and asks CallbackPoller to print statistics.
+ */
+ public void getPolledCallbacks(String locatorURI) throws Throwable
+ {
+ System.out.println("Calling remoting server with locator uri of: " + locatorURI);
+ InvokerLocator locator = new InvokerLocator(locatorURI);
+ Client client = new Client(locator);
+ client.connect();
+
+ // Registter callback handler and tell CallbackPoller to report statistics.
+ CallbackHandler callbackHandler = new CallbackHandler();
+ HashMap metadata = new HashMap();
+ metadata.put(CallbackPoller.REPORT_STATISTICS, "true");
+ client.addListener(callbackHandler, metadata);
+
+ // Wait for callbacks to received, processed, and acknowledged.
+ Thread.sleep(20000);
+
+ // remove callback handler from server
+ client.removeListener(callbackHandler);
+ client.disconnect();
+ }
+
+
+ /**
+ * Can pass transport and port to be used as parameters.
+ */
+ public static void main(String[] args)
+ {
+ if(args != null && args.length == 2)
+ {
+ transport = args[0];
+ port = Integer.parseInt(args[1]);
+ }
+ String locatorURI = transport + "://" + host + ":" + port;
+ CallbackClient callbackClient = new CallbackClient();
+ try
+ {
+ callbackClient.getPolledCallbacks(locatorURI);
+ }
+ catch(Throwable e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Our implementation of the InvokerCallbackHandler. Simply
+ * prints out the callback object's message upon receiving it.
+ */
+ public class CallbackHandler implements InvokerCallbackHandler
+ {
+ public void handleCallback(Callback callback) throws HandleCallbackException
+ {
+ // Slow down callback handling so callbacks build up in CallbackPoller.
+ try
+ {
+ Thread.sleep(1000);
+ }
+ catch (InterruptedException e) {}
+
+ System.out.println("Received push callback.");
+ System.out.println("Received callback value of: " + callback.getCallbackObject());
+ System.out.println("Received callback server invoker of: " + callback.getServerLocator());
+ }
+ }
+
+}
\ No newline at end of file
1.1.2.2 +241 -0 JBossRemoting/src/main/org/jboss/remoting/samples/callback/statistics/CallbackServer.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: CallbackServer.java
===================================================================
RCS file: CallbackServer.java
diff -N CallbackServer.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ CallbackServer.java 16 Nov 2006 23:52:35 -0000 1.1.2.2
@@ -0,0 +1,241 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+
+package org.jboss.remoting.samples.callback.statistics;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import javax.management.MBeanServer;
+import org.jboss.remoting.InvocationRequest;
+import org.jboss.remoting.InvokerLocator;
+import org.jboss.remoting.ServerInvocationHandler;
+import org.jboss.remoting.ServerInvoker;
+import org.jboss.remoting.callback.Callback;
+import org.jboss.remoting.callback.CallbackListener;
+import org.jboss.remoting.callback.HandleCallbackException;
+import org.jboss.remoting.callback.InvokerCallbackHandler;
+import org.jboss.remoting.callback.ServerInvokerCallbackHandler;
+import org.jboss.remoting.transport.Connector;
+
+/**
+ * Simple remoting server. Uses inner class SampleInvocationHandler
+ * as the invocation target handler class, which will generate
+ * callback messages upon callback listeners being added.
+ *
+ * @author <a href="mailto:telrod at e2technologies.net">Tom Elrod</a>
+ */
+public class CallbackServer
+{
+ // Default locator values
+ private static String transport = "socket";
+ private static String host = "localhost";
+ private static int port = 5400;
+
+ // counter indicating the number of callbacks generated
+ private static int callbackCounter = 1;
+
+ // remoting server connector
+ private Connector connector = null;
+
+ // String to be returned from invocation handler upon client invocation calls.
+ private static final String RESPONSE_VALUE = "This is the return to SampleInvocationHandler invocation";
+
+ /**
+ * Sets up target remoting server.
+ *
+ * @param locatorURI
+ * @throws Exception
+ */
+ public void setupServer(String locatorURI) throws Exception
+ {
+ InvokerLocator locator = new InvokerLocator(locatorURI);
+ System.out.println("Starting remoting server with locator uri of: " + locatorURI);
+ connector = new Connector();
+ connector.setInvokerLocator(locator.getLocatorURI());
+ connector.create();
+
+ SampleInvocationHandler invocationHandler = new SampleInvocationHandler();
+ connector.addInvocationHandler("sample", invocationHandler);
+
+ connector.start();
+ }
+
+ /**
+ * Shuts down the server
+ */
+ public void shutdownServer()
+ {
+ connector.stop();
+ connector.destroy();
+ }
+
+ /**
+ * Can pass transport and port to be used as parameters.
+ */
+ public static void main(String[] args)
+ {
+ if(args != null && args.length == 2)
+ {
+ transport = args[0];
+ port = Integer.parseInt(args[1]);
+ }
+ String locatorURI = transport + "://" + host + ":" + port;
+ CallbackServer server = new CallbackServer();
+ try
+ {
+ server.setupServer(locatorURI);
+
+ // wait forever, let the user kill us at any point (at which point, the client will detect we went down)
+ while(true)
+ {
+ Thread.sleep(1000);
+ }
+
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Simple invocation handler implementation. When callback clients are registered, will
+ * generate callbacks periodically.
+ */
+ public static class SampleInvocationHandler
+ implements ServerInvocationHandler, Runnable, CallbackListener
+ {
+ // list of callback listeners registered
+ private List listeners = new ArrayList();
+
+ // flag to indicate when should generate callback messages
+ private boolean shouldGenerateCallbacks = false;
+
+ public SampleInvocationHandler()
+ {
+ // will start a new thread for generating callbacks.
+ Thread callbackThread = new Thread(this);
+ callbackThread.setDaemon(true);
+ callbackThread.start();
+ }
+
+ /**
+ * Called by the remoting server to handle the invocation from client.
+ */
+ public Object invoke(InvocationRequest invocation) throws Throwable
+ {
+ return RESPONSE_VALUE;
+ }
+
+ /**
+ * Adds a callback handler that will listen for callbacks from
+ * the server invoker handler.
+ */
+ public void addListener(InvokerCallbackHandler callbackHandler)
+ {
+ System.out.println("Adding callback listener.");
+ listeners.add(callbackHandler);
+ shouldGenerateCallbacks = true;
+ }
+
+ /**
+ * Removes the callback handler that was listening for callbacks
+ * from the server invoker handler.
+ */
+ public void removeListener(InvokerCallbackHandler callbackHandler)
+ {
+ System.out.println("Removing callback listener.");
+ listeners.remove(callbackHandler);
+ if(listeners.size() == 0)
+ {
+ shouldGenerateCallbacks = false;
+ }
+ }
+
+ /**
+ * Will generate callback messages every second while shouldGenerateCallbacks
+ * flag is true.
+ */
+ public void run()
+ {
+ // keep looping while waiting to fire callbacks.
+ while(true)
+ {
+ while(shouldGenerateCallbacks)
+ {
+ // create new callback message
+ Callback callback = new Callback("Callback " + callbackCounter + ": This is the payload of callback invocation.");
+ System.out.println("sending callback: " + callbackCounter);
+
+ // Register as listener, pass callback id, and ask Remoting to handle acknowledgements.
+ HashMap returnPayload = new HashMap();
+ returnPayload.put(ServerInvokerCallbackHandler.CALLBACK_LISTENER, this);
+ returnPayload.put(ServerInvokerCallbackHandler.CALLBACK_ID, new Integer(callbackCounter++));
+ returnPayload.put(ServerInvokerCallbackHandler.REMOTING_ACKNOWLEDGES_PUSH_CALLBACKS, "true");
+ callback.setReturnPayload(returnPayload);
+
+ Iterator itr = listeners.iterator();
+ while(itr.hasNext())
+ {
+ InvokerCallbackHandler callbackHandler = (InvokerCallbackHandler) itr.next();
+ try
+ {
+ callbackHandler.handleCallback(callback);
+ }
+ catch(HandleCallbackException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ // sleep for a second before firing next callback message
+ try
+ {
+ Thread.sleep(1000);
+ }
+ catch(InterruptedException e)
+ {
+ }
+
+ }
+ // sleep for a second before while waiting for flag to be set
+ try
+ {
+ Thread.sleep(1000);
+ }
+ catch(InterruptedException e)
+ {
+ }
+ }
+ }
+
+ public void setMBeanServer(MBeanServer server) {}
+ public void setInvoker(ServerInvoker invoker) {}
+
+ public void acknowledgeCallback(InvokerCallbackHandler callbackHandler, Object callbackId, Object response)
+ {
+ System.out.println("received acknowledgement for callback: " + callbackId);
+ }
+
+ }
+}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list