Repository: ignite Updated Branches: refs/heads/ignite-2.6 a2e4876e8 -> d6300fc35
IGNITE-8740: Support reuse of already initialized Ignite in IgniteSpringBean - Fixes #4208 Signed-off-by: Valentin Kulichenko <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d6300fc3 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d6300fc3 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d6300fc3 Branch: refs/heads/ignite-2.6 Commit: d6300fc350de089f5899740c0a2280562f9e68a8 Parents: a2e4876 Author: Amir Akhmedov <[email protected]> Authored: Fri Jun 22 16:29:43 2018 -0700 Committer: Valentin Kulichenko <[email protected]> Committed: Fri Jun 22 16:29:43 2018 -0700 ---------------------------------------------------------------------- .../ignite/cache/spring/SpringCacheManager.java | 31 +- .../spring/SpringTransactionManager.java | 28 +- .../spring-transactions-ignite-spring-bean.xml | 67 ++++ .../test/java/config/spring-transactions.xml | 7 +- .../GridSpringCacheManagerAbstractTest.java | 382 +++++++++++++++++++ .../spring/GridSpringCacheManagerSelfTest.java | 359 +---------------- ...ridSpringCacheManagerSpringBeanSelfTest.java | 40 ++ .../spring-caching-ignite-spring-bean.xml | 90 +++++ .../testsuites/IgniteSpringTestSuite.java | 4 + ...ridSpringTransactionManagerAbstractTest.java | 119 ++++++ .../GridSpringTransactionManagerSelfTest.java | 127 +----- ...ingTransactionManagerSpringBeanSelfTest.java | 35 ++ .../spring/GridSpringTransactionService.java | 2 - 13 files changed, 788 insertions(+), 503 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java b/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java index 93c18d4..0b02f4c 100644 --- a/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java +++ b/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java @@ -20,21 +20,24 @@ package org.apache.ignite.cache.spring; import java.util.ArrayList; import java.util.Collection; import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import java.util.function.Function; import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteLock; import org.apache.ignite.IgniteSpring; import org.apache.ignite.Ignition; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.configuration.NearCacheConfiguration; -import java.util.concurrent.ConcurrentHashMap; -import org.springframework.beans.factory.InitializingBean; +import org.apache.ignite.internal.util.typedef.internal.U; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.context.event.EventListener; /** * Implementation of Spring cache abstraction based on Ignite cache. @@ -140,7 +143,7 @@ import org.springframework.context.ApplicationContextAware; * Ignite distribution, and all these nodes will participate * in caching the data. */ -public class SpringCacheManager implements CacheManager, InitializingBean, ApplicationContextAware { +public class SpringCacheManager implements CacheManager, ApplicationListener<ContextRefreshedEvent>, ApplicationContextAware { /** Default locks count. */ private static final int DEFAULT_LOCKS_COUNT = 512; @@ -311,7 +314,7 @@ public class SpringCacheManager implements CacheManager, InitializingBean, Appli } /** {@inheritDoc} */ - @Override public void afterPropertiesSet() throws Exception { + @Override public void onApplicationEvent(ContextRefreshedEvent event) { assert ignite == null; if (cfgPath != null && cfg != null) { @@ -321,12 +324,18 @@ public class SpringCacheManager implements CacheManager, InitializingBean, Appli "'igniteInstanceName' property."); } - if (cfgPath != null) - ignite = IgniteSpring.start(cfgPath, springCtx); - else if (cfg != null) - ignite = IgniteSpring.start(cfg, springCtx); - else - ignite = Ignition.ignite(igniteInstanceName); + try { + if (cfgPath != null) { + ignite = IgniteSpring.start(cfgPath, springCtx); + } + else if (cfg != null) + ignite = IgniteSpring.start(cfg, springCtx); + else + ignite = Ignition.ignite(igniteInstanceName); + } + catch (IgniteCheckedException e) { + throw U.convertException(e); + } } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/main/java/org/apache/ignite/transactions/spring/SpringTransactionManager.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/main/java/org/apache/ignite/transactions/spring/SpringTransactionManager.java b/modules/spring/src/main/java/org/apache/ignite/transactions/spring/SpringTransactionManager.java index d09656e..57c099a 100644 --- a/modules/spring/src/main/java/org/apache/ignite/transactions/spring/SpringTransactionManager.java +++ b/modules/spring/src/main/java/org/apache/ignite/transactions/spring/SpringTransactionManager.java @@ -19,17 +19,21 @@ package org.apache.ignite.transactions.spring; import java.util.concurrent.TimeUnit; import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.IgniteSpring; import org.apache.ignite.Ignition; import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.transactions.Transaction; import org.apache.ignite.transactions.TransactionConcurrency; import org.apache.ignite.transactions.TransactionIsolation; -import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.context.event.EventListener; import org.springframework.transaction.CannotCreateTransactionException; import org.springframework.transaction.InvalidIsolationLevelException; import org.springframework.transaction.PlatformTransactionManager; @@ -197,7 +201,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager * </pre> */ public class SpringTransactionManager extends AbstractPlatformTransactionManager - implements ResourceTransactionManager, PlatformTransactionManager, InitializingBean, ApplicationContextAware { + implements ResourceTransactionManager, PlatformTransactionManager, ApplicationListener<ContextRefreshedEvent>, ApplicationContextAware { /** * Logger. */ @@ -339,7 +343,7 @@ public class SpringTransactionManager extends AbstractPlatformTransactionManager } /** {@inheritDoc} */ - @Override public void afterPropertiesSet() throws Exception { + @Override public void onApplicationEvent(ContextRefreshedEvent event) { assert ignite == null; if (cfgPath != null && cfg != null) { @@ -349,12 +353,18 @@ public class SpringTransactionManager extends AbstractPlatformTransactionManager "'igniteInstanceName' property."); } - if (cfgPath != null) - ignite = IgniteSpring.start(cfgPath, springCtx); - else if (cfg != null) - ignite = IgniteSpring.start(cfg, springCtx); - else - ignite = Ignition.ignite(igniteInstanceName); + try { + if (cfgPath != null) { + ignite = IgniteSpring.start(cfgPath, springCtx); + } + else if (cfg != null) + ignite = IgniteSpring.start(cfg, springCtx); + else + ignite = Ignition.ignite(igniteInstanceName); + } + catch (IgniteCheckedException e) { + throw U.convertException(e); + } if (transactionConcurrency == null) transactionConcurrency = ignite.configuration().getTransactionConfiguration().getDefaultTxConcurrency(); http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/config/spring-transactions-ignite-spring-bean.xml ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/config/spring-transactions-ignite-spring-bean.xml b/modules/spring/src/test/java/config/spring-transactions-ignite-spring-bean.xml new file mode 100644 index 0000000..57a0ced --- /dev/null +++ b/modules/spring/src/test/java/config/spring-transactions-ignite-spring-bean.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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. +--> + +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:tx="http://www.springframework.org/schema/tx" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> + + <tx:annotation-driven/> + + <bean id="mySpringBean" class="org.apache.ignite.IgniteSpringBean"> + <property name="configuration"> + <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"> + <property name="peerClassLoadingEnabled" value="true"/> + <property name="igniteInstanceName" value="testGrid"/> + + <property name="cacheConfiguration"> + <list> + <bean class="org.apache.ignite.configuration.CacheConfiguration"> + <property name="name" value="testCache"/> + <property name="atomicityMode" value="TRANSACTIONAL"/> + </bean> + </list> + </property> + + <property name="discoverySpi"> + <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> + <property name="ipFinder"> + <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder"> + <property name="addresses"> + <list> + <value>127.0.0.1:47500..47509</value> + </list> + </property> + </bean> + </property> + </bean> + </property> + </bean> + </property> + </bean> + + <bean id="gridSpringTransactionService" class="org.apache.ignite.transactions.spring.GridSpringTransactionService"/> + + <bean id="transactionManager" class="org.apache.ignite.transactions.spring.SpringTransactionManager"> + <property name="transactionConcurrency" value="OPTIMISTIC"/> + <property name="igniteInstanceName" value="testGrid"/> + </bean> +</beans> http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/config/spring-transactions.xml ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/config/spring-transactions.xml b/modules/spring/src/test/java/config/spring-transactions.xml index f40e880..f1a29ad 100644 --- a/modules/spring/src/test/java/config/spring-transactions.xml +++ b/modules/spring/src/test/java/config/spring-transactions.xml @@ -19,17 +19,14 @@ <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <tx:annotation-driven/> - <context:component-scan base-package="org.apache.ignite.transactions.spring"> - <context:exclude-filter type="annotation" expression="org.springframework.context.annotation.Configuration"/> - </context:component-scan> + + <bean id="gridSpringTransactionService" class="org.apache.ignite.transactions.spring.GridSpringTransactionService"/> <bean id="transactionManager" class="org.apache.ignite.transactions.spring.SpringTransactionManager"> <property name="transactionConcurrency" value="OPTIMISTIC"/> http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerAbstractTest.java b/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerAbstractTest.java new file mode 100644 index 0000000..370c634 --- /dev/null +++ b/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerAbstractTest.java @@ -0,0 +1,382 @@ +/* + * 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.ignite.cache.spring; + +import org.apache.ignite.IgniteCache; +import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; + +/** + * Spring cache test. + */ +public abstract class GridSpringCacheManagerAbstractTest extends GridCommonAbstractTest { + /** */ + protected static final String CACHE_NAME = "testCache"; + + /** */ + protected static final String DYNAMIC_CACHE_NAME = "dynamicCache"; + + /** */ + private static final Object NULL; + + /** + */ + static { + try { + NULL = U.field(SpringCache.class, "NULL"); + } + catch (IgniteCheckedException e) { + throw new RuntimeException(e); + } + } + + /** */ + protected GridSpringCacheTestService svc; + + /** */ + protected GridSpringDynamicCacheTestService dynamicSvc; + + /** {@inheritDoc} */ + @Override public String getTestIgniteInstanceName() { + return "testGrid"; + } + + /** + * @throws Exception If failed. + */ + public void testSimpleKey() throws Exception { + for (int i = 0; i < 3; i++) { + assertEquals("value" + i, svc.simpleKey(i)); + assertEquals("value" + i, svc.simpleKey(i)); + } + + assertEquals(3, svc.called()); + + IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); + + assertEquals(3, c.size()); + + for (int i = 0; i < 3; i++) + assertEquals("value" + i, c.get(i)); + } + + /** + * @throws Exception If failed. + */ + public void testSimpleKeyNullValue() throws Exception { + for (int i = 0; i < 3; i++) { + assertNull(svc.simpleKeyNullValue(i)); + assertNull(svc.simpleKeyNullValue(i)); + } + + assertEquals(3, svc.called()); + + IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); + + assertEquals(3, c.size()); + + for (int i = 0; i < 3; i++) + assertEquals(NULL, c.get(i)); + } + + /** + * @throws Exception If failed. + */ + public void testComplexKey() throws Exception { + for (int i = 0; i < 3; i++) { + assertEquals("value" + i + "suffix" + i, svc.complexKey(i, "suffix" + i)); + assertEquals("value" + i + "suffix" + i, svc.complexKey(i, "suffix" + i)); + } + + assertEquals(3, svc.called()); + + IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); + + assertEquals(3, c.size()); + + for (int i = 0; i < 3; i++) + assertEquals("value" + i + "suffix" + i, c.get(new GridSpringCacheTestKey(i, "suffix" + i))); + } + + /** + * @throws Exception If failed. + */ + public void testComplexKeyNullValue() throws Exception { + for (int i = 0; i < 3; i++) { + assertNull(svc.complexKeyNullValue(i, "suffix" + i)); + assertNull(svc.complexKeyNullValue(i, "suffix" + i)); + } + + assertEquals(3, svc.called()); + + IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); + + assertEquals(3, c.size()); + + for (int i = 0; i < 3; i++) + assertEquals(NULL, c.get(new GridSpringCacheTestKey(i, "suffix" + i))); + } + + /** + * @throws Exception If failed. + */ + public void testSimpleKeyPut() throws Exception { + IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); + + for (int i = 0; i < 3; i++) { + assertEquals("value" + i + "odd", svc.simpleKeyPut(i)); + + assertEquals(i + 1, c.size()); + assertEquals("value" + i + "odd", c.get(i)); + + assertEquals("value" + i + "even", svc.simpleKeyPut(i)); + + assertEquals(i + 1, c.size()); + assertEquals("value" + i + "even", c.get(i)); + } + + assertEquals(6, svc.called()); + } + + /** + * @throws Exception If failed. + */ + public void testSimpleKeyPutNullValue() throws Exception { + IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); + + for (int i = 0; i < 3; i++) { + assertNull(svc.simpleKeyPutNullValue(i)); + + assertEquals(i + 1, c.size()); + assertEquals(NULL, c.get(i)); + + assertNull(svc.simpleKeyPutNullValue(i)); + + assertEquals(i + 1, c.size()); + assertEquals(NULL, c.get(i)); + } + + assertEquals(6, svc.called()); + } + + /** + * @throws Exception If failed. + */ + public void testComplexKeyPut() throws Exception { + IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); + + for (int i = 0; i < 3; i++) { + assertEquals("value" + i + "suffix" + i + "odd", svc.complexKeyPut(i, "suffix" + i)); + + assertEquals(i + 1, c.size()); + assertEquals("value" + i + "suffix" + i + "odd", c.get(new GridSpringCacheTestKey(i, "suffix" + i))); + + assertEquals("value" + i + "suffix" + i + "even", svc.complexKeyPut(i, "suffix" + i)); + + assertEquals(i + 1, c.size()); + assertEquals("value" + i + "suffix" + i + "even", c.get(new GridSpringCacheTestKey(i, "suffix" + i))); + } + + assertEquals(6, svc.called()); + } + + /** + * @throws Exception If failed. + */ + public void testComplexKeyPutNullValue() throws Exception { + IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); + + for (int i = 0; i < 3; i++) { + assertNull(svc.complexKeyPutNullValue(i, "suffix" + i)); + + assertEquals(i + 1, c.size()); + assertEquals(NULL, c.get(new GridSpringCacheTestKey(i, "suffix" + i))); + + assertNull(svc.complexKeyPutNullValue(i, "suffix" + i)); + + assertEquals(i + 1, c.size()); + assertEquals(NULL, c.get(new GridSpringCacheTestKey(i, "suffix" + i))); + } + + assertEquals(6, svc.called()); + } + + /** + * @throws Exception If failed. + */ + public void testSimpleKeyEvict() throws Exception { + IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); + + for (int i = 0; i < 3; i++) + c.put(i, "value" + i); + + assertEquals(3, c.size()); + + assertEquals("value0", c.get(0)); + assertEquals("value1", c.get(1)); + assertEquals("value2", c.get(2)); + + svc.simpleKeyEvict(2); + + assertEquals(2, c.size()); + + assertEquals("value0", c.get(0)); + assertEquals("value1", c.get(1)); + assertNull(c.get(2)); + } + + /** + * @throws Exception If failed. + */ + public void testComplexKeyEvict() throws Exception { + IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); + + for (int i = 0; i < 3; i++) + c.put(new GridSpringCacheTestKey(i, "suffix" + i), "value" + i); + + assertEquals(3, c.size()); + + assertEquals("value0", c.get(new GridSpringCacheTestKey(0, "suffix" + 0))); + assertEquals("value1", c.get(new GridSpringCacheTestKey(1, "suffix" + 1))); + assertEquals("value2", c.get(new GridSpringCacheTestKey(2, "suffix" + 2))); + + svc.complexKeyEvict(2, "suffix" + 2); + + assertEquals(2, c.size()); + + assertEquals("value0", c.get(new GridSpringCacheTestKey(0, "suffix" + 0))); + assertEquals("value1", c.get(new GridSpringCacheTestKey(1, "suffix" + 1))); + assertNull(c.get(new GridSpringCacheTestKey(2, "suffix" + 2))); + } + + /** + * @throws Exception If failed. + */ + public void testEvictAll() throws Exception { + IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); + + for (int i = 0; i < 3; i++) + c.put(i, "value" + i); + + assertEquals(3, c.size()); + + assertEquals("value0", c.get(0)); + assertEquals("value1", c.get(1)); + assertEquals("value2", c.get(2)); + + svc.evictAll(); + + assertEquals(0, c.size()); + } + + /** + * @throws Exception If failed. + */ + public void testDynamicCache() throws Exception { + for (int i = 0; i < 3; i++) { + assertEquals("value" + i, dynamicSvc.cacheable(i)); + assertEquals("value" + i, dynamicSvc.cacheable(i)); + } + + assertEquals(3, dynamicSvc.called()); + + IgniteCache<Integer, String> c = grid().cache(DYNAMIC_CACHE_NAME); + + // Check that correct config is used. + assertEquals(2, c.getConfiguration(CacheConfiguration.class).getBackups()); + + assertEquals(3, c.size()); + + for (int i = 0; i < 3; i++) + assertEquals("value" + i, c.get(i)); + } + + /** + * @throws Exception If failed. + */ + public void testDynamicCachePut() throws Exception { + for (int i = 0; i < 3; i++) { + assertEquals("value" + i, dynamicSvc.cachePut(i)); + assertEquals("value" + i, dynamicSvc.cachePut(i)); + } + + assertEquals(6, dynamicSvc.called()); + + IgniteCache<Integer, String> c = grid().cache(DYNAMIC_CACHE_NAME); + + // Check that correct config is used. + assertEquals(2, c.getConfiguration(CacheConfiguration.class).getBackups()); + + assertEquals(3, c.size()); + + for (int i = 0; i < 3; i++) + assertEquals("value" + i, c.get(i)); + } + + /** + * @throws Exception If failed. + */ + public void testDynamicCacheEvict() throws Exception { + CacheConfiguration<Integer, String> cacheCfg = new CacheConfiguration<>(DEFAULT_CACHE_NAME); + + cacheCfg.setName(DYNAMIC_CACHE_NAME); + + IgniteCache<Integer, String> c = grid().createCache(cacheCfg); + + for (int i = 0; i < 3; i++) + c.put(i, "value" + i); + + assertEquals(3, c.size()); + + for (int i = 0; i < 2; i++) { + dynamicSvc.cacheEvict(i); + dynamicSvc.cacheEvict(i); + } + + assertEquals(4, dynamicSvc.called()); + + assertEquals(1, c.size()); + + assertEquals("value2", c.get(2)); + } + + /** + * @throws Exception If failed. + */ + public void testDynamicCacheEvictAll() throws Exception { + CacheConfiguration<Integer, String> cacheCfg = new CacheConfiguration<>(DEFAULT_CACHE_NAME); + + cacheCfg.setName(DYNAMIC_CACHE_NAME); + + IgniteCache<Integer, String> c = grid().createCache(cacheCfg); + + for (int i = 0; i < 3; i++) + c.put(i, "value" + i); + + assertEquals(3, c.size()); + + dynamicSvc.cacheEvictAll(); + dynamicSvc.cacheEvictAll(); + + assertEquals(2, dynamicSvc.called()); + + assertEquals(0, c.size()); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSelfTest.java b/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSelfTest.java index 5a0e759..5d3c320 100644 --- a/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSelfTest.java +++ b/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSelfTest.java @@ -17,51 +17,21 @@ package org.apache.ignite.cache.spring; -import org.apache.ignite.IgniteCache; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder; import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; -import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Spring cache test. */ -public class GridSpringCacheManagerSelfTest extends GridCommonAbstractTest { +public class GridSpringCacheManagerSelfTest extends GridSpringCacheManagerAbstractTest { /** */ private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true); - /** */ - private static final String CACHE_NAME = "testCache"; - - /** */ - private static final String DYNAMIC_CACHE_NAME = "dynamicCache"; - - /** */ - private static final Object NULL; - - /** - */ - static { - try { - NULL = U.field(SpringCache.class, "NULL"); - } - catch (IgniteCheckedException e) { - throw new RuntimeException(e); - } - } - - /** */ - private GridSpringCacheTestService svc; - - /** */ - private GridSpringDynamicCacheTestService dynamicSvc; - /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); @@ -82,11 +52,6 @@ public class GridSpringCacheManagerSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override public String getTestIgniteInstanceName() { - return "testGrid"; - } - - /** {@inheritDoc} */ @Override protected void beforeTestsStarted() throws Exception { startGrid(); } @@ -113,326 +78,4 @@ public class GridSpringCacheManagerSelfTest extends GridCommonAbstractTest { grid().destroyCache(DYNAMIC_CACHE_NAME); } - - /** - * @throws Exception If failed. - */ - public void testSimpleKey() throws Exception { - for (int i = 0; i < 3; i++) { - assertEquals("value" + i, svc.simpleKey(i)); - assertEquals("value" + i, svc.simpleKey(i)); - } - - assertEquals(3, svc.called()); - - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - assertEquals(3, c.size()); - - for (int i = 0; i < 3; i++) - assertEquals("value" + i, c.get(i)); - } - - /** - * @throws Exception If failed. - */ - public void testSimpleKeyNullValue() throws Exception { - for (int i = 0; i < 3; i++) { - assertNull(svc.simpleKeyNullValue(i)); - assertNull(svc.simpleKeyNullValue(i)); - } - - assertEquals(3, svc.called()); - - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - assertEquals(3, c.size()); - - for (int i = 0; i < 3; i++) - assertEquals(NULL, c.get(i)); - } - - /** - * @throws Exception If failed. - */ - public void testComplexKey() throws Exception { - for (int i = 0; i < 3; i++) { - assertEquals("value" + i + "suffix" + i, svc.complexKey(i, "suffix" + i)); - assertEquals("value" + i + "suffix" + i, svc.complexKey(i, "suffix" + i)); - } - - assertEquals(3, svc.called()); - - IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); - - assertEquals(3, c.size()); - - for (int i = 0; i < 3; i++) - assertEquals("value" + i + "suffix" + i, c.get(new GridSpringCacheTestKey(i, "suffix" + i))); - } - - /** - * @throws Exception If failed. - */ - public void testComplexKeyNullValue() throws Exception { - for (int i = 0; i < 3; i++) { - assertNull(svc.complexKeyNullValue(i, "suffix" + i)); - assertNull(svc.complexKeyNullValue(i, "suffix" + i)); - } - - assertEquals(3, svc.called()); - - IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); - - assertEquals(3, c.size()); - - for (int i = 0; i < 3; i++) - assertEquals(NULL, c.get(new GridSpringCacheTestKey(i, "suffix" + i))); - } - - /** - * @throws Exception If failed. - */ - public void testSimpleKeyPut() throws Exception { - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - for (int i = 0; i < 3; i++) { - assertEquals("value" + i + "odd", svc.simpleKeyPut(i)); - - assertEquals(i + 1, c.size()); - assertEquals("value" + i + "odd", c.get(i)); - - assertEquals("value" + i + "even", svc.simpleKeyPut(i)); - - assertEquals(i + 1, c.size()); - assertEquals("value" + i + "even", c.get(i)); - } - - assertEquals(6, svc.called()); - } - - /** - * @throws Exception If failed. - */ - public void testSimpleKeyPutNullValue() throws Exception { - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - for (int i = 0; i < 3; i++) { - assertNull(svc.simpleKeyPutNullValue(i)); - - assertEquals(i + 1, c.size()); - assertEquals(NULL, c.get(i)); - - assertNull(svc.simpleKeyPutNullValue(i)); - - assertEquals(i + 1, c.size()); - assertEquals(NULL, c.get(i)); - } - - assertEquals(6, svc.called()); - } - - /** - * @throws Exception If failed. - */ - public void testComplexKeyPut() throws Exception { - IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); - - for (int i = 0; i < 3; i++) { - assertEquals("value" + i + "suffix" + i + "odd", svc.complexKeyPut(i, "suffix" + i)); - - assertEquals(i + 1, c.size()); - assertEquals("value" + i + "suffix" + i + "odd", c.get(new GridSpringCacheTestKey(i, "suffix" + i))); - - assertEquals("value" + i + "suffix" + i + "even", svc.complexKeyPut(i, "suffix" + i)); - - assertEquals(i + 1, c.size()); - assertEquals("value" + i + "suffix" + i + "even", c.get(new GridSpringCacheTestKey(i, "suffix" + i))); - } - - assertEquals(6, svc.called()); - } - - /** - * @throws Exception If failed. - */ - public void testComplexKeyPutNullValue() throws Exception { - IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); - - for (int i = 0; i < 3; i++) { - assertNull(svc.complexKeyPutNullValue(i, "suffix" + i)); - - assertEquals(i + 1, c.size()); - assertEquals(NULL, c.get(new GridSpringCacheTestKey(i, "suffix" + i))); - - assertNull(svc.complexKeyPutNullValue(i, "suffix" + i)); - - assertEquals(i + 1, c.size()); - assertEquals(NULL, c.get(new GridSpringCacheTestKey(i, "suffix" + i))); - } - - assertEquals(6, svc.called()); - } - - /** - * @throws Exception If failed. - */ - public void testSimpleKeyEvict() throws Exception { - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - for (int i = 0; i < 3; i++) - c.put(i, "value" + i); - - assertEquals(3, c.size()); - - assertEquals("value0", c.get(0)); - assertEquals("value1", c.get(1)); - assertEquals("value2", c.get(2)); - - svc.simpleKeyEvict(2); - - assertEquals(2, c.size()); - - assertEquals("value0", c.get(0)); - assertEquals("value1", c.get(1)); - assertNull(c.get(2)); - } - - /** - * @throws Exception If failed. - */ - public void testComplexKeyEvict() throws Exception { - IgniteCache<GridSpringCacheTestKey, String> c = grid().cache(CACHE_NAME); - - for (int i = 0; i < 3; i++) - c.put(new GridSpringCacheTestKey(i, "suffix" + i), "value" + i); - - assertEquals(3, c.size()); - - assertEquals("value0", c.get(new GridSpringCacheTestKey(0, "suffix" + 0))); - assertEquals("value1", c.get(new GridSpringCacheTestKey(1, "suffix" + 1))); - assertEquals("value2", c.get(new GridSpringCacheTestKey(2, "suffix" + 2))); - - svc.complexKeyEvict(2, "suffix" + 2); - - assertEquals(2, c.size()); - - assertEquals("value0", c.get(new GridSpringCacheTestKey(0, "suffix" + 0))); - assertEquals("value1", c.get(new GridSpringCacheTestKey(1, "suffix" + 1))); - assertNull(c.get(new GridSpringCacheTestKey(2, "suffix" + 2))); - } - - /** - * @throws Exception If failed. - */ - public void testEvictAll() throws Exception { - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - for (int i = 0; i < 3; i++) - c.put(i, "value" + i); - - assertEquals(3, c.size()); - - assertEquals("value0", c.get(0)); - assertEquals("value1", c.get(1)); - assertEquals("value2", c.get(2)); - - svc.evictAll(); - - assertEquals(0, c.size()); - } - - /** - * @throws Exception If failed. - */ - public void testDynamicCache() throws Exception { - for (int i = 0; i < 3; i++) { - assertEquals("value" + i, dynamicSvc.cacheable(i)); - assertEquals("value" + i, dynamicSvc.cacheable(i)); - } - - assertEquals(3, dynamicSvc.called()); - - IgniteCache<Integer, String> c = grid().cache(DYNAMIC_CACHE_NAME); - - // Check that correct config is used. - assertEquals(2, c.getConfiguration(CacheConfiguration.class).getBackups()); - - assertEquals(3, c.size()); - - for (int i = 0; i < 3; i++) - assertEquals("value" + i, c.get(i)); - } - - /** - * @throws Exception If failed. - */ - public void testDynamicCachePut() throws Exception { - for (int i = 0; i < 3; i++) { - assertEquals("value" + i, dynamicSvc.cachePut(i)); - assertEquals("value" + i, dynamicSvc.cachePut(i)); - } - - assertEquals(6, dynamicSvc.called()); - - IgniteCache<Integer, String> c = grid().cache(DYNAMIC_CACHE_NAME); - - // Check that correct config is used. - assertEquals(2, c.getConfiguration(CacheConfiguration.class).getBackups()); - - assertEquals(3, c.size()); - - for (int i = 0; i < 3; i++) - assertEquals("value" + i, c.get(i)); - } - - /** - * @throws Exception If failed. - */ - public void testDynamicCacheEvict() throws Exception { - CacheConfiguration<Integer, String> cacheCfg = new CacheConfiguration<>(DEFAULT_CACHE_NAME); - - cacheCfg.setName(DYNAMIC_CACHE_NAME); - - IgniteCache<Integer, String> c = grid().createCache(cacheCfg); - - for (int i = 0; i < 3; i++) - c.put(i, "value" + i); - - assertEquals(3, c.size()); - - for (int i = 0; i < 2; i++) { - dynamicSvc.cacheEvict(i); - dynamicSvc.cacheEvict(i); - } - - assertEquals(4, dynamicSvc.called()); - - assertEquals(1, c.size()); - - assertEquals("value2", c.get(2)); - } - - /** - * @throws Exception If failed. - */ - public void testDynamicCacheEvictAll() throws Exception { - CacheConfiguration<Integer, String> cacheCfg = new CacheConfiguration<>(DEFAULT_CACHE_NAME); - - cacheCfg.setName(DYNAMIC_CACHE_NAME); - - IgniteCache<Integer, String> c = grid().createCache(cacheCfg); - - for (int i = 0; i < 3; i++) - c.put(i, "value" + i); - - assertEquals(3, c.size()); - - dynamicSvc.cacheEvictAll(); - dynamicSvc.cacheEvictAll(); - - assertEquals(2, dynamicSvc.called()); - - assertEquals(0, c.size()); - } } http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSpringBeanSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSpringBeanSelfTest.java b/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSpringBeanSelfTest.java new file mode 100644 index 0000000..8557cc2 --- /dev/null +++ b/modules/spring/src/test/java/org/apache/ignite/cache/spring/GridSpringCacheManagerSpringBeanSelfTest.java @@ -0,0 +1,40 @@ +/* + * 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.ignite.cache.spring; + +import org.springframework.beans.factory.BeanFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * Spring cache test. + */ +public class GridSpringCacheManagerSpringBeanSelfTest extends GridSpringCacheManagerAbstractTest { + + /** {@inheritDoc} */ + @Override protected void beforeTest() throws Exception { + BeanFactory factory = new ClassPathXmlApplicationContext("org/apache/ignite/cache/spring/spring-caching-ignite-spring-bean.xml"); + + svc = (GridSpringCacheTestService)factory.getBean("testService"); + dynamicSvc = (GridSpringDynamicCacheTestService)factory.getBean("dynamicTestService"); + } + + /** {@inheritDoc} */ + @Override protected void afterTest() throws Exception { + stopAllGrids(); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/org/apache/ignite/cache/spring/spring-caching-ignite-spring-bean.xml ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/cache/spring/spring-caching-ignite-spring-bean.xml b/modules/spring/src/test/java/org/apache/ignite/cache/spring/spring-caching-ignite-spring-bean.xml new file mode 100644 index 0000000..2671a5d --- /dev/null +++ b/modules/spring/src/test/java/org/apache/ignite/cache/spring/spring-caching-ignite-spring-bean.xml @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + 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. +--> + +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:cache="http://www.springframework.org/schema/cache" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> + + <bean id="mySpringBean" class="org.apache.ignite.IgniteSpringBean"> + <property name="configuration"> + <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"> + <property name="peerClassLoadingEnabled" value="true"/> + <property name="igniteInstanceName" value="testGrid"/> + + <property name="cacheConfiguration"> + <list> + <bean class="org.apache.ignite.configuration.CacheConfiguration"> + <property name="name" value="testCache"/> + <property name="atomicityMode" value="TRANSACTIONAL"/> + </bean> + </list> + </property> + + <property name="discoverySpi"> + <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> + <property name="ipFinder"> + <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder"> + <property name="addresses"> + <list> + <value>127.0.0.1:47500..47509</value> + </list> + </property> + </bean> + </property> + </bean> + </property> + </bean> + </property> + </bean> + + <!-- + Test service with cacheable methods. + --> + <bean id="testService" class="org.apache.ignite.cache.spring.GridSpringCacheTestService"/> + + <!-- + Test service with cacheable methods (dynamic cache). + --> + <bean id="dynamicTestService" class="org.apache.ignite.cache.spring.GridSpringDynamicCacheTestService"/> + + <!-- + Cache manager. + --> + <bean id="cacheManager" class="org.apache.ignite.cache.spring.SpringCacheManager"> + <property name="igniteInstanceName" value="testGrid"/> + <property name="dynamicCacheConfiguration"> + <bean class="org.apache.ignite.configuration.CacheConfiguration"> + <property name="backups" value="2"/> + </bean> + </property> + </bean> + + <!-- + Key generator. + --> + <bean id="keyGenerator" class="org.apache.ignite.cache.spring.GridSpringCacheTestKeyGenerator"/> + + <!-- + Enable annotation-driver configuration for caching. + --> + <cache:annotation-driven key-generator="keyGenerator"/> +</beans> http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java b/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java index ff96c7b..810f6af 100644 --- a/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java +++ b/modules/spring/src/test/java/org/apache/ignite/testsuites/IgniteSpringTestSuite.java @@ -19,6 +19,7 @@ package org.apache.ignite.testsuites; import junit.framework.TestSuite; import org.apache.ignite.cache.spring.GridSpringCacheManagerSelfTest; +import org.apache.ignite.cache.spring.GridSpringCacheManagerSpringBeanSelfTest; import org.apache.ignite.cache.spring.SpringCacheManagerContextInjectionTest; import org.apache.ignite.cache.spring.SpringCacheTest; import org.apache.ignite.spring.injection.IgniteSpringBeanSpringResourceInjectionTest; @@ -38,6 +39,7 @@ import org.apache.ignite.spring.IgniteStartFromStreamConfigurationTest; import org.apache.ignite.spring.injection.GridServiceInjectionSpringResourceTest; import org.apache.ignite.testframework.IgniteTestSuite; import org.apache.ignite.transactions.spring.GridSpringTransactionManagerSelfTest; +import org.apache.ignite.transactions.spring.GridSpringTransactionManagerSpringBeanSelfTest; import org.apache.ignite.transactions.spring.SpringTransactionManagerContextInjectionTest; /** @@ -63,6 +65,7 @@ public class IgniteSpringTestSuite extends TestSuite { suite.addTestSuite(GridP2PUserVersionChangeSelfTest.class); suite.addTestSuite(GridSpringCacheManagerSelfTest.class); + suite.addTestSuite(GridSpringCacheManagerSpringBeanSelfTest.class); suite.addTestSuite(IgniteDynamicCacheConfigTest.class); @@ -76,6 +79,7 @@ public class IgniteSpringTestSuite extends TestSuite { suite.addTestSuite(CachePojoStoreXmlWithSqlEscapeSelfTest.class); suite.addTestSuite(GridSpringTransactionManagerSelfTest.class); + suite.addTestSuite(GridSpringTransactionManagerSpringBeanSelfTest.class); suite.addTestSuite(GridServiceInjectionSpringResourceTest.class); suite.addTestSuite(IgniteSpringBeanSpringResourceInjectionTest.class); http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerAbstractTest.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerAbstractTest.java b/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerAbstractTest.java new file mode 100644 index 0000000..c58d911 --- /dev/null +++ b/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerAbstractTest.java @@ -0,0 +1,119 @@ +package org.apache.ignite.transactions.spring; + +import org.apache.ignite.IgniteCache; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; +import org.apache.ignite.transactions.Transaction; +import org.springframework.transaction.IllegalTransactionStateException; +import org.springframework.transaction.InvalidIsolationLevelException; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.TransactionCallback; +import org.springframework.transaction.support.TransactionTemplate; + +public abstract class GridSpringTransactionManagerAbstractTest extends GridCommonAbstractTest { + + /** */ + protected static final String CACHE_NAME = "testCache"; + + /** */ + public abstract IgniteCache<Integer, String> cache(); + + /** */ + public abstract GridSpringTransactionService service(); + + /** {@inheritDoc} */ + @Override protected void afterTest() throws Exception { + cache().removeAll(); + } + + /** {@inheritDoc} */ + @Override public String getTestIgniteInstanceName() { + return "testGrid"; + } + + /** */ + public void testSuccessPut() { + int entryCnt = 1_000; + + service().put(cache(), entryCnt); + + assertEquals(entryCnt, cache().size()); + } + + /** */ + public void testFailPut() { + int entryCnt = 1_000; + + try { + service().putWithError(cache(), entryCnt); + } + catch (NumberFormatException ignored) { + System.out.println(); + // No-op. + } + + assertEquals(0, cache().size()); + } + + /** */ + public void testMandatoryPropagation() { + try { + service().putWithMandatoryPropagation(cache()); + } + catch (IllegalTransactionStateException e) { + assertEquals("No existing transaction found for transaction marked with propagation 'mandatory'", e.getMessage()); + } + + assertEquals(0, cache().size()); + } + + /** */ + public void testUnsupportedIsolationLevel() { + try { + service().putWithUnsupportedIsolationLevel(cache()); + } + catch (InvalidIsolationLevelException e) { + assertEquals("Ignite does not support READ_UNCOMMITTED isolation level.", e.getMessage()); + } + + assertEquals(0, cache().size()); + } + + /** + * @throws Exception If test failed. + */ + public void testDoSetRollbackOnlyInExistingTransaction() throws Exception { + SpringTransactionManager mngr = new SpringTransactionManager(); + mngr.setIgniteInstanceName(grid().name()); + mngr.onApplicationEvent(null); + + TransactionTemplate txTmpl = new TransactionTemplate(mngr); + + try { + txTmpl.execute(new TransactionCallback<Object>() { + @Override public Object doInTransaction(TransactionStatus status) { + cache().put(1, "1"); + + Transaction tx = grid().transactions().tx(); + + assertFalse(tx.isRollbackOnly()); + + try { + service().putWithError(cache(), 1_000); + } + catch (Exception ignored) { + // No-op. + } + + assertTrue(tx.isRollbackOnly()); + + return null; + } + }); + } + catch (Exception ignored) { + // No-op. + } + + assertEquals(0, cache().size()); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java b/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java index e68ddb4..ae1abb2 100644 --- a/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java +++ b/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSelfTest.java @@ -24,27 +24,17 @@ import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder; import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; -import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; -import org.apache.ignite.transactions.Transaction; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; -import org.springframework.transaction.IllegalTransactionStateException; -import org.springframework.transaction.InvalidIsolationLevelException; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.TransactionCallback; -import org.springframework.transaction.support.TransactionTemplate; /** * Spring transaction test. */ -public class GridSpringTransactionManagerSelfTest extends GridCommonAbstractTest { +public class GridSpringTransactionManagerSelfTest extends GridSpringTransactionManagerAbstractTest { /** */ private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true); /** */ - private static final String CACHE_NAME = "testCache"; - - /** */ private GridSpringTransactionService service; /** {@inheritDoc} */ @@ -67,9 +57,12 @@ public class GridSpringTransactionManagerSelfTest extends GridCommonAbstractTest return cfg; } - /** {@inheritDoc} */ - @Override public String getTestIgniteInstanceName() { - return "testGrid"; + @Override public IgniteCache<Integer, String> cache() { + return grid().cache(CACHE_NAME); + } + + @Override public GridSpringTransactionService service() { + return service; } /** {@inheritDoc} */ @@ -84,109 +77,7 @@ public class GridSpringTransactionManagerSelfTest extends GridCommonAbstractTest /** {@inheritDoc} */ @Override protected void beforeTest() throws Exception { - ApplicationContext applicationContext = new GenericXmlApplicationContext("config/spring-transactions.xml"); - - service = (GridSpringTransactionService)applicationContext.getBean("gridSpringTransactionService"); - } - - /** {@inheritDoc} */ - @Override protected void afterTest() throws Exception { - grid().cache(CACHE_NAME).removeAll(); - } - - /** */ - public void testSuccessPut() { - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - int entryCnt = 1_000; - - service.put(c, entryCnt); - - assertEquals(entryCnt, c.size()); - } - - /** */ - public void testFailPut() { - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - int entryCnt = 1_000; - - try { - service.putWithError(c, entryCnt); - } - catch (Exception ignored) { - // No-op. - } - - assertEquals(0, c.size()); - } - - /** */ - public void testMandatoryPropagation() { - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - try { - service.putWithMandatoryPropagation(c); - } - catch (IllegalTransactionStateException e) { - assertEquals("No existing transaction found for transaction marked with propagation 'mandatory'", e.getMessage()); - } - - assertEquals(0, c.size()); - } - - /** */ - public void testUnsupportedIsolationLevel() { - IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - try { - service.putWithUnsupportedIsolationLevel(c); - } - catch (InvalidIsolationLevelException e) { - assertEquals("Ignite does not support READ_UNCOMMITTED isolation level.", e.getMessage()); - } - - assertEquals(0, c.size()); - } - - /** - * @throws Exception If test failed. - */ - public void testDoSetRollbackOnlyInExistingTransaction() throws Exception { - final IgniteCache<Integer, String> c = grid().cache(CACHE_NAME); - - SpringTransactionManager mngr = new SpringTransactionManager(); - mngr.setIgniteInstanceName(grid().name()); - mngr.afterPropertiesSet(); - - TransactionTemplate txTmpl = new TransactionTemplate(mngr); - - try { - txTmpl.execute(new TransactionCallback<Object>() { - @Override public Object doInTransaction(TransactionStatus status) { - c.put(1, "1"); - - Transaction tx = grid().transactions().tx(); - - assertFalse(tx.isRollbackOnly()); - - try { - service.putWithError(c, 1_000); - } - catch (Exception ignored) { - // No-op. - } - - assertTrue(tx.isRollbackOnly()); - - return null; - } - }); - } - catch (Exception ignored) { - // No-op. - } - - assertEquals(0, c.size()); + ApplicationContext appCtx = new GenericXmlApplicationContext("config/spring-transactions.xml"); + service = (GridSpringTransactionService)appCtx.getBean("gridSpringTransactionService"); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSpringBeanSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSpringBeanSelfTest.java b/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSpringBeanSelfTest.java new file mode 100644 index 0000000..ab91132 --- /dev/null +++ b/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionManagerSpringBeanSelfTest.java @@ -0,0 +1,35 @@ +package org.apache.ignite.transactions.spring; + +import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteCache; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.GenericXmlApplicationContext; + +public class GridSpringTransactionManagerSpringBeanSelfTest extends GridSpringTransactionManagerAbstractTest { + + /** */ + private Ignite ignite; + + /** */ + private GridSpringTransactionService service; + + @Override public IgniteCache<Integer, String> cache() { + return ignite.cache(CACHE_NAME); + } + + @Override public GridSpringTransactionService service() { + return service; + } + + /** {@inheritDoc} */ + @Override protected void beforeTest() throws Exception { + ApplicationContext appCtx = new GenericXmlApplicationContext("config/spring-transactions-ignite-spring-bean.xml"); + ignite = (Ignite)appCtx.getBean("mySpringBean"); + service = (GridSpringTransactionService)appCtx.getBean("gridSpringTransactionService"); + } + + @Override protected void afterTest() throws Exception { + super.afterTest(); + stopAllGrids(); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/d6300fc3/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java b/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java index dc9bca7..1a4c2b6 100644 --- a/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java +++ b/modules/spring/src/test/java/org/apache/ignite/transactions/spring/GridSpringTransactionService.java @@ -18,7 +18,6 @@ package org.apache.ignite.transactions.spring; import org.apache.ignite.IgniteCache; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -26,7 +25,6 @@ import org.springframework.transaction.annotation.Transactional; /** * Service. */ -@Service public class GridSpringTransactionService { /** * @param cache Cache.
