Я пытаюсь применить постоянную среду к приложению 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>