You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jcs-dev@jakarta.apache.org by as...@apache.org on 2008/08/27 18:45:47 UTC
svn commit: r689520 - in /jakarta/jcs/trunk/src:
java/org/apache/jcs/auxiliary/lateral/
java/org/apache/jcs/auxiliary/lateral/socket/tcp/
java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/
java/org/apache/jcs/auxiliary/remote/ java/org/apache/...
Author: asmuts
Date: Wed Aug 27 09:45:46 2008
New Revision: 689520
URL: http://svn.apache.org/viewvc?rev=689520&view=rev
Log:
Added more event logging. Formatting and javadocs. And JCS-40 host address resolution work-around.
https://issues.apache.org/jira/browse/JCS-40
Added:
jakarta/jcs/trunk/src/test/org/apache/jcs/utils/net/
jakarta/jcs/trunk/src/test/org/apache/jcs/utils/net/HostNameUtilUnitTest.java
Modified:
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/ZombieLateralCacheService.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPService.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/TCPLateralCacheAttributes.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryMessage.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryReceiver.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoverySenderThread.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryService.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheListener.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheStartupServlet.java
jakarta/jcs/trunk/src/java/org/apache/jcs/utils/net/HostNameUtil.java
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryUnitTest.java
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/ZombieLateralCacheService.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/ZombieLateralCacheService.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/ZombieLateralCacheService.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/ZombieLateralCacheService.java Wed Aug 27 09:45:46 2008
@@ -28,54 +28,54 @@
import org.apache.jcs.engine.behavior.ICacheElement;
/**
- * The ZombieLateralCacheService is used as a facade when the lateral is not
- * available. It balks when the lateral is in error. When lateral service is
- * restored, this is replaced by a live facade.
- *
+ * The ZombieLateralCacheService is used as a facade when the lateral is not available. It balks
+ * when the lateral is in error. When lateral service is restored, this is replaced by a live
+ * facade.
*/
public class ZombieLateralCacheService
extends ZombieCacheService
implements ILateralCacheService
{
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheService#update(org.apache.jcs.engine.behavior.ICacheElement,
- * long)
+ /**
+ * Balks
+ * <p>
+ * @param item
+ * @param listenerId
*/
public void update( ICacheElement item, long listenerId )
{
// zombies have no inner life
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheService#remove(java.lang.String,
- * java.io.Serializable, long)
+ /**
+ * Balks
+ * <p>
+ * @param cacheName
+ * @param key
+ * @param listenerId
*/
public void remove( String cacheName, Serializable key, long listenerId )
{
// zombies have no inner life
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheService#removeAll(java.lang.String,
- * long)
+ /**
+ * Balks
+ * <p>
+ * @param cacheName
+ * @param listenerId
*/
public void removeAll( String cacheName, long listenerId )
{
// zombies have no inner life
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheService#getGroupKeys(java.lang.String,
- * java.lang.String)
+ /**
+ * Balks
+ * <p>
+ * @param cacheName
+ * @param groupName
+ * @return empty set
*/
public Set getGroupKeys( String cacheName, String groupName )
{
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPSender.java Wed Aug 27 09:45:46 2008
@@ -19,9 +19,7 @@
* under the License.
*/
-import java.io.BufferedReader;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
@@ -32,7 +30,6 @@
import org.apache.jcs.auxiliary.lateral.LateralElementDescriptor;
import org.apache.jcs.auxiliary.lateral.socket.tcp.behavior.ITCPLateralCacheAttributes;
import org.apache.jcs.auxiliary.lateral.socket.tcp.utils.SocketOpener;
-import org.apache.jcs.engine.CacheElement;
import org.apache.jcs.engine.behavior.ICacheElement;
/**
@@ -409,36 +406,4 @@
{
return remoteHost;
}
-
- /**
- * This is a Testing Method. It should be moved to a unit test.
- * @param args
- */
- public static void main( String args[] )
- {
- try
- {
- LateralTCPSender lur = null;
- // new LateralTCPSender( "localhost", 1111 );
-
- // process user input till done
- boolean notDone = true;
- String message = null;
- // wait to dispose
- BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
-
- while ( notDone )
- {
- System.out.println( "enter mesage:" );
- message = br.readLine();
- CacheElement ce = new CacheElement( "test", "test", message );
- LateralElementDescriptor led = new LateralElementDescriptor( ce );
- lur.send( led );
- }
- }
- catch ( Exception e )
- {
- System.out.println( e.toString() );
- }
- }
}
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPService.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPService.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPService.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/LateralTCPService.java Wed Aug 27 09:45:46 2008
@@ -175,7 +175,8 @@
}
/**
- * Does nothing.
+ * Does nothing. <p.
+ * @throws IOException
*/
public void release()
throws IOException
@@ -215,9 +216,11 @@
// nothing needs to be done
}
- /*
- * (non-Javadoc)
- * @see org.apache.jcs.engine.behavior.ICacheService#get(java.lang.String, java.io.Serializable)
+ /**
+ * @param cacheName
+ * @param key
+ * @return ICacheElement if found.
+ * @throws IOException
*/
public ICacheElement get( String cacheName, Serializable key )
throws IOException
@@ -288,9 +291,9 @@
return null;
}
- /*
- * (non-Javadoc)
- * @see org.apache.jcs.engine.behavior.ICacheService#removeAll(java.lang.String)
+ /**
+ * @param cacheName
+ * @throws IOException
*/
public void removeAll( String cacheName )
throws IOException
@@ -298,10 +301,10 @@
removeAll( cacheName, getListenerId() );
}
- /*
- * (non-Javadoc)
- * @see org.apache.jcs.auxiliary.lateral.behavior.ILateralCacheService#removeAll(java.lang.String,
- * long)
+ /**
+ * @param cacheName
+ * @param requesterId
+ * @throws IOException
*/
public void removeAll( String cacheName, long requesterId )
throws IOException
@@ -347,10 +350,10 @@
// the connection is not registered, the udp service is
// is not registered.
- /*
- * (non-Javadoc)
- * @see org.apache.jcs.engine.behavior.ICacheObserver#addCacheListener(java.lang.String,
- * org.apache.jcs.engine.behavior.ICacheListener)
+ /**
+ * @param cacheName
+ * @param obj
+ * @throws IOException
*/
public void addCacheListener( String cacheName, ICacheListener obj )
throws IOException
@@ -358,9 +361,9 @@
// Empty
}
- /*
- * (non-Javadoc)
- * @see org.apache.jcs.engine.behavior.ICacheObserver#addCacheListener(org.apache.jcs.engine.behavior.ICacheListener)
+ /**
+ * @param obj
+ * @throws IOException
*/
public void addCacheListener( ICacheListener obj )
throws IOException
@@ -368,10 +371,10 @@
// Empty
}
- /*
- * (non-Javadoc)
- * @see org.apache.jcs.engine.behavior.ICacheObserver#removeCacheListener(java.lang.String,
- * org.apache.jcs.engine.behavior.ICacheListener)
+ /**
+ * @param cacheName
+ * @param obj
+ * @throws IOException
*/
public void removeCacheListener( String cacheName, ICacheListener obj )
throws IOException
@@ -379,9 +382,9 @@
// Empty
}
- /*
- * (non-Javadoc)
- * @see org.apache.jcs.engine.behavior.ICacheObserver#removeCacheListener(org.apache.jcs.engine.behavior.ICacheListener)
+ /**
+ * @param obj
+ * @throws IOException
*/
public void removeCacheListener( ICacheListener obj )
throws IOException
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/TCPLateralCacheAttributes.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/TCPLateralCacheAttributes.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/TCPLateralCacheAttributes.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/TCPLateralCacheAttributes.java Wed Aug 27 09:45:46 2008
@@ -27,15 +27,12 @@
* This interface defines functions that are particular to the TCP Lateral Cache
* plugin. It extends the generic LateralCacheAttributes interface which in turn
* extends the AuxiliaryCache interface.
- *
- * @author Aaron Smuts
- *
*/
public class TCPLateralCacheAttributes
extends LateralCacheAttributes
implements ITCPLateralCacheAttributes
{
-
+ /** Don't change. */
private static final long serialVersionUID = 1077889204513905220L;
private static final String DEFAULT_UDP_DISCOVERY_ADDRESS = "228.5.6.7";
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryMessage.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryMessage.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryMessage.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryMessage.java Wed Aug 27 09:45:46 2008
@@ -24,25 +24,22 @@
import java.util.Iterator;
/**
- *
- * @author Aaron Smuts
- *
+ * The message sent by the discovery mechanism.
*/
public class UDPDiscoveryMessage
implements Serializable
{
-
+ /** Don't change */
private static final long serialVersionUID = -5332377899560951794L;
/**
- * This is the periodic broadcast of a servers location. This type of
- * message is also sent in response to a REQUEST_BROADCAST.
+ * This is the periodic broadcast of a servers location. This type of message is also sent in
+ * response to a REQUEST_BROADCAST.
*/
public static final int PASSIVE_BROADCAST = 0;
/**
- * This asks recipients to broadcast their location. This is used on
- * startup.
+ * This asks recipients to broadcast their location. This is used on startup.
*/
public static final int REQUEST_BROADCAST = 1;
@@ -58,8 +55,7 @@
private ArrayList cacheNames = new ArrayList();
/**
- * @param port
- * The port to set.
+ * @param port The port to set.
*/
public void setPort( int port )
{
@@ -75,8 +71,7 @@
}
/**
- * @param host
- * The host to set.
+ * @param host The host to set.
*/
public void setHost( String host )
{
@@ -92,8 +87,7 @@
}
/**
- * @param requesterId
- * The requesterId to set.
+ * @param requesterId The requesterId to set.
*/
public void setRequesterId( long requesterId )
{
@@ -109,8 +103,7 @@
}
/**
- * @param messageType
- * The messageType to set.
+ * @param messageType The messageType to set.
*/
public void setMessageType( int messageType )
{
@@ -126,8 +119,7 @@
}
/**
- * @param cacheNames
- * The cacheNames to set.
+ * @param cacheNames The cacheNames to set.
*/
public void setCacheNames( ArrayList cacheNames )
{
@@ -142,10 +134,8 @@
return cacheNames;
}
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Object#toString()
+ /**
+ * @return debugging string
*/
public String toString()
{
@@ -164,5 +154,4 @@
}
return buf.toString();
}
-
}
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryReceiver.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryReceiver.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryReceiver.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryReceiver.java Wed Aug 27 09:45:46 2008
@@ -46,16 +46,17 @@
import EDU.oswego.cs.dl.util.concurrent.PooledExecutor;
import EDU.oswego.cs.dl.util.concurrent.ThreadFactory;
-/**
- * Receives UDP Discovery messages.
- */
+/** Receives UDP Discovery messages. */
public class UDPDiscoveryReceiver
implements Runnable, IShutdownObserver
{
+ /** The log factory */
private final static Log log = LogFactory.getLog( UDPDiscoveryReceiver.class );
+ /** buffer */
private final byte[] m_buffer = new byte[65536];
+ /** The socket used for communication. */
private MulticastSocket m_socket;
// todo consider using the threadpool manager to
@@ -280,10 +281,8 @@
this.message = message;
}
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Runnable#run()
+ /**
+ * Process the message.
*/
public void run()
{
@@ -384,15 +383,15 @@
/**
* Allows us to set the daemon status on the executor threads
- * @author aaronsm
*/
class MyThreadFactory
implements ThreadFactory
{
- /*
- * (non-Javadoc)
- *
- * @see EDU.oswego.cs.dl.util.concurrent.ThreadFactory#newThread(java.lang.Runnable)
+ /**
+ * Sets the thread to daemon.
+ * <p>
+ * @param runner
+ * @return a daemon thread
*/
public Thread newThread( Runnable runner )
{
@@ -403,11 +402,7 @@
}
}
- /*
- * (non-Javadoc)
- *
- * @see org.apache.jcs.engine.behavior.ShutdownObserver#shutdown()
- */
+ /** Shuts down the socket. */
public void shutdown()
{
try
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoverySenderThread.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoverySenderThread.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoverySenderThread.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoverySenderThread.java Wed Aug 27 09:45:46 2008
@@ -25,23 +25,21 @@
import org.apache.commons.logging.LogFactory;
/**
- * Used to periodically broadcast our location to other caches that might be
- * listening.
- *
- * @author Aaron Smuts
- *
+ * Used to periodically broadcast our location to other caches that might be listening.
*/
public class UDPDiscoverySenderThread
implements Runnable
{
+ /** The logger. */
private final static Log log = LogFactory.getLog( UDPDiscoverySenderThread.class );
- // the UDP multicast port
+ /** the UDP multicast port */
private String discoveryAddress = "";
+ /** The port */
private int discoveryPort = 0;
- // the host and port we listen on for TCP socket connections
+ /** the host and port we listen on for TCP socket connections */
private String myHostName = null;
private int myPort = 0;
@@ -49,8 +47,7 @@
private ArrayList cacheNames = new ArrayList();
/**
- * @param cacheNames
- * The cacheNames to set.
+ * @param cacheNames The cacheNames to set.
*/
protected void setCacheNames( ArrayList cacheNames )
{
@@ -72,22 +69,15 @@
/**
* Constructs the sender with the port to tell others to connect to.
* <p>
- * On construction the sender will request that the other caches let it know
- * their addresses.
- *
- * @param discoveryAddress
- * host to broadcast to
- * @param discoveryPort
- * port to broadcast to
- * @param myHostName
- * host name we can be found at
- * @param myPort
- * port we are listening on
- * @param cacheNames
- * List of strings of the names of the regiond participating.
+ * On construction the sender will request that the other caches let it know their addresses.
+ * @param discoveryAddress host to broadcast to
+ * @param discoveryPort port to broadcast to
+ * @param myHostName host name we can be found at
+ * @param myPort port we are listening on
+ * @param cacheNames List of strings of the names of the regiond participating.
*/
public UDPDiscoverySenderThread( String discoveryAddress, int discoveryPort, String myHostName, int myPort,
- ArrayList cacheNames )
+ ArrayList cacheNames )
{
this.discoveryAddress = discoveryAddress;
this.discoveryPort = discoveryPort;
@@ -135,10 +125,8 @@
}
}
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Runnable#run()
+ /**
+ * Send a message.
*/
public void run()
{
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryService.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryService.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryService.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryService.java Wed Aug 27 09:45:46 2008
@@ -19,7 +19,6 @@
* under the License.
*/
-import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -37,6 +36,7 @@
import org.apache.jcs.engine.behavior.IShutdownObservable;
import org.apache.jcs.engine.behavior.IShutdownObserver;
import org.apache.jcs.engine.logging.behavior.ICacheEventLogger;
+import org.apache.jcs.utils.net.HostNameUtil;
import EDU.oswego.cs.dl.util.concurrent.ClockDaemon;
import EDU.oswego.cs.dl.util.concurrent.ThreadFactory;
@@ -52,12 +52,13 @@
public class UDPDiscoveryService
implements IShutdownObserver
{
+ /** The logger */
private final static Log log = LogFactory.getLog( UDPDiscoveryService.class );
- // The background broadcaster.
+ /** The background broadcaster. */
private static ClockDaemon senderDaemon;
- // thread that listens for messages
+ /** thread that listens for messages */
private Thread udpReceiverThread;
// the runanble that the receiver thread runs
@@ -110,11 +111,7 @@
try
{
// todo, you should be able to set this
- hostAddress = InetAddress.getLocalHost().getHostAddress();
- if ( log.isDebugEnabled() )
- {
- log.debug( "hostAddress = [" + hostAddress + "]" );
- }
+ hostAddress = HostNameUtil.getLocalHostAddress();
}
catch ( UnknownHostException e1 )
{
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheListener.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheListener.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheListener.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/RemoteCacheListener.java Wed Aug 27 09:45:46 2008
@@ -21,6 +21,7 @@
import java.io.IOException;
import java.io.Serializable;
+import java.net.UnknownHostException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
@@ -53,13 +54,13 @@
private final static Log log = LogFactory.getLog( RemoteCacheListener.class );
- private static String localHostName = HostNameUtil.getLocalHostAddress();
+ private static String localHostName = null;
boolean disposed = false;
/**
- * The cache manager used to put items in differnt regions. This is set lazily and should not be
- * sent to the remote server.
+ * The cache manager used to put items in different regions. This is set lazily and should not
+ * be sent to the remote server.
*/
protected transient ICompositeCacheManager cacheMgr;
@@ -349,11 +350,22 @@
* This is for debugging. It allows the remote server to log the address of clients.
* <p>
* @return String
- * @throws IOException
+ * @throws IOException
*/
- public String getLocalHostAddress()
+ public synchronized String getLocalHostAddress()
throws IOException
{
+ if ( localHostName == null )
+ {
+ try
+ {
+ localHostName = HostNameUtil.getLocalHostAddress();
+ }
+ catch ( UnknownHostException uhe )
+ {
+ localHostName = "unknown";
+ }
+ }
return localHostName;
}
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheStartupServlet.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheStartupServlet.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheStartupServlet.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/remote/server/RemoteCacheStartupServlet.java Wed Aug 27 09:45:46 2008
@@ -21,7 +21,6 @@
import java.io.IOException;
import java.io.OutputStream;
-import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
@@ -35,14 +34,13 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jcs.engine.control.CompositeCacheManager;
+import org.apache.jcs.utils.net.HostNameUtil;
import org.apache.jcs.utils.props.PropertyLoader;
/**
- * This servlet can be used to startup the JCS remote cache. It is easy to
- * deploy the remote server in a tomcat base. This give you an easy way to
- * monitor its activity.
+ * This servlet can be used to startup the JCS remote cache. It is easy to deploy the remote server
+ * in a tomcat base. This give you an easy way to monitor its activity.
* <p>
- *
* <code>
* <servlet>
<servlet-name>JCSRemoteCacheStartupServlet</servlet-name>
@@ -58,10 +56,7 @@
<url-pattern>/jcs</url-pattern>
</servlet-mapping>
* </code>
- *
- *
* @author Aaron Smuts
- *
*/
public class RemoteCacheStartupServlet
extends HttpServlet
@@ -77,10 +72,10 @@
/**
* Starts the registry and then tries to bind to it.
* <p>
- * Gets the port from a props file. Uses the local host name for the registry
- * host. Tries to start the registry, ignoring failure. Starts the server.
+ * Gets the port from a props file. Uses the local host name for the registry host. Tries to
+ * start the registry, ignoring failure. Starts the server.
* <p>
- * @throws ServletException
+ * @throws ServletException
*/
public void init()
throws ServletException
@@ -120,7 +115,7 @@
String registryHost;
try
{
- registryHost = InetAddress.getLocalHost().getHostAddress();
+ registryHost = HostNameUtil.getLocalHostAddress();
if ( log.isDebugEnabled() )
{
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/utils/net/HostNameUtil.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/utils/net/HostNameUtil.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/utils/net/HostNameUtil.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/utils/net/HostNameUtil.java Wed Aug 27 09:45:46 2008
@@ -20,7 +20,9 @@
*/
import java.net.InetAddress;
+import java.net.NetworkInterface;
import java.net.UnknownHostException;
+import java.util.Enumeration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -37,25 +39,107 @@
/**
* Gets the address for the local machine.
* <p>
- * @return InetAddress.getLocalHost().getHostAddress(), or unknown if there
- * is an error.
+ * @return InetAddress.getLocalHost().getHostAddress()
+ * @throws UnknownHostException
*/
- public static String getLocalHostAddress()
+ public static String getLocalHostAddress() throws UnknownHostException
{
- String hostAddress = "unknown";
try
{
- // todo, you should be able to set this
- hostAddress = InetAddress.getLocalHost().getHostAddress();
+ String hostAddress = getLocalHostLANAddress().getHostAddress(); ;
if ( log.isDebugEnabled() )
{
log.debug( "hostAddress = [" + hostAddress + "]" );
}
+ return hostAddress;
}
catch ( UnknownHostException e1 )
{
log.error( "Couldn't get localhost address", e1 );
+ throw e1;
+ }
+ }
+
+ /**
+ * Returns an <code>InetAddress</code> object encapsulating what is most likely the machine's
+ * LAN IP address.
+ * <p>
+ * This method is intended for use as a replacement of JDK method
+ * <code>InetAddress.getLocalHost</code>, because that method is ambiguous on Linux systems.
+ * Linux systems enumerate the loopback network interface the same way as regular LAN network
+ * interfaces, but the JDK <code>InetAddress.getLocalHost</code> method does not specify the
+ * algorithm used to select the address returned under such circumstances, and will often return
+ * the loopback address, which is not valid for network communication. Details <a
+ * href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4665037">here</a>.
+ * <p>
+ * This method will scan all IP addresses on all network interfaces on the host machine to
+ * determine the IP address most likely to be the machine's LAN address. If the machine has
+ * multiple IP addresses, this method will prefer a site-local IP address (e.g. 192.168.x.x or
+ * 10.10.x.x, usually IPv4) if the machine has one (and will return the first site-local address
+ * if the machine has more than one), but if the machine does not hold a site-local address,
+ * this method will return simply the first non-loopback address found (IPv4 or IPv6). <p/> If
+ * this method cannot find a non-loopback address using this selection algorithm, it will fall
+ * back to calling and returning the result of JDK method <code>InetAddress.getLocalHost</code>.
+ * <p>
+ * <a href="http://issues.apache.org/jira/browse/JCS-40">JIR ISSUE JCS-40</a>
+ * <p>
+ * @throws UnknownHostException If the LAN address of the machine cannot be found.
+ */
+ private static InetAddress getLocalHostLANAddress()
+ throws UnknownHostException
+ {
+ try
+ {
+ InetAddress candidateAddress = null;
+ // Iterate all NICs (network interface cards)...
+ for ( Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); )
+ {
+ NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
+ // Iterate all IP addresses assigned to each card...
+ for ( Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); )
+ {
+ InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
+ if ( !inetAddr.isLoopbackAddress() )
+ {
+ if ( inetAddr.isSiteLocalAddress() )
+ {
+ // Found non-loopback site-local address. Return it immediately...
+ return inetAddr;
+ }
+ else if ( candidateAddress == null )
+ {
+ // Found non-loopback address, but not necessarily site-local.
+ // Store it as a candidate to be returned if site-local address is not subsequently found...
+ candidateAddress = inetAddr;
+ // Note that we don't repeatedly assign non-loopback non-site-local addresses as candidates,
+ // only the first. For subsequent iterations, candidate will be non-null.
+ }
+ }
+ }
+ }
+ if ( candidateAddress != null )
+ {
+ // We did not find a site-local address, but we found some other non-loopback address.
+ // Server might have a non-site-local address assigned to its NIC (or it might be running
+ // IPv6 which deprecates the "site-local" concept).
+ // Return this non-loopback candidate address...
+ return candidateAddress;
+ }
+ // At this point, we did not find a non-loopback address.
+ // Fall back to returning whatever InetAddress.getLocalHost() returns...
+ InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
+ if ( jdkSuppliedAddress == null )
+ {
+ throw new UnknownHostException( "The JDK InetAddress.getLocalHost() method unexpectedly returned null." );
+ }
+ return jdkSuppliedAddress;
+ }
+ catch ( Exception e )
+ {
+ UnknownHostException unknownHostException = new UnknownHostException( "Failed to determine LAN address: "
+ + e );
+ unknownHostException.initCause( e );
+ throw unknownHostException;
}
- return hostAddress;
}
}
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryUnitTest.java?rev=689520&r1=689519&r2=689520&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/lateral/socket/tcp/discovery/UDPDiscoveryUnitTest.java Wed Aug 27 09:45:46 2008
@@ -36,14 +36,11 @@
import org.apache.jcs.utils.serialization.StandardSerializer;
/**
- *
- * @author Aaron Smuts
- *
+ * Unit tests for discovery
*/
public class UDPDiscoveryUnitTest
extends TestCase
{
-
/**
* Test setup
*/
@@ -65,15 +62,14 @@
* <p>
* 6. create a sender
* <p>
- * 7.create more names than we have no wait facades for the only one that
- * gets added should be testCache1
+ * 7.create more names than we have no wait facades for the only one that gets added should be
+ * testCache1
* <p>
* 8. send 10 messages
* <p>
* 9. check to see that we got 10 messages
* <p>
* 10. check to see if the testCache1 facade got a nowait.
- *
* @throws Exception
*/
public void testSimpleUDPDiscovery()
@@ -87,7 +83,9 @@
ICompositeCacheManager cacheMgr = CompositeCacheManager.getInstance();
// create the service
- UDPDiscoveryService service = new UDPDiscoveryService( lac.getUdpDiscoveryAddr(), lac.getUdpDiscoveryPort(), lac.getTcpListenerPort(), cacheMgr, new MockCacheEventLogger(), new StandardSerializer() );
+ UDPDiscoveryService service = new UDPDiscoveryService( lac.getUdpDiscoveryAddr(), lac.getUdpDiscoveryPort(),
+ lac.getTcpListenerPort(), cacheMgr,
+ new MockCacheEventLogger(), new StandardSerializer() );
service.setTcpLateralCacheAttributes( lac );
// create a no wait facade for the service
@@ -102,7 +100,8 @@
service.addNoWaitFacade( lcnwf, "testCache1" );
// create a receiver with the service
- UDPDiscoveryReceiver receiver = new UDPDiscoveryReceiver( service, "228.5.6.7", 6789, cacheMgr, new MockCacheEventLogger(), new StandardSerializer() );
+ UDPDiscoveryReceiver receiver = new UDPDiscoveryReceiver( service, "228.5.6.7", 6789, cacheMgr,
+ new MockCacheEventLogger(), new StandardSerializer() );
Thread t = new Thread( receiver );
t.start();
@@ -152,7 +151,6 @@
/**
* Verify that the config does not throw any errors.
- *
* @throws Exception
*/
public void testUDPDiscoveryConfig()
@@ -201,6 +199,5 @@
// try adding the same one again
lcnwf.addNoWait( noWait2 );
assertEquals( "Facade should still have 2 no waits", 2, lcnwf.noWaits.length );
-
}
}
Added: jakarta/jcs/trunk/src/test/org/apache/jcs/utils/net/HostNameUtilUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/utils/net/HostNameUtilUnitTest.java?rev=689520&view=auto
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/utils/net/HostNameUtilUnitTest.java (added)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/utils/net/HostNameUtilUnitTest.java Wed Aug 27 09:45:46 2008
@@ -0,0 +1,25 @@
+package org.apache.jcs.utils.net;
+
+import java.net.UnknownHostException;
+
+import junit.framework.TestCase;
+
+/** Tests for the host name util. */
+public class HostNameUtilUnitTest
+ extends TestCase
+{
+ /**
+ * It's nearly impossible to unit test the getLocalHostLANAddress method.
+ * <p>
+ * @throws UnknownHostException
+ */
+ public void testGetLocalHostAddress_Simple() throws UnknownHostException
+ {
+ // DO WORK
+ String result = HostNameUtil.getLocalHostAddress();
+
+ // VERIFY
+ //System.out.print( result );
+ assertNotNull( "Should have a host address.", result );
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-dev-help@jakarta.apache.org