Использование может Быть в спящем режиме и пул Соединения Tomcat в то же время?

Следующий код позволяет вам получить весь stackTrace в формате String, без использования таких API, как log4J или даже java.util.Logger:

catch (Exception e) {
    StackTraceElement[] stack = e.getStackTrace();
    String exception = "";
    for (StackTraceElement s : stack) {
        exception = exception + s.toString() + "\n\t\t";
    }
    System.out.println(exception);
    // then you can send the exception string to a external file.
}
5
задан Am1rr3zA 15 May 2017 в 03:51
поделиться

2 ответа

Я лично предпочитаю не настраивать спящий режим с использованием пула соединений. Это можно сделать, просто опуская настройки пула соединений в нашей конфигурации гибернации и используя метод openSession (Connection):

Connection conn = ... // get from jndi
Session session = sessionFactory.openSession(connection);
try{
   //do some work with either hte connection or the session or both
}finally{
   session.close();
   conn.close();
}

Это дает то преимущество, что вы контролируете, какое соединение используется и где оно выделяется, а большинство что важно там, где он закрыт, это может быть важно, если вы выполняете транзакцию с использованием кода гибернации и jdbc.

РЕДАКТИРОВАТЬ: в @ ChssPly76 пункт об исключении встроенного управления транзакциями в спящий режим, и он совершенно прав, спящий режим обеспечивает разумную поддержку транзакций и если данный JTA будет синхронизироваться с любой текущей транзакцией. В приложении без JTA, где вам требуется, чтобы код hibernate и jdbc работал в одной и той же транзакции jdbc, важно убедиться, что сеанс гибернации использует то же соединение, что и код jdbc, лучший способ сделать это - предоставить Подключение к фабрике сеансов. Обратите внимание, что это не исключает использования объекта транзакции Hibernate:

Connection conn = ... // get from jndi
Session session = sessionFactory.openSession(connection);
try{
   Transaction tx = new Transaction(); // 
   //do some work with either hte connection or the session or both
   tx.commit();
}finally{
   session.close();
   conn.close();
}

он будет работать нормально.

2
ответ дан 14 December 2019 в 19:21
поделиться

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

hibernate.connection.datasource = java:/comp/env/jdbc/jdbcPool
hibernate.dialect = org.hibernate.dialect.MySQLDialect

Что касается сопоставлений, «сопоставленные» таблицы могут иметь отношения с «неотображенными» таблицами (в базе данных), но эти отношения также будут «не сопоставлены» (например, Hibernate не будет знать их). Поэтому, если вы пойдете по этому пути, вы должны быть уверены, что не вызовете каких-либо проблем с ссылочной целостностью при попытке, скажем, вставить / обновить "сопоставленный" объект.

3
ответ дан 14 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: