EntityManager в SSB null

Я пытаюсь обновить небольшую альфа-версию корпоративного приложения, изначально написанного на Java6. Теперь я хочу использовать:

  • Ява 7
  • последняя версия JSF
  • Мавен
  • EJB 3.2 с Glassfish

Пока что я могу без проблем развернуть свой файл EAR на Glassfish. Мое веб-приложение может быть загружено, первые страницы JSF работают нормально. И мой вспомогательный компонент JSF, похоже, также нормально загружает сеансовые компоненты без сохранения состояния. Отладка показала мне, что я могу переходить с одного SSB на другой с помощью моего поддерживающего компонента. Последний и последний шаг, который мне не хватает, — это мой менеджер сущностей и настойчивость.

Мой класс помечен @Stateless, и я использую:

@PersistenceContext(unitName = "myProjectPU")
    protected EntityManager entityManager;

Но менеджер сущностей нулевой :(

Мой файл persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
  xmlns="http://xmlns.jcp.org/xml/ns/persistence"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
  http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="myProjectPU" transaction-type="JTA">
  <jta-data-source>jdbc/myProject</jta-data-source>
    <properties>
      <property name="javax.persistence.schema-generation.create-database-schemas" value="true" />
    </properties>
    </persistence-unit>
  </persistence>

Есть идеи? Должен ли файл persistence.xml находиться внутри модуля ear maven? Прямо сейчас он находится в модуле ejb maven, где находятся мои классы, использующие диспетчер сущностей.


person Arquillian    schedule 01.04.2014    source источник
comment
Обычно у меня есть файл persistence.xml внутри модуля, который его использует... Также убедитесь, что он находится по этому пути -> src\main\resources\META-INF\persistence.xml   -  person Schokea    schedule 01.04.2014
comment
спасибо, но это именно то место, где находится мой файл persistence.xml. так что это кажется действительным. и я думаю, что аннотации верны. сеансовый компонент без сохранения состояния загружается нормально. что еще может привести к тому, что менеджер сущностей будет нулевым?   -  person Arquillian    schedule 01.04.2014


Ответы (1)


Ну наконец-то я нашел проблему. Прокрутка журналов Glassfish показала, что исключение нулевого указателя последовало за более ранним исключением, в котором говорилось: «База данных не выбрана». Проблема была не в коде, а в JDBC-подключении Glassfish, которое я сделал. Мой пинг работал нормально, и я думал, что соединение в порядке. Но вам не нужно только добавлять порт mysql, имя пользователя и пароль. Вы также ДОЛЖНЫ изменить URL-адрес по умолчанию и добавить (дополнительные свойства в пул соединений) следующее значение:

jdbc:mysql://localhost:3306/ваша база данных

до того, как по умолчанию было установлено значение: jdbc:mysql://:3306/

Также позаботьтесь о двух параметрах: Url и URL! После этого не только успешно прошел ping, но и соединение с базой данных с диспетчером объектов работало нормально. :(

person Arquillian    schedule 13.04.2014