Java Liberty:sqljdbc驱动程序是否未配置为集成身份验证

Java Liberty:sqljdbc驱动程序是否未配置为集成身份验证,java,sql-server,websphere-liberty,sqljdbc,Java,Sql Server,Websphere Liberty,Sqljdbc,将web应用程序从Tomcat 6迁移到WAS Liberty 8.5.5.8时,数据库连接出现问题 在Liberty上,我收到以下错误: com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication 我已将“sqljdbc4.jar”放在applications WEB-INF\lib文件夹中。我尝试将文件“sqljdbc_auth.dl

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

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

com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication
我已将“sqljdbc4.jar”放在applications WEB-INF\lib文件夹中。我尝试将文件“sqljdbc_auth.dll”放在不同的位置,比如应用程序WEB-INF\lib文件夹、WAS Liberty bin文件夹、WAS Liberty lib文件夹。但这些都不能解决我的问题

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


我怀疑我把“sqljdbc_auth.dll”文件放错了地方,但我不知道还能放在哪里。我无法在网上找到任何指定文件放置位置的内容。

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

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


要配置数据源:

在server.xml中配置数据源和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>
使用数据源,您可以注入它们或使用JNDI查找它们:

注入:

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

...

Connection con = myDataSource.getConnection();
JNDI查找:

DataSource myDataSource = new InitialContext().lookup("jdbc/MyDataSource");
Connection conn = myDataSource.getConnection();

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

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


要配置数据源:

在server.xml中配置数据源和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>
使用数据源,您可以注入它们或使用JNDI查找它们:

注入:

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

...

Connection con = myDataSource.getConnection();
JNDI查找:

DataSource myDataSource = new InitialContext().lookup("jdbc/MyDataSource");
Connection conn = myDataSource.getConnection();

您使用的是什么连接字符串?我使用的是“jdbc:sqlserver://[host];databaseName=[db];integratedSecurity=true”您使用的是什么连接字符串?我使用的是“jdbc:sqlserver://[host];databaseName=[db];integratedSecurity=true”我通过将sqljdbc_auth.dll放在server.xml文件旁边来解决这个问题。不过,使用数据源似乎要聪明得多,所以我将尝试研究它。感谢您对DataSource的解释。我通过将sqljdbc_auth.dll放在server.xml文件旁边来解决这个问题。不过,使用数据源似乎要聪明得多,所以我将尝试研究它。感谢您对数据源的解释。