Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Профессиональная реализация




Используя заданную выше последовательность, для инициализации mapping-файлов и для корректного манипулирования соединением с базой данных создается класс ConnectionFactory. Было замечено, что в некоторых версиях hibernate, несмотря на директиву autoReconnect=true, автоматическое пере­подключение к БД происходит со второго раза, то есть подключение происходит сразу же, но появляется исключение о невозможности подключиться к БД.

/* пример # 8: инициализация mapping и подключение к БД:

ConnectionFactory.java */

package com.hib;

import net.sf.hibernate.HibernateException;

import net.sf.hibernate.MappingException;

import net.sf.hibernate.Session;

import net.sf.hibernate.SessionFactory;

import net.sf.hibernate.cfg.Configuration;

import java.util.Date;

 

public class ConnectionFactory {

public static long timer = 0;

public static SessionFactory sessionFactory = null;

 

public static void initConnectionFactory() {

Date dt = new Date();

timer = dt.getTime();

try {

//добавление mapping-файлов в конфигурацию подключения

Configuration cfg = new Configuration().addClass(Student. class).addClass(Course. class);

 

//создание подключения к БД

sessionFactory = cfg.buildSessionFactory();

} catch (MappingException e) {

System.err.print(e);

} catch (HibernateException e) {

System.err.print(e);

destroy();

}

}

public static Session getOrInitSession() {

try {

Date curDate = new Date();

long curTime = curDate.getTime();

long tenminutes = 10 * 60 * 1000;

 

if (curTime - timer > tenminutes){

destroy();

}

else {

curDate = new Date();

timer = curDate.getTime();

}

if (sessionFactory == null) {

initConnectionFactory();

}

return sessionFactory.openSession();

 

} catch (HibernateException e) {

System.err.print(e);

destroy();

return null;

}

}

public static void destroy() {

timer = 0;

try {

//необходимо вызывать, т.к. иначе будут утечки памяти

sessionFactory.close();

} catch (Exception e) {

e.printStackTrace();

}

sessionFactory = null;

}

}

Данный класс проверяет наличие подключения к БД и сохраняет время проверки. Если на момент проверки класс «простаивает» больше 10 минут, то идет повторное подключение к базе данных. В случае удаления класса он предотвращает утечки памяти. Хотя в Hibernate есть средства для того, чтобы исключить необходимость подключать каждый hbm.xml файл по отдельности, всё же лучше это делать вручную во избежание указанных выше ошибок.

Этот класс обрабатывает ошибки, которые возникали на практике при работе c Hibernate, JDBC драйвером MySQL и сервером баз данных MySQL.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных