[Ubermq-commits] jms/src/com/ubermq/jms/server/routing/impl ConnectionDestNode.java,1.6,1.7 RegexpHe
Brought to you by:
jimmyp
From: <ji...@us...> - 2002-09-18 21:06:33
|
Update of /cvsroot/ubermq/jms/src/com/ubermq/jms/server/routing/impl In directory usw-pr-cvs1:/tmp/cvs-serv30330/src/com/ubermq/jms/server/routing/impl Modified Files: ConnectionDestNode.java RegexpHelper.java RegexpSourceSpec.java Router.java Log Message: javadoc... Index: ConnectionDestNode.java =================================================================== RCS file: /cvsroot/ubermq/jms/src/com/ubermq/jms/server/routing/impl/ConnectionDestNode.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ConnectionDestNode.java 10 Sep 2002 21:09:10 -0000 1.6 --- ConnectionDestNode.java 18 Sep 2002 21:06:30 -0000 1.7 *************** *** 6,9 **** --- 6,14 ---- import com.ubermq.kernel.overflow.*; + /** + * Implements a destination that contains information about a connected peer. + * The message server will use this information from the router to forward + * messages to their logical destinations. + */ public class ConnectionDestNode implements RouteDestNode, OutputDestNode, Comparable, java.io.Serializable *************** *** 17,24 **** public boolean isOpen() {return getConnection().isOpen();} - /** - * expose the output() method for the connection so we can - * write to the endpoint. - */ public void output(IDatagram d, IOverflowHandler h) { --- 22,25 ---- Index: RegexpHelper.java =================================================================== RCS file: /cvsroot/ubermq/jms/src/com/ubermq/jms/server/routing/impl/RegexpHelper.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** RegexpHelper.java 28 Aug 2002 20:42:49 -0000 1.2 --- RegexpHelper.java 18 Sep 2002 21:06:31 -0000 1.3 *************** *** 1,24 **** package com.ubermq.jms.server.routing.impl; public class RegexpHelper { /** ! * The hierarchical wildcarding scheme is similar to ! * other popular JMS servers out there, with some extensions. * ! * "*" matches exactly one topic level, e.g. ! * a.b.* matches a.b.x, a.b.y, but not a.b.y.z * <P> * ! * "#" matches any number of topic levels, e.g. ! * a.b.# matches a.b.x, a.b.y, a.b.y.z * <P> * ! * however, topic spaces preceded by a . will not be matched by wildcards, ! * so .com.ubermq.... will not be matched by #, nor * */ ! public static String xlat(String smqWildcard) { ! StringBuffer regexp = new StringBuffer(smqWildcard); replaceChar(regexp, '$', "\\$"); replaceChar(regexp, '.', "\\."); --- 1,45 ---- package com.ubermq.jms.server.routing.impl; + /** + * A helper class providing regex translation facilities. + */ public class RegexpHelper { /** ! * The UberMQ topic matching scheme is quite simple, but provides ! * access to pure regex if that functionality is desired. ! * <P> * ! * <code>*</code> matches exactly one topic level, e.g. ! * <code>a.b.*</code> matches <code>a.b.x</code>, <code>a.b.y</code>, ! * but not <code>a.b.y.z</code> * <P> * ! * <code>#</code> matches any number of topic levels, e.g. ! * <code>a.b.#</code> matches <code>a.b.x</code>, <code>a.b.y</code>, ! * and <code>a.b.y.z</code> * <P> * ! * Topic spaces preceded by a . will not be matched by wildcards, ! * so .secret will not be matched by #, nor *. This serves ! * to hide topics from aggressive wildcarding. These topics can be ! * subscribed to by explicitly naming them. ! * <P> ! * ! * System topics begin with a <code>.$</code>. Please do not subscribe to or use these, ! * or your application behavior will be undefined. ! * <P> ! * ! * Finally, for regex fans, the underlying regex engine can be ! * accessed by specifying a tilde (~) as the first character of the topic name. ! * So, <code>~.*</code> will match all topic names, even hidden or system topics. */ ! public static String xlat(String friendly) { ! // bypass the translation if the first character is a ~ ! if (friendly.length() > 0 && friendly.charAt(0) == '~') ! return friendly; ! ! StringBuffer regexp = new StringBuffer(friendly); replaceChar(regexp, '$', "\\$"); replaceChar(regexp, '.', "\\."); *************** *** 29,32 **** --- 50,57 ---- } + /** + * Replaces all instances of a character in a string buffer with + * a character sequence. + */ public static void replaceChar(StringBuffer regexp, char ch, String repl) { Index: RegexpSourceSpec.java =================================================================== RCS file: /cvsroot/ubermq/jms/src/com/ubermq/jms/server/routing/impl/RegexpSourceSpec.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** RegexpSourceSpec.java 9 Aug 2002 15:17:55 -0000 1.1 --- RegexpSourceSpec.java 18 Sep 2002 21:06:31 -0000 1.2 *************** *** 5,8 **** --- 5,12 ---- import java.util.regex.*; + /** + * A source specification that uses regular expressions to + * determine if two specifications match. + */ public class RegexpSourceSpec extends StaticSourceSpec Index: Router.java =================================================================== RCS file: /cvsroot/ubermq/jms/src/com/ubermq/jms/server/routing/impl/Router.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Router.java 9 Aug 2002 15:17:55 -0000 1.1 --- Router.java 18 Sep 2002 21:06:31 -0000 1.2 *************** *** 5,8 **** --- 5,17 ---- import java.io.*; + /** + * The core router implementation providing a route table. This implementation + * has memoization for faster route resolutions, a statistics interface, + * and supports dynamic route table modifications. + * <P> + * Possible enhancements include: keeping memoized routes if route table + * changes would not affect them, better statistics, and a way + * to serialize route table information to XML. + */ public final class Router implements IRouter, IConfigurableRouter, IRouterStatistics, Serializable *************** *** 19,23 **** // memoize our route table ! private transient HashMap memoization = new HashMap(); private transient volatile int nCacheHits, nCacheRequests; --- 28,32 ---- // memoize our route table ! private transient Map memoization = new WeakHashMap(); private transient volatile int nCacheHits, nCacheRequests; *************** *** 41,48 **** --- 50,59 ---- myLabel = label; } + public String getNodeLabel() { return myLabel; } + protected synchronized void init() { *************** *** 69,79 **** Object cached; nCacheRequests++; - - if (spec.shouldCacheResults()) { if (memoization == null) { memoization = new HashMap(); } ! if ((cached = memoization.get(spec)) != null) { nCacheHits++; --- 80,90 ---- Object cached; nCacheRequests++; + if (spec.shouldCacheResults()) { + if (memoization == null) { memoization = new HashMap(); } ! if ((cached = memoization.get(spec)) != null) { nCacheHits++; *************** *** 248,252 **** // statistics functions ! public int numberOfRoutes() {return routes.size();} public synchronized void messageIn() {nMessagesIn++;} public synchronized void messageOut() {nMessagesOut++;} --- 259,263 ---- // statistics functions ! public int numberOfRoutes() {return routes.size();} public synchronized void messageIn() {nMessagesIn++;} public synchronized void messageOut() {nMessagesOut++;} |