UPDATEソリューションは、呼び出しから別のプロキシを返す Java.lang.reflect.Proxy であり、割り当て時に ClassCastException が発生します
私のテスト コード プロキシjava.sql.Connection
.
次のようにプロキシを作成します。
log.info("connection is "+connection.getClass().getName()+", "+
(connection instanceof Connection));
Object proxy = java.lang.reflect.Proxy.newProxyInstance(
connection.getClass().getClassLoader(),
connection.getClass().getInterfaces(),
new MockFailureWrapper(connection));
log.info("proxy is "+proxy.getClass().getName()+", "+
(proxy instanceof Connection));
return (Connection)proxy;
H2 DB 接続をラップすると、これは完全に機能します。
MySQL 接続をラップしようとすると、ラップのタイプがであっても、返されるプロキシのキャストがConnection
失敗します。例外は次のとおりです。connection
Connection
java.lang.ClassCastException: $Proxy11 cannot be cast to java.sql.Connection
H2 接続のログ行は次のとおりです。
connection is org.h2.jdbc.JdbcConnection, true
proxy is $Proxy9, true
また、MySQL 接続の場合:
connection is com.mysql.jdbc.JDBC4Connection, true
proxy is $Proxy11, false
何が起こっているのですか? MySQL DB 接続をラップできないのはなぜですか?