Я сохраняю сущности над несколькими подключениями к базе данных. Класс, обрабатывающий persisting, реализует интерфейс runnable, и я создаю EntityManagers в методе run(). После чтения this, я хочу знать, лучше ли инициализировать EntityManagerFactory в конструкторе класса или в статическом блоке инициализации.Инициализация EntityManagerFactory в многопоточной среде
ответ
Я предполагаю, что вы используете JPA в Java SE - не Java EE. Более того, я предполагаю, что у вас есть класс, который обрабатывает существующие сущности - и вы имеете в виду этот класс, когда вы запрашиваете конструктор класса или статической инициализации. Более того, я предполагаю, что все ваши множественные соединения нацелены на одну и ту же базу данных ... и я предполагаю, что вы не будете повторно использовать свои экземпляры: ни ваши EntityManager
экземпляры, ни ваши экземпляры класса runnable.
Если предположения верны, то я предпочел бы инициализировать EntityManagerFactory
либо в статической инициализации вашего класса runnable, либо во втором классе, который реализован как singleton.
Если вы создаете EntityManagerFactory
в конструкторе класса класса runnable, у вас есть одна фабрика в каждом экземпляре (то есть в потоке). Это возможно, но не нужно, потому что вам понадобится только один EntityManagerFactory
для нескольких логических идентичных экземпляров EntityManager
.
Другой вопрос: где создать сам EntityManager
: в конструкторе класса (позволяет ловить ошибки в начале потока инициализации) или в методе run
. Лично я предпочел бы run
-метод, потому что она позволяет создавать и закрывать EntityManager
в в то же способом с использованием try/finally
)
Предупреждение: Имейте в виду, что у Вас нет никаких транзакций между несколькими потоками.
- 1. zerorpc в многопоточной среде?
- 2. Shiro в многопоточной среде
- 3. Деструктор в многопоточной среде?
- 4. rockdb в многопоточной среде
- 5. Куча в многопоточной среде
- 6. BufferedReader в многопоточной среде
- 7. Singleton в многопоточной среде
- 8. Создание UID в многопоточной и многопоточной среде
- 9. Перехват Ninject в многопоточной среде
- 10. Функция mkdirs() в многопоточной среде
- 11. Обновления Singleton в многопоточной среде
- 12. Эти указатели в многопоточной среде
- 13. Код последовательности в многопоточной среде
- 14. время выполнения в многопоточной среде
- 15. Блокировка документов в многопоточной среде
- 16. Jain SIP в многопоточной среде
- 17. Использование TraceSource в многопоточной среде
- 18. Использование HashMap в многопоточной среде
- 19. улавливающие сигналы в многопоточной среде
- 20. Переменные переменных в многопоточной среде
- 21. Android ResultReceiver в многопоточной среде
- 22. Hashmaps, используемые в многопоточной среде
- 23. Необходимость id_callback в многопоточной среде?
- 24. Использование sqlite в многопоточной среде
- 25. пружинный автомат в многопоточной среде
- 26. Использование CList в многопоточной среде
- 27. Повышение активности в многопоточной среде
- 28. записи данных в массиве в многопоточной среде
- 29. Возвращаясь словарь в C# в многопоточной среде
- 30. Безопасен ли поток EclipseLink EntityManagerFactory?
Я думаю, что нужно добавить EntityManagerFactory, а затем создать новый EntityManager в каждом потоке, так как ваше приложение также должно быть потокобезопасным, это решение, которое я использовал для аналогичного требования. –