Как я могу установить postgresqljdbc для работы в Karaf OSGi?

Я хочу установить org.postgresql/postgresql/9.4-1201-jdbc41 в Karaf, но получаю ошибки. Как я могу решить эти ошибки? Как ни странно, в Windows у моего Карафа нет ошибок с этим Postgres jdbc, но в Ubuntu у него есть эти ошибки. Любые подсказки приветствуются.

Install Kar feature social_importer.kar/1.0-SNAPSHOT
java.lang.Exception: Could not start bundle    
mvn:org.postgresql/postgresql/9.4-1201-jdbc41 in feature(s) 

T: Unresolved constraint in bundle org.postgresql.jdbc41 
[127]: Unable to resolve 127.0: missing requirement [127.0]
osgi.wiring.package; (osgi.wiring.package=javax.transaction.xa)


Caused by: org.osgi.framework.BundleException: 
Unresolved constraint in bundle org.postgresql.jdbc41 [127]: Unable 
to resolve 127.0: missing requirement [127.0] osgi.wiring.package;
(osgi.wiring.package=javax.transaction.xa)

Это может быть связано с Apache Felix не может получить доступ к Postgres JDBC


karaf@root()> install -s wrap:mvn:postgresql/postgresql/9.4-1201-jdbc41
Bundle IDs:
Error executing command: Error installing bundles:
    Unable to install bundle wrap:mvn:postgresql/postgresql/9.4-1201-jdbc41
karaf@root()> install -s mvn:postgresql/postgresql/9.4-1201-jdbc41
Bundle IDs:
Error executing command: Error installing bundles:
    Unable to install bundle mvn:postgresql/postgresql/9.4-1201-jdbc41
karaf@root()>

Я посмотрел в журналах Karaf с уровнем журнала INFO.

Caused by: java.lang.NoClassDefFoundError: org/osgi/service/jdbc/DataSourceFactory
    at org.postgresql.osgi.PGBundleActivator.start(PGBundleActivator.java:32)
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2154)
    ... 11 more
Caused by: java.lang.ClassNotFoundException: org.osgi.service.jdbc.DataSourceFactory not found by org.postgresql.jdbc41 [5328]
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1556)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:77)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1993)[org.apache.felix.framework-4.4.1.jar:]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)[:1.8.0_25]

person Phil    schedule 21.05.2015    source источник


Ответы (3)


Инициализация драйвера JDBC Postgresql для Karaf 4.0.1

        __ __                  ____
       / //_/____ __________ _/ __/
      / ,<  / __ `/ ___/ __ `/ /_
     / /| |/ /_/ / /  / /_/ / __/
    /_/ |_|\__,_/_/   \__,_/_/

  Apache Karaf (4.0.1)

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown Karaf.
karaf@root()> feature:repo-add mvn:org.ops4j.pax.jdbc/pax-jdbc-features/0.7.0/xml/features
karaf@root()>feature:install  pax-jdbc-spec
karaf@root()>feature:install transaction
karaf@root()>bundle:install -s mvn:org.postgresql/postgresql/9.4-1200-jdbc41
karaf@root()> service:list org.osgi.service.jdbc.DataSourceFactory

[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 1200)
 service.bundleid = 52
 service.id = 113
 service.scope = singleton
Provided by :
 PostgreSQL JDBC Driver JDBC41 (52)

Определение источника данных пула Postgres для Karaf 4.0.1

Теория по адресу: https://ops4j1.jira.com/wiki/display/PAXJDBC/Create+DataSource+from+config

karaf@root()>feature:install  pax-jdbc-config
karaf@root()>feature:install  pax-jdbc-pool-dbcp2

Создайте файл в папке KARAF_HOME/etc/org.ops4j.datasource-companymanager.cfg, где companymanager — имя источника данных.

osgi.jdbc.driver.name=PostgreSQL JDBC Driver-pool-xa

serverName=localhost
databaseName=companymanager
portNumber=5432
user=postgres
password=admin
dataSourceName=companymanager

Готово, ваш источник данных открыт для реестра OSGI и готов к использованию по вашему желанию:

