2016-06-07 6 views
0

У меня есть клиент-серверное приложение, которое я сделал для проекта в моем университете, и у меня возникают проблемы с синхронизацией кэша базы данных JPA. Я использую управляемый приложениями EntityManager, о котором я узнал из других сообщений, что это очень сложно использовать, потому что вы всегда должны быть осторожны, чтобы открыть и закрыть его.Как внедрить EntityManager в Java SE с помощью @PersistenceContext (EclipseLink)

Лучшим решением, которое я нашел в этой проблеме, является использование управляемого контейнером EntityManager, инициализированного с помощью аннотации @PersitenceContext, и таким образом мне больше не придется беспокоиться об открытии и закрытии EM.

Итак, мой реальный вопрос заключается в том, как выполняется инъекция EntityManager в Java SE с использованием EclipseLink JPA, потому что я никогда не пропускал исключение NullPointerException. Я приложу некоторые принт-экраны к примеру этой операции и, как я думаю, это нужно сделать.

Для моего проекта я использую jdk 1.8, базовую конфигурацию jpa (2.1) и EclipseLink 2.5.x в качестве платформы. На стороне БД я использую MySql-Server и не сервер приложений (этот должен быть разработан мной).

persistence.xml файл

2 классов, которые содержат пример: https://gyazo.com/a7b1a372875a259096dc220653cd5bcd

+0

Как Ласло сказал, вы можете использовать только «управляемый контейнер EntityManager», если у вас есть «контейнер». «Контейнер» - это имя для фреймворка, такого как сервер Java EE или Spring. Все, что нужно запомнить о _all_ Java-аннотациях, это то, что они просто метаданные без какого-либо поведения. Некоторый другой код должен прочитать аннотацию, а затем действовать по ней: «контейнер». – DavidS

+0

(Кстати, когда вы отправляете код, разместите фактический код, а не скриншоты. Используйте разметку кода, чтобы получить правильный отступ и раскраску.) – DavidS

+0

вы также можете запустить контейнер cdi самостоятельно и без весны: https: // deltaspike .apache.org / –

ответ

2

Вы не можете использовать контейнер удалось живучесть в соответствии с используемыми технологиями перечисленных вами, потому что вы делаете не имеет контейнера, который мог бы обрабатывать инъекцию. Я понимаю, что вы не на сервере приложений JEE, поэтому у вас нет контейнера EJB.

Если вы хотите использовать JPA в качестве отдельного приложения вы можете сделать 2 вещи:

  1. Forget инъекции и использовать приложение управляемую бином.
  2. Используйте пружинный контейнер, и вы все еще можете впрыснуть: How to inject JPA EntityManager using spring