JPA createEntityManagerFactory «Неизвестный источник» ошибка (не J2EE) - PullRequest
1 голос
/ 27 февраля 2012

Я не могу найти, что не так: у многих людей возникают проблемы с созданием EntityManagerFactory с использованием имени PU.Но я проверил все предложения, и пока никто не помог.Я пытаюсь создать свое первое приложение JavaFX2.Это небольшое словарное приложение, изначально построенное на платформе Netbeans Application (путем расширения сгенерированных по умолчанию классов «Master-Detail»).Он использует базу данных SQLite.

Теперь я перенесу его оттуда в другой (с поддержкой JavaFX2) проект.Сначала я решил восстановить постоянство JPA в новом приложении.Насколько я вижу, у меня есть все на месте: META-INF / persistence.xml со всеми объявленными необходимыми классами сущностей, используя то же соединение с БД, что и в исходном приложении.

Я добавил eclipselink-2.3.0.jar ; eclipselink-javax.persistence-2.0.jar и eclipselink-jpa-modelgen-2.3.0.jar к проекту.

Вместо контекста приложения я использую простой класс Properties для хранения данных (например, запросов), которые ранее помещались в файлы .properties.

Это тестовый класс:

    package ithildinfx;

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.Group;
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableView;
    import javafx.scene.control.cell.PropertyValueFactory;
    import javafx.stage.Stage;
    import javafx.beans.property.StringProperty;
    import javafx.beans.property.SimpleStringProperty;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;

    public class IthildinFX extends Application {
       private void init(Stage primaryStage) {
          entityManager = javax.persistence.Persistence.createEntityManagerFactory("IthildinFXPU").createEntityManager(); 
          entryQuery = entityManager.createQuery(Properties.entryQuery).setParameter("gloss", "a%"); 
          entryList = entryQuery.getResultList();

          Group root = new Group();
          primaryStage.setScene(new Scene(root));
          (TableColumn definitions)
          (TableView code)
          root.getChildren().add(tableView);
       } 

       @Override 
       public void start(Stage primaryStage) throws Exception {
          init(primaryStage);
          primaryStage.show();
       }

       public static void main(String[] args) { 
          launch(args); 
       }

       private javax.persistence.EntityManager entityManager;
       private java.util.List<ithildinfx.Entry> entryList;
       private javax.persistence.Query entryQuery;
   }

И это содержимое файла persistence.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/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">
      <persistence-unit name="IthildinFXPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>ithildinfx.Dataclass</class>
        <class>ithildinfx.Metadata</class>
        <class>ithildinfx.Translation</class>
        <class>ithildinfx.Entry</class>
        <class>ithildinfx.TrMd</class>
        <class>ithildinfx.Language</class>
        <properties>
          <property name="javax.persistence.jdbc.url" value="jdbc:sqlite:lib/db/ithildin-13-11-11.db"/>
          <property name="javax.persistence.jdbc.password" value=""/>
          <property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC"/>
          <property name="javax.persistence.jdbc.user" value=""/>
        </properties>
      </persistence-unit>
    </persistence>

Одно из предложений, которые я прочитал здесь в StackOverflowбыло добавить эту строку в manifest.mf :

    Meta-Persistence: META-INF/persistence.xml

и, возможно:

    JPA-PersistenceUnits: IthildinFXPU

Но ни один из них не имел значения.

Это вывод, который я всегда получаю:

Building jar: /Users/luthien/NetBeansProjects/IthildinFX/dist/IthildinFX.jar
Copy libraries to /Users/luthien/NetBeansProjects/IthildinFX/dist/lib.
Building jar: /Users/luthien/NetBeansProjects/IthildinFX/dist/IthildinFX.jar
Detected JavaFX Ant API version 1.1
Deleting: /Users/luthien/NetBeansProjects/IthildinFX/dist/IthildinFX.jar
Deleting: /Users/luthien/NetBeansProjects/IthildinFX/dist/lib/IthildinFX.jar
Deleting: /Users/luthien/NetBeansProjects/IthildinFX/dist/README.TXT
Skip jar copy to itself: IthildinFX.jar
Skip jar copy to itself: lib/eclipselink-2.3.0.jar
Skip jar copy to itself: lib/eclipselink-javax.persistence-2.0.jar
Skip jar copy to itself: lib/eclipselink-jpa-modelgen-2.3.0.jar
Skip jar copy to itself: lib/sqlite-jdbc-3.7.2.jar
jfx-deployment:
jar:
run:
Exception in Application start method
java.lang.NullPointerException
    at javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver.getProviderNames(Unknown Source)
    at javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver.getPersistenceProviders(Unknown Source)
    at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
    at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
    at ithildinfx.IthildinFX.init(IthildinFX.java:29)
    at ithildinfx.IthildinFX.start(IthildinFX.java:109)
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:298)
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:136)
    at com.sun.javafx.application.PlatformImpl$3.run(PlatformImpl.java:108)
JavaFX application launcher: calling System.exit
jfxsa-run:
BUILD SUCCESSFUL (total time: 5 seconds)

Кажется, что библиотеки находятся в нужном месте - в любом случае, они находятся в том же месте, что и впервое приложение.Возможно, что среда приложений Netbeans делает какое-то страшное вуду под капотом, но я действительно не знаю, как это выяснить.

Кто-нибудь знает причину, почему он не может найтиPU?

Заранее спасибо!Luthien

1 Ответ

0 голосов
/ 28 февраля 2012

Там ошибка исходит от самой библиотеки JPA, кажется, что JPA настроен неправильно.Проблема, похоже, не имеет ничего общего с модулем сохранения, у библиотеки JPA, похоже, есть проблемы, похоже, что она не может найти ресурс файла своих служб.

Возможно, удалите eclipselink-javax.persistence-2.0.jar, если на вашем сервере уже есть JPA в пути к классам, может возникнуть конфликт.

...