【问题标题】:How can I install postgresqljdbc to work in Karaf OSGi?如何安装 postgresqljdbc 以在 Karaf OSGi 中工作?
【发布时间】:2015-08-02 12:07:38
【问题描述】:

我想在 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.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]

【问题讨论】:

    标签: osgi karaf


    【解决方案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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • install -s wrap:mvn:postgresql/postgresql/9.4-1201-jdbc4 Bundle IDs: Error execution command: Error installed bundles: Unable to install bundle wrap:mvn:postgresql/postgresql/9.4-1201 -jdbc4 karaf@root()>
      • 对不起,我想我抄错了版本。试试这个 9.4-1201-jdbc41
      • 谢谢,但还是不行,...我真的很绝望
      • 顺便问一下,你用的是哪个版本的 Karaf?
      • 我用 Karaf 3.0.3 测试过:``` karaf@root()> feature:install tr​​ansaction 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 Bundle ID: 68 karaf@root()> list START LEVEL 100,列出阈值: 50 ID |状态 |等级 |版本 |姓名 - - - - - - - - - - - - - - - - - - - - - - - - - --------------------- 67 |活跃 | 80 | 5.0.0.201305092017 | osgi.cmpn 68 |活跃 | 80 | 9.4.0.build-1201 | PostgreSQL JDBC 驱动程序 JDBC41 ```
      【解决方案3】:

      Apache Karaf 数据源 (JDBC) 是一项可选的企业功能。为了安装 postgresql,请使用以下语句。

      karaf@root()> 功能:安装 jdbc

      karaf@root()> 安装 -s mvn:org.postgresql/postgresql/9.4-1203-jdbc42

      以上方案在 Karaf 4.0.1 上测试

      【讨论】:

        猜你喜欢
        • 2016-06-26
        • 1970-01-01
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        • 2019-03-31
        • 2015-07-21
        • 2013-07-15
        • 1970-01-01
        相关资源
        最近更新 更多