|
1 | 1 | package org.openmrs.module.atomfeed.transaction.support;
|
2 | 2 |
|
3 |
| -import org.hibernate.SessionFactory; |
4 |
| -import org.hibernate.classic.Session; |
| 3 | +import java.lang.reflect.Field; |
| 4 | +import java.sql.Connection; |
| 5 | +import java.sql.SQLException; |
| 6 | +import java.util.HashMap; |
| 7 | +import java.util.Map; |
| 8 | + |
| 9 | +import org.hibernate.jdbc.ReturningWork; |
5 | 10 | import org.ict4h.atomfeed.jdbc.JdbcConnectionProvider;
|
6 | 11 | import org.ict4h.atomfeed.transaction.AFTransactionManager;
|
7 | 12 | import org.ict4h.atomfeed.transaction.AFTransactionWork;
|
8 | 13 | import org.openmrs.api.context.ServiceContext;
|
| 14 | +import org.openmrs.api.db.hibernate.DbSession; |
| 15 | +import org.openmrs.api.db.hibernate.DbSessionFactory; |
9 | 16 | import org.springframework.context.ApplicationContext;
|
10 | 17 | import org.springframework.transaction.PlatformTransactionManager;
|
11 | 18 | import org.springframework.transaction.TransactionDefinition;
|
12 | 19 | import org.springframework.transaction.TransactionStatus;
|
13 | 20 | import org.springframework.transaction.support.TransactionCallback;
|
14 | 21 | import org.springframework.transaction.support.TransactionTemplate;
|
15 | 22 |
|
16 |
| -import java.lang.reflect.Field; |
17 |
| -import java.sql.Connection; |
18 |
| -import java.sql.SQLException; |
19 |
| -import java.util.HashMap; |
20 |
| -import java.util.Map; |
21 |
| - |
22 | 23 | public class AtomFeedSpringTransactionManager implements AFTransactionManager, JdbcConnectionProvider {
|
23 | 24 | private PlatformTransactionManager transactionManager;
|
24 | 25 | private Map<AFTransactionWork.PropagationDefinition, Integer> propagationMap = new HashMap<AFTransactionWork.PropagationDefinition, Integer>();
|
@@ -54,17 +55,23 @@ private Integer getTxPropagation(AFTransactionWork.PropagationDefinition propaga
|
54 | 55 | @Override
|
55 | 56 | public Connection getConnection() throws SQLException {
|
56 | 57 | //TODO: ensure that only connection associated with current thread current transaction is given
|
57 |
| - return getSession().connection(); |
| 58 | + Connection connection = getSession().doReturningWork(new ReturningWork<Connection>() { |
| 59 | + @Override |
| 60 | + public Connection execute(Connection conn) throws SQLException { |
| 61 | + return conn; |
| 62 | + } |
| 63 | + }); |
| 64 | + return connection; |
58 | 65 | }
|
59 | 66 |
|
60 |
| - private Session getSession() { |
| 67 | + private DbSession getSession() { |
61 | 68 | ServiceContext serviceContext = ServiceContext.getInstance();
|
62 | 69 | Class klass = serviceContext.getClass();
|
63 | 70 | try {
|
64 | 71 | Field field = klass.getDeclaredField("applicationContext");
|
65 | 72 | field.setAccessible(true);
|
66 | 73 | ApplicationContext applicationContext = (ApplicationContext) field.get(serviceContext);
|
67 |
| - SessionFactory factory = (SessionFactory) applicationContext.getBean("sessionFactory"); |
| 74 | + DbSessionFactory factory = (DbSessionFactory) applicationContext.getBean("dbSessionFactory"); |
68 | 75 | return factory.getCurrentSession();
|
69 | 76 | } catch (Exception e) {
|
70 | 77 | throw new RuntimeException(e);
|
|
0 commit comments