LINUX.ORG.RU

Не инициализируется экземпляр EntityManager

 ,


0

1

Привет всем.

Есть такой учебный код: Address - класс-сущность - http://pastebin.com/mF5bSmjH,

AddressBean - служебный бин, с операцией «добавить в базу» - http://paste.ubuntu.com/13736902/

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="LearnPU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>LearnDS</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.schema-generation.database.action" 
                value="drop-and-create"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="hibernate.show_sql" value="true"/>
    </properties>
  </persistence-unit>
</persistence>

И класс теста добавления сущности в базу: http://paste.ubuntu.com/13736962/

В итоге по запуску теста, получаю исключение NullPointerException. Отлаживаю тест, смотрю значение manager - так точно, null.

У кого какие идеи есть по поводу этого безобразия?

Гуглил Гугл, стековерфловил, но внятных ответов не нашел.

Ответ на: комментарий от LongLiveUbuntu

можешь запаковать в архив и выложить (или выслать на hedin.pr@gmail.com), чтобы можно было запустить локально и посмотреть?

stevejobs ★★★★☆
()

я не очень шарю в этих ваших EJB, так что чисто на телепатии - аннотация @PersistenceContext будет работать только внутри контейнера/аппликейшен-сервера, а ты свой код пытаешься запустить просто как обычное приложение, через int main()

или допустим у тебя запускается в контейнере, но неправильно (или никак) сконфигурен EJB, так что при старте dependency injection не стартует

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)

null

Кто у тебя в тестах инжектит персистенс контекст в бин? Из кода похоже что никто, вот он у тебя и нулл.

Смотри в сторону createEntityManagerFactory и впихнуть его в бин руками.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

так тесты тоже надо в контейнере запускать (а не просто так), тогда инжект должен сработать как и везде, не?

и костыли соответствующие имеются: http://arquillian.org/features/

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

так тесты тоже надо в контейнере запускать (а не просто так), тогда инжект должен сработать как и везде, не?

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

ya-betmen ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Вот и я про это, ДИ — та ещё магия н аннотациях и рефлекшене.

ya-betmen ★★★★★
()
Ответ на: комментарий от stevejobs

Всё ещё нет, попробую пока обойтись обычными бинами.

LongLiveUbuntu ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.