1

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

我的程序访问 Postgres 表 EMP 并打印它。我正在尝试在 Felix OSGi 服务器中执行此操作。我的程序有两个部分:

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

    包 com.myprogram.myemp;

    导入java.sql.Connection;导入 java.sql.DriverManager;导入java.sql.ResultSet;导入 java.sql.Statement;导入 org.postgresql.Driver;

    公共类 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 部分程序更像是作为服务提供者启动捆绑包:

    包 com.myprogram.myemp;

    导入 org.osgi.framework.BundleContext;导入 org.osgi.framework.BundleActivator;

    公共类 Activator 实现 BundleActivator {

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

    }

要求是:使用 Postgres 或 SQLite 等流行数据库的数据库连接,我应该能够在符合 OSGi 的服务器 Felix、Equinox 上将 EMP 表作为服务发布。

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

未满足的要求:

(&(package=org.postgresql))**

驱动在那里,我把它放在bundle目录下。

在我看来问题是:

  1. 使用 JDBC 的数据库连接在 OSGi 中是不可能的。OSGi 可以连接到数据库吗?规范、维基、示例似乎都没有提及。没有它,所有示例看起来都像是摄氏到华氏温度转换程序,对业务没有实际价值。如果我对 OSGi 的理解有误,请纠正我。

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

提前致谢

4

2 回答 2

3

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

在这里检查:

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

官方的 Maven 工件 postgresql:postgresql 是一个普通的旧 JAR,没有 OSGi 清单头。您必须使用 Pax URL wrap: 处理程序即时包装它,或者构建您自己的包,添加一个 OSGi 清单。Pax Tipi 项目将填补这一空白。

于 2013-07-16T15:09:45.480 回答
2

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

Servicemix 捆绑包现在包含 postgres 驱动程序的捆绑版本。所以你可以在 maven 中央仓库中找到postgres jdbc 驱动程序

于 2014-02-19T10:12:12.280 回答