java - 费利克斯与 PostgreSQL

标签 java postgresql osgi apache-felix osgi-bundle

我想在带有 PostgreSQL 数据库的 java OSGI bundle (Felix) 中工作。我在 pom 中有这种依赖:

<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4.1207</version> </dependency>

并且这个类在 PostgreSQL 包中。

`公共(public)类 PostgreSQLDBDAOFactory 扩展 DAOFactory {

Connection conn = null;
private static final Logger LOG = Logger.getLogger(PostgreSQLDBDAOFactory.class.getName());

public PostgreSQLDBDAOFactory() throws ClassNotFoundException {
    try {
        Class.forName("org.postgresql.Driver");
        String url = "jdbc:postgresql://localhost:5432/CarsAPJ";
        String user  = "petr";
        String password = "pass";
        conn = DriverManager.getConnection(url, user, password);
        ...}
    ...
    }
...

}`

构建 OSGI bundle 是可以的,但是在 Felix 中启动应用程序后,我有这个错误。我在模块和 felix 配置脚本中有这个包。

Jan 18, 2016 1:13:02 AM org.lib.postgresqldb.PostgreSQLDBDAOFactory <init> SEVERE: java.lang.ClassNotFoundException: org.postgresql.Driver not found by org.lib.postgresqlDB [4]

请问有认识的人怎么解决吗?

最佳答案

当您在包中加载 DriverManager 类时,它会被委托(delegate)给系统包(felix 框架)的类加载器。所以 DriverManager 只会看到系统包可见的包。数据库驱动程序当然在那里不可见。

简而言之。您不应依赖 DriverManager 来建立数据库连接。而是使用数据源。

获得数据库连接的最好方法是使用pax-jdbc .它提供了一种创建数据源并将其发布为 OSGi 服务的方法。

因此您可以只引用您的包中的服务并从中创建一个连接。这确保您的包不依赖于特定的数据库,并允许管理员轻松更改数据源配置。

我也有一些tutorials for Apache Karaf展示了如何在 OSGi 之上干净地构建基于数据库的应用程序。

关于java - 费利克斯与 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34845515/

相关文章:

java - 我正在尝试用java绘制一个NxN棋盘,但是打印出一个白色的空白屏幕

postgresql - 如何使用 pgAdmin 创建枚举?

sql - 什么时候索引在小引用表上是合理的?

java - 操作事件错误

java - Hibernate - 如何映射 EnumSet

java - Spring Security 预身份验证匹配器

sql - 使用 PostgreSQL 选择一棵树并对 child 进行排序

java - osgi.wiring.package; (&(osgi.wiring.package = org.json)(版本> = 0.0.0)) Unresolved 要求:

osgi - 使用 Maven、DS、SCR 在 Felix 中构建 OSGi 包的最低要求是什么?

java - OSGi/blueprint 中的服务引用无法正常工作