当前位置: 首页 > 知识库问答 >
问题:

服务组合上的捆绑包:未找到org.sqlite.JDBC

郭易安
2023-03-14

我有与SQLite数据库工作的应用程序。我把它打包成一个包,我可以看到服务组合上的服务。当我发送请求到发布或获取服务我收到这个错误:

JAVAlang.ClassNotFoundException:org。sqlite。未找到JDBC

我在servicemix上安装了SQLite JDBC驱动程序,但仍然出错。

这是我的POM:

<modelVersion>4.0.0</modelVersion>

<groupId>asd</groupId>
<artifactId>name</artifactId>
<version>0.0.1-SNAPSHOT</version>

<packaging>bundle</packaging>
<name>Name</name>
<description>Bundle Desc</description>

<dependencies>
    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.15.1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-core</artifactId>
        <version>3.1.5</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>3.1.5</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>3.3.0</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Description>${project.description}</Bundle-Description>
                    <Import-Package>
                        javax.jws,
                        javax.wsdl,
                        javax.xml.namespace,
                        org.apache.cxf.helpers,
                        org.osgi.service.blueprint,
                        org.xerial.sqlite-jdbc,
                        *
                    </Import-Package>
                    <Export-Package>
                        my.services.package,
                        org.xerial.sqlite-jdbc
                    </Export-Package>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>

我试图把这个组织。旱生。sqlite jdbc仅作为导出包和导入包,但未成功。

这是SQLite连接的java代码:

private void getConnection() throws ClassNotFoundException, SQLException {
    Class.forName("org.sqlite.JDBC");
    con = DriverManager.getConnection("jdbc:sqlite:SQLiteTest1.db");
    initialise();
}

该应用程序可以在本地工作,但不能在servicemix上工作。

共有2个答案

殳阳飙
2023-03-14

您可以这样尝试:

private void getConnection() throws ClassNotFoundException, SQLException {
  SQLiteDataSource ds = new SQLiteDataSource();
  ds.setUrl("jdbc:sqlite:SQLiteTest1.db");
  try {
   con = ds.getConnection();
   System.out.println("Connected.");
  } catch (Exception e) {
   e.printStackTrace();
  }
  initialise();
 }

根据@Christian Schneider的说法,这可以通过使用数据源来实现。

张嘉
2023-03-14

您的java代码不适合OSGi。在OSGi中,默认情况下,每个类都由它所在的包的类加载器加载。

因此,您自己的类由包的类加载器加载。由于您有一个导入包语句org.sqlite您的代码可以访问sqlite驱动程序类。

问题是DriverManager自己加载类。DriverManager由系统包(felix框架包)提供。这个包当然没有sqllite的导入包。所以它不能加载这个类。

不过有一个简单的解决办法。DriverManager允许您设置线程上下文类加载器。您可以将这个类加载器设置为您自己的包的类加载器。这样,DriverManager就可以看到sqllite类。不过,这只是一个解决办法。

在OSGi中,避免问题的beast方法就是不直接加载任何类。对于jdbc,这可以通过使用DriverManager的数据源类intead来完成。请看这篇文章。

另一种选择是使用pax jdbc。它允许从配置创建数据源服务。通过这种方式,您可以使包独立于实际的DB驱动程序,并且仍然避免手动加载类。看看这个例子。

 类似资料:
  • 问题内容: 命令: 异常(来自日志文件) 但是以下jar可用。 关于上述错误有什么建议吗? 问题答案: 您需要安装几个捆绑软件才能使用控制台,如果仅使用Equinox启动,则您将不会获得这些捆绑软件。 使此工作最快的方法是创建一个具有以下内容的文件: 注意, 您将不得不根据实际拥有的版本检查这些捆绑软件的版本号。我使用SDK-4.2M6进行了尝试,其中某些可能已在RC3中更改。

  • 找不到MessageSource的ResourceBundle[classpath:/org/springframework/security/messages]源:找不到基本名称的bundle classpath:/org/springframework/security/messages,locale ru我找不到任何在Java中设置国际化的解决方案 我的代码是这样的

  • 我正在开发一个应用程序,它利用Hibernate框架将OSGi转换为更具体的Equinox Server。因此,我生成了库包和客户端插件,我在其中利用前面提到的库包对业务逻辑和数据库之间的通信进行编程。在我的项目中,我有以下包结构: 在管理器包中,我有那些负责将客户端与数据库和映射进行通信的类,其中一个包含配置文件和Hibernate映射文件。然而,当我部署捆绑包时,引用运行良好,但是我得到一个异

  • 我得到一个例外: 无法找到模板"" 其他类似的问题没有帮助;奇怪的是,它工作得很好,然后突然开始给我这个例外。 作曲家: 自动路由生成:单个RESTful控制器(用于简单资源) 配置: 路由: 控制器:

  • 我制作了一个简单的API包,它将在项目之间共享。每个对象/实体都有自己的配置,说明哪些字段以及如何序列化(分解为标量值)。它们将如何序列化取决于所选的规范化程序。现在只有一个默认的规范化器可以将值识别为标量、iterable或object。到目前为止效果很好。当您需要一些特定的序列化(比如DateTime)时(您不希望将对象分解为隐式标量值,而是设置输出格式),您只需要创建一个新的规范化器来相应地

  • 当我在android Studio中创建一个新项目时,捆绑文件显示错误 找不到此代码包,显示错误为-无法解析符号“Bundle”,且“@Override”不适用于方法。。我的android工作室缺少什么我不知道有什么建议。。什么是错误。。