Как подключить мое веб-приложение Java к источнику данных базы данных?

#java #sql #database #wildfly #datasource

Вопрос:

Я настроил источник данных на своем сервере Wildfly с именем JNDI java:/Postgres.

 JNDI Name java:/Postgres
Driver Name postgresql-42.2.23.jar
Connection URL jdbc:postgresql://localhost:5432/skistuff
Enabled true
Statistics Enabled false
 

У меня также есть веб-приложение java, которое должно подключаться к этой базе данных. Я могу подключиться к нему с помощью приведенной ниже конфигурации, и все работает нормально, но мне нужно использовать источник данных.

 <sql:setDataSource                    
  var = "myDS"                                           
  driver = "org.postgresql.Driver"
  url = "jdbc:postgresql://localhost:5432/skistuff"
  user = "fred" 
  password = "secret"
/>
<sql:query var = "listStuff" dataSource = "${myDS}"> 
  SELECT * FROM skisEtc ORDER BY id;
</sql:query>
 

В документации о setDataSource говорится, что существует атрибут «Источник данных», который принимает имя JNDI. Когда я пытаюсь сделать это, как в примере ниже, а затем развертываю его на своем сервере Wildfly, я получаю сообщение об ошибке «Не удается установить соединение, недопустимый источник данных: «Исключение java.sql.SQLException: Не найден подходящий драйвер для java:/Postgres» »

 <sql:setDataSource
  var = "myDS"
  driver = "org.postgresql.Driver"
  dataSource="java:/Postgres"
/>
<sql:query var = "listStuff" dataSource = "${myDS}">
  SELECT * FROM skisEtc ORDER BY id;
</sql:query>
 

Какой драйвер я должен использовать? Или как я могу подключить свое приложение к источнику данных?

Комментарии:

1. Вы пробовали отказаться от driver собственности? Это актуально только при использовании url . Ошибка наводит меня на мысль, что она была сгенерирована наличием java:/Postgres в url поле, а не в dataSource поле. В некоторой документации предполагается, что имя источника данных должно быть «относительным», поэтому также попробуйте Postgres (и, возможно /Postgres ).

2. Я не могу вспомнить все случаи использования JSTL, но беглый поиск также предполагает, что вы могли бы обойтись без использования setDataSource и использовать ссылку JNDI непосредственно dataSource в запросе.

3. Я пытался это сделать. Я также попытался вообще удалить блок setDataSource и поместить имя JNDI в <sql:запрос, подобный этому <sql:запрос var = «listStuff» Источник данных = «java:/Postgres»>