我想在java OSGI bundle (Felix)与PostgreSQL数据库一起工作。我在pom中有这样的依赖:
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4.1207</version> </dependency>
这个类在PostgreSQL包中。
`公共类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包是可以的,但是在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]
你有认识的人吗,请问如何解决?
发布于 2016-01-18 16:29:26
当您在捆绑包中加载DriverManager类时,这将被委托给系统捆绑包(felix框架)的类加载器。因此DriverManager将只看到对系统包可见的包。当然,DB驱动程序在那里不可见。
长话短说。您不应该依赖DriverManager来建立DB连接。相反,请使用DataSource。
获得DataBase连接的最好方法是使用pax-jdbc。它提供了一种以OSGi服务的形式创建和发布DataSources的方法。
因此,您只需引用捆绑包中的服务并从它创建连接即可。这确保您的捆绑包不依赖于特定的数据库,并允许管理员轻松地更改DataSource配置。
我还获得了一些tutorials for Apache Karaf,它们展示了如何在OSGi之上干净地构建基于数据库的应用程序。
https://stackoverflow.com/questions/34845515
复制相似问题