如何安装 postgresqljdbc 以在 Karaf OSGi 中工作?
How can I install postgresqljdbc to work in Karaf OSGi?
我想在 Karaf 中安装 org.postgresql/postgresql/9.4-1201-jdbc41,但出现错误。我该如何解决这些错误?奇怪的是,在 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 not able to access 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 日志。
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.access0(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]
刚刚使用 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()>
Apache Karaf 数据源 (JDBC) 是一项可选的企业功能。为了安装postgresql,请使用以下语句。
karaf@root()> feature:install jdbc
karaf@root()> 安装-s mvn:org.postgresql/postgresql/9.4-1203-jdbc42
以上解决方案已在 Karaf 4.0.1 上测试
配置 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)
正在为 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
是数据源名称。
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
我想在 Karaf 中安装 org.postgresql/postgresql/9.4-1201-jdbc41,但出现错误。我该如何解决这些错误?奇怪的是,在 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 not able to access 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 日志。
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.access0(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]
刚刚使用 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()>
Apache Karaf 数据源 (JDBC) 是一项可选的企业功能。为了安装postgresql,请使用以下语句。
karaf@root()> feature:install jdbc
karaf@root()> 安装-s mvn:org.postgresql/postgresql/9.4-1203-jdbc42
以上解决方案已在 Karaf 4.0.1 上测试
配置 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)
正在为 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
是数据源名称。
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