2013-09-12 5 views
0

Я переношу приложение с рабочего стола на веб-сайт. В настольном приложении пользователи подключаются к базе данных Oracle с использованием разных пользователей базы данных, то есть пользователи управляются Oracle, а не в таблице базы данных. Все используют одну и ту же схему для хранения и управления данными, PLMU_PROD.PersistenceContext распространение

Я должен реализовать аутентификацию (JPA) для веб-приложения и, как я прочитал, мне нужно создать EntityManagerFactory для каждого пользователя базы данных.

Другим вариантом, о котором я думаю, является создание таблицы пользователей/паролей и использование одного и того же EntityManagerFactory для обслуживания всего EntityManager, поскольку все пользователи получат доступ к тем же данным, что и в схеме PLMU_PROD.

Интересно, существует ли общий ресурс PersistenceContext между различными EntityManagerFactories, так как мой веб-сервер имеет небольшую ОЗУ и не хочет тратить его на дублирование объектов.

Спасибо за ваше время!

ответ

0

Вы, кажется, ссылаетесь на кеширование. JPA требует, чтобы EntityManagers сохраняли объекты в кэше, чтобы отслеживать изменения. Поэтому каждый EntityManager должен иметь свой собственный кеш, сохраняя изменения, сделанные в отдельности от изменений, которые могут быть сделаны одновременно в других - изоляция транзакций. В EclipseLink существует концепция кеша второго уровня, который используется совместно на уровне EMFactory. http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching - хороший документ по кэшированию в EclipseLink. Этот кеш второго уровня помогает избежать доступа к базе данных и может быть отключен по мере необходимости. Если вашим EntityManager не нужно отслеживать изменения, например, если приложение доступно только для чтения, а сущности не изменены, вы можете установить запросы для возврата объектов из общего кэша, чтобы существовал только один экземпляр данных с использованием read - только запрос подсказки: http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/q_read_only.htm#readonly

Только для чтения экземпляры могут позволить избежать дублирования и использовать ресурсы без необходимости, но вам необходимо будет управлять ими надлежащим образом и получить управляемые копии из EntityManager перед внесением изменений.

Смежные вопросы