From 441af03d7d08fb0117fc1694c044b1f82a3b203c Mon Sep 17 00:00:00 2001 From: Sebastian Laskawiec Date: Mon, 2 Nov 2015 14:03:39 +0100 Subject: [PATCH 1/3] 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 68482c85a80..1b4c9fb818e 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 c65ecd205a1..6a9eb373039 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 c2e98ab62fc..fa094f67292 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 e44c10aeb79..13066b8cbf6 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 8bd0906320d..7cf2bf36b54 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 38137f7451d..c03aff4fb8d 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 0f90e44d5a3..53272701408 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 00000000000..451105157a9 --- /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 00000000000..ded96915137 --- /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 83862a438d0..7bf26c7f670 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 1203c41e43a..d7192425c46 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 00000000000..ec643a47334 --- /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 fcb3d4dffe6..05b740ef1f3 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 00000000000..b0fd6f53dd9 --- /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 fe44a72b563..8a5711aa7f9 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 2289a093703..d37857f553c 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 bb7ccf63e1f..18e7a9f6600 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 edeaee2bc49..3635390a24f 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 b7283bc64f9..f25bbb7b74e 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 6d6615cadf7..df362a1c10a 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 00000000000..48496e8b377 --- /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 81cddf72c1c..1ec97411713 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 00000000000..33478b63db5 --- /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 5d5913a8458..8a042f96d31 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 3869e40e0fc..ce993c90c19 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 ff76cd27348..0945b9e348a 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 00000000000..8a5711aa7f9 --- /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 00000000000..d37857f553c --- /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 00000000000..59d4428b26e --- /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 00000000000..5e0b795309a --- /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 00000000000..304024388a5 --- /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 00000000000..1d3d3b1acde --- /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 00000000000..d56d643882a --- /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 00000000000..bf074fc589c --- /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 00000000000..d4b09ae9ea3 --- /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 00000000000..088d1802c1a --- /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 00000000000..9f63af9f4be --- /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 00000000000..434d627f123 --- /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 00000000000..c179ef74f58 --- /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 00000000000..b5d0cc5d8c9 --- /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 00000000000..ef7ee5a1bd8 --- /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 570b7d9653e..8e4782d7384 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 00000000000..19f07b49ed3 --- /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 00000000000..0ab17c70fbb --- /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 00000000000..75d19547614 --- /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 00000000000..aa66a6b0ce9 --- /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 2a1123bfade..00000000000 --- 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; - } - -} From 80d7361ddf9f53b675dde69dd6a07545bdcbef0d Mon Sep 17 00:00:00 2001 From: Sebastian Laskawiec Date: Tue, 3 Nov 2015 10:39:29 +0100 Subject: [PATCH 2/3] ISPN-5903 README fixes --- spring/spring4/spring4-common/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring/spring4/spring4-common/README.md b/spring/spring4/spring4-common/README.md index 451105157a9..9060008dfa0 100644 --- a/spring/spring4/spring4-common/README.md +++ b/spring/spring4/spring4-common/README.md @@ -1,4 +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. +This module is not meant to be used individually. It only contains classes common to Remote and Embedded which are attached as sources to those modules. From 9bfc1d80b2385bbe83b03f8ac8d3dd2be47ddb87 Mon Sep 17 00:00:00 2001 From: Sebastian Laskawiec Date: Thu, 5 Nov 2015 11:37:19 +0100 Subject: [PATCH 3/3] ISPN-5903 Fixed Maven Reactor --- pom.xml | 1 + spring/spring4/pom.xml | 6 ------ 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index c03aff4fb8d..c34f6e9fc7f 100644 --- a/pom.xml +++ b/pom.xml @@ -56,6 +56,7 @@ rhq-plugin osgi spring/spring + spring/spring4 spring/spring4/spring4-common spring/spring4/spring4-embedded spring/spring4/spring4-remote diff --git a/spring/spring4/pom.xml b/spring/spring4/pom.xml index 53272701408..57418e91534 100644 --- a/spring/spring4/pom.xml +++ b/spring/spring4/pom.xml @@ -88,10 +88,4 @@ - - spring4-common - spring4-embedded - spring4-remote - -