1 package fr.ifremer.quadrige3.core.dao.technical.hibernate;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import org.hibernate.HibernateException;
28 import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
29 import org.hibernate.exception.spi.Configurable;
30 import org.hibernate.service.UnknownUnwrapTypeException;
31 import org.hibernate.service.spi.Stoppable;
32
33 import javax.sql.DataSource;
34 import java.sql.Connection;
35 import java.sql.SQLException;
36 import java.util.Properties;
37
38
39
40
41 public class HibernateConnectionProvider implements ConnectionProvider,Configurable,Stoppable {
42
43 private static final long serialVersionUID = 6463355546534159477L;
44
45 private static DataSource dataSource = null;
46
47
48 @Override
49 public void configure(Properties props) throws HibernateException {
50 if (dataSource == null) {
51 throw new HibernateException("DataSource must be set before using ConnectionProvider.");
52 }
53 }
54
55
56 @Override
57 public Connection getConnection() throws SQLException {
58 return dataSource.getConnection();
59 }
60
61
62 @Override
63 public void closeConnection(Connection conn) throws SQLException {
64 if (conn != null && !conn.isClosed()) {
65 conn.close();
66 }
67 }
68
69
70 @Override
71 public void stop(){
72
73 dataSource = null;
74 }
75
76
77 @Override
78 public boolean supportsAggressiveRelease() {
79
80 return false;
81 }
82
83
84
85
86
87
88 public static DataSource getDataSource() {
89 return dataSource;
90 }
91
92
93
94
95
96
97 public static void setDataSource(DataSource dataSource) {
98 HibernateConnectionProvider.dataSource = dataSource;
99 }
100
101
102 @SuppressWarnings("rawtypes")
103 @Override
104 public boolean isUnwrappableAs(Class unwrapType) {
105 return ConnectionProvider.class.equals(unwrapType) ||
106 HibernateConnectionProvider.class.isAssignableFrom(unwrapType);
107 }
108
109
110 @SuppressWarnings("unchecked")
111 @Override
112 public <T> T unwrap(Class<T> unwrapType) {
113 if (ConnectionProvider.class.equals(unwrapType) ||
114 HibernateConnectionProvider.class.isAssignableFrom(unwrapType)) {
115 return (T) this;
116 } else {
117 throw new UnknownUnwrapTypeException(unwrapType);
118 }
119 }
120
121 }