Derby 嵌入式驱动程序错误 XBM02 请确保您的类路径包含正确的 Derby 软件

Derby Embedded Driver Error XBM02 Please ensure your classpath includes the correct Derby software

我正在使用 Spring 构建一个 JavaEE 应用程序,我正在尝试将它与 DerbyEmbeddedDriver 连接起来。此应用程序将在 SAP Hana Cloud Platform 试用版上使用,因此我使用的是他们的 Tomcat 8.

版本

Tomcat 8 可以在以下位置找到:https://tools.hana.ondemand.com/

SAP HCP:https://account.hanatrial.ondemand.com/

启动Tomcat服务器时出现错误。这是我看到的:

Caused by: ERROR XJ041: Failed to create database 'memory:DemoDB',详情见下一个异常。
    在 org.apache.derby.iapi.error.StandardException.newException(来源不明)
    在 org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(来源不明)
    ... 113 更多
原因:错误 XBM02:由于缺少 org.apache.derby.iapi.types.DataValueFactory 的功能,启动失败。请确保您的类路径包含正确的 Derby 软件。
    在 org.apache.derby.iapi.error.StandardException.newException(来源不明)
    在 org.apache.derby.iapi.error.StandardException.newException(来源不明)
    在 org.apache.derby.iapi.services.monitor.Monitor.missingImplementation(来源不明)
    在 org.apache.derby.impl.services.monitor.TopService.bootModule(来源不明)
    在 org.apache.derby.impl.services.monitor.BaseMonitor.startModule(来源不明)
    在 org.apache.derby.impl.services.monitor.FileMonitor.startModule(来源不明)
    在 org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(来源不明)
    在 org.apache.derby.impl.db.BasicDatabase.boot(来源不明)
    在 org.apache.derby.impl.services.monitor.BaseMonitor.boot(来源不明)
    在 org.apache.derby.impl.services.monitor.TopService.bootModule(来源不明)
    在 org.apache.derby.impl.services.monitor.BaseMonitor.boot 服务(未知来源)
    在 org.apache.derby.impl.services.monitor.BaseMonitor.createPersistentService(来源不明)
    在 org.apache.derby.impl.services.monitor.FileMonitor.createPersistentService(来源不明)
    在 org.apache.derby.iapi.services.monitor.Monitor.createPersistentService(来源不明)
    ... 还有 110 个

关于错误,我正在使用 Maven,这是我的 Derby 依赖项配置:

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derbyclient</artifactId>
    <version>10.13.1.1</version>
</dependency>

所以我假设 Maven 应该将其添加到 Maven Dependencies 库中,因此我不需要在类路径中显式添加它,对吗?

以及关于数据源对象的创建。此 Tomcat 服务器在 Servers//config_master/connection_data/connection.properties 下有一个配置文件,其中包含:

#----------------------------------------
# Connection parameters for a local Derby database
# DB and tables are created automatically (if missing)
#----------------------------------------
javax.persistence.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
javax.persistence.jdbc.url=jdbc:derby:memory:DemoDB;create=true
javax.persistence.jdbc.user=demo
javax.persistence.jdbc.password=demo
eclipselink.target-database=Derby

#----------------------------------------
# Connection parameters MaxDB
#----------------------------------------
#javax.persistence.jdbc.driver=com.sap.dbtech.jdbc.DriverSapDB
#javax.persistence.jdbc.url=jdbc:sapdb://<host>/DEMO
#javax.persistence.jdbc.user=demo
#javax.persistence.jdbc.password=demo
#eclipselink.target-database=org.eclipse.persistence.platform.database.MaxDBPlatform

这是由服务器使用的,它会创建一个新的数据源,并根据定义的名称将其注入到上下文中,所以当我想在应用程序中获取它时,我所做的就是:

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() throws NamingException {
        InitialContext ctx = new InitialContext();
        DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/memory/DemoDB");

        return dataSource;
    }
}

你能指出我可能遗漏的任何内容吗?

我发现了问题...问题是 derby 依赖项作为测试依赖项在 pom.xml 上列出了两次...

这个 pom.xml 文件是从另一个项目中重复使用的,在清理它时跳过了它。