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

SPR-9215 #20

Merged
merged 2 commits into from
Sep 28, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions SPR-9215/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.issues</groupId>
<artifactId>SPR-9215</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
<spring.version>3.1.0.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.12</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>7.0.26</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.9.Final</version>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.8</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>${spring.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-maven-snapshot</id>
<name>Springframework Maven Snapshot Repository</name>
<url>http://repo.springsource.org/snapshot</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<configuration>
<forkMode>once</forkMode>
<argLine>
-javaagent:${settings.localRepository}/org/springframework/spring-instrument/${spring.version}/spring-instrument-${spring.version}.jar
</argLine>
<includes>
<include>**/*Tests.java</include>
</includes>
<excludes>
<exclude>**/*Abstract*.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.springframework.issues.dao;

import org.springframework.issues.datamodel.TestData;

public interface TestDAO {
public TestData saveTestData(TestData entity);

public TestData loadTestDataById(Long id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.springframework.issues.dao.impl;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.issues.dao.TestDAO;
import org.springframework.issues.datamodel.TestData;
import org.springframework.stereotype.Repository;

@Repository
public class TestDAOImpl implements TestDAO {
@PersistenceContext
private EntityManager em;

@Override
public TestData saveTestData(TestData entity) {
TestData ret = em.merge(entity);
return ret;
}

@Override
public TestData loadTestDataById(Long id) {
return em.find(TestData.class, id);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package org.springframework.issues.datamodel;

import java.io.Serializable;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.TableGenerator;

@Entity
@Table(name = "TBL_TEST")
public class TestData implements Serializable {
private static final long serialVersionUID = 6731190069981115642L;

@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "test-gen")
@TableGenerator(name = "test-gen", pkColumnName = "TEST", allocationSize = 150, table = "TBL_IDS")
@Column(name = "ID")
private Long id;

@Basic
@Column(name = "NAME", length = 255)
private String name;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.springframework.issues.service;

import org.springframework.issues.datamodel.TestData;

public interface TestService {
public TestData saveTestData(TestData entity);

public TestData loadTestDataById(Long id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.springframework.issues.service.impl;

import javax.annotation.Resource;

import org.springframework.issues.dao.TestDAO;
import org.springframework.issues.datamodel.TestData;
import org.springframework.issues.service.TestService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class TestServiceImpl implements TestService {
@Resource
private TestDAO dao;

@Override
@Transactional
public TestData saveTestData(TestData entity) {
return dao.saveTestData(entity);
}

@Override
@Transactional(readOnly = true)
public TestData loadTestDataById(Long id) {
return dao.loadTestDataById(id);
}
}
Empty file.
7 changes: 7 additions & 0 deletions SPR-9215/src/main/resources/META-INF/aop.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<aspectj>
<weaver options="-debug -verbose">
<include within="org.springframework.issues..*" />
<exclude within="org.springframework.issues..*CGLIB*" />
<exclude within="org.springframework.issues..datamodel.*" />
</weaver>
</aspectj>
9 changes: 9 additions & 0 deletions SPR-9215/src/main/resources/META-INF/persistence.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
</persistence-unit>
</persistence>
115 changes: 115 additions & 0 deletions SPR-9215/src/test/java/org/springframework/issues/AppConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package org.springframework.issues;

import java.util.HashMap;
import java.util.Map;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.hibernate.cache.HashtableCacheProvider;
import org.hibernate.dialect.HSQLDialect;
import org.springframework.context.annotation.AdviceMode;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableLoadTimeWeaving;
import org.springframework.context.annotation.EnableLoadTimeWeaving.AspectJWeaving;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.orm.jpa.JpaDialect;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager;
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaDialect;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.aspectj.AnnotationTransactionAspect;

@Configuration
@ComponentScan("org.springframework.issues")
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ, order = 0)
@EnableLoadTimeWeaving(aspectjWeaving = AspectJWeaving.ENABLED)
@PropertySource("/config.properties")
public class AppConfig {
@Resource
private Environment env;

@Bean
public Map<String, Object> jpaProperties() {
Map<String, Object> props = new HashMap<String, Object>();
props.put("hibernate.dialect", HSQLDialect.class.getName());
props.put("hibernate.cache.provider_class",
HashtableCacheProvider.class.getName());
props.put("hibernate.show_sql", true);
props.put("hibernate.format_sql", true);
return props;
}

@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setShowSql(true);
hibernateJpaVendorAdapter.setGenerateDdl(true);
hibernateJpaVendorAdapter.setDatabase(Database.HSQL);
return hibernateJpaVendorAdapter;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean lcemfb = new LocalContainerEntityManagerFactoryBean();
lcemfb.setJpaVendorAdapter(jpaVendorAdapter());
lcemfb.setJpaDialect(jpaDialect());
lcemfb.setPersistenceUnitName("default");
lcemfb.setPersistenceUnitManager(persistenceUnitManager());
lcemfb.setJpaPropertyMap(jpaProperties());
lcemfb.setDataSource(dataSource());
return lcemfb;
}

@Bean
public PersistenceUnitManager persistenceUnitManager() {
DefaultPersistenceUnitManager dpum = new DefaultPersistenceUnitManager();
dpum.setDefaultDataSource(dataSource());
return dpum;
}

@Bean
public JpaDialect jpaDialect() {
return new HibernateJpaDialect();
}

@Bean
public AnnotationTransactionAspect annotationTransactionAspect() {
AnnotationTransactionAspect ata = AnnotationTransactionAspect
.aspectOf();
ata.setTransactionManager(txManager());
return ata;
}

@Bean(destroyMethod = "close")
public DataSource dataSource() {
org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
ds.setDriverClassName(env.getProperty("jdbc.driverClass"));
ds.setUrl(env.getProperty("jdbc.url"));
ds.setUsername(env.getProperty("jdbc.user"));
ds.setPassword(env.getProperty("jdbc.password"));
ds.setInitialSize(1);
ds.setMinIdle(1);
ds.setMaxIdle(1);
ds.setMaxActive(2);
ds.setMaxWait(5000);
return ds;
}

@Bean
public PlatformTransactionManager txManager() {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory().getObject());
txManager.setDataSource(dataSource());
return txManager;
}
}
Loading