gpt4 book ai didi

java - 费利克斯与 PostgreSQL

转载 作者:行者123 更新时间:2023-11-29 13:54:33 25 4
gpt4 key购买 nike

我想在带有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com