【问题标题】:Access to Derby database from another project using EclipseLink使用 EclipseLink 从另一个项目访问 Derby 数据库
【发布时间】:2015-02-25 09:12:01
【问题描述】:

我有一个创建和编写 Derby 数据库的动态 Web 项目。一切正常。这是我使用的persistence.xml

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="alerts" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>test.Alert</class>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:derby:databases/bDb;create=true" />
        <property name="javax.persistence.jdbc.user" value="user" />
        <property name="javax.persistence.jdbc.password" value="user-pwd" />
        <!-- EclipseLink should create the database schema automatically -->
        <property name="eclipselink.ddl-generation" value="create-tables" />
        <property name="eclipselink.ddl-generation.output-mode"
            value="database" />

        <property name="eclipselink.logging.level" value="FINEST" />
        <property name="eclipselink.logging.level.sql" value="FINEST" />
    </properties>
</persistence-unit>

现在我想创建一个读取相同数据库的 java 项目。所以我使用相同的persistence.xml(除了我将“create=true”更改为“create=false”,因为我不想创建新表)。但我收到了这个错误:

[EL Severe]: ejb: 2014-12-28 22:27:20.379--ServerSession(1488953836)--Thread(Thread[DefaultQuartzScheduler_Worker-7,5,main])--Local Exception Stack: 
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Database 'databases/bDb' not found.
Error Code: 40000
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:331)
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:326)
    at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:138)
    at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:204)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:741)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:239)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:685)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:204)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:304)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:302)

如果我使用“create=true”,它将创建一个新的数据库实例(它与我从 Web 项目中创建的不同)。我该如何解决这个问题?非常感谢!

【问题讨论】:

    标签: jpa eclipselink derby


    【解决方案1】:

    由于您在 jdbc.url (databases/bDb) 中使用了相对文件名,因此 Derby 正在寻找相对于您的应用程序启动目录的数据库。

    您的两个独立应用程序有两个独立的目录,它们在其中运行。

    您可以通过多种方式解决此问题:

    1. 安排每个应用程序从同一目录运行
    2. 在 jdb.url 值中使用绝对数据库路径名,而不是相对路径名
    3. 使用 Derby Network Server 配置,而不是 Derby Embedded 配置

    毫无疑问还有其他方法。

    【讨论】:

    • 解决了这个问题。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 2019-07-31
    • 2014-03-18
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多