WAS Liberty: драйвер sqljdbc не настроен для интегрированной аутентификации
У меня проблема с подключением к базе данных при переносе веб-приложения с 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-folder. Я пытался разместить файл "sqljdbc_auth.dll" в разных местах, таких как приложения WEB-INF\lib-folder, папка WAS Liberty bin, папка WAS Liberty lib. Но ничего из этого не решает мою проблему.
На Tomcat я поместил "sqljdbc4.jar" в папку lib Tomcat и "sqljdbc_auth.dll" в папку "Tomcat bin", и тогда он работает.
Я подозреваю, что я помещаю файл "sqljdbc_auth.dll" в неправильное место, но я не могу понять, где еще разместить его. Я не смог найти в Интернете ничего, что бы указывало, где разместить файл в WAS Liberty.
1 ответ
Прежде всего, я рекомендую вам использовать DataSource для вашего приложения вместо необработанного драйвера JDBC. Используя DataSource (который управляется контейнером при настройке на сервере приложений), вы получите выгоду от многих внутренних оптимизаций, выполняемых сервером приложений, таких как пул соединений и поддержка транзакций.
Обратите внимание, что DataSource не является специфическим для WAS Liberty, на любом сервере приложений вы получите более высокую производительность при более низких затратах на разработку, используя управляемый контейнером DataSource вместо необработанных драйверов JDBC.
Чтобы настроить источник данных:
Настройте источник данных и библиотеку JDBC в файле server.xml:
<!-- 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();