2013-08-06 2 views
1

Я строю свое первое приложение Java с Hibernate и немного проблем с сеансами Hibernate.Hibernate несколько сеансов с разными пользователями

Моя проблема: Когда второй пользователь регистрируется в приложении, он переопределяет сеанс для первого пользователя -> оба работают на втором сеансе. Хотя оба пользователя создать новый сеанс при входе в

Мой код:.

первый я получить текущий пользователь при входе пользователя в систему (LoginDetail.java):

userBean = UserProxy.getInstance().getElementByUser(userBean.getUser(), userBean.getPassword()); 

UserProxy.java:

public static synchronized UserProxy getInstance() { 

    if (instance == null) { 
     instance = new UserProxy(); 
    } 

    return instance; 
} 
public UserBean getElementByUser(String user, String password) { 

    try { 
     Iterator<SUsers> iter = s.createQuery("from SUsers where user = '" + user + "' and password = '" + password + "'").list().iterator(); 
     while (iter.hasNext()) { 
      userDB = iter.next(); 
      currentUser = convertClassToBean(userDB); 
      log.debug("aktuell ausgewaehlter char: " + userDB.getId()); 
     } 

    } catch (Exception e) { 
     log.error(e); 
     e.printStackTrace(); 
    } 

    currentUser = convertClassToBean(userDB); 

    return currentUser; 
} 

Мои HibernateUtil.java:

public static final ThreadLocal<Session> session = new ThreadLocal<Session>(); 
public static Session currentSession() { 
    Session s = session.get(); 
    // Open a new Session, if this Thread has none yet 
    if (s == null) { 
     s = sessionFactory.openSession(); 

     session.set(s); 
    } 
    return s; 
} 

и hibernate.cfg.xml:

<property name="connection.pool_size">1</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="current_session_context_class">thread</property> 
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
    <property name="show_sql">true</property> 
    <property name="hbm2ddl.auto">update</property> 
    <property name="hibernate.connection.isolation">2</property> 

Может кто-нибудь дать мне подсказку, как решить эту проблему?

+0

Эй, заседание вы говорите about.I угадать должны быть какие-либо проблемы, возвращающиеся же сеанс спящего режима без учета того, какой пользователь зарегистрирован в –

+0

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

ответ

1

Насколько я заинтересован, создание сеанса - это легкая операция (Hibernate docs), поэтому не нужно создавать новый сеанс каждый раз, когда вы его используете, ЕСЛИ вы его не используете, давайте просто скажем более 100 раз за второй. Правильный способ для этого состоит в том, что ваш HibernateUtil не возвращает сеанс, а сеансовый заводский интерфейс. SessionFactory - это ThreadSafe, поэтому не беспокойтесь о согласии. Вы должны создать новый сеанс для своих запросов с использованием фабрики, запроса DB и закрыть его, чтобы вернуть соединение в спящий пул подключений. Выкройка:

  1. Get завод
  2. Открыть сессию
  3. опрашивать DB
  4. Закрыть сессию
+0

Спасибо за сообщение, это помогает в моем понимании! Но я все еще не уверен, как действовать дальше. Я хочу, чтобы currentUser хранился в сеансе все время, пока пользователь работает над приложением, поэтому я не закрываю сессию. Как я могу достичь того, что пользователь не войдет в систему без открытого сеанса? – Markus

+0

Ты простреливаешь себя в ловушку. Не путайте сеанс hibernate с сеансом пользователя (например, php-сеанс или любой другой тип сеанса). В моем ответе я упоминаю сеанс Hibernate, который относится ТОЛЬКО к базе данных, а не к сеансу пользовательского приложения. Это не имеет ничего общего с сохранением текущей идентичности пользователя. – Antoniossss

+0

Спасибо за помощь. Теперь я понимаю реальную проблему и попытаюсь решить ее с помощью Wicket Session для моей аутентификации Пользователя! – Markus

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