WSJdbcConnection 不包装 com.microsoft.sqlserver.jdbc.SQLServerConnection 类型的任何对象

WSJdbcConnection does not wrap any objects of type com.microsoft.sqlserver.jdbc.SQLServerConnection

我正在使用 SQLServerBulkCopy API 在 SQL 服务器数据库中存储数百万条记录。我收到一条错误消息

"com.microsoft.sqlserver.jdbc.SQLServerException: Destination connection must be a connection from Microsoft JDBC Driver for SQL Server"

在初始化过程中像

SQLServerBulkCopy bulkCopy =  new SQLServerBulkCopy(conn);

所以我打开了连接

SQLServerConnection conn = connection.unwrap(SQLServerConnection.class);

原来的连接是com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@8da2f3e2

在检查了之前提出的以下问题后
1. WSJDBCConnection does not wrap objects of type Oracle jdbc Connection
2.

我发现是因为 sqljdbc42.jar 的类加载器,数据源和应用程序不匹配

所以我把我的server.xml改成了这样

 <library id="global">
   <fileset dir="${server.config.dir}/lib/global" includes="*.jar"/>
 </library>

 <jdbcDriver id="SqlJdbcDriver"              
                javax.sql.DataSource = 
 "com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource"
                 libraryRef="global"/>

 <application id="myApp" name="myApp" type="ear" location="myApp.ear">
   <classloader commonLibraryRef="global"/>
 </application>

数据源标记驻留在另一个 server.xml 中,它是 env 特定的 -

<dataSource id="myDS" jdbcDriverRef="SqlJdbcDriver" jndiName="jdbc/myDS">
    <connectionManager agedTimeout="2m" connectionTimeout="2s" maxPoolSize="50" minPoolSize="0" />
    <properties.microsoft.sqlserver databaseName="myDB" serverName="xxx.com" /> 
</dataSource>

sqljdbc42.jar 也位于 lib/global 目录中。
另外,我删除了 dropins 目录并将 myApp 放在 apps 目录中,因为如果应用程序存在于 dropins 目录中,application 标记将不起作用。

在所有这些更改之后,我得到了异常

"com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@8155ea2d does not wrap any objects of type com.microsoft.sqlserver.jdbc.SQLServerConnection."

任何人都可以找出解决方案或我还缺少什么吗?

JDBC 包装器模式 java.sql.Wrapper.unwrap(c) 仅用于解包为接口 类,而不是具体实现 类。

com.microsoft.sqlserver.jdbc.SQLServerConnection是一个实现,还好微软的JDBCDriver也为它提供了接口:com.microsoft.sqlserver.jdbc.ISQLServerConnection.

尝试解包为接口,

ISQLServerConnection conn = connection.unwrap(ISQLServerConnection.class);