首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Felix与PostgreSQL

Felix与PostgreSQL
EN

Stack Overflow用户
提问于 2016-01-18 08:21:19
回答 1查看 115关注 0票数 1

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

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

这个类在PostgreSQL包中。

`公共类PostgreSQLDBDAOFactory扩展了DAOFactory {

代码语言:javascript
复制
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包是可以的,但是在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]

你有认识的人吗,请问如何解决?

EN

回答 1

Stack Overflow用户

发布于 2016-01-18 16:29:26

当您在捆绑包中加载DriverManager类时,这将被委托给系统捆绑包(felix框架)的类加载器。因此DriverManager将只看到对系统包可见的包。当然,DB驱动程序在那里不可见。

长话短说。您不应该依赖DriverManager来建立DB连接。相反,请使用DataSource。

获得DataBase连接的最好方法是使用pax-jdbc。它提供了一种以OSGi服务的形式创建和发布DataSources的方法。

因此,您只需引用捆绑包中的服务并从它创建连接即可。这确保您的捆绑包不依赖于特定的数据库,并允许管理员轻松地更改DataSource配置。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34845515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档