1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jadira.usertype.spi.jta;
17
18 import javax.persistence.EntityManagerFactory;
19 import javax.persistence.PersistenceException;
20
21 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
22 import org.springframework.transaction.jta.JtaTransactionManager;
23
24
25
26
27
28
29
30
31
32 public class HibernateEntityManagerFactoryBean extends LocalContainerEntityManagerFactoryBean {
33
34 private JtaTransactionManager transactionManager;
35
36 private static final ThreadLocal<JtaTransactionManager> configurationTransactionManagerHolder = new ThreadLocal<JtaTransactionManager>();
37
38 static JtaTransactionManager getConfigurationTransactionManager() {
39 return configurationTransactionManagerHolder.get();
40 }
41
42 @Override
43 protected EntityManagerFactory createNativeEntityManagerFactory() throws PersistenceException {
44
45 if (this.transactionManager != null) {
46 configurationTransactionManagerHolder.set(this.transactionManager);
47 }
48
49 try {
50 return super.createNativeEntityManagerFactory();
51 } finally {
52
53 if (this.transactionManager != null) {
54 configurationTransactionManagerHolder.set(null);
55 }
56 }
57 }
58
59
60
61
62
63 public void setTransactionManager(JtaTransactionManager transactionManager) {
64 this.transactionManager = transactionManager;
65 }
66 }