Apache Felix无法访问Postgres JDBC

时间:2013-07-16 11:36:56

标签: database postgresql jdbc osgi apache-felix

我下载了Postgresql-9.2-1003.jdbc3.jar并将其放在felix \ bundle目录中。

我的程序访问Postgres表EMP并打印它。我想在Felix OSGi服务器上做这件事。我的程序有两部分:

  1. 第1部分程序,它只是连接到Postgres JDBC驱动程序并打开数据库:

    package com.myprogram.myemp;

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import org.postgresql.Driver;

    public class ConnectPostgres {

    static final String DB_URL = "jdbc:postgresql://localhost:5432/scott";
    static final String UNAME = "postgres";
    static final String PWORD = "password";
    
    
    public void myMain() {
        Connection conn = null;
        ResultSet rs = null;
        Statement st = null;
        String JDBC_DRIVER = Driver.class.getName();
    
        try {
            Class.forName(JDBC_DRIVER);
            conn = DriverManager.getConnection(DB_URL, UNAME, PWORD);
            st = conn.createStatement();
            rs = st.executeQuery("select * from EMP");
            while (rs.next()) {
                System.out.println ("EMP Name:" + rs.getLong("EMPNO") + " " + rs.getString("ENAME") );
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                st.close();
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    }

  2. 第2部分程序更像是将捆绑包作为服务提供者启动:

    package com.myprogram.myemp;

    import org.osgi.framework.BundleContext; import org.osgi.framework.BundleActivator;

    public class Activator实现了BundleActivator {

    @Override
    public void start(BundleContext arg0) throws Exception {
        ConnectPostgres app = new ConnectPostgres();
        app.myMain();
    }
    
    @Override
    public void stop(BundleContext arg0) throws Exception {
    }
    

    }

  3. 要求是: 使用像Postgres或SQLite这样的流行数据库的数据库连接,我应该能够在兼容OSGi的服务器Felix,Equinox上发布EMP表作为服务。

    **我在Felix 3.0中遇到的错误是:

    不满意的要求:

    (及(包= org.postgresql))**

    驱动程序在那里,我将它放在bundle目录下。

    在我看来这个问题:

    1. OSGi中无法使用JDBC进行数据库连接。 OSGi可以连接数据库吗?规范,维基,例子似乎都是沉默的。没有它,所有的例子都看起来像Celsius到Fahrenheit温度转换程序,对业务没有实际价值。如果我对OSGi的理解是错误的,请纠正我。

    2. 我可能做错了什么?我应该尝试连接数据库的另一种方式是什么。

    3. 提前致谢

2 个答案:

答案 0 :(得分:3)

Postgresql-9.2-1003.jdbc3.jar JAR可能不是OSGI捆绑包,因此您不能按照自己的方式安装它。

点击此处:

https://ops4j1.jira.com/wiki/display/PAXJDBC/PostgreSQL+Driver+Adapter

  

官方Maven工件postgresql:postgresql是一个没有OSGi清单头的普通旧JAR。您必须使用Pax URL wrap:handler动态地包装它,或者构建您自己的bundle,添加OSGi清单。这个差距将由Pax Tipi项目填补。

答案 1 :(得分:2)

最新版本的postgresql (9.4-1201-jdbc41)已经是一个OSGi包。

Servicemix捆绑包现在包含postgres驱动程序的捆绑版本。所以你可以找到postgres jdbc driver in the maven central repo