Два файла EAR, один и тот же менеджер сущностей JPA, одна и та же транзакция => один и тот же сеанс? - PullRequest
6 голосов
/ 15 декабря 2010

Допустим, у меня есть два приложения, каждое с отдельным файлом EAR, которые вызывают друг друга в рамках одной транзакции JTA.Если оба используют один и тот же диспетчер сущностей, получают ли они один и тот же сеанс или каждый раз он создается новым?

1 Ответ

1 голос
/ 23 декабря 2010

EntityManager (в JPA) более или менее эквивалентен сеансу (в Hibernate). В чистом приложении JPA вы должны использовать только EntityManager. Он инкапсулирует сессию. Сессия живет столько же, сколько и EntityManager.

Нет причин (и я думаю, что нет способа) делить EntityManager между двумя приложениями, так как они работают в разных JVM (по крайней мере, на серверах приложений, с которыми я работал). То, что вы можете сделать, - это поделиться настройкой EntityManager (называемой единицей постоянства). Вы можете сделать это, поместив классы сущностей и XML в JAR и используя его из обоих приложений, но, как именно это будет сделано, вероятно, зависит от вашего сервера приложений. Это определенно будет иметь тот же эффект, что и дублирование классов и XML для второго приложения.

Что произойдет так: у каждого из двух приложений будет свой собственный контекст постоянства. Это означает, что при загрузке объекта в одном приложении он не будет загружен в другом приложении. Если вы загрузите и измените объект в приложении один, а затем загрузите его во втором приложении, приложение два увидит неизмененный объект (за исключением случаев, когда у вас есть очень странные параметры изоляции транзакций и , приложение 1 решает сначала очистить объект ).

Любые конфликты возникнут только в конце транзакции JTA. Я не знаю, что произойдет тогда, и я думаю, что это зависит от вашей базы данных и настроек транзакций. Вероятно, транзакция откатится, если оба приложения попытаются сделать разные вещи с одними и теми же данными. Каждое приложение будет иметь свою собственную связь с базой данных. Они связаны между собой транзакцией JTA, поэтому гарантируется, что либо оба фиксируют, либо оба выполняют откат.

...