/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.jcache;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import javax.cache.Cache;
import javax.cache.configuration.CompleteConfiguration;
import javax.cache.configuration.Factory;
import javax.cache.configuration.FactoryBuilder;
import javax.cache.expiry.AccessedExpiryPolicy;
import javax.cache.expiry.Duration;
import javax.cache.expiry.ExpiryPolicy;
import javax.cache.integration.CacheLoader;
import javax.cache.integration.CacheLoaderException;
import javax.cache.integration.CacheWriter;
import javax.cache.integration.CacheWriterException;
import org.apache.camel.EndpointInject;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.impl.JndiRegistry;
import org.junit.Test;
public class JCacheConfigurationTest extends JCacheComponentTestSupport {
private static final Factory<ExpiryPolicy> EXPIRY_POLICY_FACTORY = AccessedExpiryPolicy.factoryOf(Duration.ONE_MINUTE);
private static final Factory<CacheWriter<Object, Object>> CACHE_WRITER_FACTORY = MyCacheWriter.factory();
private static final Factory<CacheLoader<Object, Object>> CACHE_LOADER_FACTORY = MyCacheLoader.factory();
@EndpointInject(
uri = "jcache://test-cache"
+ "?expiryPolicyFactory=#myExpiryPolicyFactory"
+ "&cacheWriterFactory=#myCacheWriterFactory"
+ "&cacheLoaderFactory=#myCacheLoaderFactory"
)
JCacheEndpoint from;
@EndpointInject(uri = "mock:to")
MockEndpoint to;
@Override
protected JndiRegistry createRegistry() throws Exception {
JndiRegistry registry = super.createRegistry();
registry.bind("myExpiryPolicyFactory", EXPIRY_POLICY_FACTORY);
registry.bind("myCacheWriterFactory", CACHE_WRITER_FACTORY);
registry.bind("myCacheLoaderFactory", CACHE_LOADER_FACTORY);
return registry;
}
@Test
public void testConfigurations() throws Exception {
final Cache<Object, Object> cache = from.getManager().getCache();
final CompleteConfiguration<Object, Object> conf = cache.getConfiguration(CompleteConfiguration.class);
assertEquals(EXPIRY_POLICY_FACTORY, conf.getExpiryPolicyFactory());
assertEquals(CACHE_WRITER_FACTORY, conf.getCacheWriterFactory());
assertEquals(CACHE_LOADER_FACTORY, conf.getCacheLoaderFactory());
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() {
from(from).to(to);
}
};
}
private static final class MyCacheLoader implements CacheLoader<Object, Object>, Serializable {
@Override
public Object load(Object key) throws CacheLoaderException {
return null;
}
@Override
public Map<Object, Object> loadAll(Iterable<?> keys) throws CacheLoaderException {
return null;
}
public static Factory<CacheLoader<Object, Object>> factory() {
return new FactoryBuilder.SingletonFactory(new MyCacheLoader());
}
}
private static final class MyCacheWriter implements CacheWriter<Object, Object>, Serializable {
@Override
public void write(Cache.Entry<?, ?> entry) throws CacheWriterException {
}
@Override
public void writeAll(Collection<Cache.Entry<?, ?>> entries) throws CacheWriterException {
}
@Override
public void delete(Object key) throws CacheWriterException {
}
@Override
public void deleteAll(Collection<?> keys) throws CacheWriterException {
}
public static Factory<CacheWriter<Object, Object>> factory() {
return new FactoryBuilder.SingletonFactory(new MyCacheWriter());
}
}
}