Ошибка EclipseLink RCP e4: не указан поставщик сохраняемости для EntityManager - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь применить постоянную среду к приложению eclipse rcp e4. Для этого я создал пример проекта, почти полностью следуя инструкции https://www.vogella.com/tutorials/JavaPersistenceAPI/article.html,, но адаптируясь к rcp. Однако я получил ошибку «Поставщик сохраняемости для EntityManager с именем xxx not found». Я искал неделю, но не нашел решения. Может кто-нибудь сказать, пожалуйста, что это за ошибка на самом деле и как ее устранить?

Файл persistence.xml находится в папке tasks.model проекта META-INF. Eclipse.jar и javax.persistence.jar находятся в другом проекте плагина (ранее я определил зависимости maven в pom.xml. Хотя eclipse не сообщает об ошибках компиляции, но запуск продукта rcp приведет к ошибке, что ClassDefNotFoundException для персистентности, так что установка javax.persistence.jar в отдельном плагине убрал эту ошибку). В некоторых ответах предполагается, что файл persistence.xml должен находиться в папке src / resources / META-INF. Но в проекте плагина папка META-INF уже находится на своем месте по умолчанию. Я даже создал дополнительную папку resources / META-INF и поместил туда файл persistence.xml, но это не помогло. Если я создал обычный проект maven, то все работает правильно, даже когда я изменяю базу данных на mysql в localhost. Ошибки появляются, когда я преобразую проект в проект плагина для сборки приложений rcp.

Ошибка "Отсутствует поставщик сохраняемости для EntityManager" возникает при вызове команды:

factory = Persistence.createEntityManagerFactory("todos");

Мой файл persistence.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" ?>
<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="todos" transaction-type="RESOURCE_LOCAL">
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
     <class>tasks.model.Todo</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:derby:/tempGeo/simpleDB" />
            <property name="javax.persistence.jdbc.user" value="test" />
            <property name="javax.persistence.jdbc.password" value="test" />
            <!-- EclipseLink should create the database schema automatically -->
            <property name="eclipselink.ddl-generation" value="create-tables" />
            <property name="eclipselink.ddl-generation.output-mode" value="database" />
        </properties>

    </persistence-unit>
</persistence>
...