Java 类net.sf.ehcache.distribution.CachePeer 实例源码
项目:ehcache-aws
文件:AwsSecurityGroupAwareCacheManagerPeerProviderTest.java
@Test
public void testListRemoteCachePeersBeforeAnythingHasBeenSetReturnsAnEmptyUnmodifiableList() {
invokeInitAndCheckDiscoveryServiceHasBeenStarted();
final Ehcache cache = context.mock(Ehcache.class);
context.checking(new Expectations() {{
allowing(cache).getName(); will(returnValue("myCache"));
}});
// Now list the peers, which should create a new entry in the map and return a list of CachePeer's
List<CachePeer> listRemoteCachePeers = peerProvider.listRemoteCachePeers(cache);
Assert.assertTrue(listRemoteCachePeers.isEmpty());
try {
listRemoteCachePeers.add(context.mock(CachePeer.class, "dummyCachePeer"));
Assert.fail("Did not expect to be able to add a member to the cache peers list that was returned");
} catch (UnsupportedOperationException e) {
// OK
}
}
项目:ehcache-aws
文件:AwsSecurityGroupAwareCacheManagerPeerProviderTest.java
/**
* Override this method which does RMI lookups
*/
@Override
public CachePeer lookupRemoteCachePeer(String url) throws MalformedURLException, NotBoundException, RemoteException {
CachePeer cachePeer = cachePeersPerUrlMap.get(url);
Assert.assertNotNull("The cache peer for URL '" + url + "' has not been set up in the test", cachePeer);
return cachePeer;
}
项目:firefly
文件:ServerStatus.java
private static void displayCacheInfo(PrintWriter writer, CacheManager cm) {
writer.println(cm.getName() + " EHCACHE INFORMATION:");
writer.println("-------------------:");
writer.println("Manager Status: " + cm.getStatus());
writer.println("DiskStore Path: " + cm.getConfiguration().getDiskStoreConfiguration().getPath());
writer.println();
writer.println("Caches: ");
Map<String, CacheManagerPeerProvider> peerProvs = cm.getCacheManagerPeerProviders();
String[] cacheNames = cm.getCacheNames();
for(String n : cacheNames) {
Ehcache c = cm.getCache(n);
writer.println("\t" + c.getName() + " @" + c.hashCode());
writer.println("\tCache Status : " + c.getStatus());
writer.println("\tMax Heap : " + c.getCacheConfiguration().getMaxBytesLocalHeap()/(1024 * 1024) + "MB");
writer.println("\tMax Entries : " + c.getCacheConfiguration().getMaxEntriesLocalHeap());
writer.println("\tStatistics : " + getStats(c));
for (CacheManagerPeerProvider peerProv : peerProvs.values()) {
List peers = peerProv.listRemoteCachePeers(c);
for(Object o : peers) {
CachePeer cp = (CachePeer) o;
try {
writer.println("\tReplicating with: " + cp.getUrl());
} catch (RemoteException e) {}
}
}
writer.println();
}
}
项目:OpenCyclos
文件:HazelcastCacheManagerPeerProvider.java
@Override
public List<CachePeer> listRemoteCachePeers(final Ehcache cache) throws CacheException {
// Ignore, only used for RMI
return Collections.emptyList();
}
项目:ehcache-aws
文件:AwsSecurityGroupAwareCacheManagerPeerProvider.java
public final List<CachePeer> listRemoteCachePeers(Ehcache cache)
throws CacheException {
List<CachePeer> remoteCachePeers;
String cacheName = cache.getName();
// First attempt to extract any cached peers list
cachePeersLock.readLock().lock();
try {
remoteCachePeers = cachePeers.get(cacheName);
} finally {
cachePeersLock.readLock().unlock();
}
// Return anything we have
if (remoteCachePeers != null) {
return remoteCachePeers;
}
// Try to update, get the write lock for our cache peers map
cachePeersLock.writeLock().lock();
try {
// Daah-ble check! This may have been updated by another thread before we got the write lock.
remoteCachePeers = cachePeers.get(cacheName);
if (remoteCachePeers != null) {
return remoteCachePeers;
}
// OK at this point we have the write lock and definitely need to create the list
remoteCachePeers = new ArrayList<CachePeer>();
// Get the read lock for the peer URL's list
peerUrlsLock.readLock().lock();
try {
for (String rmiUrl : peerUrls) {
String cacheRmiUrl = createFullyQualifiedRmiCacheUrl(rmiUrl, cacheName);
CachePeer cachePeer = null;
try {
cachePeer = lookupRemoteCachePeer(cacheRmiUrl);
remoteCachePeers.add(cachePeer);
} catch (Exception e) {
if (LOG.isDebugEnabled()) {
LOG.debug("Exception looking up RMI URL {}. This may be normal if a node has gone offline, "
+ "or it may indicate network connectivity issues.", rmiUrl, e);
}
}
}
} finally {
// Release read lock
peerUrlsLock.readLock().unlock();
}
// Finally set this up in the map before releasing the write lock, making it available to other threads
remoteCachePeers = Collections.unmodifiableList(remoteCachePeers);
cachePeers.put(cacheName, remoteCachePeers);
} finally {
cachePeersLock.writeLock().unlock();
}
return remoteCachePeers;
}
项目:ehcache-aws
文件:AwsSecurityGroupAwareCacheManagerPeerProvider.java
@Override
public CachePeer lookupRemoteCachePeer(String url) throws MalformedURLException, NotBoundException, RemoteException {
LOG.debug("Lookup remote cache peer URL {}", url);
return (CachePeer)Naming.lookup(url);
}
项目:ehcache-aws
文件:AwsSecurityGroupAwareCacheManagerPeerProviderTest.java
@Test
public void testListRemoteCachePeersReturnsAListofPeersPerCacheAndUpdatesTheInternalMap() {
invokeInitAndCheckDiscoveryServiceHasBeenStarted();
// Mock some stuff up
final Ehcache cache = context.mock(Ehcache.class);
final CachePeer googleCacheRemote = context.mock(CachePeer.class, "googleCacheRemote");
final CachePeer yahooCacheRemote = context.mock(CachePeer.class, "yahooCacheRemote");
// We are expecting RMI Naming.lookup calls to these URL's for the cache
final String cacheName = "myCache";
peerProvider.addCachePeerPerUrl("//www.google.com:61616/" + cacheName, googleCacheRemote);
peerProvider.addCachePeerPerUrl("//www.yahoo.com:61618/" + cacheName, yahooCacheRemote);
context.checking(new Expectations() {{
allowing(discoveryServiceConfig).getRmiListenerPort(); will(returnValue(61616));
allowing(cache).getName(); will(returnValue(cacheName));
}});
// Make sure that the initial list is empty
Assert.assertTrue(((Map<String,List<CachePeer>>)WhiteboxImpl.getInternalState(peerProvider, CACHE_PEERS_MAP_VARIABLE_NAME)).isEmpty());
// Set up a list of hosts. Because these hosts are actually resolved they need to be real.
Set<CachePeerHost> cachePeerHosts = new HashSet<>();
cachePeerHosts.add(new CachePeerHost("www.google.com", 61616));
cachePeerHosts.add(new CachePeerHost("www.yahoo.com", 61618));
// Set the hosts
peerProvider.setCachePeerHosts(cachePeerHosts);
// Now list the peers, which should create a new entry in the map and return a list of CachePeer's
List<CachePeer> listRemoteCachePeers = peerProvider.listRemoteCachePeers(cache);
Assert.assertEquals(2, listRemoteCachePeers.size());
Assert.assertTrue(listRemoteCachePeers.contains(googleCacheRemote));
Assert.assertTrue(listRemoteCachePeers.contains(yahooCacheRemote));
try {
listRemoteCachePeers.add(context.mock(CachePeer.class, "dummyCachePeer"));
Assert.fail("Did not expect to be able to add a member to the cache peers list that was returned");
} catch (UnsupportedOperationException e) {
// OK
}
// Check that the cache has also been populated with this list
Map<String,List<CachePeer>> cachePeers =
(Map<String,List<CachePeer>>)WhiteboxImpl.getInternalState(peerProvider, CACHE_PEERS_MAP_VARIABLE_NAME);
Assert.assertEquals(1, cachePeers.size());
Assert.assertEquals(listRemoteCachePeers, cachePeers.get(cacheName));
// Another invocation should return exactly the same object, i.e. this list should not be recreated
Assert.assertEquals(listRemoteCachePeers.hashCode(), peerProvider.listRemoteCachePeers(cache).hashCode());
}
项目:ehcache-aws
文件:AwsSecurityGroupAwareCacheManagerPeerProviderTest.java
@Test
public void testListRemoteCachePeersCreatesANewListWhenAHostHasBeenRemoved() {
invokeInitAndCheckDiscoveryServiceHasBeenStarted();
// Mock some stuff up
final Ehcache cache = context.mock(Ehcache.class);
final CachePeer googleCacheRemote = context.mock(CachePeer.class, "googleCacheRemote");
final CachePeer yahooCacheRemote = context.mock(CachePeer.class, "yahooCacheRemote");
// We are expecting RMI Naming.lookup calls to these URL's for the cache
final String cacheName = "myCache";
peerProvider.addCachePeerPerUrl("//www.google.com:61616/" + cacheName, googleCacheRemote);
peerProvider.addCachePeerPerUrl("//www.yahoo.com:61618/" + cacheName, yahooCacheRemote);
context.checking(new Expectations() {{
allowing(discoveryServiceConfig).getRmiListenerPort(); will(returnValue(61616));
allowing(cache).getName(); will(returnValue(cacheName));
}});
// Make sure that the initial list is empty
Assert.assertTrue(((Map<String,List<CachePeer>>)WhiteboxImpl.getInternalState(peerProvider, CACHE_PEERS_MAP_VARIABLE_NAME)).isEmpty());
// Set up a list of hosts. Because these hosts are actually resolved they need to be real.
Set<CachePeerHost> cachePeerHosts = new HashSet<>();
CachePeerHost googleCachePeerHost = new CachePeerHost("www.google.com", 61616);
cachePeerHosts.add(googleCachePeerHost);
CachePeerHost yahooCachePeerHost = new CachePeerHost("www.yahoo.com", 61618);
cachePeerHosts.add(yahooCachePeerHost);
// Set the hosts
peerProvider.setCachePeerHosts(cachePeerHosts);
// Now list the peers, which should create a new entry in the map and return a list of CachePeer's
List<CachePeer> listRemoteCachePeers = peerProvider.listRemoteCachePeers(cache);
Assert.assertEquals(2, listRemoteCachePeers.size());
Assert.assertTrue(listRemoteCachePeers.contains(googleCacheRemote));
Assert.assertTrue(listRemoteCachePeers.contains(yahooCacheRemote));
// Now remove google cache peer
Assert.assertTrue(cachePeerHosts.remove(googleCachePeerHost));
peerProvider.setCachePeerHosts(cachePeerHosts);
listRemoteCachePeers = peerProvider.listRemoteCachePeers(cache);
Assert.assertEquals(1, listRemoteCachePeers.size());
Assert.assertTrue(listRemoteCachePeers.contains(yahooCacheRemote));
}
项目:ehcache-aws
文件:AwsSecurityGroupAwareCacheManagerPeerProviderTest.java
private void addCachePeerPerUrl(String url, CachePeer cachePeer) {
cachePeersPerUrlMap.put(url, cachePeer);
}
项目:open-cyclos
文件:HazelcastCacheManagerPeerProvider.java
@Override
public List<CachePeer> listRemoteCachePeers(final Ehcache cache) throws CacheException {
// Ignore, only used for RMI
return Collections.emptyList();
}