Skip to content
This repository was archived by the owner on Dec 15, 2021. It is now read-only.

Commit a1584d7

Browse files
committed
Add repro project for SPR-9464
1 parent 4b7474b commit a1584d7

File tree

14 files changed

+348
-0
lines changed

14 files changed

+348
-0
lines changed

SPR-9464/pom.xml

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>org.springframework.issues</groupId>
7+
<artifactId>SPR-9464</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
<packaging>jar</packaging>
10+
11+
<name>SPR-9464</name>
12+
<build>
13+
<sourceDirectory>src</sourceDirectory>
14+
<resources>
15+
<resource>
16+
<directory>src</directory>
17+
</resource>
18+
</resources>
19+
<testSourceDirectory>src</testSourceDirectory>
20+
<testResources>
21+
<testResource>
22+
<directory>src</directory>
23+
</testResource>
24+
</testResources>
25+
<plugins>
26+
<plugin>
27+
<groupId>org.apache.maven.plugins</groupId>
28+
<artifactId>maven-compiler-plugin</artifactId>
29+
<version>2.3.2</version>
30+
<configuration>
31+
<source>1.6</source>
32+
<target>1.6</target>
33+
</configuration>
34+
</plugin>
35+
<plugin>
36+
<artifactId>maven-surefire-plugin</artifactId>
37+
<version>2.7.2</version>
38+
<configuration>
39+
<includes>
40+
<include>**/*Tests.java</include>
41+
</includes>
42+
<excludes>
43+
<exclude>**/*Abstract*.java</exclude>
44+
</excludes>
45+
</configuration>
46+
</plugin>
47+
</plugins>
48+
</build>
49+
50+
<repositories>
51+
<repository>
52+
<id>spring.milestone</id>
53+
<url>http://repo.springsource.org/libs-milestone</url>
54+
</repository>
55+
</repositories>
56+
<dependencies>
57+
<dependency>
58+
<groupId>org.springframework</groupId>
59+
<artifactId>spring-context</artifactId>
60+
<version>${spring.version}</version>
61+
<exclusions>
62+
<exclusion>
63+
<groupId>commons-logging</groupId>
64+
<artifactId>commons-logging</artifactId>
65+
</exclusion>
66+
</exclusions>
67+
</dependency>
68+
<dependency>
69+
<groupId>org.springframework</groupId>
70+
<artifactId>spring-jdbc</artifactId>
71+
<version>${spring.version}</version>
72+
</dependency>
73+
<dependency>
74+
<groupId>org.springframework</groupId>
75+
<artifactId>spring-tx</artifactId>
76+
<version>${spring.version}</version>
77+
</dependency>
78+
<dependency>
79+
<groupId>org.slf4j</groupId>
80+
<artifactId>slf4j-api</artifactId>
81+
<version>${slf4j.version}</version>
82+
</dependency>
83+
<dependency>
84+
<groupId>org.slf4j</groupId>
85+
<artifactId>jcl-over-slf4j</artifactId>
86+
<version>${slf4j.version}</version>
87+
</dependency>
88+
<dependency>
89+
<groupId>org.slf4j</groupId>
90+
<artifactId>slf4j-simple</artifactId>
91+
<version>${slf4j.version}</version>
92+
</dependency>
93+
<dependency>
94+
<groupId>cglib</groupId>
95+
<artifactId>cglib-nodep</artifactId>
96+
<version>2.2.2</version>
97+
<scope>runtime</scope>
98+
</dependency>
99+
<dependency>
100+
<groupId>org.mybatis</groupId>
101+
<artifactId>mybatis</artifactId>
102+
<version>3.1.1</version>
103+
</dependency>
104+
<dependency>
105+
<groupId>org.mybatis</groupId>
106+
<artifactId>mybatis-spring</artifactId>
107+
<version>1.1.1</version>
108+
</dependency>
109+
<dependency>
110+
<groupId>org.hsqldb</groupId>
111+
<artifactId>hsqldb</artifactId>
112+
<version>2.2.8</version>
113+
</dependency>
114+
<dependency>
115+
<groupId>junit</groupId>
116+
<artifactId>junit</artifactId>
117+
<version>4.10</version>
118+
<scope>test</scope>
119+
</dependency>
120+
</dependencies>
121+
122+
<properties>
123+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
124+
<spring.version>3.2.0.M1</spring.version>
125+
<slf4j.version>1.6.4</slf4j.version>
126+
</properties>
127+
</project>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.springframework.issues.config;
2+
3+
import javax.annotation.PreDestroy;
4+
import javax.sql.DataSource;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
10+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
11+
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
12+
13+
@Configuration
14+
public class RepositoryConfig {
15+
16+
private static final Logger logger = LoggerFactory.getLogger(RepositoryConfig.class);
17+
private EmbeddedDatabase db;
18+
19+
@Bean(name = "dataSource")
20+
DataSource dataSource() {
21+
logger.info("Setting up database");
22+
23+
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
24+
EmbeddedDatabase db = builder.setType(EmbeddedDatabaseType.HSQL).
25+
addScript("schema.sql").
26+
addScript("test-data.sql").build();
27+
28+
this.db = db;
29+
30+
return db;
31+
}
32+
33+
@PreDestroy
34+
void destroy() {
35+
logger.info("Shutting down database");
36+
37+
this.db.shutdown();
38+
}
39+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.springframework.issues.config.java_centric;
2+
3+
import org.springframework.context.annotation.ComponentScan;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.context.annotation.Import;
6+
import org.springframework.context.annotation.ImportResource;
7+
import org.springframework.issues.config.RepositoryConfig;
8+
9+
@Configuration
10+
@ImportResource("classpath:org/springframework/issues/config/java_centric/app-config.xml")
11+
@Import(RepositoryConfig.class)
12+
@ComponentScan(basePackages="org.springframework.issues.service")
13+
public class AppConfig {
14+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<beans
3+
xmlns="http://www.springframework.org/schema/beans"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xmlns:c="http://www.springframework.org/schema/c"
6+
xmlns:p="http://www.springframework.org/schema/p"
7+
xsi:schemaLocation="http://www.springframework.org/schema/beans
8+
http://www.springframework.org/schema/beans/spring-beans.xsd">
9+
10+
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
11+
p:dataSource-ref="dataSource" p:failFast="true"
12+
p:configLocation="classpath:org/springframework/issues/config/mybatis-config.xml" />
13+
14+
<bean class="org.mybatis.spring.SqlSessionTemplate"
15+
c:sqlSessionFactory-ref="sqlSessionFactory" />
16+
17+
<!-- ideally only the following declaration would be necessary, however because
18+
MapperScannerConfigurer is a BeanDefinitionRegistryPostProcessor and because
19+
this file is included via @ImportResource, it is "too late" for this component
20+
to be properly treated as a BDRPP.
21+
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
22+
p:basePackage="org.springframework.issues.dao" />
23+
-->
24+
25+
<!-- The workaround is to include an explicit MapperFactoryBean -->
26+
<bean id="testMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
27+
p:mapperInterface="org.springframework.issues.dao.TestDao"
28+
p:sqlSessionFactory-ref="sqlSessionFactory" />
29+
30+
</beans>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE configuration
3+
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4+
"http://mybatis.org/dtd/mybatis-3-config.dtd">
5+
<configuration>
6+
</configuration>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.springframework.issues.config.xml_centric;
2+
3+
import org.springframework.context.annotation.ComponentScan;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.context.annotation.Import;
6+
import org.springframework.issues.config.RepositoryConfig;
7+
8+
@Configuration
9+
@Import(RepositoryConfig.class)
10+
@ComponentScan(basePackages="org.springframework.issues.service")
11+
public class AppConfig {
12+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<beans xmlns="http://www.springframework.org/schema/beans"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:c="http://www.springframework.org/schema/c"
5+
xmlns:p="http://www.springframework.org/schema/p"
6+
xmlns:context="http://www.springframework.org/schema/context"
7+
xsi:schemaLocation="
8+
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
9+
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
10+
11+
<!-- enable annotation-config in order to process @Configuration beans -->
12+
<context:annotation-config/>
13+
14+
<!-- include the AppConfig @Configuration class -->
15+
<bean class="org.springframework.issues.config.xml_centric.AppConfig"/>
16+
17+
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
18+
p:dataSource-ref="dataSource" p:failFast="true"
19+
p:configLocation="classpath:org/springframework/issues/config/mybatis-config.xml" />
20+
21+
<bean class="org.mybatis.spring.SqlSessionTemplate"
22+
c:sqlSessionFactory-ref="sqlSessionFactory" />
23+
24+
<!-- in the XML-centric case, MapperScannerConfigurer works as expected, because
25+
this BeanDefinitionRegistryPostProcessor is added early enough to be processed
26+
at the right time.
27+
-->
28+
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
29+
p:basePackage="org.springframework.issues.dao" />
30+
31+
<!-- Therefore there is no need for this workaround
32+
<bean id="testMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"
33+
p:mapperInterface="org.springframework.issues.dao.TestDao"
34+
p:sqlSessionFactory-ref="sqlSessionFactory" />
35+
-->
36+
37+
</beans>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.springframework.issues.dao;
2+
3+
public interface TestDao {
4+
5+
int queryDummyValue();
6+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<!DOCTYPE mapper
3+
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4+
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5+
<mapper namespace="org.springframework.issues.dao.TestDao">
6+
<select id="queryDummyValue" resultType="_int">
7+
<![CDATA[
8+
SELECT dummy_value
9+
FROM test
10+
WHERE dummy_key = 'test_key'
11+
]]>
12+
</select>
13+
</mapper>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.springframework.issues.service;
2+
3+
public interface TestService {
4+
5+
int queryDummyValue();
6+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.springframework.issues.service;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.issues.dao.TestDao;
5+
import org.springframework.stereotype.Service;
6+
7+
@Service
8+
public class TestServiceImpl implements TestService {
9+
10+
@Autowired
11+
private TestDao testDao;
12+
13+
@Override
14+
public int queryDummyValue() {
15+
return testDao.queryDummyValue();
16+
17+
}
18+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.springframework.issues.spr9464;
2+
3+
import org.junit.Test;
4+
5+
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
6+
import org.springframework.context.support.GenericApplicationContext;
7+
import org.springframework.context.support.GenericXmlApplicationContext;
8+
import org.springframework.issues.service.TestService;
9+
10+
import static org.hamcrest.CoreMatchers.*;
11+
12+
import static org.junit.Assert.*;
13+
14+
public class ReproTests {
15+
16+
@Test
17+
public void javaCentric() {
18+
19+
GenericApplicationContext appContext = new AnnotationConfigApplicationContext(
20+
org.springframework.issues.config.java_centric.AppConfig.class);
21+
22+
TestService service = appContext.getBean(TestService.class);
23+
assertThat(service.queryDummyValue(), equalTo(12345));
24+
appContext.close();
25+
}
26+
27+
@Test
28+
public void xmlCentric() {
29+
30+
GenericApplicationContext appContext = new GenericXmlApplicationContext(
31+
"classpath:org/springframework/issues/config/xml_centric/app-config.xml");
32+
33+
TestService service = appContext.getBean(TestService.class);
34+
assertThat(service.queryDummyValue(), equalTo(12345));
35+
appContext.close();
36+
}
37+
}

SPR-9464/src/schema.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
DROP TABLE test IF EXISTS;
2+
CREATE TABLE test (dummy_key VARCHAR(255), dummy_value INTEGER);

SPR-9464/src/test-data.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
INSERT INTO test (dummy_key, dummy_value) VALUES ('test_key', 12345);

0 commit comments

Comments
 (0)