Skip to content

Commit

Permalink
Merge pull request #165 from cleydyr/issue-125
Browse files Browse the repository at this point in the history
[125] primeiro, o método documentado, funcional
  • Loading branch information
cleydyr authored Sep 20, 2019
2 parents 7585c7e + 7e27837 commit c9d5a01
Showing 1 changed file with 37 additions and 24 deletions.
61 changes: 37 additions & 24 deletions src/main/java/biblivre/core/AbstractDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
package biblivre.core;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
Expand Down Expand Up @@ -340,39 +341,51 @@ protected PGConnection getPGConnection(Connection con) {
PGConnection pgcon = null;

try {
Class<?> D = Class.forName("org.apache.tomcat.dbcp.dbcp.DelegatingConnection");
Constructor<?> c = D.getConstructor(Connection.class);
Object o = c.newInstance(con);
Method m = D.getMethod("getInnermostDelegate");
pgcon = (PGConnection) con.unwrap(PGConnection.class);

pgcon = (PGConnection) m.invoke(o);
return pgcon;
} catch (Exception e) {
this.logger.info("Skipping org.apache.tomcat.dbcp.dbcp.DelegatingConnection");
this.logger.info("getInnermostDelegate Unwrap");
e.printStackTrace();
}

if (pgcon == null) {
try {
Class<?> D = Class.forName("org.apache.commons.dbcp.DelegatingConnection");
Constructor<?> c = D.getConstructor(Connection.class);
Object o = c.newInstance(con);
Method m = D.getMethod("getInnermostDelegate");
try {
pgcon = _getInnermostDelegateFromConnection(
con, "org.apache.tomcat.dbcp.dbcp.DelegatingConnection");

pgcon = (PGConnection) m.invoke(o);
} catch (Exception e) {
this.logger.info("org.apache.commons.dbcp.DelegatingConnection");
e.printStackTrace();
}
return pgcon;
} catch (Exception e) {
this.logger.info("Skipping org.apache.tomcat.dbcp.dbcp.DelegatingConnection");

e.printStackTrace();
}

if (pgcon == null) {
try {
pgcon = (PGConnection) con.unwrap(PGConnection.class);
} catch (Exception e) {
this.logger.info("getInnermostDelegate Unwrap");
e.printStackTrace();
}
try {
pgcon = _getInnermostDelegateFromConnection(
con, "org.apache.commons.dbcp.DelegatingConnection");

return pgcon;
} catch (Exception e) {
this.logger.info("org.apache.commons.dbcp.DelegatingConnection");

e.printStackTrace();
}

return null;
}

private PGConnection _getInnermostDelegateFromConnection(
Connection con, String className)
throws ClassNotFoundException, NoSuchMethodException, InstantiationException,
IllegalAccessException, InvocationTargetException {

PGConnection pgcon;
Class<?> D = Class.forName(className);
Constructor<?> c = D.getConstructor(Connection.class);
Object o = c.newInstance(con);
Method m = D.getMethod("getInnermostDelegate");

pgcon = (PGConnection) m.invoke(o);
return pgcon;
}

Expand Down

0 comments on commit c9d5a01

Please sign in to comment.