Sorgente di questa pagina
Ehcache amministra la comunicazione attraverso comunicazioni batching di replicatori asincroni. Chissà che vuol dire.
Per fare il setup della cache replicata di RMI è necessario configurare il cache manager con:
a PeerProvider
a CacheManagerPeerListener
Per ogni cache che deve essere replicata è necessario aggiungere all'RMI cacheEventListener un tipo per propagare i messaggi. Si può configurare a cache bootstrat per alte cahce nel cluster.
Solo elementi serialiable sono adatti per la replica.
Configuring the Peer Provider
Nel sistema di ehcache c'è la nozione di gruppo di caches che agiscono in replicazione. Ogni cache è a pari degli altri non c'è un master. Per conoscere gli altri membri del cluster si usa il meccanismo del PeerDiscovering, ci sono due modi per farlo automatico e manuale.
Per usare il meccanismo built in di peer discovery bisogna specificare l'attributo di class come cacheManagerPeerProviderFactory come net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory nel file ehcache.xml
Automatic Peer Discovery
Non è necessaria conoscenza dei cluster previa, le cache si attivano dinamincamente, c'è un heartbeat ogni secondo e se dopo 5 secondi non risponde una cache viene droppata dal gruppo.
Per avere questa configurazione bisogna specificare cacheManagerPeerProviderFactory in questa maniera
peerDiscovery=automatic
multicastGroupAddress=multicast address | multicast host name
multicastGroupPort=port
timeToLive=0-255 (See below in common problems before setting this)
hostName=the hostname or IP of the interface to be used for sending and receiving multicast packets (relevant to mulithomed hosts only)
Se si hanno due cache su un cluster basta inserire la medesima configurazione in ognuna di queste.
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
multicastGroupPort=4446, timeToLive=32"/>
Manual Peer Discovery
È richiesto per ogni listerner l'indirizzo ip e la porta. Non si possono inserire peer a runtime . Questa tecnica è consigliata solo quando ci sono problemi di multicast perchè tra le istanze si trova un router in mezzo oppure un cluster che non propaga multicast datagram. Si può usare anche quando si vuole fare il setup della replication avendo il server2 che replica l'1 ma non il viceversa.
Esempio
Configuration for server1
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,
rmiUrls=//server2:40001/sampleCache11|//server2:40001/sampleCache12"/>
Configuration for server2
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,
rmiUrls=//server1:40001/sampleCache11|//server1:40001/sampleCache12"/>
Configuring the CacheManagerPeerListener
Un CacheManagerPeerListener ascolta per messaggi dai pari al current CacheManager.
Si può configurare specificando un CacheManagerPeerListenerFactory il quale è usato per creare il CacheManagerPeerListener con il meccanismo dei plugin.
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostName=localhost, port=40001,
socketTimeoutMillis=2000"/>
Proprietà valide sono:
- hostname: opzionali l'hostname dove il listener è in esecuzione. Specificando dove l'host è multihomed e su quale interfaccia del cluster vuoi che i messaggi arrivino. L'hostname è controllato per raggiungibilità durante l'inizializzazione del CacheManager. Se l'hostname è irragiungibile , il CacheManager rifiuterà di partire e verrà lanciato una CacheException che indicherà connessione rifiutata. . Se non si mette niente si usa l'interfaccia di default tramite la funziona InetAddress.getLocalHost().getHostAddress() . Se viene messo 127.0.0.1 il cluster non sarà visibile sulla rete e si può usare solo se ci sono più cacheManager sulla stessa macchina.
- port obbligatoria la porta sulla quale deve porsi in ascolto.
- socketTimeoutMillis opzionale the number of seconds client sockets will wait when sending messages to this listener until they give up. By default this is 2000ms.
Configuring Cache Replicators
Ogni cache può replicare i messaggi necessari a settare un cache event listener il quale replica i messaggi a un altro CacheManager peers. Questo è fatto aggiungendo un elemento cacheEventListenerFactory a una configurazione di cache.
<!-- Sample cache named sampleCache2. -->
<cache name="sampleCache2"
maxEntriesLocalHeap="10"
eternal="false"
timeToIdleSeconds="100"
timeToLiveSeconds="100"
overflowToDisk="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,
replicateUpdatesViaCopy=false, replicateRemovals=true "/>
</cache>
classe usa net.sf.ehcache.distribution.RMICacheReplicatorFactory
Proprietà
- replicatePuts=true | false quando degli elementi sono piazzzati in una cache sono replicati gli uni con gli altri. Default è true