Не удается инициализировать EntityManager в Netbeans через Junit - PullRequest
3 голосов
/ 25 октября 2010

У меня есть куча классов обслуживания (ejb 3), которые я хочу протестировать.Для этого я добавил в их реализующие классы перегруженный конструктор, который принимает EntityManager в качестве аргумента.Идея состоит в том, что во время моих модульных тестов я буду создавать как экземпляр EntityManager из модуля персистентности, специфичного для моих модульных тестов, так и экземпляр моего класса обслуживания с использованием перегруженного конструктора.Там я прохожу EntityManger, созданный из моих в моих модульных тестах.

Мой PU настроен следующим образом:

<persistence-unit name="MyPU-junit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source/>
    <properties>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>

И это то, что я делаю, чтобы создать мой EntityManager в моем модульном тесте:

    Map<String, String> config = new HashMap<String, String>();
    config.put("connection.url", "jdbc:postgresql://localhost:5432/MyDb");
    config.put("connection.username", "postgres");
    config.put("connection.password", "admin12345_");
    config.put("connection.driver_class", "org.postgresql.Driver");
    config.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
    config.put("hibernate.show_sql", "true");
    emf = Persistence.createEntityManagerFactory("MyPU-junit", config);
    em = emf.createEntityManager();

Проблема в том, что я получаю эту ошибку:

SEVERE: could not complete schema update
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
        at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
        at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:27)
        at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:127)
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:314)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)

Я не уверен, что она связана с предыдущей ошибкой, но я также получаю кучу предупреждений отсинтаксический анализатор во время инициализации:

Failed to read schema document 'http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd'

Обратите внимание, что я попытался запустить то же самое, поместив параметры гибернации в файл persistence.xml напрямую, а не программно.

Я использую netbeans6.9.

ДЕЙСТВИТЕЛЬНО приветствуется любая помощь!Я действительно расстроен этим ...

Ответы [ 3 ]

0 голосов
/ 30 марта 2014

Что касается предупреждений парсера, может быть, ваш xml неправильный?Попробуйте заключить в вашу конфигурацию следующее (которое извлечено из действительного файла 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>
0 голосов
/ 13 декабря 2014

Я исправил аналогичную проблему, убедившись, что все необходимые библиотеки находятся в папке «Test Librearies» (драйвер jdbc, библиотеки hibernate, ..)

0 голосов
/ 26 октября 2010

Используйте следующее:

Map<String, String> config = new HashMap<String, String>();
config.put("hibernate.connection.url", "jdbc:postgresql://localhost:5432/MyDb");
config.put("hibernate.connection.username", "postgres");
config.put("hibernate.connection.password", "admin12345_");
config.put("hibernate.connection.driver_class", "org.postgresql.Driver");
config.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
config.put("hibernate.show_sql", "true");
emf = Persistence.createEntityManagerFactory("MyPU-junit", config);
em = emf.createEntityManager();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...