2017-02-10 11 views
1

На моем karaf 4.0.8 я установил функцию pax-jdbc-postgresql. DataFactory для PostgreSQL установлен:Создание источника данных PosgreSQL через конфигурационный файл pax-jdbc на karaf 4

org.osgi.service.jdbc.DataSourceFactory] 
osgi.jdbc.driver.class org.postgresql.Driver 
osgi.jdbc.driver.name PostgreSQL JDBC Driver 
osgi.jdbc.driver.version PostgreSQL 9.4 JDBC4.1 (build 1203) 
service.bundleid 204 
service.scope singleton 
Using Bundles com.eclipsesource.jaxrs.publisher (184) 

Я создать файл etc/org.ops4j.datasource-psql-sandbox.cfg:

osgi.jdbc.driver.class=org.postgresql.Driver 
osgi.jdbc.driver.name=PostgreSQL 
url=jdbc:postgresql://localhost:5432/sandbox 
dataSourceName=psql-sandbox 
user=sandbox 
password=sandbox 

После этого, я вижу подтверждение в karaf.log, что файл был обработан:

2017-02-10 14: 54: 17,468 | ИНФО | 41-88b277ae0921) | DataSourceRegistration | 154 - org.ops4j.pax.jdbc.config - 0.9.0 | Обнаружен конфиг для файла psql-песочницы DataSource. Отслеживание DSF с фильтром (& (объектный = org.osgi.service.jdbc.DataSourceFactory) (osgi.jdbc.driver.class = org.postgresql.Driver) (osgi.jdbc.driver.name = PostgreSQL))

Однако я не вижу новых DataSource в списке услуг в консоли. Что пошло не так? Я не вижу исключений в журнале ....

ответ

2

В сообщении журнала сообщается, что конфигурация была обработана, и теперь она ищет подходящую службу OSGi DataSourceFactory.

Проблема в вашем случае заключается в том, что она не находит такую ​​услугу. Чтобы отладить это, вы должны перечислить все службы DataSourceFactory и проверить их свойства.

service:list DataSourceFactory 

В моем случае это показывает, что это:

[org.osgi.service.jdbc.DataSourceFactory] 
----------------------------------------- 
osgi.jdbc.driver.class = org.postgresql.Driver 
osgi.jdbc.driver.name = PostgreSQL JDBC Driver 
... 

Как вы видите, это не соответствует фильтру, который вы видите в журнале. Как правило, вы должны предоставить только osgi.jdbc.driver.class или osgi.jdbc.driver.name не оба. Если вы удалите строку osgi.jdbc.driver.name, конфигурация будет работать.

Нет сообщения об ошибке, поскольку система не может знать, является ли ошибка временной или нет. В принципе, как только вы установите соответствующий OSGi-сервис, будет создан DataSource.

+0

Т.вод. Название драйвера для подробного "PostgreSQL JDBC Driver"? Для feture «sqlite» это «sqlite», для «mysql» это «mysl», поэтому для «postgresql» я ожидал «postgresql» или, по крайней мере, что-то, что легко узнать ... –

+0

Название может быть свободно выбранный тем, кто экспортирует DataSourceFactory. Таким образом, безопасный способ - просто перечислить службы DataSourceDactory и проверить, что они на самом деле используют. –

+0

Невозможно заставить экспортеров DataSourceFactory сохранить предсказуемое соглашение? –