001: /*
002: * This program is free software; you can redistribute it and/or modify
003: * it under the terms of the GNU General Public License as published by
004: * the Free Software Foundation; either version 2 of the License, or
005: * (at your option) any later version.
006: *
007: * This program is distributed in the hope that it will be useful,
008: * but WITHOUT ANY WARRANTY; without even the implied warranty of
009: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
010: * GNU Library General Public License for more details.
011: *
012: * You should have received a copy of the GNU General Public License
013: * along with this program; if not, write to the Free Software
014: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
015: */
016: package dlog4j;
017:
018: import java.sql.Connection;
019: import java.sql.ResultSet;
020: import java.sql.SQLException;
021: import java.sql.Statement;
022:
023: import javax.servlet.ServletContext;
024: import javax.sql.DataSource;
025:
026: import net.sf.hibernate.HibernateException;
027: import net.sf.hibernate.Session;
028: import net.sf.hibernate.SessionFactory;
029:
030: /**
031: * 所有Manager类的基类,用于封装所有访问Hibernate以及数据库的方法
032: * 该了在DlogActionServlet的init过程中被初始化
033: * @author Liudong
034: */
035: public class ManagerBase {
036:
037: private static ServletContext context;
038:
039: protected static void init(ServletContext servletContext) {
040: if (servletContext != null)
041: context = servletContext;
042: }
043:
044: /**
045: * 获取Hibernate持久层的操作实例
046: * @return
047: */
048: public static Session getSession() throws SQLException {
049: SessionFactory sessions = (SessionFactory) context
050: .getAttribute(dlog4j.Globals.HIBERNATE_SESSIONS_KEY);
051: return sessions.openSession(getConnection());
052: }
053:
054: /**
055: * 获取到数据库的连接句柄
056: * @return
057: * @throws SQLException
058: */
059: public static Connection getConnection() throws SQLException {
060: DataSource dataSource = (DataSource) context
061: .getAttribute(org.apache.struts.Globals.DATA_SOURCE_KEY);
062: return dataSource.getConnection();
063: }
064:
065: /**
066: * 提交Hibernate操作
067: * @param session
068: * @throws SQLException
069: * @throws HibernateException
070: */
071: public static void commitSession(Session session, boolean close)
072: throws SQLException, HibernateException {
073: session.flush();
074: session.connection().commit();
075: if (close) {
076: session.connection().close();
077: session.close();
078: }
079: }
080:
081: /**
082: * 关闭session
083: * @param session
084: * @throws SQLException
085: * @throws HibernateException
086: */
087: public static void closeSession(Session session)
088: throws SQLException, HibernateException {
089: session.connection().close();
090: session.close();
091: }
092:
093: public static void close(Object obj1, Object obj2, Object obj3) {
094: close(obj1);
095: close(obj2);
096: close(obj3);
097: }
098:
099: /**
100: * 资源释放
101: * @param obj
102: */
103: public static void close(Object obj) {
104: if (obj == null)
105: return;
106: try {
107: if (obj instanceof Connection)
108: ((Connection) obj).close();
109: if (obj instanceof Statement)
110: ((Statement) obj).close();
111: if (obj instanceof ResultSet)
112: ((ResultSet) obj).close();
113: if (obj instanceof Session)
114: closeSession((Session) obj);
115: } catch (Exception e) {
116: }
117: obj = null;
118: }
119:
120: }
|