|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Профессиональная реализацияИспользуя заданную выше последовательность, для инициализации 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. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |