如何安装 postgresqljdbc 以在 Karaf OSGi 中工作? [英] How can I install postgresqljdbc to work in Karaf OSGi?

查看:27
本文介绍了如何安装 postgresqljdbc 以在 Karaf OSGi 中工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在 Karaf 中安装 org.postgresql/postgresql/9.4-1201-jdbc41,但出现错误.我该如何解决这些错误?奇怪的是,在 Windows 上,我的 Karaf 没有这个 Postgres jdbc 的错误,但在 Ubuntu 上它有这些错误.任何线索表示赞赏.

I want to install org.postgresql/postgresql/9.4-1201-jdbc41 in Karaf but I get errors. How can I resolve these errors? Strangely on Windows my Karaf doesn't have errors with this Postgres jdbc but on Ubuntu it has these errors. Any clues appreciated.

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()>

<小时>

我查看了日志级别为 INFO 的 Karaf 日志.


I looked in the Karaf logs with log level of 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]

推荐答案

Provisioning Postgresql JDBC Driver to 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)

为 Karaf 4.0.1 定义 Postgres 池数据源

理论在: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 是数据源名称.

Create file under KARAF_HOME/etc/org.ops4j.datasource-companymanager.cfg where companymanager is the datasource name.

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

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

瞧,您大功告成了,您的数据源已暴露给 OSGI 注册表,随时可以随意使用:

Voilá you are done, your datasource is exposed to OSGI registry ready to be used at your will:

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

The next step will be perhaps set up JPA if you are interested, you can keep reading and get the full example code from: https://github.com/antoniomaria/karaf4-eclipselink-jpa

这篇关于如何安装 postgresqljdbc 以在 Karaf OSGi 中工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