karaf@root()> service:list javax.sql.DataSource
[javax.sql.DataSource]
----------------------
 databaseName = companymanager
 dataSourceName = companymanager
 felix.fileinstall.filename = file:/C:/apache-karaf-4.0.1/etc/org.ops4j.datasource-companymanager.cfg
 osgi.jdbc.driver.name = PostgreSQL JDBC Driver-pool-xa
 osgi.jndi.service.name = companymanager
 password = admin
 portNumber = 5432
 serverName = localhost
 service.bundleid = 64
 service.factoryPid = org.ops4j.datasource
 service.id = 119
 service.pid = org.ops4j.datasource.3cad9abf-49be-4868-8940-1623481b1363
 service.scope = singleton
 user = postgres
Provided by :
 OPS4J Pax JDBC Config (64)

Следующим шагом, возможно, будет настройка JPA, если вы заинтересованы, вы можете продолжить чтение и получить полный пример кода по адресу: https://github.com/antoniomaria/karaf4-eclipselink-jpa

person Antonio Maria Sanchez Berrocal    schedule 26.10.2015

Только что протестировано с Karaf 4.0.0.M2: сборник OSGi экспортирует org.osgi.service.jdbc

        __ __                  ____      
       / //_/____ __________ _/ __/      
      / ,<  / __ `/ ___/ __ `/ /_        
     / /| |/ /_/ / /  / /_/ / __/        
    /_/ |_|\__,_/_/   \__,_/_/         

  Apache Karaf (4.0.0.M2)

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown Karaf.

karaf@root()> feature:install transaction
karaf@root()> install -s mvn:org.osgi/org.osgi.compendium/5.0.0
Bundle ID: 51
karaf@root()> install -s wrap:mvn:org.postgresql/postgresql/9.4-1201-   jdbc41
Bundle ID: 52
karaf@root()> list
START LEVEL 100 , List Threshold: 50
ID | State  | Lvl | Version            | Name                         
----------------------------------------------------------------------
51 | Active |  80 | 5.0.0.201305092017 | osgi.cmpn                    
52 | Active |  80 | 9.4.0.build-1201   | PostgreSQL JDBC Driver JDBC41
karaf@root()>
person Jorge Martinez    schedule 21.05.2015
comment
install -s wrap:mvn:postgresql/postgresql/9.4-1201-jdbc4 Идентификаторы пакетов: Ошибка при выполнении команды: Ошибка при установке пакетов: Невозможно установить пакет wrap:mvn:postgresql/postgresql/9.4-1201-jdbc4 karaf@root()› - person Phil; 21.05.2015
comment
Извините, я думаю, что неправильно скопировал версию. Попробуйте этот 9.4-1201-jdbc41 - person Jorge Martinez; 21.05.2015
comment
Спасибо, но это все равно не сработало... Я действительно в отчаянии - person Phil; 21.05.2015
comment
Кстати, какую версию Карафа вы используете? - person Jorge Martinez; 21.05.2015
comment
Я тестировал с Karaf 3.0.3: ``` karaf@root()› функция: установить транзакцию karaf@root()› install -s mvn:org.osgi/org.osgi.compendium/5.0.0 Bundle ID: 67 karaf@root()› install -s wrap:mvn:org.postgresql/postgresql/9.4-1201-jdbc41 Идентификатор пакета: 68 karaf@root()› list START LEVEL 100 , Порог списка: 50 ID | государство | уровень | Версия | Имя ------------------------------------------------- --------------------- 67 | Активный | 80 | 5.0.0.201305092017 | osgi.cmpn 68 | Активный | 80 | 9.4.0.сборка-1201 | Драйвер JDBC для PostgreSQL JDBC41 ``` - person Jorge Martinez; 21.05.2015
comment
Извините, код в моем предыдущем комментарии немного запутан. В основном вам нужно установить функцию транзакций и сборник OSGi (org.osgi/org.osgi/compendium/5.0.0), который экспортирует: org.osgi.service.jdbc. Я не тестировал Karaf 4.x, но он работает с Karaf 3.x. - person Jorge Martinez; 21.05.2015
comment
Я еще не проверял то, что вы написали, поскольку я сделал обходной путь из-за моего крайнего срока в пятницу (сейчас суббота), затем я проверю то, что вы сказали, на следующей неделе и попытаюсь вернуть это в свою работу. - person Phil; 22.05.2015

Источники данных Apache Karaf (JDBC) — это дополнительная корпоративная функция. Чтобы установить postgresql, используйте следующие операторы.

karaf@root()> функция: установить jdbc

karaf@root()> установить -s mvn:org.postgresql/postgresql/9.4-1203-jdbc42

вышеуказанное решение было протестировано на Karaf 4.0.1

person techkrish    schedule 22.09.2015