1

将 Web 应用程序从 Tomcat 6 迁移到 WAS Liberty 8.5.5.8 时,数据库连接出现问题。

在 WAS Liberty 上,我收到以下错误:

com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication

我已将“sqljdbc4.jar”放在应用程序 WEB-INF\lib 文件夹中。我尝试将文件“sqljdbc_auth.dll”放置在各个位置,例如应用程序 WEB-INF\lib-folder、WAS Liberty bin 文件夹、WAS Liberty lib 文件夹。但这些都不能解决我的问题。

在Tomcat上,我将“sqljdbc4.jar”放在Tomcat lib文件夹中,将“sqljdbc_auth.dll”放在Tomcat bin文件夹中,然后它就可以工作了。

我怀疑我将“sqljdbc_auth.dll”文件放在了错误的位置,但我不知道该放在哪里。我无法在网上找到任何指定将文件放置在 WAS Liberty 上的位置的任何内容。

4

1 回答 1

0

首先,我建议您为应用程序使用 DataSource 而不是原始 JDBC 驱动程序。通过使用 DataSource(在应用程序服务器上配置时由容器管理),您将受益于应用程序服务器完成的许多固有优化,例如连接池和事务支持。

请注意,DataSource 并非特定于 WAS Liberty,在任何应用服务器中,通过使用容器管理的 DataSource 而不是原始 JDBC 驱动程序,您将以更低的开发成本获得更高的性能。


配置数据源:

在 server.xml 中配置 DataSource 和 JDBC 库:

<!-- Enable JDBC and JNDI features (at least) -->
<featureManager>
    <feature>jdbc-4.1</feature>
    <feature>jndi-1.0</feature>
</featureManager>

<dataSource id="MyDataSource" jndiName="jdbc/MyDataSource">
    <jdbcDriver libraryRef="MSJDBCLib"/>
    <properties.microsoft.sqlserver databaseName="SAMPLEDB" serverName="localhost" portNumber="1433"/>
</dataSource>

<library id="MSJDBCLib">
    <fileset dir="C:/path/to/sqljdbc4.jar"/>

    <!-- To have authentication support, add the dll to the library -->
    <fileset dir="C:/path/to/sqljdbc_auth.dll"/>
</library>

请参阅 IBM 文档:在 Liberty 中配置数据库连接

回答您的问题的关键是在您的元素中添加<fileset>指向 auth dll 文件的<library>元素,如下所示:

<!-- To have authentication support, add the dll to the library -->
<fileset dir="C:/path/to/sqljdbc_auth.dll"/>

要使用数据源:

之前,你可能做过这样的事情:

String connectionURL = "jdbc:sqlserver://localhost:1433;DatabaseName=YourDBName;user=UserName;Password=YourPassword";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection(connectionUrl);

使用 DataSources,您可以注入它们或使用 JNDI 查找它们:

注入:

@Resource(lookup = "jdbc/MyDataSource")
DataSource myDataSource;

...

Connection con = myDataSource.getConnection();

JNDI 查询:

DataSource myDataSource = new InitialContext().lookup("jdbc/MyDataSource");
Connection conn = myDataSource.getConnection();
于 2015-12-21T15:04:48.480 回答