summaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/jz14/db/NativeConnectionSupplier.java
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2014-09-10 00:12:30 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2014-09-12 09:08:00 +0200
commitd6989f1e54104d09b8af6d22cf46ea4f6fc5f4dc (patch)
tree2e9cd83b8a9425ea184b72c12721d7e08ea87d52 /src/main/java/io/trygvis/jz14/db/NativeConnectionSupplier.java
downloadjavazone-2014-master.tar.gz
javazone-2014-master.tar.bz2
javazone-2014-master.tar.xz
javazone-2014-master.zip
o Initial import of postgresql LISTEN/NOTIFY code.HEADmaster
Diffstat (limited to 'src/main/java/io/trygvis/jz14/db/NativeConnectionSupplier.java')
-rw-r--r--src/main/java/io/trygvis/jz14/db/NativeConnectionSupplier.java44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/jz14/db/NativeConnectionSupplier.java b/src/main/java/io/trygvis/jz14/db/NativeConnectionSupplier.java
new file mode 100644
index 0000000..d9db909
--- /dev/null
+++ b/src/main/java/io/trygvis/jz14/db/NativeConnectionSupplier.java
@@ -0,0 +1,44 @@
+package io.trygvis.jz14.db;
+
+import io.trygvis.jz14.db.DbListener.PostgresConnection;
+import org.postgresql.PGConnection;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.function.Supplier;
+
+public class NativeConnectionSupplier implements Supplier<PostgresConnection<PGConnection>> {
+ private final DataSource dataSource;
+
+ public NativeConnectionSupplier(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ @Override
+ public PostgresConnection<PGConnection> get() {
+ try {
+ Connection sqlConnection = dataSource.getConnection();
+ PGConnection pgConnection = unwrap(sqlConnection);
+ return new PostgresConnection<>(sqlConnection, pgConnection);
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static PGConnection unwrap(Connection c) {
+ if (c instanceof PGConnection) {
+ return (PGConnection) c;
+ }
+
+ /* If you're using Spring, you need to add these two to properly unwrap the underlying PGConnection.
+ if (c instanceof ConnectionHandle) {
+ return unwrap(((ConnectionHandle) c).getInternalConnection());
+ }
+ if (c instanceof ConnectionProxy) {
+ return unwrap(DataSourceUtils.getTargetConnection(c));
+ }
+ */
+ throw new RuntimeException("Could not unwrap connection to a PGConnection: " + c.getClass());
+ }
+}