2011-01-04 3 views
0

У меня есть следующий код:спящий режим мульти нити и синхронизации

public class HibernateUtil { 

private static final SessionFactory sessionFactory; 

static { 
try { 
Configuration cfg = new Configuration(); 

cfg=cfg.configure(); 
sessionFactory = cfg.buildSessionFactory(); 
} catch (Throwable ex) { 
    System.out.println("** Initial SessionFactory creation failed: " + ex.getMessage()); 
throw new ExceptionInInitializerError(ex); 
} 
} 
public static final ThreadLocal hibernateSession = new ThreadLocal(); 

public static Session currentSession() { 
    Session s = (Session) hibernateSession.get(); 
    if (s == null) { 
     s = sessionFactory.openSession(); 
     //System.out.println("sessionFactory.openSession()"); 
     hibernateSession.set(s); 
    } 
    return s; 
} 

public static void closeSession() { 
    Session s = (Session) hibernateSession.get(); 
    if (s != null) 
     s.close(); 
    hibernateSession.set(null); 
} 
} 

Также

public class Db { 
    public static synchronized void Insert(Object updateBean) { 
    org.hibernate.Session hibernateSession = HibernateUtil.currentSession(); 
    try { 
     Transaction tx = hibernateSession.beginTransaction(); 
     hibernateSession.save(updateBean); 
     tx.commit(); 
    } catch(Exception e) { 
     System.out.println("*hibernate insert Exception: "+e.getMessage()); 
    } 

    HibernateUtil.closeSession(); 
} 
} 

спящий режим использует C3P0 пулы. Затем Db.Insert вызывается из JSP-страниц в рабочей среде с загруженным сервером.

Мой вопрос: если я удалил «синхронизированный» на Db.Insert (Object) Не могли бы вы вызвать проблемы?

Я понимаю, что это то, что я, скорее всего, уже знаю, но не хочу и не хочу проверять его и получать ошибки.

Также, если это может вызвать указанные проблемы, тогда я не уверен, насколько я понимаю смысл использования c3p0 для пула соединений ... мое понимание на данный момент вызывает HibernateUtil.currentSession(); или hibernateSession.beginTransaction(); называет доступное соединение из пула c3p0, и никогда не должно встречаться два.

Извините, что для первого бита кода, не являющегося «кодом», эта веб-форма просто не хочет работать правильно.

Спасибо за чтение

+0

Я отформатировал код для вас - в следующий раз, пожалуйста, используйте кнопку '{}' в редакторе или просто отпустите свой код на 4 пробела :-) –

+0

Спасибо, Питер. Я несколько раз пробовал {} несколько раз , но все еще было не очень приятно с первого бита кода. – NeedInsight

ответ

1

Там не будет никаких проблем, если вы удалите synchronized на самом деле ваше приложение может просто выполнить немного лучше.

В зависимости от конфигурации вашей гибернации. Hibernate запросит соединение из пула либо в течение жизни сеанса, либо в течение срока действия транзакции.

+0

Я не думал, но знал, что нужно спросить ... Спасибо, Гарет. – NeedInsight

+0

oop .. дополнительная .. да причина в том, что я могу улучшить производительность, особенно в пиковые времена. – NeedInsight

+0

, но не верьте мне на слово и получите копию профилировщика YourKit с сайта http://www.yourkit.com/. сначала измерьте, отрежьте второй –

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