我下载了Postgresql-9.2-1003.jdbc3.jar并将其放在felix \ bundle目录中。
我的程序访问Postgres表EMP并打印它。我想在Felix OSGi服务器上做这件事。我的程序有两部分:
第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部分程序更像是将捆绑包作为服务提供者启动:
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 {
}
}
要求是: 使用像Postgres或SQLite这样的流行数据库的数据库连接,我应该能够在兼容OSGi的服务器Felix,Equinox上发布EMP表作为服务。
**我在Felix 3.0中遇到的错误是:
(及(包= org.postgresql))**
驱动程序在那里,我将它放在bundle目录下。
在我看来这个问题:
OSGi中无法使用JDBC进行数据库连接。 OSGi可以连接数据库吗?规范,维基,例子似乎都是沉默的。没有它,所有的例子都看起来像Celsius到Fahrenheit温度转换程序,对业务没有实际价值。如果我对OSGi的理解是错误的,请纠正我。
我可能做错了什么?我应该尝试连接数据库的另一种方式是什么。
提前致谢
答案 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。