Как мога да инсталирам postgresqljdbc за работа в Karaf OSGi?

Искам да инсталирам org.postgresql/postgresql/9.4-1201-jdbc41 в Karaf, но получавам грешки. Как мога да разреша тези грешки? Странно в Windows моят Karaf няма грешки с този 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)


Осигуряване на Postgresql JDBC драйвер към 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
Между другото, коя версия на Karaf използвате? - 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()› списък НАЧАЛО НИВО 100, Праг на списъка: 50 ID | състояние | Lvl | Версия | Име ------------------------------------------------- --------------------- 67 | Активен | 80 | 5.0.0.201305092017 | osgi.cmpn 68 | Активен | 80 | 9.4.0.build-1201 | PostgreSQL JDBC драйвер 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 DataSources (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