2015-12-23 9 views
1

У меня есть несколько переменных экземпляра класса: userSF который является SessionFactory и userCfg который является Configuration настроен на использование user.cfg.xml. Когда у меня есть кто-то войти в мое приложение их информацию Логина базы данных хватают из файла происходит следующее:Многократное Hibernate SessionFactory

userCfg.setProperty("hibernate.connection.username", username); 
userCfg.setProperty("hibernate.connection.password", password); 
userSF = userCfg.buildSessionFactory(); 

Когда пользователь из приложения закрывает сеанс завод. тогда, когда другой пользователь пытается войти в тот же код вызывается с именем пользователя и смены пароля на основе того, кто регистрирует в Проблема заключается в том, что второй раз это называется, я получаю исключение:.

org.hibernate.HibernateException: HHH000469: The ClassLoaderService can not be reused. This instance was stopped already. 

Есть ли способ повторного использования переменной SessionFactory для нескольких логинов?

ответ

3

Вы не должны создавать SessionFactory для каждого зарегистрированного пользователя/конфигурации. Это очень дорогостоящий компонент и должен быть нацелен на шаблон Singleton. Используйте один экземпляр для каждого контекста в своем приложении.

Если у вас несколько конфигураций, вы можете кэшировать несколько экземпляров в области приложения. В зависимости от вашего приложения это может быть статический класс Singleton с использованием Map<MyUserPasswordKey, SessionFactory> или в контейнере JAVA-EE @ApplicationScoped EJB или JSF-Bean.

В случае, если контекст, основанный на ключе user-password, приведет к слишком большому количеству экземпляров SessionFactory, возможно, вам придется изменить приложение, чтобы управлять ими в группах разрешений или ограничивать свои функции в пределах вашего доступа к данным или уровня обслуживания.

+0

Как бы я мог использовать несколько соединений? Причина, по которой я спрашиваю, заключается в том, что каждый пользователь имеет разные разрешения в базе данных. –

+0

Я не знаю, почему у вас есть динамические разрешения в зависимости от данного пользователя в вашей базе данных и не ограничивайте доступ к данным на уровне доступа к данным, но даже если это требование, вы можете хранить экземпляры для каждой комбинации «пользовательский пароль». – djmj

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