From 4b0f83529d80cd4617fd39ab3dd3213c7872e641 Mon Sep 17 00:00:00 2001 From: Sebastian Laskawiec Date: Mon, 2 Nov 2015 14:03:39 +0100 Subject: [PATCH] ISPN-5903 Spring split --- bom/pom.xml | 7 +- distribution/pom.xml | 7 +- .../main/asciidoc/upgrading/upgrading.adoc | 3 + javadoc/pom.xml | 12 +- parent/pom.xml | 33 ++ pom.xml | 4 +- spring/spring4/pom.xml | 227 ++------ spring/spring4/spring4-common/README.md | 4 + spring/spring4/spring4-common/pom.xml | 164 ++++++ ...ainerCacheManagerBeanDefinitionParser.java | 2 +- ...eddedCacheManagerBeanDefinitionParser.java | 0 .../config/InfinispanNamespaceHandler.java | 0 .../config/InfinispanNamespaceUtils.java | 0 ...emoteCacheManagerBeanDefinitionParser.java | 0 .../org/infinispan/spring/package-info.java | 0 .../spring/provider/CacheDelegate.java | 0 .../infinispan/spring/provider/NullValue.java | 0 .../spring/provider/SpringCache.java | 0 .../spring/provider/package-info.java | 13 +- .../main/resources/META-INF/spring.handlers | 0 .../main/resources/META-INF/spring.schemas | 0 .../spring/config/infinispan-spring-8.0.xsd | 0 spring/spring4/spring4-embedded/pom.xml | 174 ++++++ .../AbstractEmbeddedCacheManagerFactory.java | 0 .../InfinispanDefaultCacheFactoryBean.java | 6 +- ...tainerEmbeddedCacheManagerFactoryBean.java | 39 ++ .../provider/SpringEmbeddedCacheManager.java | 0 ...SpringEmbeddedCacheManagerFactoryBean.java | 0 ...nispanEmbeddedCacheManagerFactoryBean.java | 0 ...finispanNamedEmbeddedCacheFactoryBean.java | 0 ...mbeddedCacheManagerFactoryBeanBuilder.java | 0 .../config/CacheLoaderNotFoundTest.java | 0 .../DuplicateDomainAwareCacheManager.java | 0 ...anContainerCacheManagerDefinitionTest.java | 0 ...panEmbeddedCacheManagerDefinitionTest.java | 0 .../config/NonTransactionalCacheTest.java | 0 .../spring/provider/SpringCacheCacheTest.java | 0 ...ngEmbeddedCacheManagerFactoryBeanTest.java | 0 .../SpringEmbeddedCacheManagerTest.java | 0 .../provider/sample/AbstractTestTemplate.java | 4 +- .../sample/AbstractTestTemplateJsr107.java | 4 +- .../provider/sample/DataSourceResolver.java | 0 .../sample/SampleEmbeddedCacheTest.java | 0 .../SampleHotrodServerLifecycleBean.java | 0 .../sample/SampleJavaConfigurationTest.java | 0 .../SampleTransactionIntegrationTest.java | 0 .../sample/SampleXmlConfigurationTest.java | 0 .../provider/sample/dao/BaseBookDao.java | 0 .../provider/sample/dao/JdbcBookDao.java | 0 .../spring/provider/sample/entity/Book.java | 0 .../generators/SingleArgKeyGenerator.java | 0 .../sample/resolvers/CustomCacheResolver.java | 0 .../sample/service/CachedBookService.java | 0 .../sample/service/CachedBookServiceImpl.java | 0 .../service/CachedBookServiceJsr107.java | 0 .../service/CachedBookServiceJsr107Impl.java | 0 .../service/CachedTransactionBookService.java | 0 .../CachedTransactionBookServiceImpl.java | 0 ...panDefaultCacheFactoryBeanContextTest.java | 17 +- ...InfinispanDefaultCacheFactoryBeanTest.java | 40 +- ...anEmbeddedCacheManagerFactoryBeanTest.java | 0 ...spanNamedEmbeddedCacheFactoryBeanTest.java | 3 +- .../CacheLoaderNotFoundTest-context.xml | 0 ...inerCacheManagerDefinitionTest-context.xml | 0 ...ddedCacheManagerDefinitionTest-context.xml | 0 .../NonTransactionalCacheTest-context.xml | 0 .../spring/provider/named-async-cache.xml | 0 .../sample/SampleEmbeddedCacheTestConfig.xml | 0 ...SampleTransactionIntegrationTestConfig.xml | 0 .../SampleXmlConfigurationTestConfig.xml | 0 .../sample/books-infinispan-config.xml | 0 .../spring/provider/sample/initDB.sql | 0 .../spring/provider/sample/populateDB.sql | 0 ...spanDefaultCacheFactoryBeanContextTest.xml | 2 +- .../embedded/classloader-not-found.xml | 0 .../support/embedded/named-async-cache.xml | 0 .../embedded/non-transactional-cache.xml | 0 spring/spring4/spring4-remote/pom.xml | 183 ++++++ .../AbstractRemoteCacheManagerFactory.java | 4 +- .../ConfigurationPropertiesOverrides.java | 0 ...ontainerRemoteCacheManagerFactoryBean.java | 39 ++ .../spring/provider/SpringRemoteCache.java | 2 - .../provider/SpringRemoteCacheManager.java | 0 .../SpringRemoteCacheManagerFactoryBean.java | 0 ...InfinispanNamedRemoteCacheFactoryBean.java | 7 +- ...finispanRemoteCacheManagerFactoryBean.java | 0 .../org/infinispan/spring/AssertionUtils.java | 0 .../ConfigurationPropertiesOverridesTest.java | 0 ...ispanRemoteCacheManagerDefinitionTest.java | 0 ...oteCacheManagerFactoryBeanContextTest.java | 0 ...ringRemoteCacheManagerFactoryBeanTest.java | 36 +- .../SpringRemoteCacheManagerTest.java | 0 .../provider/sample/AbstractTestTemplate.java | 526 ++++++++++++++++++ .../sample/AbstractTestTemplateJsr107.java | 114 ++++ .../provider/sample/DataSourceResolver.java | 23 + .../SampleHotrodServerLifecycleBean.java | 58 ++ .../sample/SampleRemoteCacheTest.java | 0 .../provider/sample/dao/BaseBookDao.java | 56 ++ .../provider/sample/dao/JdbcBookDao.java | 106 ++++ .../spring/provider/sample/entity/Book.java | 103 ++++ .../generators/SingleArgKeyGenerator.java | 25 + .../sample/resolvers/CustomCacheResolver.java | 32 ++ .../sample/service/CachedBookService.java | 60 ++ .../sample/service/CachedBookServiceImpl.java | 210 +++++++ .../service/CachedBookServiceJsr107.java | 21 + .../service/CachedBookServiceJsr107Impl.java | 55 ++ .../service/CachedTransactionBookService.java | 21 + .../CachedTransactionBookServiceImpl.java | 49 ++ .../remote/HotrodServerLifecycleBean.java | 0 ...amedRemoteCacheFactoryBeanContextTest.java | 0 ...nispanNamedRemoteCacheFactoryBeanTest.java | 0 ...oteCacheManagerFactoryBeanContextTest.java | 0 ...spanRemoteCacheManagerFactoryBeanTest.java | 34 +- ...moteCacheManagerDefinitionTest-context.xml | 0 ...moteCacheManagerFactoryBeanContextTest.xml | 0 .../spring/provider/hotrod-client.properties | 0 .../spring/provider/named-async-cache.xml | 24 + .../sample/SampleRemoteCacheTestConfig.xml | 0 .../sample/books-infinispan-config.xml | 18 + .../spring/provider/sample/initDB.sql | 7 + .../spring/provider/sample/populateDB.sql | 10 + ...NamedRemoteCacheFactoryBeanContextTest.xml | 0 ...moteCacheManagerFactoryBeanContextTest.xml | 0 .../support/remote/hotrod-client.properties | 0 .../ContainerCacheManagerFactoryBean.java | 51 -- 125 files changed, 2309 insertions(+), 330 deletions(-) create mode 100644 spring/spring4/spring4-common/README.md create mode 100644 spring/spring4/spring4-common/pom.xml rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/config/InfinispanContainerCacheManagerBeanDefinitionParser.java (97%) rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerBeanDefinitionParser.java (100%) rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/config/InfinispanNamespaceHandler.java (100%) rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/config/InfinispanNamespaceUtils.java (100%) rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerBeanDefinitionParser.java (100%) rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/package-info.java (100%) rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/provider/CacheDelegate.java (100%) rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/provider/NullValue.java (100%) rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/provider/SpringCache.java (100%) rename spring/spring4/{ => spring4-common}/src/main/java/org/infinispan/spring/provider/package-info.java (96%) rename spring/spring4/{ => spring4-common}/src/main/resources/META-INF/spring.handlers (100%) rename spring/spring4/{ => spring4-common}/src/main/resources/META-INF/spring.schemas (100%) rename spring/spring4/{ => spring4-common}/src/main/resources/org/infinispan/spring/config/infinispan-spring-8.0.xsd (100%) create mode 100644 spring/spring4/spring4-embedded/pom.xml rename spring/spring4/{ => spring4-embedded}/src/main/java/org/infinispan/spring/AbstractEmbeddedCacheManagerFactory.java (100%) rename spring/spring4/{src/main/java/org/infinispan/spring/support => spring4-embedded/src/main/java/org/infinispan/spring}/InfinispanDefaultCacheFactoryBean.java (97%) create mode 100644 spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/provider/ContainerEmbeddedCacheManagerFactoryBean.java rename spring/spring4/{ => spring4-embedded}/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManager.java (100%) rename spring/spring4/{ => spring4-embedded}/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBean.java (100%) rename spring/spring4/{ => spring4-embedded}/src/main/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBean.java (100%) rename spring/spring4/{ => spring4-embedded}/src/main/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBean.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/builders/SpringEmbeddedCacheManagerFactoryBeanBuilder.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/config/CacheLoaderNotFoundTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/config/DuplicateDomainAwareCacheManager.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/config/NonTransactionalCacheTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/SpringCacheCacheTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBeanTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/DataSourceResolver.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/SampleHotrodServerLifecycleBean.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/SampleJavaConfigurationTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/SampleXmlConfigurationTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/dao/BaseBookDao.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/dao/JdbcBookDao.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/entity/Book.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/generators/SingleArgKeyGenerator.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/resolvers/CustomCacheResolver.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookService.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceImpl.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107Impl.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookService.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookServiceImpl.java (100%) rename spring/spring4/{src/test/java/org/infinispan/spring/support => spring4-embedded/src/test/java/org/infinispan/spring/support/embedded}/InfinispanDefaultCacheFactoryBeanContextTest.java (81%) rename spring/spring4/{src/test/java/org/infinispan/spring/support => spring4-embedded/src/test/java/org/infinispan/spring/support/embedded}/InfinispanDefaultCacheFactoryBeanTest.java (70%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBeanTest.java (100%) rename spring/spring4/{ => spring4-embedded}/src/test/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBeanTest.java (98%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/config/CacheLoaderNotFoundTest-context.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest-context.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest-context.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/config/NonTransactionalCacheTest-context.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/provider/named-async-cache.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTestConfig.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTestConfig.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/provider/sample/SampleXmlConfigurationTestConfig.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/provider/sample/books-infinispan-config.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/provider/sample/initDB.sql (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/provider/sample/populateDB.sql (100%) rename spring/spring4/{src/test/resources/org/infinispan/spring/support => spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded}/InfinispanDefaultCacheFactoryBeanContextTest.xml (89%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/support/embedded/classloader-not-found.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/support/embedded/named-async-cache.xml (100%) rename spring/spring4/{ => spring4-embedded}/src/test/resources/org/infinispan/spring/support/embedded/non-transactional-cache.xml (100%) create mode 100644 spring/spring4/spring4-remote/pom.xml rename spring/spring4/{ => spring4-remote}/src/main/java/org/infinispan/spring/AbstractRemoteCacheManagerFactory.java (98%) rename spring/spring4/{ => spring4-remote}/src/main/java/org/infinispan/spring/ConfigurationPropertiesOverrides.java (100%) create mode 100644 spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/ContainerRemoteCacheManagerFactoryBean.java rename spring/spring4/{ => spring4-remote}/src/main/java/org/infinispan/spring/provider/SpringRemoteCache.java (96%) rename spring/spring4/{ => spring4-remote}/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManager.java (100%) rename spring/spring4/{ => spring4-remote}/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBean.java (100%) rename spring/spring4/{ => spring4-remote}/src/main/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBean.java (97%) rename spring/spring4/{ => spring4-remote}/src/main/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBean.java (100%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/AssertionUtils.java (100%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/ConfigurationPropertiesOverridesTest.java (100%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest.java (100%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.java (100%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanTest.java (92%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerTest.java (100%) create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/DataSourceResolver.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/SampleHotrodServerLifecycleBean.java rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/provider/sample/SampleRemoteCacheTest.java (100%) create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/dao/BaseBookDao.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/dao/JdbcBookDao.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/entity/Book.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/generators/SingleArgKeyGenerator.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/resolvers/CustomCacheResolver.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookService.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceImpl.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107Impl.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookService.java create mode 100644 spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookServiceImpl.java rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/support/remote/HotrodServerLifecycleBean.java (100%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.java (100%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanTest.java (100%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.java (100%) rename spring/spring4/{ => spring4-remote}/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanTest.java (93%) rename spring/spring4/{ => spring4-remote}/src/test/resources/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest-context.xml (100%) rename spring/spring4/{ => spring4-remote}/src/test/resources/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.xml (100%) rename spring/spring4/{ => spring4-remote}/src/test/resources/org/infinispan/spring/provider/hotrod-client.properties (100%) create mode 100644 spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/named-async-cache.xml rename spring/spring4/{ => spring4-remote}/src/test/resources/org/infinispan/spring/provider/sample/SampleRemoteCacheTestConfig.xml (100%) create mode 100644 spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/books-infinispan-config.xml create mode 100644 spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/initDB.sql create mode 100644 spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/populateDB.sql rename spring/spring4/{ => spring4-remote}/src/test/resources/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.xml (100%) rename spring/spring4/{ => spring4-remote}/src/test/resources/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.xml (100%) rename spring/spring4/{ => spring4-remote}/src/test/resources/org/infinispan/spring/support/remote/hotrod-client.properties (100%) delete mode 100644 spring/spring4/src/main/java/org/infinispan/spring/provider/ContainerCacheManagerFactoryBean.java diff --git a/bom/pom.xml b/bom/pom.xml index 68482c85a806..1b4c9fb818e5 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -238,7 +238,12 @@ ${project.groupId} - infinispan-spring4 + infinispan-spring4-remote + ${project.version} + + + ${project.groupId} + infinispan-spring4-embedded ${project.version} diff --git a/distribution/pom.xml b/distribution/pom.xml index c65ecd205a10..6a9eb3730391 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -91,7 +91,12 @@ ${project.groupId} - infinispan-spring4 + infinispan-spring4-embedded + + + + ${project.groupId} + infinispan-spring4-remote diff --git a/documentation/src/main/asciidoc/upgrading/upgrading.adoc b/documentation/src/main/asciidoc/upgrading/upgrading.adoc index c2e98ab62fc0..fa094f672920 100644 --- a/documentation/src/main/asciidoc/upgrading/upgrading.adoc +++ b/documentation/src/main/asciidoc/upgrading/upgrading.adoc @@ -13,6 +13,9 @@ This guide walks you through the process of upgrading Infinispan. ==== CDI module split CDI module (GroupId:ArtifactId `org.infinispan:infinispan-cdi`) has been split into `org.infinispan:infinispan-cdi-embedded` and `org.infinispan:infinispan-cdi-remote`. Please make sure that you use proper artifact. +==== Spring module split +Spring module (GroupId:ArtifactId `org.infinispan:infinispan-spring4`) has been split into `org.infinispan:infinispan-spring4-embedded` and `org.infinispan:infinispan-spring4-remote`. Please make sure that you use proper artifact. + == Upgrading from 7.x to 8.0 === Configuration changes diff --git a/javadoc/pom.xml b/javadoc/pom.xml index e44c10aeb795..13066b8cbf66 100644 --- a/javadoc/pom.xml +++ b/javadoc/pom.xml @@ -91,7 +91,17 @@ ${project.groupId} - infinispan-spring4 + infinispan-spring4-commons + + + + ${project.groupId} + infinispan-spring4-embedded + + + + ${project.groupId} + infinispan-spring4-remote diff --git a/parent/pom.xml b/parent/pom.xml index 8bd0906320d7..7cf2bf36b54d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -380,6 +380,39 @@ infinispan-osgi ${project.version} + + ${project.groupId} + infinispan-spring4-common + ${project.version} + + + ${project.groupId} + infinispan-spring4-common + ${project.version} + test-jar + + + ${project.groupId} + infinispan-spring4-remote + ${project.version} + + + ${project.groupId} + infinispan-spring4-remote + ${project.version} + test-jar + + + ${project.groupId} + infinispan-spring4-embedded + ${project.version} + + + ${project.groupId} + infinispan-spring4-embedded + ${project.version} + test-jar + com.mchange c3p0 diff --git a/pom.xml b/pom.xml index 38137f7451d4..c03aff4fb8db 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,9 @@ rhq-plugin osgi spring/spring - spring/spring4 + spring/spring4/spring4-common + spring/spring4/spring4-embedded + spring/spring4/spring4-remote cli/cli-interpreter cli/cli-client scripting diff --git a/spring/spring4/pom.xml b/spring/spring4/pom.xml index 0f90e44d5a35..532727014088 100644 --- a/spring/spring4/pom.xml +++ b/spring/spring4/pom.xml @@ -1,5 +1,7 @@ - + + 4.0.0 @@ -9,42 +11,36 @@ ../../parent/pom.xml - infinispan-spring4 - bundle + infinispan-spring4-parent + Infinispan Spring support + pom - Infinispan Spring 4 Integration - - The Infinispan Spring Integration project provides Spring - integration for Infinispan, a high performance distributed cache. - Its primary features are + The Infinispan Spring Integration project provides Spring + integration for Infinispan, a high performance distributed cache. + Its primary features are - * An implementation of org.springframework.cache.CacheManager, - Spring's central caching abstraction, backed by Infinispan's - EmbeddedCacheManager. To be used if your Spring-powered - application and Infinispan are colocated, i.e. running within - the same VM. - * An implementation of org.springframework.cache.CacheManager - backed by Infinispan's RemoteCacheManager. To bes used if your - Spring-powered application accesses Infinispan remotely, i.e. - over the network. - * An implementation of org.springframework.cache.CacheManager - backed by a CacheContainer reference. To be used if your Spring- - powered application needs access to a CacheContainer defined - outside the application (e.g. retrieved from JNDI) - * Spring namespace support allowing shortcut definitions for all the - components above + * An implementation of org.springframework.cache.CacheManager, + Spring's central caching abstraction, backed by Infinispan's + EmbeddedCacheManager. To be used if your Spring-powered + application and Infinispan are colocated, i.e. running within + the same VM. + * An implementation of org.springframework.cache.CacheManager + backed by Infinispan's RemoteCacheManager. To bes used if your + Spring-powered application accesses Infinispan remotely, i.e. + over the network. + * An implementation of org.springframework.cache.CacheManager + backed by a CacheContainer reference. To be used if your Spring- + powered application needs access to a CacheContainer defined + outside the application (e.g. retrieved from JNDI) + * Spring namespace support allowing shortcut definitions for all the + components above - In addition, Infinispan Spring Integration offers various FactoryBeans - for facilitating creation of Infinispan core classes - Cache, CacheManager, - ... - within a Spring context. - + In addition, Infinispan Spring Integration offers various FactoryBeans + for facilitating creation of Infinispan core classes - Cache, CacheManager, + ... - within a Spring context. - - 1 - - obergner @@ -92,167 +88,10 @@ - - - - org.springframework - spring-context - - - ${project.groupId} - infinispan-core - - - - ${project.groupId} - infinispan-client-hotrod - compile - true - - - org.apache.avro - avro - - - - - - - commons-pool - commons-pool - runtime - - - commons-logging - commons-logging - runtime - - - log4j - log4j - - - - - org.apache.logging.log4j - log4j-core - runtime - - - org.apache.logging.log4j - log4j-slf4j-impl - runtime - - - org.apache.logging.log4j - log4j-jcl - runtime - - - org.jgroups - jgroups - runtime - - - org.jboss.marshalling - jboss-marshalling-osgi - runtime - - - - - org.springframework - spring-test - test - - - ${project.groupId} - infinispan-core - test-jar - test - - - ${project.groupId} - infinispan-client-hotrod - test-jar - test - - - ${project.groupId} - infinispan-server-hotrod - test - - - ${project.groupId} - infinispan-server-hotrod - test-jar - test - - - org.springframework - spring-jdbc - test - - - org.springframework - spring-context-support - test - - - com.h2database - h2 - test - - - commons-dbcp - commons-dbcp - test - - - javax.cache - cache-api - test - - - org.aspectj - aspectjweaver - test - - - - - - - ${project.basedir}/src/main/resources - false - - **/infinispan-spring-${infinispan.core.schema.version}.xsd - - - - ${project.basedir}/src/main/resources - false - - **/* - - - **/infinispan-spring-*.xsd - - - - - - org.apache.felix - maven-bundle-plugin - - - - ${project.groupId}.spring.*;version=${project.version};-split-package:=error - - - - - - + + spring4-common + spring4-embedded + spring4-remote + - \ No newline at end of file + diff --git a/spring/spring4/spring4-common/README.md b/spring/spring4/spring4-common/README.md new file mode 100644 index 000000000000..451105157a92 --- /dev/null +++ b/spring/spring4/spring4-common/README.md @@ -0,0 +1,4 @@ +Infinispan Spring support common module +==================================== + +This module is not meant to be used individually. It only contains common to Remote and Embedded classes which are attached as sources to those modules. diff --git a/spring/spring4/spring4-common/pom.xml b/spring/spring4/spring4-common/pom.xml new file mode 100644 index 000000000000..ded969151379 --- /dev/null +++ b/spring/spring4/spring4-common/pom.xml @@ -0,0 +1,164 @@ + + + 4.0.0 + + + org.infinispan + infinispan-spring4-parent + 8.1.0-SNAPSHOT + ../pom.xml + + + infinispan-spring4-common + Infinispan Spring 4 Common module + + + + org.springframework + spring-context + + + ${project.groupId} + infinispan-commons + + + + commons-pool + commons-pool + runtime + + + commons-logging + commons-logging + runtime + + + log4j + log4j + + + + + org.apache.logging.log4j + log4j-core + runtime + + + org.apache.logging.log4j + log4j-slf4j-impl + runtime + + + org.apache.logging.log4j + log4j-jcl + runtime + + + org.jgroups + jgroups + runtime + + + org.jboss.marshalling + jboss-marshalling-osgi + runtime + + + + + org.springframework + spring-test + test + + + ${project.groupId} + infinispan-core + test-jar + test + + + ${project.groupId} + infinispan-client-hotrod + test-jar + test + + + ${project.groupId} + infinispan-server-hotrod + test + + + ${project.groupId} + infinispan-server-hotrod + test-jar + test + + + org.springframework + spring-jdbc + test + + + org.springframework + spring-context-support + test + + + com.h2database + h2 + test + + + commons-dbcp + commons-dbcp + test + + + javax.cache + cache-api + test + + + org.aspectj + aspectjweaver + test + + + + + + + ${project.basedir}/src/main/resources + false + + **/infinispan-spring-${infinispan.core.schema.version}.xsd + + + + ${project.basedir}/src/main/resources + false + + **/* + + + **/infinispan-spring-*.xsd + + + + + + org.apache.felix + maven-bundle-plugin + + + + ${project.groupId}.spring.*;version=${project.version};-split-package:=error + + + + + + + + diff --git a/spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanContainerCacheManagerBeanDefinitionParser.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanContainerCacheManagerBeanDefinitionParser.java similarity index 97% rename from spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanContainerCacheManagerBeanDefinitionParser.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanContainerCacheManagerBeanDefinitionParser.java index 83862a438d00..7bf26c7f6706 100644 --- a/spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanContainerCacheManagerBeanDefinitionParser.java +++ b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanContainerCacheManagerBeanDefinitionParser.java @@ -16,7 +16,7 @@ public class InfinispanContainerCacheManagerBeanDefinitionParser extends Abstrac private static final String DEFAULT_CACHE_MANAGER_BEAN_NAME = "cacheManager"; - private static final String FACTORY_BEAN_CLASS = "org.infinispan.spring.provider.ContainerCacheManagerFactoryBean"; + private static final String FACTORY_BEAN_CLASS = "org.infinispan.spring.provider.ContainerEmbeddedCacheManagerFactoryBean"; @Override protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { diff --git a/spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerBeanDefinitionParser.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerBeanDefinitionParser.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerBeanDefinitionParser.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerBeanDefinitionParser.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanNamespaceHandler.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanNamespaceHandler.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanNamespaceHandler.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanNamespaceHandler.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanNamespaceUtils.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanNamespaceUtils.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanNamespaceUtils.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanNamespaceUtils.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerBeanDefinitionParser.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerBeanDefinitionParser.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerBeanDefinitionParser.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerBeanDefinitionParser.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/package-info.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/package-info.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/package-info.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/package-info.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/CacheDelegate.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/provider/CacheDelegate.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/provider/CacheDelegate.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/provider/CacheDelegate.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/NullValue.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/provider/NullValue.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/provider/NullValue.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/provider/NullValue.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/SpringCache.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/provider/SpringCache.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/provider/SpringCache.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/provider/SpringCache.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/package-info.java b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/provider/package-info.java similarity index 96% rename from spring/spring4/src/main/java/org/infinispan/spring/provider/package-info.java rename to spring/spring4/spring4-common/src/main/java/org/infinispan/spring/provider/package-info.java index 1203c41e43a1..d7192425c46c 100644 --- a/spring/spring4/src/main/java/org/infinispan/spring/provider/package-info.java +++ b/spring/spring4/spring4-common/src/main/java/org/infinispan/spring/provider/package-info.java @@ -1,5 +1,5 @@ /** - *

Spring Infinispan - An implementation of Spring 3.2's Cache SPI based on JBoss Infinispan.

+ *

Spring Infinispan - An implementation of Spring's Cache SPI based on JBoss Infinispan.

*

* Spring 3.1 introduces caching capabilities a user may comfortably utilize via a set of custom annotations, thus telling * the Spring runtime which objects to cache under which circumstances.
@@ -62,7 +62,7 @@ *

* Register Spring Infinispan with the Spring runtime *

- * Suppose we want to use Spring Infinispan running in embedded mode as our caching provider, and suppose further that + * Suppose we want to use Spring Infinispan running in embedded mode as our caching provider, and suppose further that * we want to create two named cache instances, "cars" and "planes". To that end, we put *

  * <beans xmlns="http://www.springframework.org/schema/beans"
@@ -85,10 +85,10 @@
  * classpath:/org/infinispan/spring/embedded/example/infinispan-sample-config.xml.
* To further simplify our setup we may omit the reference to an Infinispan configuration file in which case the underlying * {@link org.infinispan.manager.EmbeddedCacheManager org.infinispan.manager.EmbeddedCacheManager} will use Infinispan's - * default settings. + * default settings. *

*

- * For more advanced ways to configure the underlying Infinispan EmbeddedCacheManager see + * For more advanced ways to configure the underlying Infinispan EmbeddedCacheManager see * {@link org.infinispan.spring.provider.SpringEmbeddedCacheManagerFactoryBean org.infinispan.spring.provider.SpringEmbeddedCacheManagerFactoryBean}. *

*

@@ -109,7 +109,7 @@ *

*

*

- * For more advanced ways to configure the underlying Infinispan RemoteCacheManager see + * For more advanced ways to configure the underlying Infinispan RemoteCacheManager see * {@link org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean org.infinispan.spring.provider.SpringRemoteCacheManagerFactoryBean}. *

* Using Spring's caching annotations in application code @@ -138,9 +138,8 @@ * * In both @Cache("cars") and @CacheEvict(value="cars", key="car.id") "cars" refers to the name of the cache to either * store the returned Car instance in or to evict the saved/updated Car instance from. For a more detailed explanation of - * how to use @Cacheable and @CacheEvict see the relevant reference documentation + * how to use @Cacheable and @CacheEvict see the relevant reference documentation * chapter. *

*/ package org.infinispan.spring.provider; - diff --git a/spring/spring4/src/main/resources/META-INF/spring.handlers b/spring/spring4/spring4-common/src/main/resources/META-INF/spring.handlers similarity index 100% rename from spring/spring4/src/main/resources/META-INF/spring.handlers rename to spring/spring4/spring4-common/src/main/resources/META-INF/spring.handlers diff --git a/spring/spring4/src/main/resources/META-INF/spring.schemas b/spring/spring4/spring4-common/src/main/resources/META-INF/spring.schemas similarity index 100% rename from spring/spring4/src/main/resources/META-INF/spring.schemas rename to spring/spring4/spring4-common/src/main/resources/META-INF/spring.schemas diff --git a/spring/spring4/src/main/resources/org/infinispan/spring/config/infinispan-spring-8.0.xsd b/spring/spring4/spring4-common/src/main/resources/org/infinispan/spring/config/infinispan-spring-8.0.xsd similarity index 100% rename from spring/spring4/src/main/resources/org/infinispan/spring/config/infinispan-spring-8.0.xsd rename to spring/spring4/spring4-common/src/main/resources/org/infinispan/spring/config/infinispan-spring-8.0.xsd diff --git a/spring/spring4/spring4-embedded/pom.xml b/spring/spring4/spring4-embedded/pom.xml new file mode 100644 index 000000000000..ec643a47334e --- /dev/null +++ b/spring/spring4/spring4-embedded/pom.xml @@ -0,0 +1,174 @@ + + + 4.0.0 + + + org.infinispan + infinispan-spring4-parent + 8.1.0-SNAPSHOT + ../pom.xml + + + infinispan-spring4-embedded + bundle + + Infinispan Spring 4 Embedded support + + + 1 + + + + + org.springframework + spring-context + + + ${project.groupId} + infinispan-core + + + ${project.groupId} + infinispan-spring4-common + + + + commons-pool + commons-pool + runtime + + + commons-logging + commons-logging + runtime + + + log4j + log4j + + + + + org.apache.logging.log4j + log4j-core + runtime + + + org.apache.logging.log4j + log4j-slf4j-impl + runtime + + + org.apache.logging.log4j + log4j-jcl + runtime + + + org.jgroups + jgroups + runtime + + + org.jboss.marshalling + jboss-marshalling-osgi + runtime + + + + + org.springframework + spring-test + test + + + ${project.groupId} + infinispan-core + test-jar + test + + + ${project.groupId} + infinispan-client-hotrod + test-jar + test + + + ${project.groupId} + infinispan-server-hotrod + test + + + ${project.groupId} + infinispan-server-hotrod + test-jar + test + + + org.springframework + spring-jdbc + test + + + org.springframework + spring-context-support + test + + + com.h2database + h2 + test + + + commons-dbcp + commons-dbcp + test + + + javax.cache + cache-api + test + + + org.aspectj + aspectjweaver + test + + + + + + + ${project.basedir}/src/main/resources + false + + **/infinispan-spring-${infinispan.core.schema.version}.xsd + + + + ${project.basedir}/src/main/resources + false + + **/* + + + **/infinispan-spring-*.xsd + + + + + + org.apache.felix + maven-bundle-plugin + + + + ${project.groupId}.spring.*;version=${project.version};-split-package:=merge-last + + + + + + + + diff --git a/spring/spring4/src/main/java/org/infinispan/spring/AbstractEmbeddedCacheManagerFactory.java b/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/AbstractEmbeddedCacheManagerFactory.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/AbstractEmbeddedCacheManagerFactory.java rename to spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/AbstractEmbeddedCacheManagerFactory.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBean.java b/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/InfinispanDefaultCacheFactoryBean.java similarity index 97% rename from spring/spring4/src/main/java/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBean.java rename to spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/InfinispanDefaultCacheFactoryBean.java index fcb3d4dffe6c..05b740ef1f3d 100644 --- a/spring/spring4/src/main/java/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBean.java +++ b/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/InfinispanDefaultCacheFactoryBean.java @@ -1,9 +1,9 @@ -package org.infinispan.spring.support; +package org.infinispan.spring; import org.infinispan.Cache; import org.infinispan.manager.CacheContainer; -import org.infinispan.util.logging.Log; -import org.infinispan.util.logging.LogFactory; +import org.infinispan.commons.logging.Log; +import org.infinispan.commons.logging.LogFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; diff --git a/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/provider/ContainerEmbeddedCacheManagerFactoryBean.java b/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/provider/ContainerEmbeddedCacheManagerFactoryBean.java new file mode 100644 index 000000000000..b0fd6f53dd9f --- /dev/null +++ b/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/provider/ContainerEmbeddedCacheManagerFactoryBean.java @@ -0,0 +1,39 @@ +package org.infinispan.spring.provider; + +import org.infinispan.manager.EmbeddedCacheManager; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.cache.CacheManager; +import org.springframework.util.Assert; + +/** + * {@link FactoryBean} for creating a {@link CacheManager} for a pre-defined {@link org.infinispan.manager.CacheContainer}. + *

+ * Useful when the cache container is defined outside the application (e.g. provided by the application server) + * + * @author Marius Bogoevici + */ +public class ContainerEmbeddedCacheManagerFactoryBean implements FactoryBean { + + private EmbeddedCacheManager cacheContainer; + + public ContainerEmbeddedCacheManagerFactoryBean(EmbeddedCacheManager cacheContainer) { + Assert.notNull(cacheContainer, "CacheContainer cannot be null"); + this.cacheContainer = cacheContainer; + } + + @Override + public CacheManager getObject() throws Exception { + return new SpringEmbeddedCacheManager((EmbeddedCacheManager) this.cacheContainer); + } + + @Override + public Class getObjectType() { + return CacheManager.class; + } + + @Override + public boolean isSingleton() { + return true; + } + +} diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManager.java b/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManager.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManager.java rename to spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManager.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBean.java b/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBean.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBean.java rename to spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBean.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBean.java b/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBean.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBean.java rename to spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBean.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBean.java b/spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBean.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBean.java rename to spring/spring4/spring4-embedded/src/main/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBean.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/builders/SpringEmbeddedCacheManagerFactoryBeanBuilder.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/builders/SpringEmbeddedCacheManagerFactoryBeanBuilder.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/builders/SpringEmbeddedCacheManagerFactoryBeanBuilder.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/builders/SpringEmbeddedCacheManagerFactoryBeanBuilder.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/config/CacheLoaderNotFoundTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/CacheLoaderNotFoundTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/config/CacheLoaderNotFoundTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/CacheLoaderNotFoundTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/config/DuplicateDomainAwareCacheManager.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/DuplicateDomainAwareCacheManager.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/config/DuplicateDomainAwareCacheManager.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/DuplicateDomainAwareCacheManager.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/config/NonTransactionalCacheTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/NonTransactionalCacheTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/config/NonTransactionalCacheTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/config/NonTransactionalCacheTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/SpringCacheCacheTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/SpringCacheCacheTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/SpringCacheCacheTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/SpringCacheCacheTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBeanTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBeanTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBeanTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerFactoryBeanTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/SpringEmbeddedCacheManagerTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java index fe44a72b5638..8a5711aa7f9b 100644 --- a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java +++ b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java @@ -1,7 +1,5 @@ package org.infinispan.spring.provider.sample; -import java.util.Random; - import org.infinispan.commons.api.BasicCache; import org.infinispan.spring.provider.sample.entity.Book; import org.infinispan.spring.provider.sample.service.CachedBookService; @@ -12,6 +10,8 @@ import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; +import java.util.Random; + /** * Abstract template for running a set of tests under different configurations, in order to illustrate how Spring handles * the caching aspects we added to {@link org.infinispan.spring.provider.sample.service.CachedBookServiceImpl CachedBookServiceImpl}. diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java index 2289a0937032..d37857f553c5 100644 --- a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java +++ b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java @@ -1,12 +1,12 @@ package org.infinispan.spring.provider.sample; -import java.util.Random; - import org.infinispan.spring.provider.sample.entity.Book; import org.infinispan.spring.provider.sample.service.CachedBookServiceJsr107; import org.springframework.beans.factory.annotation.Autowired; import org.testng.annotations.Test; +import java.util.Random; + /** * Abstract template for running a set of tests under different configurations, including JSR-107 annotations. * diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/DataSourceResolver.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/DataSourceResolver.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/DataSourceResolver.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/DataSourceResolver.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleHotrodServerLifecycleBean.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleHotrodServerLifecycleBean.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleHotrodServerLifecycleBean.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleHotrodServerLifecycleBean.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleJavaConfigurationTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleJavaConfigurationTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleJavaConfigurationTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleJavaConfigurationTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleXmlConfigurationTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleXmlConfigurationTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleXmlConfigurationTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/SampleXmlConfigurationTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/dao/BaseBookDao.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/dao/BaseBookDao.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/dao/BaseBookDao.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/dao/BaseBookDao.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/dao/JdbcBookDao.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/dao/JdbcBookDao.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/dao/JdbcBookDao.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/dao/JdbcBookDao.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/entity/Book.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/entity/Book.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/entity/Book.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/entity/Book.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/generators/SingleArgKeyGenerator.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/generators/SingleArgKeyGenerator.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/generators/SingleArgKeyGenerator.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/generators/SingleArgKeyGenerator.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/resolvers/CustomCacheResolver.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/resolvers/CustomCacheResolver.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/resolvers/CustomCacheResolver.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/resolvers/CustomCacheResolver.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookService.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookService.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookService.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookService.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceImpl.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceImpl.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceImpl.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceImpl.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107Impl.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107Impl.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107Impl.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107Impl.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookService.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookService.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookService.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookService.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookServiceImpl.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookServiceImpl.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookServiceImpl.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookServiceImpl.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanContextTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanContextTest.java similarity index 81% rename from spring/spring4/src/test/java/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanContextTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanContextTest.java index bb7ccf63e1fb..18e7a9f66005 100644 --- a/spring/spring4/src/test/java/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanContextTest.java +++ b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanContextTest.java @@ -1,10 +1,13 @@ -package org.infinispan.spring.support; +package org.infinispan.spring.support.embedded; import org.infinispan.Cache; +import org.infinispan.test.fwk.TestResourceTracker; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; +import org.testng.annotations.AfterSuite; +import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; import static org.testng.AssertJUnit.assertNotNull; @@ -19,12 +22,22 @@ * */ @DirtiesContext(classMode = ClassMode.AFTER_CLASS) -@ContextConfiguration("classpath:/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanContextTest.xml") +@ContextConfiguration("classpath:/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanContextTest.xml") @Test(testName = "spring.support.InfinispanDefaultCacheFactoryBeanContextTest", groups = "unit") public class InfinispanDefaultCacheFactoryBeanContextTest extends AbstractTestNGSpringContextTests { private static final String DEFAULT_CACHE_NAME = "testDefaultCache"; + @BeforeSuite + public void beforeSuit() { + TestResourceTracker.testStarted(getClass().getName()); + } + + @AfterSuite + public void afterSuite() { + TestResourceTracker.testFinished(getClass().getName()); + } + @Test public final void shouldProduceANonNullCache() { final Cache testDefaultCache = this.applicationContext.getBean( diff --git a/spring/spring4/src/test/java/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanTest.java similarity index 70% rename from spring/spring4/src/test/java/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanTest.java index edeaee2bc496..3635390a24f8 100644 --- a/spring/spring4/src/test/java/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanTest.java +++ b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanTest.java @@ -1,13 +1,15 @@ -package org.infinispan.spring.support; +package org.infinispan.spring.support.embedded; import org.infinispan.Cache; import org.infinispan.lifecycle.ComponentStatus; +import org.infinispan.spring.InfinispanDefaultCacheFactoryBean; import org.infinispan.test.CacheManagerCallable; +import org.infinispan.test.TestingUtil; import org.infinispan.test.fwk.TestCacheManagerFactory; +import org.testng.AssertJUnit; import org.testng.annotations.Test; -import static org.infinispan.test.TestingUtil.withCacheManager; -import static org.testng.AssertJUnit.*; +import static org.testng.AssertJUnit.assertEquals; /** *

@@ -40,7 +42,7 @@ public final void afterPropertiesSetShouldThrowAnIllegalStateExceptionIfNoCacheC @Test public final void infinispanDefaultCacheFactoryBeanShouldProduceANonNullInfinispanCache() { final InfinispanDefaultCacheFactoryBean objectUnderTest = new InfinispanDefaultCacheFactoryBean(); - withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.createCacheManager()) { + TestingUtil.withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.createCacheManager()) { @Override public void call() { try { @@ -49,9 +51,9 @@ public void call() { final Cache cache = objectUnderTest.getObject(); - assertNotNull( - "InfinispanDefaultCacheFactoryBean should have produced a proper Infinispan cache. " - + "However, it produced a null Infinispan cache.", cache); + AssertJUnit.assertNotNull( + "InfinispanDefaultCacheFactoryBean should have produced a proper Infinispan cache. " + + "However, it produced a null Infinispan cache.", cache); objectUnderTest.destroy(); } catch (Exception e) { throw new RuntimeException(e); @@ -67,7 +69,7 @@ public void call() { @Test public final void getObjectTypeShouldReturnTheMostDerivedTypeOfTheProducedInfinispanCache() { final InfinispanDefaultCacheFactoryBean objectUnderTest = new InfinispanDefaultCacheFactoryBean(); - withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.createCacheManager()) { + TestingUtil.withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.createCacheManager()) { @Override public void call() { try { @@ -75,9 +77,9 @@ public void call() { objectUnderTest.afterPropertiesSet(); assertEquals( - "getObjectType() should have returned the produced Infinispan cache's most derived type. " - + "However, it returned a more generic type.", objectUnderTest.getObject() - .getClass(), objectUnderTest.getObjectType()); + "getObjectType() should have returned the produced Infinispan cache's most derived type. " + + "However, it returned a more generic type.", objectUnderTest.getObject() + .getClass(), objectUnderTest.getObjectType()); objectUnderTest.destroy(); } catch (Exception e) { throw new RuntimeException(e); @@ -95,9 +97,9 @@ public void call() { public final void infinispanDefaultCacheFactoryBeanShouldDeclareItselfToBeSingleton() { final InfinispanDefaultCacheFactoryBean objectUnderTest = new InfinispanDefaultCacheFactoryBean(); - assertTrue( - "InfinispanDefaultCacheFactoryBean should declare itself to produce a singleton. However, it didn't.", - objectUnderTest.isSingleton()); + AssertJUnit.assertTrue( + "InfinispanDefaultCacheFactoryBean should declare itself to produce a singleton. However, it didn't.", + objectUnderTest.isSingleton()); } /** @@ -107,7 +109,7 @@ public final void infinispanDefaultCacheFactoryBeanShouldDeclareItselfToBeSingle @Test public final void infinispanDefaultCacheFactoryBeanShouldStopTheCreatedInfinispanCacheWhenItIsDestroyed() { final InfinispanDefaultCacheFactoryBean objectUnderTest = new InfinispanDefaultCacheFactoryBean(); - withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.createCacheManager()) { + TestingUtil.withCacheManager(new CacheManagerCallable(TestCacheManagerFactory.createCacheManager()) { @Override public void call() { try { @@ -117,10 +119,10 @@ public void call() { final Cache cache = objectUnderTest.getObject(); objectUnderTest.destroy(); - assertEquals( - "InfinispanDefaultCacheFactoryBean should have stopped the created Infinispan cache when being destroyed. " - + "However, the created Infinispan is not yet terminated.", - ComponentStatus.TERMINATED, cache.getStatus()); + AssertJUnit.assertEquals( + "InfinispanDefaultCacheFactoryBean should have stopped the created Infinispan cache when being destroyed. " + + "However, the created Infinispan is not yet terminated.", + ComponentStatus.TERMINATED, cache.getStatus()); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/spring/spring4/src/test/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBeanTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBeanTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBeanTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanEmbeddedCacheManagerFactoryBeanTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBeanTest.java b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBeanTest.java similarity index 98% rename from spring/spring4/src/test/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBeanTest.java rename to spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBeanTest.java index b7283bc64f96..f25bbb7b74ef 100644 --- a/spring/spring4/src/test/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBeanTest.java +++ b/spring/spring4/spring4-embedded/src/test/java/org/infinispan/spring/support/embedded/InfinispanNamedEmbeddedCacheFactoryBeanTest.java @@ -4,6 +4,7 @@ import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.lifecycle.ComponentStatus; import org.infinispan.manager.EmbeddedCacheManager; +import org.infinispan.test.AbstractInfinispanTest; import org.infinispan.test.fwk.TestCacheManagerFactory; import org.springframework.core.io.ClassPathResource; import org.testng.annotations.AfterClass; @@ -24,7 +25,7 @@ * */ @Test(testName = "spring.support.embedded.InfinispanNamedEmbeddedCacheFactoryBeanTest", groups = "unit") -public class InfinispanNamedEmbeddedCacheFactoryBeanTest { +public class InfinispanNamedEmbeddedCacheFactoryBeanTest extends AbstractInfinispanTest { private static final String CACHE_NAME_FROM_CONFIGURATION_FILE = "asyncCache"; diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/config/CacheLoaderNotFoundTest-context.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/config/CacheLoaderNotFoundTest-context.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/config/CacheLoaderNotFoundTest-context.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/config/CacheLoaderNotFoundTest-context.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest-context.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest-context.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest-context.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/config/InfinispanContainerCacheManagerDefinitionTest-context.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest-context.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest-context.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest-context.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/config/InfinispanEmbeddedCacheManagerDefinitionTest-context.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/config/NonTransactionalCacheTest-context.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/config/NonTransactionalCacheTest-context.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/config/NonTransactionalCacheTest-context.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/config/NonTransactionalCacheTest-context.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/named-async-cache.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/named-async-cache.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/named-async-cache.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/named-async-cache.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTestConfig.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTestConfig.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTestConfig.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/SampleEmbeddedCacheTestConfig.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTestConfig.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTestConfig.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTestConfig.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/SampleTransactionIntegrationTestConfig.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/SampleXmlConfigurationTestConfig.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/SampleXmlConfigurationTestConfig.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/SampleXmlConfigurationTestConfig.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/SampleXmlConfigurationTestConfig.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/books-infinispan-config.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/books-infinispan-config.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/books-infinispan-config.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/books-infinispan-config.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/initDB.sql b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/initDB.sql similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/initDB.sql rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/initDB.sql diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/populateDB.sql b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/populateDB.sql similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/populateDB.sql rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/provider/sample/populateDB.sql diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanContextTest.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanContextTest.xml similarity index 89% rename from spring/spring4/src/test/resources/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanContextTest.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanContextTest.xml index 6d6615cadf7d..df362a1c10ad 100644 --- a/spring/spring4/src/test/resources/org/infinispan/spring/support/InfinispanDefaultCacheFactoryBeanContextTest.xml +++ b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded/InfinispanDefaultCacheFactoryBeanContextTest.xml @@ -13,7 +13,7 @@ diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/support/embedded/classloader-not-found.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded/classloader-not-found.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/support/embedded/classloader-not-found.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded/classloader-not-found.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/support/embedded/named-async-cache.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded/named-async-cache.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/support/embedded/named-async-cache.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded/named-async-cache.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/support/embedded/non-transactional-cache.xml b/spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded/non-transactional-cache.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/support/embedded/non-transactional-cache.xml rename to spring/spring4/spring4-embedded/src/test/resources/org/infinispan/spring/support/embedded/non-transactional-cache.xml diff --git a/spring/spring4/spring4-remote/pom.xml b/spring/spring4/spring4-remote/pom.xml new file mode 100644 index 000000000000..48496e8b377c --- /dev/null +++ b/spring/spring4/spring4-remote/pom.xml @@ -0,0 +1,183 @@ + + + 4.0.0 + + + org.infinispan + infinispan-spring4-parent + 8.1.0-SNAPSHOT + ../pom.xml + + + infinispan-spring4-remote + bundle + + Infinispan Spring 4 Integration + + + 1 + + + + + org.springframework + spring-context + + + ${project.groupId} + infinispan-spring4-common + + + + ${project.groupId} + infinispan-client-hotrod + compile + true + + + org.apache.avro + avro + + + + + + commons-pool + commons-pool + runtime + + + commons-logging + commons-logging + runtime + + + log4j + log4j + + + + + org.apache.logging.log4j + log4j-core + runtime + + + org.apache.logging.log4j + log4j-slf4j-impl + runtime + + + org.apache.logging.log4j + log4j-jcl + runtime + + + org.jgroups + jgroups + runtime + + + org.jboss.marshalling + jboss-marshalling-osgi + runtime + + + + + org.springframework + spring-test + test + + + ${project.groupId} + infinispan-core + test-jar + test + + + ${project.groupId} + infinispan-client-hotrod + test-jar + test + + + ${project.groupId} + infinispan-server-hotrod + test + + + ${project.groupId} + infinispan-server-hotrod + test-jar + test + + + org.springframework + spring-jdbc + test + + + org.springframework + spring-context-support + test + + + com.h2database + h2 + test + + + commons-dbcp + commons-dbcp + test + + + javax.cache + cache-api + test + + + org.aspectj + aspectjweaver + test + + + + + + + ${project.basedir}/src/main/resources + false + + **/infinispan-spring-${infinispan.core.schema.version}.xsd + + + + ${project.basedir}/src/main/resources + false + + **/* + + + **/infinispan-spring-*.xsd + + + + + + org.apache.felix + maven-bundle-plugin + + + + ${project.groupId}.spring.*;version=${project.version};-split-package:=merge-last + + + + + + + + \ No newline at end of file diff --git a/spring/spring4/src/main/java/org/infinispan/spring/AbstractRemoteCacheManagerFactory.java b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/AbstractRemoteCacheManagerFactory.java similarity index 98% rename from spring/spring4/src/main/java/org/infinispan/spring/AbstractRemoteCacheManagerFactory.java rename to spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/AbstractRemoteCacheManagerFactory.java index 81cddf72c1cc..1ec974117138 100644 --- a/spring/spring4/src/main/java/org/infinispan/spring/AbstractRemoteCacheManagerFactory.java +++ b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/AbstractRemoteCacheManagerFactory.java @@ -1,8 +1,8 @@ package org.infinispan.spring; import org.infinispan.client.hotrod.RemoteCacheManager; -import org.infinispan.util.logging.Log; -import org.infinispan.util.logging.LogFactory; +import org.infinispan.commons.logging.Log; +import org.infinispan.commons.logging.LogFactory; import org.springframework.core.io.Resource; import java.io.IOException; diff --git a/spring/spring4/src/main/java/org/infinispan/spring/ConfigurationPropertiesOverrides.java b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/ConfigurationPropertiesOverrides.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/ConfigurationPropertiesOverrides.java rename to spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/ConfigurationPropertiesOverrides.java diff --git a/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/ContainerRemoteCacheManagerFactoryBean.java b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/ContainerRemoteCacheManagerFactoryBean.java new file mode 100644 index 000000000000..33478b63db52 --- /dev/null +++ b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/ContainerRemoteCacheManagerFactoryBean.java @@ -0,0 +1,39 @@ +package org.infinispan.spring.provider; + +import org.infinispan.client.hotrod.RemoteCacheManager; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.cache.CacheManager; +import org.springframework.util.Assert; + +/** + * {@link FactoryBean} for creating a {@link CacheManager} for a pre-defined {@link org.infinispan.manager.CacheContainer}. + *

+ * Useful when the cache container is defined outside the application (e.g. provided by the application server) + * + * @author Marius Bogoevici + */ +public class ContainerRemoteCacheManagerFactoryBean implements FactoryBean { + + private RemoteCacheManager cacheContainer; + + public ContainerRemoteCacheManagerFactoryBean(RemoteCacheManager cacheContainer) { + Assert.notNull(cacheContainer, "CacheContainer cannot be null"); + this.cacheContainer = cacheContainer; + } + + @Override + public CacheManager getObject() throws Exception { + return new SpringRemoteCacheManager((RemoteCacheManager) this.cacheContainer); + } + + @Override + public Class getObjectType() { + return CacheManager.class; + } + + @Override + public boolean isSingleton() { + return true; + } + +} diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/SpringRemoteCache.java b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/SpringRemoteCache.java similarity index 96% rename from spring/spring4/src/main/java/org/infinispan/spring/provider/SpringRemoteCache.java rename to spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/SpringRemoteCache.java index 5d5913a8458c..8a042f96d310 100644 --- a/spring/spring4/src/main/java/org/infinispan/spring/provider/SpringRemoteCache.java +++ b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/SpringRemoteCache.java @@ -2,8 +2,6 @@ import org.infinispan.client.hotrod.RemoteCache; import org.springframework.cache.Cache; -import org.springframework.cache.support.SimpleValueWrapper; -import org.springframework.util.Assert; /** *

diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManager.java b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManager.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManager.java rename to spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManager.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBean.java b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBean.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBean.java rename to spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBean.java diff --git a/spring/spring4/src/main/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBean.java b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBean.java similarity index 97% rename from spring/spring4/src/main/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBean.java rename to spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBean.java index 3869e40e0fc9..ce993c90c19e 100644 --- a/spring/spring4/src/main/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBean.java +++ b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBean.java @@ -1,10 +1,9 @@ package org.infinispan.spring.support.remote; -import org.infinispan.Cache; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; -import org.infinispan.util.logging.Log; -import org.infinispan.util.logging.LogFactory; +import org.infinispan.commons.logging.Log; +import org.infinispan.commons.logging.LogFactory; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; @@ -101,7 +100,7 @@ public RemoteCache getObject() throws Exception { */ @Override public Class getObjectType() { - return this.infinispanCache != null ? this.infinispanCache.getClass() : Cache.class; + return this.infinispanCache != null ? this.infinispanCache.getClass() : RemoteCache.class; } /** diff --git a/spring/spring4/src/main/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBean.java b/spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBean.java similarity index 100% rename from spring/spring4/src/main/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBean.java rename to spring/spring4/spring4-remote/src/main/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBean.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/AssertionUtils.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/AssertionUtils.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/AssertionUtils.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/AssertionUtils.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/ConfigurationPropertiesOverridesTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/ConfigurationPropertiesOverridesTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/ConfigurationPropertiesOverridesTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/ConfigurationPropertiesOverridesTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanTest.java similarity index 92% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanTest.java index ff76cd273484..0945b9e348af 100644 --- a/spring/spring4/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanTest.java +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanTest.java @@ -5,6 +5,7 @@ import org.infinispan.commons.executors.ExecutorFactory; import org.infinispan.commons.marshall.Marshaller; import org.infinispan.factories.TransportFactory; +import org.infinispan.spring.AssertionUtils; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.testng.annotations.Test; @@ -17,7 +18,6 @@ import java.util.Properties; import static org.infinispan.client.hotrod.impl.ConfigurationProperties.*; -import static org.infinispan.spring.AssertionUtils.assertPropertiesSubset; import static org.testng.AssertJUnit.*; /** @@ -102,12 +102,12 @@ public final void shouldProduceARemoteCacheManagerConfiguredUsingDefaultSettings objectUnderTest.afterPropertiesSet(); final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject(); - assertPropertiesSubset( - "The configuration properties used by the SpringRemoteCacheManager returned von getObject() should be equal " - + "to SpringRemoteCacheManager's default settings since neither property 'configurationProperties' " - + "nor property 'configurationPropertiesFileLocation' has been set. However, those two are not equal.", - new RemoteCacheManager().getProperties(), remoteCacheManager.getNativeCacheManager() - .getProperties()); + AssertionUtils.assertPropertiesSubset( + "The configuration properties used by the SpringRemoteCacheManager returned von getObject() should be equal " + + "to SpringRemoteCacheManager's default settings since neither property 'configurationProperties' " + + "nor property 'configurationPropertiesFileLocation' has been set. However, those two are not equal.", + new RemoteCacheManager().getProperties(), remoteCacheManager.getNativeCacheManager() + .getProperties()); objectUnderTest.destroy(); } @@ -161,11 +161,11 @@ public final void shouldProduceACacheConfiguredUsingTheSuppliedConfigurationProp objectUnderTest.afterPropertiesSet(); final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject(); - assertPropertiesSubset( - "The configuration properties used by the SpringRemoteCacheManager returned von getObject() should be equal " - + "to those passed into SpringRemoteCacheManagerFactoryBean via setConfigurationProperties(props). " - + "However, those two are not equal.", configurationProperties, - remoteCacheManager.getNativeCacheManager().getProperties()); + AssertionUtils.assertPropertiesSubset( + "The configuration properties used by the SpringRemoteCacheManager returned von getObject() should be equal " + + "to those passed into SpringRemoteCacheManagerFactoryBean via setConfigurationProperties(props). " + + "However, those two are not equal.", configurationProperties, + remoteCacheManager.getNativeCacheManager().getProperties()); objectUnderTest.destroy(); } @@ -198,12 +198,12 @@ public final void shouldProduceACacheConfiguredUsingPropertiesLoadedFromALocatio objectUnderTest.afterPropertiesSet(); final SpringRemoteCacheManager remoteCacheManager = objectUnderTest.getObject(); - assertPropertiesSubset( - "The configuration properties used by the SpringRemoteCacheManager returned von getObject() should be equal " - + "to those passed into SpringRemoteCacheManagerFactoryBean via setConfigurationPropertiesFileLocation(propsFileLocation). " - + "However, those two are not equal.", - loadConfigurationProperties(HOTROD_CLIENT_PROPERTIES_LOCATION), remoteCacheManager - .getNativeCacheManager().getProperties()); + AssertionUtils.assertPropertiesSubset( + "The configuration properties used by the SpringRemoteCacheManager returned von getObject() should be equal " + + "to those passed into SpringRemoteCacheManagerFactoryBean via setConfigurationPropertiesFileLocation(propsFileLocation). " + + "However, those two are not equal.", + loadConfigurationProperties(HOTROD_CLIENT_PROPERTIES_LOCATION), remoteCacheManager + .getNativeCacheManager().getProperties()); objectUnderTest.destroy(); } diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/SpringRemoteCacheManagerTest.java diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java new file mode 100644 index 000000000000..8a5711aa7f9b --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplate.java @@ -0,0 +1,526 @@ +package org.infinispan.spring.provider.sample; + +import org.infinispan.commons.api.BasicCache; +import org.infinispan.spring.provider.sample.entity.Book; +import org.infinispan.spring.provider.sample.service.CachedBookService; +import org.infinispan.util.logging.Log; +import org.infinispan.util.logging.LogFactory; +import org.springframework.cache.CacheManager; +import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.Test; + +import java.util.Random; + +/** + * Abstract template for running a set of tests under different configurations, in order to illustrate how Spring handles + * the caching aspects we added to {@link org.infinispan.spring.provider.sample.service.CachedBookServiceImpl CachedBookServiceImpl}. + * It calls each method defined in the class and verifies that book instances are indeed cached and removed from the + * cache as specified. + * + * @author Olaf Bergner + * @author Marius Bogoevici + * @author Matej Cimbora (mcimbora@redhat.com) + */ +@Test(groups = "functional") +public abstract class AbstractTestTemplate extends AbstractTransactionalTestNGSpringContextTests { + + protected final Log log = LogFactory.getLog(getClass()); + + @AfterMethod + public void clearBookCache() { + booksCache().clear(); + backupCache().clear(); + } + + /** + * Demonstrates that loading a {@link org.infinispan.spring.provider.sample.entity.Book book} via + * {@link org.infinispan.spring.provider.sample.service.CachedBookServiceImpl#findBook(Integer)} does indeed cache + * the returned book instance under the supplied bookId. + */ + @Test + public void demonstrateCachingLoadedBooks() { + final Integer bookToCacheId = Integer.valueOf(5); + + assert !booksCache().containsKey(bookToCacheId) : "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = getBookService().findBook(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert cachedBook.equals(booksCache().get(bookToCacheId)) : "findBook(" + bookToCacheId + + ") should have cached book"; + } + + /** + * Demonstrate that removing a {@link Book book} from database via + * {@link org.infinispan.spring.provider.sample.service.CachedBookServiceImpl#deleteBook(Integer)} does indeed remove + * it from cache also. + */ + @Test + public void demonstrateRemovingBookFromCache() { + final Integer bookToDeleteId = Integer.valueOf(new Random().nextInt(10) + 1); + + assert !booksCache().containsKey(bookToDeleteId) : "Cache should not initially contain the book with id " + bookToDeleteId; + + final Book bookToDelete = getBookService().findBook(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete); + + assert booksCache().get(bookToDeleteId).equals(bookToDelete) : "findBook(" + bookToDeleteId + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete); + getBookService().deleteBook(bookToDeleteId); + this.log.infof("Book [%s] deleted", bookToDelete); + + assert !booksCache().containsKey(bookToDeleteId) : "deleteBook(" + bookToDelete + + ") should have evicted book from cache."; + } + + /** + * Demonstrates that updating a {@link Book book} that has already been persisted to + * database via {@link org.infinispan.spring.provider.sample.service.CachedBookServiceImpl (Book)} does indeed evict + * that book from cache. + */ + @Test + public void demonstrateCacheEvictionUponUpdate() { + final Integer bookToUpdateId = Integer.valueOf(2); + + assert !booksCache().containsKey(bookToUpdateId): "Cache should not initially contain the book with id " + bookToUpdateId; + + this.log.infof("Caching book [ID = %d]", bookToUpdateId); + final Book bookToUpdate = getBookService().findBook(bookToUpdateId); + assert booksCache().get(bookToUpdateId).equals(bookToUpdate) : "findBook(" + bookToUpdateId + + ") should have cached book"; + + this.log.infof("Updating book [%s] ...", bookToUpdate); + bookToUpdate.setTitle("Work in Progress"); + getBookService().updateBook(bookToUpdate); + this.log.infof("Book [%s] updated", bookToUpdate); + + assert !booksCache().containsKey(bookToUpdateId) : "updateBook(" + bookToUpdate + + ") should have removed updated book from cache"; + } + + /** + * Demonstrates that creating a new {@link Book book} via + * {@link org.infinispan.spring.provider.sample.service.CachedBookServiceImpl#createBook(Book)} + * does indeed cache returned book under its generated id. + */ + @Test + public void demonstrateCachePutOnCreate() { + final Book bookToCreate = new Book("112-358-132", "Random Author", "Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + getBookService().createBook(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert booksCache().get(bookToCreate.getId()).equals(bookToCreate) : "createBook(" + bookToCreate + + ") should have inserted created book into cache"; + } + + @Test + public void testFindCustomCacheResolver() { + final Integer bookToCacheId = Integer.valueOf(5); + + assert !getCache("custom").containsKey(bookToCacheId): "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = getBookService().findBookCustomCacheResolver(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert cachedBook.equals(getCache("custom").get(bookToCacheId)) : "findBook(" + bookToCacheId + + ") should have cached book"; + } + + @Test + public void testFindCustomKeyGenerator() { + final Integer bookToCacheId = Integer.valueOf(5); + + assert !booksCache().containsKey(bookToCacheId): "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = getBookService().findBookCustomKeyGenerator(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert cachedBook.equals(booksCache().get(bookToCacheId)) : "findBook(" + bookToCacheId + + ") should have cached book"; + } + + @Test + public void testFindConditionMet() { + final Integer bookToCacheId = Integer.valueOf(5); + + assert !booksCache().containsKey(bookToCacheId): "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = getBookService().findBookCondition(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert cachedBook.equals(booksCache().get(bookToCacheId)) : "findBook(" + bookToCacheId + + ") should have cached book"; + } + + @Test + public void testFindConditionNotMet() { + final Integer bookToCacheId = Integer.valueOf(1); + + assert !booksCache().containsKey(bookToCacheId): "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = getBookService().findBookCondition(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert !booksCache().containsKey(bookToCacheId) : "findBook(" + bookToCacheId + + ") should not have cached book"; + } + + @Test + public void testFindUnlessMet() { + final Integer bookToCacheId = Integer.valueOf(1); + + assert !booksCache().containsKey(bookToCacheId): "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = getBookService().findBookUnless(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert cachedBook.equals(booksCache().get(bookToCacheId)) : "findBook(" + bookToCacheId + + ") should have cached book"; + } + + @Test + public void testFindUnlessNotMet() { + final Integer bookToCacheId = Integer.valueOf(5); + + assert !booksCache().containsKey(bookToCacheId): "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = getBookService().findBookUnless(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert !booksCache().containsKey(bookToCacheId) : "findBook(" + bookToCacheId + + ") should not have cached book"; + } + + @Test + public void testFindCustomCacheManager() { + final Integer bookToCacheId = Integer.valueOf(5); + + assert !booksCache().containsKey(bookToCacheId): "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = getBookService().findBookCustomCacheManager(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert cachedBook.equals(booksCache().get(bookToCacheId)) : "findBook(" + bookToCacheId + + ") should have cached book"; + } + + @Test + public void testCreateCustomCacheManager() { + final Book bookToCreate = new Book("112-358-132", "Random Author", "Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + getBookService().createBookCustomCacheManager(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert bookToCreate.equals(booksCache().get(bookToCreate.getId())) : "createBook(" + bookToCreate + + ") should have inserted created book into cache"; + } + + @Test + public void testCreateCustomCacheResolver() { + final Book bookToCreate = new Book("112-358-132", "Random Author", "Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + getBookService().createBookCustomCacheResolver(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert bookToCreate.equals(getCache("custom").get(bookToCreate.getId())) : "createBook(" + bookToCreate + + ") should have inserted created book into cache"; + } + + @Test + public void testCreateCustomKeyGenerator() { + final Book bookToCreate = new Book("112-358-132", "Random Author", "Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + getBookService().createBookCustomKeyGenerator(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert booksCache().containsKey(bookToCreate) : "createBook(" + bookToCreate + + ") should have inserted created book into cache"; + } + + @Test + public void testCreateConditionMet() { + final Book bookToCreate = new Book("112-358-132", "Random Author", "Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + Book result = getBookService().createBookCondition(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert bookToCreate.equals(booksCache().get(result.getId())) : "createBook(" + bookToCreate + + ") should have inserted created book into cache"; + } + + @Test + public void testCreateConditionNotMet() { + final Book bookToCreate = new Book("112-358-132", "Random Author", "Wrong Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + getBookService().createBookCondition(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert bookToCreate.getId() != null : "Book.id should have been set."; + assert !booksCache().containsKey(bookToCreate.getId()) : "createBook(" + bookToCreate + + ") should not have inserted created book into cache"; + } + + @Test + public void testCreateUnlessMet() { + final Book bookToCreate = new Book("99-999-999", "Random Author", "Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + getBookService().createBookUnless(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert bookToCreate.equals(booksCache().get(bookToCreate.getId())) : "createBook(" + bookToCreate + + ") should have inserted created book into cache"; + } + + @Test + public void testCreateUnlessNotMet() { + final Book bookToCreate = new Book("112-358-132", "Random Author", "Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + getBookService().createBookUnless(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert !booksCache().containsKey(bookToCreate.getId()) : "createBook(" + bookToCreate + + ") should not have inserted created book into cache"; + } + + @Test + public void testDeleteCustomCacheResolver() { + final Integer bookToDeleteId = Integer.valueOf(new Random().nextInt(10) + 1); + + assert !getCache("custom").containsKey(bookToDeleteId): "Cache should not initially contain the book with id " + bookToDeleteId; + + final Book bookToDelete = getBookService().findBookCustomCacheResolver(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete); + + assert bookToDelete.getId() != null : "Book.id should have been set."; + assert bookToDelete.equals(getCache("custom").get(bookToDelete.getId())) : "findBook(" + bookToDeleteId + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete); + getBookService().deleteBookCustomCacheResolver(bookToDeleteId); + this.log.infof("Book [%s] deleted", bookToDelete); + + assert !getCache("custom").containsKey(bookToDelete.getId()) : "deleteBook(" + bookToDelete + + ") should have evicted book from cache."; + } + + @Test + public void testDeleteCustomKeyGenerator() { + final Integer bookToDeleteId = Integer.valueOf(new Random().nextInt(10) + 1); + + assert !booksCache().containsKey(bookToDeleteId): "Cache should not initially contain the book with id " + bookToDeleteId; + + final Book bookToDelete = getBookService().findBook(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete); + + assert bookToDelete.equals(booksCache().get(bookToDeleteId)) : "findBook(" + bookToDeleteId + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete); + getBookService().deleteBookCustomKeyGenerator(bookToDeleteId); + this.log.infof("Book [%s] deleted", bookToDelete); + + assert !booksCache().containsKey(bookToDelete.getId()) : "deleteBook(" + bookToDelete + + ") should have evicted book from cache."; + } + + @Test + public void testDeleteConditionMet() { + final Integer bookToDeleteId = Integer.valueOf(2); + + assert !booksCache().containsKey(bookToDeleteId): "Cache should not initially contain the book with id " + bookToDeleteId; + + final Book bookToDelete = getBookService().findBook(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete); + + assert bookToDelete.equals(booksCache().get(bookToDeleteId)) : "findBook(" + bookToDeleteId + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete); + getBookService().deleteBookCondition(bookToDeleteId); + this.log.infof("Book [%s] deleted", bookToDelete); + + assert !booksCache().containsKey(bookToDelete.getId()) : "deleteBook(" + bookToDelete + + ") should have evicted book from cache."; + } + + @Test + public void testDeleteConditionNotMet() { + final Integer bookToDeleteId = Integer.valueOf(1); + + assert !booksCache().containsKey(bookToDeleteId): "Cache should not initially contain the book with id " + bookToDeleteId; + + final Book bookToDelete = getBookService().findBook(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete); + + assert bookToDelete.equals(booksCache().get(bookToDeleteId)) : "findBook(" + bookToDeleteId + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete); + getBookService().deleteBookCondition(bookToDeleteId); + this.log.infof("Book [%s] deleted", bookToDelete); + + assert bookToDelete.equals(booksCache().get(bookToDeleteId)) : "deleteBook(" + bookToDelete + + ") should have evicted book from cache."; + } + + @Test + public void testDeleteAllEntries() { + final Integer bookToDeleteId1 = Integer.valueOf(5); + final Integer bookToDeleteId2 = Integer.valueOf(6); + + assert !booksCache().containsKey(bookToDeleteId1): "Cache should not initially contain the book with id " + bookToDeleteId1; + assert !booksCache().containsKey(bookToDeleteId2): "Cache should not initially contain the book with id " + bookToDeleteId2; + + final Book bookToDelete1 = getBookService().findBook(bookToDeleteId1); + this.log.infof("Book [%s] cached", bookToDelete1); + + assert bookToDelete1.equals(booksCache().get(bookToDeleteId1)) : "findBook(" + bookToDeleteId1 + + ") should have cached book"; + + final Book bookToDelete2 = getBookService().findBook(bookToDeleteId2); + this.log.infof("Book [%s] cached", bookToDelete2); + + assert bookToDelete2.equals(booksCache().get(bookToDeleteId2)) : "findBook(" + bookToDeleteId2 + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete1); + getBookService().deleteBookAllEntries(bookToDeleteId1); + this.log.infof("Book [%s] deleted", bookToDelete1); + + assert !booksCache().containsKey(bookToDelete1.getId()) : "deleteBook(" + bookToDelete1 + + ") should have evicted book from cache."; + assert !booksCache().containsKey(bookToDelete2.getId()) : "deleteBook(" + bookToDelete2 + + ") should have evicted book from cache."; + } + + @Test + public void testDeleteCustomCacheManager() { + final Integer bookToDeleteId = Integer.valueOf(new Random().nextInt(10) + 1); + + assert !booksCache().containsKey(bookToDeleteId): "Cache should not initially contain the book with id " + bookToDeleteId; + + final Book bookToDelete = getBookService().findBookCustomCacheManager(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete); + + assert bookToDelete.getId() != null : "Book.id should have been set."; + assert bookToDelete.equals(booksCache().get(bookToDelete.getId())) : "findBook(" + bookToDeleteId + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete); + getBookService().deleteBookCustomCacheManager(bookToDeleteId); + this.log.infof("Book [%s] deleted", bookToDelete); + + assert !booksCache().containsKey(bookToDelete.getId()) : "deleteBook(" + bookToDelete + + ") should have evicted book from cache."; + } + + @Test + public void testDeleteBookBeforeInvocation() { + final Integer bookToDeleteId = Integer.valueOf(new Random().nextInt(10) + 1); + + assert !booksCache().containsKey(bookToDeleteId): "Cache should not initially contain the book with id " + bookToDeleteId; + + final Book bookToDelete = getBookService().findBook(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete); + + assert bookToDelete.equals(booksCache().get(bookToDelete.getId())) : "findBook(" + bookToDeleteId + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete); + try { + getBookService().deleteBookBeforeInvocation(bookToDeleteId); + } catch (IllegalStateException e) { + // ok, expected + } + this.log.infof("Book [%s] deleted", bookToDelete); + + assert !booksCache().containsKey(bookToDelete.getId()) : "deleteBook(" + bookToDelete + + ") should have evicted book from cache."; + } + + @Test + public void testCachingCreate() { + Book bookToCreate = new Book("112-358-132", "Random Author", "Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + getBookService().createBookCachingBackup(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert bookToCreate.equals(booksCache().get(bookToCreate.getId())) : "createBook(" + bookToCreate + + ") should have inserted created book into cache"; + assert bookToCreate.equals(backupCache().get(bookToCreate.getId())) : "createBook(" + bookToCreate + + ") should have inserted created book into cache"; + } + + @Test + public void testCachingFind() { + + final Integer bookToCacheId = Integer.valueOf(5); + + assert !booksCache().containsKey(bookToCacheId) : "Cache should not initially contain the book with id " + bookToCacheId; + assert !backupCache().containsKey(bookToCacheId) : "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = getBookService().findBookCachingBackup(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert cachedBook.equals(booksCache().get(cachedBook.getId())) : "findBook(" + bookToCacheId + + ") should have cached book"; + assert cachedBook.equals(backupCache().get(cachedBook.getId())) : "findBook(" + bookToCacheId + + ") should have cached book"; + } + + @Test + public void testCachingDelete() { + final Integer bookToDeleteId = Integer.valueOf(new Random().nextInt(10) + 1); + + assert !booksCache().containsKey(bookToDeleteId) : "Cache should not initially contain the book with id " + bookToDeleteId; + assert !backupCache().containsKey(bookToDeleteId) : "Cache should not initially contain the book with id " + bookToDeleteId; + + final Book bookToDelete1 = getBookService().findBook(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete1); + final Book bookToDelete2 = getBookService().findBookBackup(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete2); + + assert bookToDelete1.equals(booksCache().get(bookToDeleteId)) : "findBook(" + bookToDeleteId + + ") should have cached book"; + assert bookToDelete1.equals(backupCache().get(bookToDeleteId)) : "findBook(" + bookToDeleteId + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete1); + getBookService().deleteBookCachingBackup(bookToDeleteId); + this.log.infof("Book [%s] deleted", bookToDelete1); + + assert !booksCache().containsKey(bookToDelete1.getId()) : "deleteBook(" + bookToDelete1 + + ") should have evicted book from cache."; + assert !backupCache().containsKey(bookToDelete1.getId()) : "deleteBook(" + bookToDelete2 + + ") should have evicted book from cache."; + } + + protected BasicCache booksCache() { + return (BasicCache) getCacheManager().getCache("books").getNativeCache(); + } + + protected BasicCache backupCache() { + return (BasicCache) getCacheManager().getCache("backup").getNativeCache(); + } + + protected BasicCache getCache(String name) { + return (BasicCache) getCacheManager().getCache(name).getNativeCache(); + } + + public abstract CachedBookService getBookService(); + + public abstract CacheManager getCacheManager(); +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java new file mode 100644 index 000000000000..d37857f553c5 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/AbstractTestTemplateJsr107.java @@ -0,0 +1,114 @@ +package org.infinispan.spring.provider.sample; + +import org.infinispan.spring.provider.sample.entity.Book; +import org.infinispan.spring.provider.sample.service.CachedBookServiceJsr107; +import org.springframework.beans.factory.annotation.Autowired; +import org.testng.annotations.Test; + +import java.util.Random; + +/** + * Abstract template for running a set of tests under different configurations, including JSR-107 annotations. + * + * @author Matej Cimbora (mcimbora@redhat.com) + */ +public abstract class AbstractTestTemplateJsr107 extends AbstractTestTemplate { + + @Autowired + private CachedBookServiceJsr107 bookDao; + + @Test + public void demonstrateCachingLoadedBooksJsr107() { + final Integer bookToCacheId = Integer.valueOf(5); + + assert !booksCache().containsKey(bookToCacheId) : "Cache should not initially contain the book with id " + bookToCacheId; + + final Book cachedBook = this.bookDao.findBook(bookToCacheId); + this.log.infof("Book [%s] cached", cachedBook); + + assert cachedBook.equals(booksCache().get(bookToCacheId)) : "findBook(" + bookToCacheId + + ") should have cached book"; + } + + @Test + public void demonstrateRemovingBookFromCacheJsr107() { + final Integer bookToDeleteId = Integer.valueOf(new Random().nextInt(10) + 1); + + assert !booksCache().containsKey(bookToDeleteId) : "Cache should not initially contain the book with id " + bookToDeleteId; + + final Book bookToDelete = bookDao.findBook(bookToDeleteId); + this.log.infof("Book [%s] cached", bookToDelete); + + assert booksCache().get(bookToDeleteId).equals(bookToDelete) : "findBook(" + bookToDeleteId + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete); + bookDao.deleteBook(bookToDeleteId); + this.log.infof("Book [%s] deleted", bookToDelete); + + assert !booksCache().containsKey(bookToDeleteId) : "deleteBook(" + bookToDelete + + ") should have evicted book from cache."; + } + + @Test + public void demonstrateCacheEvictionUponUpdateJsr107() { + final Integer bookToUpdateId = Integer.valueOf(2); + + assert !booksCache().containsKey(bookToUpdateId): "Cache should not initially contain the book with id " + bookToUpdateId; + + Book bookToUpdate = new Book("112-358-132", "Random Author", "Path to Infinispan Enlightenment"); + booksCache().put(bookToUpdate, bookToUpdate); + + assert booksCache().containsKey(bookToUpdate); + + bookToUpdate.setTitle("Work in Progress"); + Book result = bookDao.updateBook(bookToUpdate); + this.log.infof("Book [%s] updated", bookToUpdate); + + assert !booksCache().containsKey(bookToUpdate) : "updateBook(" + bookToUpdate + + ") should have removed updated book from cache"; + } + + @Test + public void demonstrateCachePutOnCreateJsr107() { + + final Book bookToCreate = new Book("112-358-132", "Random Author", "Path to Infinispan Enlightenment"); + + this.log.infof("Creating book [%s] ...", bookToCreate); + Book result = bookDao.createBook(bookToCreate); + this.log.infof("Book [%s] created", bookToCreate); + + assert booksCache().get(result).equals(bookToCreate) : "createBook(" + bookToCreate + + ") should have inserted created book into cache"; + } + + @Test + public void testDeleteAllEntriesJsr107() { + final Integer bookToDeleteId1 = Integer.valueOf(5); + final Integer bookToDeleteId2 = Integer.valueOf(6); + + assert !booksCache().containsKey(bookToDeleteId1): "Cache should not initially contain the book with id " + bookToDeleteId1; + assert !booksCache().containsKey(bookToDeleteId2): "Cache should not initially contain the book with id " + bookToDeleteId2; + + final Book bookToDelete1 = bookDao.findBook(bookToDeleteId1); + this.log.infof("Book [%s] cached", bookToDelete1); + + assert bookToDelete1.equals(booksCache().get(bookToDeleteId1)) : "findBook(" + bookToDeleteId1 + + ") should have cached book"; + + final Book bookToDelete2 = bookDao.findBook(bookToDeleteId2); + this.log.infof("Book [%s] cached", bookToDelete2); + + assert bookToDelete2.equals(booksCache().get(bookToDeleteId2)) : "findBook(" + bookToDeleteId2 + + ") should have cached book"; + + this.log.infof("Deleting book [%s] ...", bookToDelete1); + bookDao.deleteBookAllEntries(bookToDeleteId1); + this.log.infof("Book [%s] deleted", bookToDelete1); + + assert !booksCache().containsKey(bookToDelete1.getId()) : "deleteBook(" + bookToDelete1 + + ") should have evicted book from cache."; + assert !booksCache().containsKey(bookToDelete2.getId()) : "deleteBook(" + bookToDelete2 + + ") should have evicted book from cache."; + } +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/DataSourceResolver.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/DataSourceResolver.java new file mode 100644 index 000000000000..59d4428b26e5 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/DataSourceResolver.java @@ -0,0 +1,23 @@ +package org.infinispan.spring.provider.sample; + +import com.arjuna.ats.internal.jdbc.DynamicClass; +import org.h2.jdbcx.JdbcDataSource; + +import javax.sql.XADataSource; + +/** + * Required by JBoss Transactions for DataSource resolving. + * + * @author Matej Cimbora (mcimbora@redhat.com) + */ +public class DataSourceResolver implements DynamicClass { + + @Override + public XADataSource getDataSource(String url) { + JdbcDataSource dataSource = new JdbcDataSource(); + dataSource.setURL(String.format("jdbc:%s;DB_CLOSE_DELAY=-1", url)); + dataSource.setUser("sa"); + dataSource.setPassword(""); + return dataSource; + } +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/SampleHotrodServerLifecycleBean.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/SampleHotrodServerLifecycleBean.java new file mode 100644 index 000000000000..5e0b795309ad --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/SampleHotrodServerLifecycleBean.java @@ -0,0 +1,58 @@ +package org.infinispan.spring.provider.sample; + +import org.infinispan.client.hotrod.test.HotRodClientTestingUtil; +import org.infinispan.manager.EmbeddedCacheManager; +import org.infinispan.server.hotrod.HotRodServer; +import org.infinispan.server.hotrod.configuration.HotRodServerConfigurationBuilder; +import org.infinispan.server.hotrod.test.HotRodTestingUtil; +import org.infinispan.test.fwk.TestCacheManagerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.InitializingBean; + +/** + * Starts test HotRod server instance with pre-defined set of caches. + * + * @author Olaf Bergner + * @author Matej Cimbora (mcimbora@redhat.com) + */ +public class SampleHotrodServerLifecycleBean implements InitializingBean, DisposableBean { + + private EmbeddedCacheManager cacheManager; + + private HotRodServer hotrodServer; + + private String remoteCacheName; + + private String remoteBackupCacheName; + + private String customCacheName; + + public void setRemoteCacheName(String remoteCacheName) { + this.remoteCacheName = remoteCacheName; + } + + public void setRemoteBackupCacheName(String remoteBackupCacheName) { + this.remoteBackupCacheName = remoteBackupCacheName; + } + + public void setCustomCacheName(String customCacheName) { + this.customCacheName = customCacheName; + } + + @Override + public void afterPropertiesSet() throws Exception { + cacheManager = TestCacheManagerFactory.createCacheManager(HotRodTestingUtil.hotRodCacheConfiguration()); + cacheManager.defineConfiguration(remoteCacheName, HotRodTestingUtil.hotRodCacheConfiguration().build()); + cacheManager.defineConfiguration(remoteBackupCacheName, HotRodTestingUtil.hotRodCacheConfiguration().build()); + cacheManager.defineConfiguration(customCacheName, HotRodTestingUtil.hotRodCacheConfiguration().build()); + HotRodServerConfigurationBuilder hcb = new HotRodServerConfigurationBuilder(); + hcb.port(15233); + hotrodServer = HotRodClientTestingUtil.startHotRodServer(cacheManager, hcb); + } + + @Override + public void destroy() throws Exception { + cacheManager.stop(); + hotrodServer.stop(); + } +} diff --git a/spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleRemoteCacheTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/SampleRemoteCacheTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/provider/sample/SampleRemoteCacheTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/SampleRemoteCacheTest.java diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/dao/BaseBookDao.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/dao/BaseBookDao.java new file mode 100644 index 000000000000..304024388a50 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/dao/BaseBookDao.java @@ -0,0 +1,56 @@ +package org.infinispan.spring.provider.sample.dao; + +import org.infinispan.spring.provider.sample.entity.Book; + +/** + *

+ * A simple, woefully incomplete {@code DAO} for storing, retrieving and removing {@link org.infinispan.spring.provider.sample.entity.Book + * Books}. + *

+ * + * @author Olaf Bergner + * @since 5.1 + */ +public interface BaseBookDao { + + /** + *

+ * Look up and return the {@code Book} identified by the supplied {@code bookId}, or {@code null} + * if no such book exists. + *

+ * + * @param bookId + * @return The {@code Book} identified by the supplied {@code bookId}, or {@code null} + */ + Book findBook(Integer bookId); + + /** + *

+ * Remove the {@code Book} identified by the supplied {@code bookId} from this store. + *

+ * + * @param bookId + */ + void deleteBook(Integer bookId); + + /** + *

+ * Update provided {@code book} and return its updated version. + *

+ * + * @param book + * The book to update + * @return Updated book + */ + Book updateBook(Book book); + + /** + *

+ * Create new book and return it. If the book already exists, throw exception. + *

+ * + * @param book The book to create + * @return Created book. + */ + Book createBook(Book book); +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/dao/JdbcBookDao.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/dao/JdbcBookDao.java new file mode 100644 index 000000000000..1d3d3b1acde4 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/dao/JdbcBookDao.java @@ -0,0 +1,106 @@ +package org.infinispan.spring.provider.sample.dao; + +import org.infinispan.spring.provider.sample.entity.Book; +import org.infinispan.util.logging.Log; +import org.infinispan.util.logging.LogFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; +import org.springframework.jdbc.core.namedparam.SqlParameterSource; +import org.springframework.jdbc.core.simple.SimpleJdbcInsert; +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collection; + +/** + *

+ * {@link org.infinispan.spring.provider.sample.dao.BaseBookDao BookDao} implementation that fronts a relational database, using + * {@code JDBC} to store and retrieve {@link org.infinispan.spring.provider.sample.entity.Book books}. Serves as an example of how + * to use Spring's + * {@link org.springframework.cache.annotation.Cacheable @Cacheable} and + * {@link org.springframework.cache.annotation.CacheEvict @CacheEvict}. + *

+ * + * @author Olaf Bergner + * @since 5.1 + */ +@Repository(value = "jdbcBookDao") +public class JdbcBookDao implements BaseBookDao { + + private final Log log = LogFactory.getLog(getClass()); + + private SimpleJdbcTemplate jdbcTemplate; + + private SimpleJdbcInsert bookInsert; + + @Autowired(required = true) + public void initialize(final DataSource dataSource) { + this.jdbcTemplate = new SimpleJdbcTemplate(dataSource); + this.bookInsert = new SimpleJdbcInsert(dataSource).withTableName("books") + .usingGeneratedKeyColumns("id"); + } + + public Book findBook(Integer bookId) { + try { + this.log.infof("Loading book [ID = %d]", bookId); + return this.jdbcTemplate.queryForObject("SELECT * FROM books WHERE id = ?", + new BookRowMapper(), bookId); + } catch (EmptyResultDataAccessException e) { + return null; + } + } + + private static final class BookRowMapper implements RowMapper { + + @Override + public Book mapRow(ResultSet rs, int rowNum) throws SQLException { + final Book mappedBook = new Book(); + mappedBook.setId(rs.getInt("id")); + mappedBook.setIsbn(rs.getString("isbn")); + mappedBook.setAuthor(rs.getString("author")); + mappedBook.setTitle(rs.getString("title")); + + return mappedBook; + } + } + + @Override + public void deleteBook(Integer bookId) { + this.log.infof("Deleting book [ID = %d]", bookId); + this.jdbcTemplate.update("DELETE FROM books WHERE id = ?", bookId); + } + + public Collection getBooks() { + return this.jdbcTemplate.query("SELECT * FROM books", new BookRowMapper()); + } + + @Override + public Book updateBook(Book bookToUpdate) { + this.log.infof("Updating book [%s]", bookToUpdate); + this.jdbcTemplate.update( + "UPDATE books SET isbn = :isbn, author = :author, title = :title WHERE id = :id", + createParameterSourceFor(bookToUpdate)); + this.log.infof("Book [%s] updated", bookToUpdate); + return bookToUpdate; + } + + @Override + public Book createBook(Book bookToCreate) { + final Number newBookId = this.bookInsert + .executeAndReturnKey(createParameterSourceFor(bookToCreate)); + bookToCreate.setId(newBookId.intValue()); + this.log.infof("Book [%s] persisted for the first time", bookToCreate); + return bookToCreate; + } + + private SqlParameterSource createParameterSourceFor(final Book book) { + return new MapSqlParameterSource().addValue("id", book.getId()) + .addValue("isbn", book.getIsbn()).addValue("author", book.getAuthor()) + .addValue("title", book.getTitle()); + } +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/entity/Book.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/entity/Book.java new file mode 100644 index 000000000000..d56d643882a4 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/entity/Book.java @@ -0,0 +1,103 @@ +package org.infinispan.spring.provider.sample.entity; + +import java.io.Serializable; + +/** + * Book. + * + * @author Olaf Bergner + * @since 5.1 + */ +public class Book implements Serializable { + + private Integer id; + + private String isbn; + + private String author; + + private String title; + + public Book() { + } + + public Book(String isbn, String author, String title) { + this(null, isbn, author, title); + } + + public Book(Integer id, String isbn, String author, String title) { + this.id = id; + this.isbn = isbn; + this.author = author; + this.title = title; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getIsbn() { + return isbn; + } + + public void setIsbn(String isbn) { + this.isbn = isbn; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((author == null) ? 0 : author.hashCode()); + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((isbn == null) ? 0 : isbn.hashCode()); + result = prime * result + ((title == null) ? 0 : title.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null) return false; + if (getClass() != obj.getClass()) return false; + Book other = (Book) obj; + if (author == null) { + if (other.author != null) return false; + } else if (!author.equals(other.author)) return false; + if (id == null) { + if (other.id != null) return false; + } else if (!id.equals(other.id)) return false; + if (isbn == null) { + if (other.isbn != null) return false; + } else if (!isbn.equals(other.isbn)) return false; + if (title == null) { + if (other.title != null) return false; + } else if (!title.equals(other.title)) return false; + return true; + } + + @Override + public String toString() { + return "Book [id=" + id + ", isbn=" + isbn + ", author=" + author + ", title=" + title + "]"; + } +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/generators/SingleArgKeyGenerator.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/generators/SingleArgKeyGenerator.java new file mode 100644 index 000000000000..bf074fc589c3 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/generators/SingleArgKeyGenerator.java @@ -0,0 +1,25 @@ +package org.infinispan.spring.provider.sample.generators; + +import java.lang.reflect.Method; + +import org.springframework.cache.interceptor.KeyGenerator; +import org.springframework.stereotype.Component; + +/** + * Simple implementation of {@link KeyGenerator} interface. It returns the first + * argument passed to a method. + * + * @author Matej Cimbora (mcimbora@redhat.com) + */ +@Component +public class SingleArgKeyGenerator implements KeyGenerator { + + @Override + public Object generate(Object o, Method method, Object... params) { + if (params != null && params.length == 1) { + return params[0]; + } else { + throw new IllegalArgumentException("This generator requires exactly one parameter to be specified."); + } + } +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/resolvers/CustomCacheResolver.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/resolvers/CustomCacheResolver.java new file mode 100644 index 000000000000..d4b09ae9ea3c --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/resolvers/CustomCacheResolver.java @@ -0,0 +1,32 @@ +package org.infinispan.spring.provider.sample.resolvers; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.cache.interceptor.CacheOperationInvocationContext; +import org.springframework.cache.interceptor.CacheResolver; +import org.springframework.stereotype.Component; + +/** + * Simple implementation of {@link CacheResolver} interface. It returns a single + * instance of {@link Cache} with name 'custom'. + * + * @author Matej Cimbora (mcimbora@redhat.com) + */ +@Component +public class CustomCacheResolver implements CacheResolver { + + private static final String CACHE_NAME = "custom"; + + @Autowired(required = true) + private CacheManager cacheManager; + + @Override + public Collection resolveCaches(CacheOperationInvocationContext cacheOperationInvocationContext) { + return new ArrayList(Arrays.asList(cacheManager.getCache(CACHE_NAME))); + } +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookService.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookService.java new file mode 100644 index 000000000000..088d1802c1a2 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookService.java @@ -0,0 +1,60 @@ +package org.infinispan.spring.provider.sample.service; + +import org.infinispan.spring.provider.sample.entity.Book; + +/** + * Service providing extension to basic CRUD operations in order to test individual caching annotations and parameters + * they support. + * + * @author Matej Cimbora (mcimbora@redhat.com) + */ +public interface CachedBookService { + + Book findBook(Integer bookId); + + Book findBookCondition(Integer bookId); + + Book findBookUnless(Integer bookId); + + Book findBookCustomKeyGenerator(Integer bookId); + + Book findBookCustomCacheResolver(Integer bookId); + + Book findBookBackup(Integer bookId); + + Book findBookCachingBackup(Integer bookId); + + Book findBookCustomCacheManager(Integer bookId); + + Book createBook(Book book); + + Book createBookCondition(Book book); + + Book createBookUnless(Book book); + + Book createBookCustomKeyGenerator(Book book); + + Book createBookCustomCacheResolver(Book book); + + Book createBookCustomCacheManager(Book book); + + Book createBookCachingBackup(Book book); + + void deleteBook(Integer bookId); + + void deleteBookCondition(Integer bookId); + + void deleteBookCustomKeyGenerator(Integer bookId); + + void deleteBookCustomCacheResolver(Integer bookId); + + void deleteBookAllEntries(Integer bookId); + + void deleteBookCachingBackup(Integer bookId); + + void deleteBookCustomCacheManager(Integer bookId); + + void deleteBookBeforeInvocation(Integer bookId); + + Book updateBook(Book book); +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceImpl.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceImpl.java new file mode 100644 index 000000000000..9f63af9f4be5 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceImpl.java @@ -0,0 +1,210 @@ +package org.infinispan.spring.provider.sample.service; + +import org.infinispan.spring.provider.sample.dao.JdbcBookDao; +import org.infinispan.spring.provider.sample.entity.Book; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.CachePut; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cache.annotation.Caching; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author Olaf Bergner + * @author Matej Cimbora (mcimbora@redhat.com) + */ + +@Transactional +@Service +public class CachedBookServiceImpl implements CachedBookService { + + @Autowired + private JdbcBookDao baseDao; + + /** + *

+ * Look up and return the {@code Book} identified by the supplied {@code bookId}. By annotating + * this method with {@code @Cacheable(value = "books", key = "#bookId")} we achieve the + * following: + *

    + *
  1. + * {@code Book} instances returned from this method will be cached in a named + * {@link org.springframework.cache.Cache Cache} "books"
  2. + *
  3. + * The key used to cache {@code Book} instances will be the supplied {@code bookId}.
  4. + *
+ *

+ *

+ * Note that it is important that we explicitly tell Spring to use {@code bookId} + * as the cache key. Otherwise, Spring would derive a cache key from the + * parameters passed in (in our case only {@code bookId}), a cache key we have no control over. + * This would get us into trouble when in {@link #updateBook(org.infinispan.spring.provider.sample.entity.Book)} we need a book's cache key to + * remove it from the cache. But we wouldn't know that cache key since we don't know Spring's key + * generation algorithm. Therefore, we consistently use {@code key = "#bookId"} or + * {@code key = "#book.id"} to tell Spring to always use a book's id as its + * cache key. + *

+ */ + @Override + @Cacheable(value = "books", key = "#bookId") + public Book findBook(Integer bookId) { + return baseDao.findBook(bookId); + } + + /** + *

+ * Remove the book identified by the supplied {@code bookId} from database. By annotating this + * method with {@code @CacheEvict(value = "books", key = "#bookId")} we make sure that Spring + * will remove the book cache under key {@code bookId} (if any) from the + * {@link org.springframework.cache.Cache Cache} "books". + *

+ */ + @Override + @CacheEvict(value = "books", key = "#bookId") + public void deleteBook(Integer bookId) { + baseDao.deleteBook(bookId); + } + + /** + *

+ * Store the supplied {@code bookToStore} in database. Since it is annotated with + * {@code @CacheEvict(value = "books", key = "#book.id", condition = "#book.id != null")} + * this method will tell Spring to remove any book cached under the key + * {@code book.getId()} from the {@link org.springframework.cache.Cache + * Cache} "books". This eviction will only be triggered if that id is not + * {@code null}. + *

+ */ + @Override + @CacheEvict(value = "books", key = "#book.id", condition = "#book.id != null") + public Book updateBook(Book book) { + return baseDao.updateBook(book); + } + + @Override + @CachePut(value = "books", key = "#book.id") + public Book createBook(Book book) { + return baseDao.createBook(book); + } + + @Override + @Cacheable(value = "books", key = "#bookId", condition = "#bookId > 1") + public Book findBookCondition(Integer bookId) { + return baseDao.findBook(bookId); + } + + @Override + @Cacheable(value = "books", key = "#bookId", unless = "#bookId > 1") + public Book findBookUnless(Integer bookId) { + return baseDao.findBook(bookId); + } + + @Override + @Cacheable(value = "books", keyGenerator = "singleArgKeyGenerator") + public Book findBookCustomKeyGenerator(Integer bookId) { + return baseDao.findBook(bookId); + } + + @Override + @Cacheable(value = "books", key = "#bookId", cacheResolver = "customCacheResolver") + public Book findBookCustomCacheResolver(Integer bookId) { + return baseDao.findBook(bookId); + } + + @Override + @Cacheable(value = "backup", key = "#bookId") + public Book findBookBackup(Integer bookId) { + return baseDao.findBook(bookId); + } + + @Override + @CachePut(value = "books", key = "#book.id", condition = "#book.title == 'Path to Infinispan Enlightenment'") + public Book createBookCondition(Book book) { + return baseDao.createBook(book); + } + + @Override + @CachePut(value = "books", key = "#book.id", unless = "#book.isbn == '112-358-132'") + public Book createBookUnless(Book book) { + return baseDao.createBook(book); + } + + @Override + @CachePut(value = "books", keyGenerator = "singleArgKeyGenerator") + public Book createBookCustomKeyGenerator(Book book) { + return baseDao.createBook(book); + } + + @Override + @CachePut(value = "books", key = "#book.id", cacheResolver = "customCacheResolver") + public Book createBookCustomCacheResolver(Book book) { + return baseDao.createBook(book); + } + + @Override + @CachePut(value = "books", key = "#book.id", cacheManager = "cacheManager") + public Book createBookCustomCacheManager(Book book) { + return baseDao.createBook(book); + } + + @Override + @CacheEvict(value = "books", key = "#bookId", condition = "#bookId > 1") + public void deleteBookCondition(Integer bookId) { + baseDao.deleteBook(bookId); + } + + @Override + @CacheEvict(value = "books", keyGenerator = "singleArgKeyGenerator") + public void deleteBookCustomKeyGenerator(Integer bookId) { + baseDao.deleteBook(bookId); + } + + @Override + @CacheEvict(value = "books", key = "#bookId", cacheResolver = "customCacheResolver") + public void deleteBookCustomCacheResolver(Integer bookId) { + baseDao.deleteBook(bookId); + } + + @Override + @CacheEvict(value = "books", key = "#bookId", allEntries = true) + public void deleteBookAllEntries(Integer bookId) { + baseDao.deleteBook(bookId); + } + + @Override + @Caching(put = {@CachePut(value = "books", key = "#book.id"), @CachePut(value = "backup", key = "#book.id")}) + public Book createBookCachingBackup(Book book) { + return baseDao.createBook(book); + } + + @Override + @Caching(cacheable = {@Cacheable(value = "books", key = "#bookId"), @Cacheable(value = "backup", key = "#bookId")}) + public Book findBookCachingBackup(Integer bookId) { + return baseDao.findBook(bookId); + } + + @Override + @Cacheable(value = "books", cacheManager = "cacheManager") + public Book findBookCustomCacheManager(Integer bookId) { + return baseDao.findBook(bookId); + } + + @Override + @Caching(evict = {@CacheEvict(value = "books"), @CacheEvict(value = "backup")}) + public void deleteBookCachingBackup(Integer bookId) { + baseDao.deleteBook(bookId); + } + + @Override + @CacheEvict(value = "books", cacheManager = "cacheManager") + public void deleteBookCustomCacheManager(Integer bookId) { + baseDao.deleteBook(bookId); + } + + @Override + @CacheEvict(value = "books", beforeInvocation = true) + public void deleteBookBeforeInvocation(Integer bookId) { + throw new IllegalStateException("This method throws exception by default."); + } +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107.java new file mode 100644 index 000000000000..434d627f1238 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107.java @@ -0,0 +1,21 @@ +package org.infinispan.spring.provider.sample.service; + +import org.infinispan.spring.provider.sample.entity.Book; + +/** + * Service providing basic CRUD operations in order to test individual JSR-107 caching annotations. + * + * @author Matej Cimbora (mcimbora@redhat.com) + */ +public interface CachedBookServiceJsr107 { + + Book findBook(Integer bookId); + + Book updateBook(Book book); + + Book createBook(Book book); + + void deleteBook(Integer bookId); + + void deleteBookAllEntries(Integer bookId); +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107Impl.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107Impl.java new file mode 100644 index 000000000000..c179ef74f582 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedBookServiceJsr107Impl.java @@ -0,0 +1,55 @@ +package org.infinispan.spring.provider.sample.service; + +import javax.cache.annotation.CacheKey; +import javax.cache.annotation.CachePut; +import javax.cache.annotation.CacheRemove; +import javax.cache.annotation.CacheRemoveAll; +import javax.cache.annotation.CacheResult; +import javax.cache.annotation.CacheValue; + +import org.infinispan.spring.provider.sample.dao.BaseBookDao; +import org.infinispan.spring.provider.sample.entity.Book; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author Matej Cimbora (mcimbora@redhat.com) + */ +@Transactional +@Service +public class CachedBookServiceJsr107Impl implements CachedBookServiceJsr107 { + + @Autowired + private BaseBookDao baseDao; + + @CacheResult(cacheName = "books") + @Override + public Book findBook(Integer bookId) { + return baseDao.findBook(bookId); + } + + @CacheRemove(cacheName = "books") + @Override + public void deleteBook(Integer bookId) { + baseDao.deleteBook(bookId); + } + + @CacheRemove(cacheName = "books") + @Override + public Book updateBook(Book book) { + return baseDao.updateBook(book); + } + + @CachePut(cacheName = "books") + @Override + public Book createBook(@CacheKey @CacheValue Book book) { + return baseDao.createBook(book); + } + + @CacheRemoveAll(cacheName = "books") + @Override + public void deleteBookAllEntries(Integer bookId) { + baseDao.deleteBook(bookId); + } +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookService.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookService.java new file mode 100644 index 000000000000..b5d0cc5d8c9c --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookService.java @@ -0,0 +1,21 @@ +package org.infinispan.spring.provider.sample.service; + +import org.infinispan.spring.provider.sample.entity.Book; + +/** + * Service providing basic create/find operations on both transactional and non-transactional caches. + * + * @author Matej Cimbora (mcimbora@redhat.com) + */ +public interface CachedTransactionBookService { + + public Book createBookNonTransactionalCache(Book book); + + public Book createBookTransactionalCache(Book book); + + public Book findBookNonTransactionalCache(Integer id); + + public Book findBookTransactionalCache(Integer id); + + public Book findBookCacheDisabled(Integer id); +} diff --git a/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookServiceImpl.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookServiceImpl.java new file mode 100644 index 000000000000..ef7ee5a1bd82 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/provider/sample/service/CachedTransactionBookServiceImpl.java @@ -0,0 +1,49 @@ +package org.infinispan.spring.provider.sample.service; + +import org.infinispan.spring.provider.sample.dao.BaseBookDao; +import org.infinispan.spring.provider.sample.entity.Book; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CachePut; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author Matej Cimbora (mcimbora@redhat.com) + */ +@Transactional +@Service +public class CachedTransactionBookServiceImpl implements CachedTransactionBookService { + + @Autowired + private BaseBookDao baseDao; + + @CachePut(value = "books", key = "#book.id") + @Override + public Book createBookNonTransactionalCache(Book book) { + return baseDao.createBook(book); + } + + @CachePut(value = "booksTransactional", key = "#book.id") + @Override + public Book createBookTransactionalCache(Book book) { + return baseDao.createBook(book); + } + + @Cacheable(value = "books") + @Override + public Book findBookNonTransactionalCache(Integer id) { + return baseDao.findBook(id); + } + + @Cacheable(value = "booksTransactional") + @Override + public Book findBookTransactionalCache(Integer id) { + return baseDao.findBook(id); + } + + @Override + public Book findBookCacheDisabled(Integer id) { + return baseDao.findBook(id); + } +} diff --git a/spring/spring4/src/test/java/org/infinispan/spring/support/remote/HotrodServerLifecycleBean.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/HotrodServerLifecycleBean.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/support/remote/HotrodServerLifecycleBean.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/HotrodServerLifecycleBean.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.java similarity index 100% rename from spring/spring4/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.java diff --git a/spring/spring4/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanTest.java b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanTest.java similarity index 93% rename from spring/spring4/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanTest.java rename to spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanTest.java index 570b7d9653ee..8e4782d7384f 100644 --- a/spring/spring4/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanTest.java +++ b/spring/spring4/spring4-remote/src/test/java/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanTest.java @@ -6,6 +6,7 @@ import org.infinispan.commons.marshall.Marshaller; import org.infinispan.factories.TransportFactory; import org.infinispan.spring.AbstractRemoteCacheManagerFactory; +import org.infinispan.spring.AssertionUtils; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.testng.annotations.Test; @@ -18,7 +19,6 @@ import java.util.Properties; import static org.infinispan.client.hotrod.impl.ConfigurationProperties.*; -import static org.infinispan.spring.AssertionUtils.assertPropertiesSubset; import static org.testng.AssertJUnit.*; /** @@ -105,11 +105,11 @@ public final void shouldProduceARemoteCacheManagerConfiguredUsingDefaultSettings objectUnderTest.afterPropertiesSet(); final RemoteCacheManager remoteCacheManager = objectUnderTest.getObject(); - assertPropertiesSubset( - "The configuration properties used by the RemoteCacheManager returned by getObject() should be equal " - + "to RemoteCacheManager's default settings since neither property 'configurationProperties' " - + "nor property 'configurationPropertiesFileLocation' has been set. However, those two are not equal.", - new RemoteCacheManager().getProperties(), remoteCacheManager.getProperties()); + AssertionUtils.assertPropertiesSubset( + "The configuration properties used by the RemoteCacheManager returned by getObject() should be equal " + + "to RemoteCacheManager's default settings since neither property 'configurationProperties' " + + "nor property 'configurationPropertiesFileLocation' has been set. However, those two are not equal.", + new RemoteCacheManager().getProperties(), remoteCacheManager.getProperties()); objectUnderTest.destroy(); } @@ -165,11 +165,11 @@ public final void shouldProduceACacheConfiguredUsingTheSuppliedConfigurationProp objectUnderTest.afterPropertiesSet(); final RemoteCacheManager remoteCacheManager = objectUnderTest.getObject(); - assertPropertiesSubset( - "The configuration properties used by the RemoteCacheManager returned by getObject() should be equal " - + "to those passed into InfinispanRemoteCacheMangerFactoryBean via setConfigurationProperties(props). " - + "However, those two are not equal.", configurationProperties, - remoteCacheManager.getProperties()); + AssertionUtils.assertPropertiesSubset( + "The configuration properties used by the RemoteCacheManager returned by getObject() should be equal " + + "to those passed into InfinispanRemoteCacheMangerFactoryBean via setConfigurationProperties(props). " + + "However, those two are not equal.", configurationProperties, + remoteCacheManager.getProperties()); objectUnderTest.destroy(); } @@ -202,12 +202,12 @@ public final void shouldProduceACacheConfiguredUsingPropertiesLoadedFromALocatio objectUnderTest.afterPropertiesSet(); final RemoteCacheManager remoteCacheManager = objectUnderTest.getObject(); - assertPropertiesSubset( - "The configuration properties used by the RemoteCacheManager returned by getObject() should be equal " - + "to those passed into InfinispanRemoteCacheMangerFactoryBean via setConfigurationPropertiesFileLocation(propsFileLocation). " - + "However, those two are not equal.", - loadConfigurationProperties(HOTROD_CLIENT_PROPERTIES_LOCATION), - remoteCacheManager.getProperties()); + AssertionUtils.assertPropertiesSubset( + "The configuration properties used by the RemoteCacheManager returned by getObject() should be equal " + + "to those passed into InfinispanRemoteCacheMangerFactoryBean via setConfigurationPropertiesFileLocation(propsFileLocation). " + + "However, those two are not equal.", + loadConfigurationProperties(HOTROD_CLIENT_PROPERTIES_LOCATION), + remoteCacheManager.getProperties()); objectUnderTest.destroy(); } diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest-context.xml b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest-context.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest-context.xml rename to spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/config/InfinispanRemoteCacheManagerDefinitionTest-context.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.xml b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.xml rename to spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/SpringRemoteCacheManagerFactoryBeanContextTest.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/hotrod-client.properties b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/hotrod-client.properties similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/hotrod-client.properties rename to spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/hotrod-client.properties diff --git a/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/named-async-cache.xml b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/named-async-cache.xml new file mode 100644 index 000000000000..19f07b49ed31 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/named-async-cache.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/SampleRemoteCacheTestConfig.xml b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/SampleRemoteCacheTestConfig.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/provider/sample/SampleRemoteCacheTestConfig.xml rename to spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/SampleRemoteCacheTestConfig.xml diff --git a/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/books-infinispan-config.xml b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/books-infinispan-config.xml new file mode 100644 index 000000000000..0ab17c70fbbc --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/books-infinispan-config.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/initDB.sql b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/initDB.sql new file mode 100644 index 000000000000..75d195476140 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/initDB.sql @@ -0,0 +1,7 @@ +CREATE TABLE books ( + id INTEGER NOT NULL IDENTITY PRIMARY KEY, + isbn VARCHAR(30) NOT NULL, + author VARCHAR(30) NOT NULL, + title VARCHAR(50) NOT NULL +); +CREATE INDEX books_isbn ON books (isbn); diff --git a/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/populateDB.sql b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/populateDB.sql new file mode 100644 index 000000000000..aa66a6b0ce90 --- /dev/null +++ b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/provider/sample/populateDB.sql @@ -0,0 +1,10 @@ +INSERT INTO books VALUES (1, '12-678-555', 'Homer', 'Iliad'); +INSERT INTO books VALUES (2, '12-678-897', 'Joyce, James', 'Finnegans Wake'); +INSERT INTO books VALUES (3, '13-956-645', 'Sterne, Laurence', 'Tristam Shandy'); +INSERT INTO books VALUES (4, '15-765-111', 'Proust, Marcel', 'A la recherche du temps perdu'); +INSERT INTO books VALUES (5, '29-567-555', 'Shakespeare, William', 'King Lear'); +INSERT INTO books VALUES (6, '28-223-349', 'Pullman, Philip', 'His Dark Materials'); +INSERT INTO books VALUES (7, '66-666-666', 'Milton, John', 'Paradise Lost'); +INSERT INTO books VALUES (8, '78-678-671', 'Heidegger, Martin', 'Sein und Zeit'); +INSERT INTO books VALUES (9, '09-009-009', 'Montaigne, Miguel de', 'Essays'); +INSERT INTO books VALUES (10, '78-763-555', 'Stephenson, Neal', 'The Baroque Cycle'); diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.xml b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.xml rename to spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/support/remote/InfinispanNamedRemoteCacheFactoryBeanContextTest.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.xml b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.xml similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.xml rename to spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/support/remote/InfinispanRemoteCacheManagerFactoryBeanContextTest.xml diff --git a/spring/spring4/src/test/resources/org/infinispan/spring/support/remote/hotrod-client.properties b/spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/support/remote/hotrod-client.properties similarity index 100% rename from spring/spring4/src/test/resources/org/infinispan/spring/support/remote/hotrod-client.properties rename to spring/spring4/spring4-remote/src/test/resources/org/infinispan/spring/support/remote/hotrod-client.properties diff --git a/spring/spring4/src/main/java/org/infinispan/spring/provider/ContainerCacheManagerFactoryBean.java b/spring/spring4/src/main/java/org/infinispan/spring/provider/ContainerCacheManagerFactoryBean.java deleted file mode 100644 index 2a1123bfade0..000000000000 --- a/spring/spring4/src/main/java/org/infinispan/spring/provider/ContainerCacheManagerFactoryBean.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.infinispan.spring.provider; - -import org.infinispan.client.hotrod.RemoteCacheManager; -import org.infinispan.manager.CacheContainer; -import org.infinispan.manager.EmbeddedCacheManager; -import org.springframework.beans.factory.FactoryBean; -import org.springframework.cache.CacheManager; -import org.springframework.util.Assert; - -/** - * {@link FactoryBean} for creating a {@link CacheManager} for a pre-defined {@link org.infinispan.manager.CacheContainer}. - *

- * Useful when the cache container is defined outside the application (e.g. provided by the application server) - * - * @author Marius Bogoevici - */ -public class ContainerCacheManagerFactoryBean implements FactoryBean { - - private CacheContainer cacheContainer; - - public ContainerCacheManagerFactoryBean(CacheContainer cacheContainer) { - Assert.notNull(cacheContainer, "CacheContainer cannot be null"); - if (!(cacheContainer instanceof EmbeddedCacheManager || - cacheContainer instanceof RemoteCacheManager)) { - throw new IllegalArgumentException("CacheContainer must be either an EmbeddedCacheManager or a RemoteCacheManager "); - } - this.cacheContainer = cacheContainer; - } - - @Override - public CacheManager getObject() throws Exception { - if (this.cacheContainer instanceof EmbeddedCacheManager) { - return new SpringEmbeddedCacheManager((EmbeddedCacheManager) this.cacheContainer); - } else if (this.cacheContainer instanceof RemoteCacheManager) { - return new SpringRemoteCacheManager((RemoteCacheManager) this.cacheContainer); - } else { - throw new IllegalArgumentException("CacheContainer must be either an EmbeddedCacheManager or a RemoteCacheManager "); - } - } - - @Override - public Class getObjectType() { - return CacheManager.class; - } - - @Override - public boolean isSingleton() { - return true; - } - -}