Skip to content

Commit

Permalink
Add org.springframework.versions package are to the set of auto confi…
Browse files Browse the repository at this point in the history
…guration packages

- when jpa versions boot starer is added to the classpath
- so that the LockingAndVersioningRepository fragment is found with the need for developer configuration

Fixes #82
  • Loading branch information
Paul Warren committed Jan 25, 2020
1 parent 2cb3751 commit 0f388f0
Show file tree
Hide file tree
Showing 9 changed files with 111 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import internal.org.springframework.content.jpa.config.JpaStoreConfiguration;
import internal.org.springframework.content.jpa.config.JpaStoreFactoryBean;
import internal.org.springframework.content.jpa.config.JpaStoresRegistrar;
import internal.org.springframework.versions.jpa.boot.autoconfigure.JpaVersionsAutoConfiguration;

import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
Expand All @@ -18,7 +19,7 @@
import org.springframework.core.io.ResourceLoader;

@Configuration
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
@AutoConfigureAfter({DataSourceAutoConfiguration.class, JpaVersionsAutoConfiguration.class})
@ConditionalOnClass({ DataSource.class, JpaStoresRegistrar.class })
@EnableConfigurationProperties(ContentJpaProperties.class)
public class JpaContentAutoConfiguration {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

import java.util.Set;

import internal.org.springframework.content.commons.utils.StoreUtils;
import internal.org.springframework.content.jpa.config.JpaStoresRegistrar;

import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
Expand All @@ -13,14 +10,16 @@
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.StandardAnnotationMetadata;

import internal.org.springframework.content.commons.utils.StoreUtils;
import internal.org.springframework.content.jpa.config.JpaStoresRegistrar;

public class JpaContentAutoConfigureRegistrar extends JpaStoresRegistrar {

@Override
protected void registerContentStoreBeanDefinitions(
AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

AnnotationMetadata metadata = new StandardAnnotationMetadata(
EnableJpaContentAutoConfiguration.class);
AnnotationMetadata metadata = new StandardAnnotationMetadata(EnableJpaContentAutoConfiguration.class);
AnnotationAttributes attributes = new AnnotationAttributes(
metadata.getAnnotationAttributes(this.getAnnotation().getName()));

Expand All @@ -32,8 +31,7 @@ protected void registerContentStoreBeanDefinitions(
}

protected String[] getBasePackages() {
return AutoConfigurationPackages.get(this.getBeanFactory())
.toArray(new String[] {});
return AutoConfigurationPackages.get(this.getBeanFactory()).toArray(new String[] {});
}

@EnableJpaStores
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,8 @@ public JpaVersionsDatabaseInitializer jpaVersionsDatabaseInitializer(DataSource
ResourceLoader resourceLoader) {
return new JpaVersionsDatabaseInitializer(dataSource, resourceLoader, this.properties);
}

@Configuration
@Import(JpaVersionsAutoConfigureRegistrar.class)
public static class JpaVersionAutoConfig {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package internal.org.springframework.versions.jpa.boot.autoconfigure;

import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

public class JpaVersionsAutoConfigureRegistrar implements ImportBeanDefinitionRegistrar {

@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

AutoConfigurationPackages.register(registry, "org.springframework.versions");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,18 @@
import com.github.paulcwarren.ginkgo4j.Ginkgo4jConfiguration;
import com.github.paulcwarren.ginkgo4j.Ginkgo4jRunner;
import internal.org.springframework.content.fs.boot.autoconfigure.FilesystemContentAutoConfiguration;
import internal.org.springframework.content.jpa.boot.autoconfigure.JpaContentAutoConfiguration;
import internal.org.springframework.content.mongo.boot.autoconfigure.MongoContentAutoConfiguration;
import internal.org.springframework.content.renditions.boot.autoconfigure.RenditionsContentAutoConfiguration;
import internal.org.springframework.content.s3.boot.autoconfigure.S3ContentAutoConfiguration;
import internal.org.springframework.versions.jpa.boot.autoconfigure.JpaVersionsAutoConfiguration;

import org.junit.runner.RunWith;

import org.springframework.boot.autoconfigure.AutoConfigurationPackage;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.content.fs.config.EnableFilesystemStores;
import org.springframework.content.fs.io.FileSystemResourceLoader;
import org.springframework.content.fs.store.FilesystemContentStore;
Expand Down Expand Up @@ -101,15 +109,23 @@ public class ContentFilesystemAutoConfigurationTest {
}

@Configuration
@AutoConfigurationPackage
@EnableAutoConfiguration
@EnableAutoConfiguration(exclude= { MongoAutoConfiguration.class,
JpaContentAutoConfiguration.class,
JpaVersionsAutoConfiguration.class,
MongoContentAutoConfiguration.class,
RenditionsContentAutoConfiguration.class,
S3ContentAutoConfiguration.class})
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public static class TestConfig {
}

@Configuration
@AutoConfigurationPackage
@EnableAutoConfiguration
@EnableAutoConfiguration(exclude= { MongoAutoConfiguration.class,
JpaContentAutoConfiguration.class,
JpaVersionsAutoConfiguration.class,
MongoContentAutoConfiguration.class,
RenditionsContentAutoConfiguration.class,
S3ContentAutoConfiguration.class})
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public static class ConfigWithLoaderBean {

Expand All @@ -121,8 +137,12 @@ FileSystemResourceLoader fileSystemResourceLoader() {
}

@Configuration
@AutoConfigurationPackage
@EnableAutoConfiguration
@EnableAutoConfiguration(exclude= { MongoAutoConfiguration.class,
JpaContentAutoConfiguration.class,
JpaVersionsAutoConfiguration.class,
MongoContentAutoConfiguration.class,
RenditionsContentAutoConfiguration.class,
S3ContentAutoConfiguration.class})
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
@EnableFilesystemStores
public static class ConfigWithExplicitEnableFilesystemStores {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package org.springframework.support;

import org.springframework.content.commons.annotations.Content;
import org.springframework.content.commons.annotations.ContentId;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.springframework.content.commons.annotations.ContentId;

@Entity
//@Content
public class TestEntity {
@Id @GeneratedValue(strategy = GenerationType.AUTO) private long id;
@ContentId private String contentId;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
package org.springframework.versions.jpa.boot;

import com.github.paulcwarren.ginkgo4j.Ginkgo4jConfiguration;
import com.github.paulcwarren.ginkgo4j.Ginkgo4jSpringRunner;
import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.BeforeEach;
import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.Context;
import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.Describe;
import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.FIt;
import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.It;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.nullValue;

import org.hamcrest.MatcherAssert;
import org.junit.Test;
import org.junit.runner.RunWith;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
Expand All @@ -17,34 +23,46 @@
import org.springframework.support.TestEntityVersioned;
import org.springframework.versions.LockingAndVersioningRepository;

import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.BeforeEach;
import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.Context;
import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.Describe;
import static com.github.paulcwarren.ginkgo4j.Ginkgo4jDSL.It;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.nullValue;
import com.github.paulcwarren.ginkgo4j.Ginkgo4jConfiguration;
import com.github.paulcwarren.ginkgo4j.Ginkgo4jRunner;

import internal.org.springframework.content.fs.boot.autoconfigure.FilesystemContentAutoConfiguration;
import internal.org.springframework.content.mongo.boot.autoconfigure.MongoContentAutoConfiguration;
import internal.org.springframework.content.renditions.boot.autoconfigure.RenditionsContentAutoConfiguration;
import internal.org.springframework.content.s3.boot.autoconfigure.S3ContentAutoConfiguration;

@RunWith(Ginkgo4jSpringRunner.class)
@RunWith(Ginkgo4jRunner.class)
@Ginkgo4jConfiguration(threads = 1)
public class JpaVersionsAutoConfigurationTest {

private AnnotationConfigApplicationContext context;

{
Describe("JpaVersionsAutoConfiguration", () -> {
Context("given an application context with a LockingAndVersioningRepository", () -> {
Context("given an application context that relies on auto configuration", () -> {
BeforeEach(() -> {
context = new AnnotationConfigApplicationContext();
context.register(StarterTestConfig.class);
context.register(StarterConfig.class);
context.refresh();
});

It("should include the repository bean", () -> {
MatcherAssert.assertThat(context, is(not(nullValue())));
MatcherAssert.assertThat(context.getBean(TestEntityRepository.class), is(not(nullValue())));
});
});
Context("given an application context with a EnableJpaRepositories annotation", () -> {
BeforeEach(() -> {
context = new AnnotationConfigApplicationContext();
context.register(StarterWithAnnotationConfig.class);
context.refresh();
});

It("should include the repository bean", () -> {
MatcherAssert.assertThat(context, is(not(nullValue())));
MatcherAssert.assertThat(context.getBean(NestedTestEntityRepository.class), is(not(nullValue())));
});
});
});
}

Expand All @@ -54,13 +72,23 @@ public void test() {

@Configuration
@PropertySource("classpath:default.properties")
@EnableAutoConfiguration(exclude= MongoAutoConfiguration.class)
@EnableJpaRepositories( considerNestedRepositories = true,
basePackages = {"org.springframework.versions.jpa.boot",
"org.springframework.versions"})
@EnableAutoConfiguration(exclude= { MongoAutoConfiguration.class,
FilesystemContentAutoConfiguration.class,
MongoContentAutoConfiguration.class,
RenditionsContentAutoConfiguration.class,
S3ContentAutoConfiguration.class})
@EntityScan(basePackages="org.springframework.support")
public static class StarterTestConfig {
public static class BaseConfig {}

@Configuration
public static class StarterConfig extends BaseConfig {
}

@Configuration
@EnableJpaRepositories(basePackages="org.springframework.versions",
considerNestedRepositories=true)
public static class StarterWithAnnotationConfig extends BaseConfig {
}

public interface TestEntityRepository extends CrudRepository<TestEntityVersioned, Long>, LockingAndVersioningRepository<TestEntityVersioned, Long> {}
public interface NestedTestEntityRepository extends CrudRepository<TestEntityVersioned, Long>, LockingAndVersioningRepository<TestEntityVersioned, Long> {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.springframework.versions.jpa.boot;

import org.springframework.data.repository.CrudRepository;
import org.springframework.support.TestEntityVersioned;
import org.springframework.versions.LockingAndVersioningRepository;

public interface TestEntityRepository extends CrudRepository<TestEntityVersioned, Long>, LockingAndVersioningRepository<TestEntityVersioned, Long> {}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
spring.jmx.enabled= false
spring.jmx.enabled=false

0 comments on commit 0f388f0

Please sign in to comment.