CAMEL-10925: fixing camel-ehcache test
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/29ef57ed Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/29ef57ed Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/29ef57ed Branch: refs/heads/master Commit: 29ef57ed7b6c30d04bf1bd6cad10a377cdc052b1 Parents: 0189547 Author: Nicola Ferraro <ni.ferr...@gmail.com> Authored: Wed Mar 15 17:16:41 2017 +0100 Committer: Nicola Ferraro <ni.ferr...@gmail.com> Committed: Wed Mar 15 17:53:31 2017 +0100 ---------------------------------------------------------------------- .../camel/itest/springboot/CamelCacheTest.java | 1 + .../springboot/util/ArquillianPackager.java | 4 +- .../itest/springboot/util/JarExporter.java | 3 +- .../test/resources/components/cache-ehcache.xml | 286 +++++++++++++++++++ 4 files changed, 291 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/29ef57ed/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelCacheTest.java ---------------------------------------------------------------------- diff --git a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelCacheTest.java b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelCacheTest.java index 770a973..958ee8a 100644 --- a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelCacheTest.java +++ b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelCacheTest.java @@ -36,6 +36,7 @@ public class CamelCacheTest extends AbstractSpringBootTestSupport { return new ITestConfigBuilder() .module(inferModuleName(CamelCacheTest.class)) .unitTestExclusionPattern(".*(\\.integration\\..*|XXXTest$|BaseCacheTest$)") + .resource("components/cache-ehcache.xml", "ehcache.xml") .build(); } http://git-wip-us.apache.org/repos/asf/camel/blob/29ef57ed/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/ArquillianPackager.java ---------------------------------------------------------------------- diff --git a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/ArquillianPackager.java b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/ArquillianPackager.java index f2c9d8f..f94f388 100644 --- a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/ArquillianPackager.java +++ b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/ArquillianPackager.java @@ -119,11 +119,11 @@ public final class ArquillianPackager { } if (config.getUseCustomLog()) { - ark = ark.addAsResource("spring-logback.xml", "/spring-logback.xml"); + ark = ark.addAsResource("spring-logback.xml", CLASSES_FOLDER + "/spring-logback.xml"); } for (Map.Entry<String, String> res : config.getResources().entrySet()) { - ark = ark.addAsResource(res.getKey(), "/" + res.getValue()); + ark = ark.addAsResource(res.getKey(), CLASSES_FOLDER + "/" + res.getValue()); } String version = System.getProperty("version_org.apache.camel:camel-core"); http://git-wip-us.apache.org/repos/asf/camel/blob/29ef57ed/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/JarExporter.java ---------------------------------------------------------------------- diff --git a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/JarExporter.java b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/JarExporter.java index b68ac46..4f0de2e 100644 --- a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/JarExporter.java +++ b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/util/JarExporter.java @@ -32,7 +32,8 @@ public class JarExporter { public void exportJar() throws Exception { Archive<?> archive = ArquillianPackager.springBootPackage(new ITestConfigBuilder() - .module("camel-jetty9") + .module("camel-cache") + .resource("components/cache-ehcache.xml", "ehcache.xml") .build()); new ZipExporterImpl(archive).exportTo(new File("target/export.zip"), true); http://git-wip-us.apache.org/repos/asf/camel/blob/29ef57ed/tests/camel-itest-spring-boot/src/test/resources/components/cache-ehcache.xml ---------------------------------------------------------------------- diff --git a/tests/camel-itest-spring-boot/src/test/resources/components/cache-ehcache.xml b/tests/camel-itest-spring-boot/src/test/resources/components/cache-ehcache.xml new file mode 100644 index 0000000..c3afce7 --- /dev/null +++ b/tests/camel-itest-spring-boot/src/test/resources/components/cache-ehcache.xml @@ -0,0 +1,286 @@ +<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> + + <!-- + The ehcache-failsafe.xml is a default configuration for ehcache, if an ehcache.xml is not configured. + + The diskStore element is optional. It must be configured if you have overflowToDisk or diskPersistent enabled + for any cache. If it is not configured, a warning will be issues and java.io.tmpdir will be used. + + diskStore has only one attribute - "path". It is the path to the directory where .data and .index files will be created. + + If the path is a Java System Property it is replaced by its value in the + running VM. + + The following properties are translated: + * user.home - User's home directory + * user.dir - User's current working directory + * java.io.tmpdir - Default temp file path + * ehcache.disk.store.dir - A system property you would normally specify on the command line + e.g. java -Dehcache.disk.store.dir=/u01/myapp/diskdir ... + + Subdirectories can be specified below the property e.g. java.io.tmpdir/one + + --> + <diskStore path="java.io.tmpdir"/> + + <!-- + Specifies a CacheManagerEventListenerFactory, be used to create a CacheManagerPeerProvider, + which is notified when Caches are added or removed from the CacheManager. + + The attributes of CacheManagerEventListenerFactory are: + * class - a fully qualified factory class name + * properties - comma separated properties having meaning only to the factory. + + Sets the fully qualified class name to be registered as the CacheManager event listener. + + The events include: + * adding a Cache + * removing a Cache + + Callbacks to listener methods are synchronous and unsynchronized. It is the responsibility + of the implementer to safely handle the potential performance and thread safety issues + depending on what their listener is doing. + + If no class is specified, no listener is created. There is no default. + + <cacheManagerEventListenerFactory class="" properties=""/> + --> + + <!-- + (Enable for distributed operation) + + Specifies a CacheManagerPeerProviderFactory which will be used to create a + CacheManagerPeerProvider, which discovers other CacheManagers in the cluster. + + The attributes of cacheManagerPeerProviderFactory are: + * class - a fully qualified factory class name + * properties - comma separated properties having meaning only to the factory. + + Ehcache comes with a built-in RMI-based distribution system with two means of discovery of + CacheManager peers participating in the cluster: + * automatic, using a multicast group. This one automatically discovers peers and detects + changes such as peers entering and leaving the group + * manual, using manual rmiURL configuration. A hardcoded list of peers is provided at + configuration time. + + Configuring Automatic Discovery: + Automatic discovery is configured as per the following example: + <cacheManagerPeerProviderFactory + class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" + properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, + multicastGroupPort=4446, timeToLive=32"/> + + Valid properties are: + * peerDiscovery (mandatory) - specify "automatic" + * multicastGroupAddress (mandatory) - specify a valid multicast group address + * multicastGroupPort (mandatory) - specify a dedicated port for the multicast heartbeat + traffic + * timeToLive - specify a value between 0 and 255 which determines how far the packets will propagate. + By convention, the restrictions are: + 0 - the same host + 1 - the same subnet + 32 - the same site + 64 - the same region + 128 - the same continent + 255 - unrestricted + + + Configuring Manual Discovery: + Manual discovery is configured as per the following example: + <cacheManagerPeerProviderFactory class= + "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" + properties="peerDiscovery=manual, + rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1 + | //server1:40000/sampleCache2|//server2:40000/sampleCache2"/> + + Valid properties are: + * peerDiscovery (mandatory) - specify "manual" + * rmiUrls (mandatory) - specify a pipe separated list of rmiUrls, in the form + //hostname:port + + The hostname is the hostname of the remote CacheManager peer. The port is the listening + port of the RMICacheManagerPeerListener of the remote CacheManager peer. + + <cacheManagerPeerProviderFactory + class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" + properties="peerDiscovery=automatic, + multicastGroupAddress=230.0.0.1, + multicastGroupPort=4446, timeToLive=1"/> + --> + + <!-- + (Enable for distributed operation) + + Specifies a CacheManagerPeerListenerFactory which will be used to create a + CacheManagerPeerListener, which + listens for messages from cache replicators participating in the cluster. + + The attributes of cacheManagerPeerListenerFactory are: + class - a fully qualified factory class name + properties - comma separated properties having meaning only to the factory. + + Ehcache comes with a built-in RMI-based distribution system. The listener component is + RMICacheManagerPeerListener which is configured using + RMICacheManagerPeerListenerFactory. It is configured as per the following example: + + <cacheManagerPeerListenerFactory + class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" + properties="hostName=fully_qualified_hostname_or_ip, + port=40001, + socketTimeoutMillis=120000"/> + + All properties are optional. They are: + * hostName - the hostName of the host the listener is running on. Specify + where the host is multihomed and you want to control the interface over which cluster + messages are received. Defaults to the host name of the default interface if not + specified. + * port - the port the listener listens on. This defaults to a free port if not specified. + * socketTimeoutMillis - the number of ms client sockets will stay open when sending + messages to the listener. This should be long enough for the slowest message. + If not specified it defaults 120000ms. + + <cacheManagerPeerListenerFactory + class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/> + --> + + + <!-- Cache configuration. + + The following attributes are required. + + name: + Sets the name of the cache. This is used to identify the cache. It must be unique. + + maxElementsInMemory: + Sets the maximum number of objects that will be created in memory (0 == no limit) + + maxElementsOnDisk: + Sets the maximum number of objects that will be maintained in the DiskStore + The default value is zero, meaning unlimited. + + eternal: + Sets whether elements are eternal. If eternal, timeouts are ignored and the + element is never expired. + + overflowToDisk: + Sets whether elements can overflow to disk when the in-memory cache + has reached the maxInMemory limit. + + The following attributes are optional. + + timeToIdleSeconds: + Sets the time to idle for an element before it expires. + i.e. The maximum amount of time between accesses before an element expires + Is only used if the element is not eternal. + Optional attribute. A value of 0 means that an Element can idle for infinity. + The default value is 0. + + timeToLiveSeconds: + Sets the time to live for an element before it expires. + i.e. The maximum time between creation time and when an element expires. + Is only used if the element is not eternal. + Optional attribute. A value of 0 means that and Element can live for infinity. + The default value is 0. + + diskPersistent: + Whether the disk store persists between restarts of the Virtual Machine. + The default value is false. + + diskExpiryThreadIntervalSeconds: + The number of seconds between runs of the disk expiry thread. The default value + is 120 seconds. + + diskSpoolBufferSizeMB: + This is the size to allocate the DiskStore for a spool buffer. Writes are made + to this area and then asynchronously written to disk. The default size is 30MB. + Each spool buffer is used only by its cache. If you get OutOfMemory errors consider + lowering this value. To improve DiskStore performance consider increasing it. Trace level + logging in the DiskStore will show if put back ups are occurring. + + memoryStoreEvictionPolicy: + Policy would be enforced upon reaching the maxElementsInMemory limit. Default + policy is Least Recently Used (specified as LRU). Other policies available - + First In First Out (specified as FIFO) and Less Frequently Used + (specified as LFU) + + Cache elements can also contain sub elements which take the same format of a factory class + and properties. Defined sub-elements are: + + * cacheEventListenerFactory - Enables registration of listeners for cache events, such as + put, remove, update, and expire. + + * bootstrapCacheLoaderFactory - Specifies a BootstrapCacheLoader, which is called by a + cache on initialisation to prepopulate itself. + + Each cache that will be distributed needs to set a cache event listener which replicates + messages to the other CacheManager peers. For the built-in RMI implementation this is done + by adding a cacheEventListenerFactory element of type RMICacheReplicatorFactory to each + distributed cache's configuration as per the following example: + + <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" + properties="replicateAsynchronously=true, + replicatePuts=true, + replicateUpdates=true, + replicateUpdatesViaCopy=true, + replicateRemovals=true "/> + + The RMICacheReplicatorFactory recognises the following properties: + + * replicatePuts=true|false - whether new elements placed in a cache are + replicated to others. Defaults to true. + + * replicateUpdates=true|false - whether new elements which override an + element already existing with the same key are replicated. Defaults to true. + + * replicateRemovals=true - whether element removals are replicated. Defaults to true. + + * replicateAsynchronously=true | false - whether replications are + asynchronous (true) or synchronous (false). Defaults to true. + + * replicateUpdatesViaCopy=true | false - whether the new elements are + copied to other caches (true), or whether a remove message is sent. Defaults to true. + + + * asynchronousReplicationIntervalMillis=<number of milliseconds> - The asynchronous + replicator runs at a set interval of milliseconds. The default is 1000. The minimum + is 10. This property is only applicable if replicateAsynchronously=true + + * asynchronousReplicationMaximumBatchSize=<number of operations> - The maximum + number of operations that will be batch within a single RMI message. The default + is 1000. This property is only applicable if replicateAsynchronously=true + + The RMIBootstrapCacheLoader bootstraps caches in clusters where RMICacheReplicators are + used. It is configured as per the following example: + + <bootstrapCacheLoaderFactory + class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" + properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/> + + The RMIBootstrapCacheLoaderFactory recognises the following optional properties: + + * bootstrapAsynchronously=true|false - whether the bootstrap happens in the background + after the cache has started. If false, bootstrapping must complete before the cache is + made available. The default value is true. + + * maximumChunkSizeBytes=<integer> - Caches can potentially be very large, larger than the + memory limits of the VM. This property allows the bootstraper to fetched elements in + chunks. The default chunk size is 5000000 (5MB). + + --> + + + <!-- + Mandatory Default Cache configuration. These settings will be applied to caches + created programmtically using CacheManager.add(String cacheName) + --> + <defaultCache + maxElementsInMemory="10000" + eternal="false" + timeToIdleSeconds="120" + timeToLiveSeconds="120" + maxElementsOnDisk="10000000" + diskExpiryThreadIntervalSeconds="120" + memoryStoreEvictionPolicy="LRU"> + <persistence strategy="localTempSwap"/> + </defaultCache> +</ehcache>