KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > dlog4j > action > DlogActionBase


1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU Library General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15  */

16 package dlog4j.action;
17
18 import java.sql.Connection JavaDoc;
19 import java.sql.ResultSet JavaDoc;
20 import java.sql.SQLException JavaDoc;
21 import java.sql.Statement JavaDoc;
22
23 import javax.servlet.ServletContext JavaDoc;
24 import javax.servlet.http.HttpServletRequest JavaDoc;
25 import javax.servlet.http.HttpServletResponse JavaDoc;
26
27 import org.apache.struts.action.ActionErrors;
28 import org.apache.struts.action.ActionForm;
29 import org.apache.struts.action.ActionForward;
30 import org.apache.struts.action.ActionMapping;
31
32 import dlog4j.Globals;
33 import dlog4j.formbean.UserForm;
34
35 import web.struts.ActionExtend;
36 import net.sf.hibernate.HibernateException;
37 import net.sf.hibernate.Session;
38 import net.sf.hibernate.SessionFactory;
39
40 /**
41  * DLOG项目的基础Action类
42  * @author Liudong
43  */

44 public abstract class DlogActionBase extends ActionExtend {
45
46     /**
47      * 该方法覆盖了父类的功能,主要是为了resin 3.0.x的兼容性做了改进
48      * 对于其他应用服务器并没有影响,同时统一了formbean的自动validate功能
49      * 要求所有的action都必须关闭自动validate功能,而在此处进行统一处理
50      * Action类执行入口
51      */

52     public ActionForward execute(ActionMapping mapping, ActionForm form,
53             HttpServletRequest JavaDoc req, HttpServletResponse JavaDoc res) throws Exception JavaDoc
54     {
55         ActionForward forward = null;
56         //统一validate
57
if(form!=null){
58             ActionErrors errors = form.validate(mapping, req);
59             if(errors!=null && !errors.isEmpty()){
60                 saveErrors(req, errors);
61                 forward = mapping.getInputForward();
62             }
63         }
64         if(forward==null)
65             forward = super.execute(mapping,form,req,res);
66         //处理resin 3.0.x 的兼容性问题 -> jspe小服务程序
67
if(!forward.getRedirect()){
68             //传递要forward的路径给jspe小服务程序
69
req.setAttribute(Globals.ACTION_PATH_KEY, forward.getPath());
70         }
71         return forward;
72     }
73
74     /**
75      * 获取当前操作用户的信息
76      * @param req
77      * @return
78      */

79     public static UserForm getLoginUser(HttpServletRequest JavaDoc req){
80         return UserForm.getLoginUser(req);
81     }
82     /**
83      * 获取Hibernate持久层的操作实例
84      * @return
85      */

86     protected Session getSession() throws SQLException JavaDoc{
87         ServletContext JavaDoc context = servlet.getServletContext();
88         SessionFactory sessions = (SessionFactory)context.getAttribute(dlog4j.Globals.HIBERNATE_SESSIONS_KEY);
89         return sessions.openSession(getConnection());
90     }
91     /**
92      * 提交Hibernate操作
93      * @param session
94      * @throws SQLException
95      * @throws HibernateException
96      */

97     protected void commitSession(Session session, boolean close) throws SQLException JavaDoc, HibernateException{
98         session.flush();
99         session.connection().commit();
100         if(close){
101             session.connection().close();
102             session.close();
103         }
104     }
105     
106     /**
107      * 关闭session
108      * @param session
109      * @throws SQLException
110      * @throws HibernateException
111      */

112     protected void closeSession(Session session) throws SQLException JavaDoc,HibernateException{
113         session.connection().close();
114         session.close();
115     }
116     
117     /**
118      * 一般用于释放数据库资源,例如 close(ps,conn);
119      * @param obj1
120      * @param obj2
121      */

122     public static void close(Object JavaDoc obj1,Object JavaDoc obj2){
123         close(obj1);
124         close(obj2);
125     }
126     
127     /**
128      * 一般用于释放数据库资源,例如 close(rs,ps,conn);
129      * @param obj1
130      * @param obj2
131      * @param obj3
132      */

133     public static void close(Object JavaDoc obj1,Object JavaDoc obj2,Object JavaDoc obj3){
134         close(obj1);
135         close(obj2);
136         close(obj3);
137     }
138     
139     /**
140      * 资源释放
141      * @param obj
142      */

143     public static void close(Object JavaDoc obj){
144         if(obj==null)
145             return;
146         try{
147             if(obj instanceof Connection JavaDoc)
148                 ((Connection JavaDoc)obj).close();
149             else
150             if(obj instanceof Statement JavaDoc)
151                 ((Statement JavaDoc)obj).close();
152             else
153             if(obj instanceof ResultSet JavaDoc)
154                 ((ResultSet JavaDoc)obj).close();
155             else
156             if(obj instanceof Session){
157                 Session snn = (Session)obj;
158                 snn.connection().close();
159                 snn.close();
160             }
161         }catch(Exception JavaDoc e){}
162         obj = null;
163     }
164
165 }
166
Popular Tags