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

Commit 55ed933

Browse files
committed
Merge pull request #20 from Noodle05/master
SPR-9215
2 parents 47e29c5 + f1ea442 commit 55ed933

File tree

15 files changed

+508
-0
lines changed

15 files changed

+508
-0
lines changed

SPR-9215/pom.xml

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<groupId>org.springframework.issues</groupId>
5+
<artifactId>SPR-9215</artifactId>
6+
<version>1.0-SNAPSHOT</version>
7+
<packaging>jar</packaging>
8+
<properties>
9+
<maven.compiler.source>1.6</maven.compiler.source>
10+
<maven.compiler.target>1.6</maven.compiler.target>
11+
<project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
12+
<spring.version>3.1.0.RELEASE</spring.version>
13+
</properties>
14+
<dependencies>
15+
<dependency>
16+
<groupId>org.aspectj</groupId>
17+
<artifactId>aspectjweaver</artifactId>
18+
<version>1.6.12</version>
19+
<scope>runtime</scope>
20+
</dependency>
21+
<dependency>
22+
<groupId>org.apache.tomcat</groupId>
23+
<artifactId>tomcat-jdbc</artifactId>
24+
<version>7.0.26</version>
25+
<scope>runtime</scope>
26+
</dependency>
27+
<dependency>
28+
<groupId>org.hibernate</groupId>
29+
<artifactId>hibernate-entitymanager</artifactId>
30+
<version>3.6.9.Final</version>
31+
</dependency>
32+
<dependency>
33+
<groupId>org.hsqldb</groupId>
34+
<artifactId>hsqldb</artifactId>
35+
<version>2.2.8</version>
36+
<scope>runtime</scope>
37+
</dependency>
38+
<dependency>
39+
<groupId>org.springframework</groupId>
40+
<artifactId>spring-aspects</artifactId>
41+
<version>${spring.version}</version>
42+
<scope>runtime</scope>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.springframework</groupId>
46+
<artifactId>spring-context</artifactId>
47+
<version>${spring.version}</version>
48+
</dependency>
49+
<dependency>
50+
<groupId>org.springframework</groupId>
51+
<artifactId>spring-instrument</artifactId>
52+
<version>${spring.version}</version>
53+
<scope>runtime</scope>
54+
</dependency>
55+
<dependency>
56+
<groupId>org.springframework</groupId>
57+
<artifactId>spring-orm</artifactId>
58+
<version>${spring.version}</version>
59+
</dependency>
60+
<dependency>
61+
<groupId>org.springframework</groupId>
62+
<artifactId>spring-tx</artifactId>
63+
<version>${spring.version}</version>
64+
</dependency>
65+
<dependency>
66+
<groupId>log4j</groupId>
67+
<artifactId>log4j</artifactId>
68+
<version>1.2.16</version>
69+
</dependency>
70+
<dependency>
71+
<groupId>junit</groupId>
72+
<artifactId>junit</artifactId>
73+
<version>4.10</version>
74+
<scope>test</scope>
75+
</dependency>
76+
</dependencies>
77+
<repositories>
78+
<repository>
79+
<id>spring-maven-snapshot</id>
80+
<name>Springframework Maven Snapshot Repository</name>
81+
<url>http://repo.springsource.org/snapshot</url>
82+
</repository>
83+
</repositories>
84+
<build>
85+
<plugins>
86+
<plugin>
87+
<artifactId>maven-compiler-plugin</artifactId>
88+
<version>2.3.2</version>
89+
<configuration>
90+
<source>1.6</source>
91+
<target>1.6</target>
92+
</configuration>
93+
</plugin>
94+
<plugin>
95+
<artifactId>maven-surefire-plugin</artifactId>
96+
<version>2.7.2</version>
97+
<configuration>
98+
<forkMode>once</forkMode>
99+
<argLine>
100+
-javaagent:${settings.localRepository}/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar
101+
</argLine>
102+
<includes>
103+
<include>**/*Tests.java</include>
104+
</includes>
105+
<excludes>
106+
<exclude>**/*Abstract*.java</exclude>
107+
</excludes>
108+
</configuration>
109+
</plugin>
110+
</plugins>
111+
</build>
112+
</project>
113+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.springframework.issues.dao;
2+
3+
import org.springframework.issues.datamodel.TestData;
4+
5+
public interface TestDAO {
6+
public TestData saveTestData(TestData entity);
7+
8+
public TestData loadTestDataById(Long id);
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.springframework.issues.dao.impl;
2+
3+
import javax.persistence.EntityManager;
4+
import javax.persistence.PersistenceContext;
5+
6+
import org.springframework.issues.dao.TestDAO;
7+
import org.springframework.issues.datamodel.TestData;
8+
import org.springframework.stereotype.Repository;
9+
10+
@Repository
11+
public class TestDAOImpl implements TestDAO {
12+
@PersistenceContext
13+
private EntityManager em;
14+
15+
@Override
16+
public TestData saveTestData(TestData entity) {
17+
TestData ret = em.merge(entity);
18+
return ret;
19+
}
20+
21+
@Override
22+
public TestData loadTestDataById(Long id) {
23+
return em.find(TestData.class, id);
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.springframework.issues.datamodel;
2+
3+
import java.io.Serializable;
4+
5+
import javax.persistence.Basic;
6+
import javax.persistence.Column;
7+
import javax.persistence.Entity;
8+
import javax.persistence.GeneratedValue;
9+
import javax.persistence.GenerationType;
10+
import javax.persistence.Id;
11+
import javax.persistence.Table;
12+
import javax.persistence.TableGenerator;
13+
14+
@Entity
15+
@Table(name = "TBL_TEST")
16+
public class TestData implements Serializable {
17+
private static final long serialVersionUID = 6731190069981115642L;
18+
19+
@Id
20+
@GeneratedValue(strategy = GenerationType.TABLE, generator = "test-gen")
21+
@TableGenerator(name = "test-gen", pkColumnName = "TEST", allocationSize = 150, table = "TBL_IDS")
22+
@Column(name = "ID")
23+
private Long id;
24+
25+
@Basic
26+
@Column(name = "NAME", length = 255)
27+
private String name;
28+
29+
public Long getId() {
30+
return id;
31+
}
32+
33+
public void setId(Long id) {
34+
this.id = id;
35+
}
36+
37+
public String getName() {
38+
return name;
39+
}
40+
41+
public void setName(String name) {
42+
this.name = name;
43+
}
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.springframework.issues.service;
2+
3+
import org.springframework.issues.datamodel.TestData;
4+
5+
public interface TestService {
6+
public TestData saveTestData(TestData entity);
7+
8+
public TestData loadTestDataById(Long id);
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.springframework.issues.service.impl;
2+
3+
import javax.annotation.Resource;
4+
5+
import org.springframework.issues.dao.TestDAO;
6+
import org.springframework.issues.datamodel.TestData;
7+
import org.springframework.issues.service.TestService;
8+
import org.springframework.stereotype.Service;
9+
import org.springframework.transaction.annotation.Transactional;
10+
11+
@Service
12+
public class TestServiceImpl implements TestService {
13+
@Resource
14+
private TestDAO dao;
15+
16+
@Override
17+
@Transactional
18+
public TestData saveTestData(TestData entity) {
19+
return dao.saveTestData(entity);
20+
}
21+
22+
@Override
23+
@Transactional(readOnly = true)
24+
public TestData loadTestDataById(Long id) {
25+
return dao.loadTestDataById(id);
26+
}
27+
}

SPR-9215/src/main/resources/.gitignore

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<aspectj>
2+
<weaver options="-debug -verbose">
3+
<include within="org.springframework.issues..*" />
4+
<exclude within="org.springframework.issues..*CGLIB*" />
5+
<exclude within="org.springframework.issues..datamodel.*" />
6+
</weaver>
7+
</aspectj>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<persistence version="1.0"
3+
xmlns="http://java.sun.com/xml/ns/persistence"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
6+
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
7+
<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
8+
</persistence-unit>
9+
</persistence>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package org.springframework.issues;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
import javax.annotation.Resource;
7+
import javax.sql.DataSource;
8+
9+
import org.hibernate.cache.HashtableCacheProvider;
10+
import org.hibernate.dialect.HSQLDialect;
11+
import org.springframework.context.annotation.AdviceMode;
12+
import org.springframework.context.annotation.Bean;
13+
import org.springframework.context.annotation.ComponentScan;
14+
import org.springframework.context.annotation.Configuration;
15+
import org.springframework.context.annotation.EnableLoadTimeWeaving;
16+
import org.springframework.context.annotation.EnableLoadTimeWeaving.AspectJWeaving;
17+
import org.springframework.context.annotation.PropertySource;
18+
import org.springframework.core.env.Environment;
19+
import org.springframework.orm.jpa.JpaDialect;
20+
import org.springframework.orm.jpa.JpaTransactionManager;
21+
import org.springframework.orm.jpa.JpaVendorAdapter;
22+
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
23+
import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager;
24+
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager;
25+
import org.springframework.orm.jpa.vendor.Database;
26+
import org.springframework.orm.jpa.vendor.HibernateJpaDialect;
27+
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
28+
import org.springframework.transaction.PlatformTransactionManager;
29+
import org.springframework.transaction.annotation.EnableTransactionManagement;
30+
import org.springframework.transaction.aspectj.AnnotationTransactionAspect;
31+
32+
@Configuration
33+
@ComponentScan("org.springframework.issues")
34+
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, order = 0)
35+
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.ENABLED)
36+
@PropertySource("/config.properties")
37+
public class AppConfig {
38+
@Resource
39+
private Environment env;
40+
41+
@Bean
42+
public Map<String, Object> jpaProperties() {
43+
Map<String, Object> props = new HashMap<String, Object>();
44+
props.put("hibernate.dialect", HSQLDialect.class.getName());
45+
props.put("hibernate.cache.provider_class",
46+
HashtableCacheProvider.class.getName());
47+
props.put("hibernate.show_sql", true);
48+
props.put("hibernate.format_sql", true);
49+
return props;
50+
}
51+
52+
@Bean
53+
public JpaVendorAdapter jpaVendorAdapter() {
54+
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
55+
hibernateJpaVendorAdapter.setShowSql(true);
56+
hibernateJpaVendorAdapter.setGenerateDdl(true);
57+
hibernateJpaVendorAdapter.setDatabase(Database.HSQL);
58+
return hibernateJpaVendorAdapter;
59+
}
60+
61+
@Bean
62+
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
63+
LocalContainerEntityManagerFactoryBean lcemfb = new LocalContainerEntityManagerFactoryBean();
64+
lcemfb.setJpaVendorAdapter(jpaVendorAdapter());
65+
lcemfb.setJpaDialect(jpaDialect());
66+
lcemfb.setPersistenceUnitName("default");
67+
lcemfb.setPersistenceUnitManager(persistenceUnitManager());
68+
lcemfb.setJpaPropertyMap(jpaProperties());
69+
lcemfb.setDataSource(dataSource());
70+
return lcemfb;
71+
}
72+
73+
@Bean
74+
public PersistenceUnitManager persistenceUnitManager() {
75+
DefaultPersistenceUnitManager dpum = new DefaultPersistenceUnitManager();
76+
dpum.setDefaultDataSource(dataSource());
77+
return dpum;
78+
}
79+
80+
@Bean
81+
public JpaDialect jpaDialect() {
82+
return new HibernateJpaDialect();
83+
}
84+
85+
@Bean
86+
public AnnotationTransactionAspect annotationTransactionAspect() {
87+
AnnotationTransactionAspect ata = AnnotationTransactionAspect
88+
.aspectOf();
89+
ata.setTransactionManager(txManager());
90+
return ata;
91+
}
92+
93+
@Bean(destroyMethod = "close")
94+
public DataSource dataSource() {
95+
org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
96+
ds.setDriverClassName(env.getProperty("jdbc.driverClass"));
97+
ds.setUrl(env.getProperty("jdbc.url"));
98+
ds.setUsername(env.getProperty("jdbc.user"));
99+
ds.setPassword(env.getProperty("jdbc.password"));
100+
ds.setInitialSize(1);
101+
ds.setMinIdle(1);
102+
ds.setMaxIdle(1);
103+
ds.setMaxActive(2);
104+
ds.setMaxWait(5000);
105+
return ds;
106+
}
107+
108+
@Bean
109+
public PlatformTransactionManager txManager() {
110+
JpaTransactionManager txManager = new JpaTransactionManager();
111+
txManager.setEntityManagerFactory(entityManagerFactory().getObject());
112+
txManager.setDataSource(dataSource());
113+
return txManager;
114+
}
115+
}

0 commit comments

Comments
 (0)