001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.fukurou.util;
017
018 import java.io.IOException;
019 import java.io.Closeable;
020 import java.sql.Connection;
021 import java.sql.ResultSet;
022 import java.sql.Statement;
023 import java.sql.SQLException;
024 import java.util.zip.ZipFile; // 5.5.2.6 (2012/05/25)
025
026 /**
027 * Closer.java ã¯ã€å?通的ã«ä½¿ç”¨ã•れã‚?close処ç?‚’é›?´?—ãŸã?クラスã§ã™ã?
028 *
029 * å?¨® close() 処ç?§ã¯ã€Exception ãŒç™ºç”Ÿã—ã¦ã‚‚ã?ã©ã?™ã‚‹ã“ã¨ã‚‚å?æ¥ãªã?
030 * ケースãŒå¤šã?ã‚りã¾ã™ã?ã¾ãŸã?close() 処ç?¸ã® Exception ã®ç‚ºã?‘ã«ã€?
031 * try ??catch ç¯?‚’用æ„ã—ãªã‘れã°ãªã‚‰ãšã€finally ç¯??ã‹ã‚‰ã® ã•らãªã‚?
032 * throw ãªã©ã€ã‚³ãƒ¼ãƒ?‚£ãƒ³ã‚°ä¸Šã?本æµä»¥å¤–ã?ç®?‰€ã§ã€è‰²ã€?¨å•題ãŒç™ºç”Ÿã—ã¾ã™ã?
033 * ã“ã“ã§ã¯ã€ã¨ã‚Šã‚ãˆãšã€LogWriter.log ã™ã‚‹ã?‘ã«ã—ã¦ã?¾ã™ãŒã€?
034 * å°?¥çš?«ã¯ã€ã‚¨ãƒ©ãƒ¼ã‚’別ファイルã«ã‚»ãƒ¼ãƒ–ã—ãŸã‚Šã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?ã‚¹ã«æ›¸ã込んã ã‚?
035 * 出æ¥ã‚‹ã¨æ€ã„ã¾ã™ã?
036 *
037 * ã¾ãŸã?close 処ç?¨ã¯ç•°ãªã‚Šã¾ã™ãŒã€commit ã‚??rollback ãªã©ã€finally ç¯?«
038 * 書ã込んã§ã€å¿?šå‡¦ç?—ãŸã„ãŒã?Exception 発生時ã«ã€ã©ã?—よã†ã‚‚ãªã??ç?‚‚ã€?
039 * ã“ã“ã«é›?´?—ã¦ã?ã¾ã™ã?
040 *
041 * @version 4.0
042 * @author Kazuhiko Hasegawa
043 * @since JDK5.0,
044 */
045 public final class Closer {
046
047 /**
048 * ã™ã¹ã¦ã?staticメソãƒ?ƒ‰ãªã®ã§ã€ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã‚’呼ã³å‡ºã•ãªãã—ã¦ãŠãã¾ã™ã?
049 *
050 */
051 private Closer() {}
052
053 /** シスãƒ?ƒ ä¾å˜ã?改行記å·ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã? */
054 private static final String CR = System.getProperty("line.separator");
055
056 /**
057 * io関連㮠close 処ç?™‚ã® IOException を無視ã—ã¦ã€close 処ç?‚’行ã„ã¾ã™ã?
058 * ã“ã“ã§ã¯ã€å?ç?¸ã®ã‚¨ãƒ©ãƒ¼ã¯ã€System.err ã«å‡ºåŠ›ã™ã‚‹ã ã‘ã§ç„¡è¦–ã—ã¾ã™ã?
059 *
060 * ã“れã«ã‚ˆã‚Šã€try ??catch ??finally 処ç?§ã€close ã‚?finally 処ç?‹ã‚?
061 * 例外をé€å?ã•ã›ãªãã¦ã™ã?よã†ã«ãªã‚Šã¾ã™ã?
062 * 引数ãŒã?null ã®å ´åˆã?ã€ä½•も処ç?—ã¾ã›ã‚“ã€?æ£å¸¸:trueã‚’è¿”ã—ã¾ã™ã?)
063 *
064 * @og.rev 4.0.0.0 (2007/02/08) æ–°è¦è¿½åŠ?
065 *
066 * @param obj Closeableインターフェースを実è£?—ãŸIO関連オブジェクãƒ?
067 *
068 * @return æ£å¸¸:true/異常:false
069 */
070 public static boolean ioClose( final Closeable obj ) {
071 boolean isOK = true;
072
073 try {
074 if( obj != null ) { obj.close(); }
075 }
076 catch( IOException ex ) {
077 isOK = false;
078 String errMsg = "ストリーãƒ?close 処ç?§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€? + CR
079 + ex.getMessage() + CR
080 + obj.toString() ;
081 LogWriter.log( errMsg );
082 LogWriter.log( ex );
083 }
084 catch( RuntimeException ex ) {
085 isOK = false;
086 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€? + CR
087 + ex.getMessage() + CR
088 + obj.toString() ;
089 LogWriter.log( errMsg );
090 LogWriter.log( ex );
091 }
092
093 return isOK;
094 }
095
096 /**
097 * Connection オブジェクトを commit ã—ã¾ã™ã?
098 * ã“ã“ã§ã¯ã€å?ç?¸ã®ã‚¨ãƒ©ãƒ¼ã¯ã€System.err ã«å‡ºåŠ›ã™ã‚‹ã ã‘ã§ç„¡è¦–ã—ã¾ã™ã?
099 *
100 * @og.rev 4.0.0.0 (2007/02/08) æ–°è¦è¿½åŠ?
101 *
102 * @param conn コãƒã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ–ジェクãƒ?
103 *
104 * @return æ£å¸¸:true/異常:false
105 */
106 public static boolean commit( final Connection conn ) {
107 boolean isOK = true;
108
109 try {
110 if( conn != null ) { conn.commit(); }
111 }
112 catch( SQLException ex ) {
113 String errMsg = "Connection ã‚?commit ã™ã‚‹ã“ã¨ãŒå?æ¥ã¾ã›ã‚“ã€? + CR
114 + ex.getMessage() + ":" + ex.getSQLState() + CR ;
115 LogWriter.log( errMsg );
116 LogWriter.log( ex );
117 }
118 catch( RuntimeException ex ) {
119 isOK = false;
120 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€? + CR
121 + ex.getMessage() + CR ;
122 LogWriter.log( errMsg );
123 LogWriter.log( ex );
124 }
125
126 return isOK;
127 }
128
129 /**
130 * Connection オブジェクトをrollbackã—ã¾ã™ã?
131 * ã“ã“ã§ã¯ã€å?ç?¸ã®ã‚¨ãƒ©ãƒ¼ã¯ã€æ¨™æº–å?力ã«å‡ºåŠ›ã™ã‚‹ã ã‘ã§ç„¡è¦–ã—ã¾ã™ã?
132 *
133 * @og.rev 4.0.0.0 (2007/02/08) æ–°è¦è¿½åŠ?
134 *
135 * @param conn コãƒã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ–ジェクãƒ?
136 *
137 * @return æ£å¸¸:true/異常:false
138 */
139 public static boolean rollback( final Connection conn ) {
140 boolean isOK = true;
141
142 try {
143 if( conn != null ) { conn.rollback(); }
144 }
145 catch( SQLException ex ) {
146 String errMsg = "Connection ã‚?rollback ã™ã‚‹ã“ã¨ãŒå?æ¥ã¾ã›ã‚“ã€? + CR
147 + ex.getMessage() + ":" + ex.getSQLState() + CR;
148 LogWriter.log( errMsg );
149 LogWriter.log( ex );
150 }
151 catch( RuntimeException ex ) {
152 isOK = false;
153 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€? + CR
154 + ex.getMessage() + CR;
155 LogWriter.log( errMsg );
156 LogWriter.log( ex );
157 }
158
159 return isOK;
160 }
161
162 /**
163 * Connection オブジェクトをcloseã—ã¾ã™ã?
164 * ã“ã“ã§ã¯ã€å?ç?¸ã®ã‚¨ãƒ©ãƒ¼ã¯ã€æ¨™æº–å?力ã«å‡ºåŠ›ã™ã‚‹ã ã‘ã§ç„¡è¦–ã—ã¾ã™ã?
165 *
166 * ã“ã“ã§ã¯ã€ç¾å®Ÿã? Connection ã® close() メソãƒ?ƒ‰ã‚’呼ã³å‡ºã—ã¾ã™ã?ã§ã€?
167 * ã‚ャãƒ?‚·ãƒ¥ç‰ã§ä½¿ç”¨ã—ã¦ã?‚‹ã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ã«ã¯é©ç”¨ã—ãªã?§ãã ã•ã„ã€?
168 *
169 * @og.rev 4.0.0.0 (2007/02/08) æ–°è¦è¿½åŠ?
170 * @og.rev 5.5.5.0 (2012/07/28) commit追�
171 *
172 * @param conn コãƒã‚¯ã‚·ãƒ§ãƒ³ã‚ªãƒ–ジェクãƒ?
173 *
174 * @return æ£å¸¸:true/異常:false
175 */
176 public static boolean connClose( final Connection conn ) {
177 boolean isOK = true;
178
179 try {
180 if( conn != null && ! conn.isClosed() ) {
181 conn.commit(); // 5.5.5.0 (2012/07/28)
182 conn.close();
183 }
184 }
185 catch( SQLException ex ) {
186 String errMsg = "Connection ã‚?rollback ã™ã‚‹ã“ã¨ãŒå?æ¥ã¾ã›ã‚“ã€? + CR
187 + ex.getMessage() + ":" + ex.getSQLState() + CR;
188 LogWriter.log( errMsg );
189 LogWriter.log( ex );
190 }
191 catch( RuntimeException ex ) {
192 isOK = false;
193 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€? + CR
194 + ex.getMessage() + CR;
195 LogWriter.log( errMsg );
196 LogWriter.log( ex );
197 }
198
199 return isOK;
200 }
201
202 /**
203 * Statement オブジェクトをクãƒãƒ¼ã‚ºã—ã¾ã™ã?
204 * ã“ã“ã§ã¯ã€å?ç?¸ã®ã‚¨ãƒ©ãƒ¼ã¯ã€æ¨™æº–å?力ã«å‡ºåŠ›ã™ã‚‹ã ã‘ã§ç„¡è¦–ã—ã¾ã™ã?
205 *
206 * @og.rev 4.0.0.0 (2007/02/08) æ–°è¦è¿½åŠ?
207 *
208 * @param stmt Statementオブジェク�
209 *
210 * @return æ£å¸¸:true/異常:false
211 */
212 public static boolean stmtClose( final Statement stmt ) {
213 boolean isOK = true;
214
215 try {
216 if( stmt != null ) { stmt.close(); }
217 }
218 catch( SQLException ex ) {
219 String errMsg = "Statement ã‚?close ã™ã‚‹ã“ã¨ãŒå?æ¥ã¾ã›ã‚“ã€?
220 + ex.getMessage() + ":" + ex.getSQLState() + CR;
221 LogWriter.log( errMsg );
222 LogWriter.log( ex );
223 }
224 catch( RuntimeException ex ) {
225 isOK = false;
226 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€? + CR
227 + ex.getMessage() + CR;
228 LogWriter.log( errMsg );
229 LogWriter.log( ex );
230 }
231
232 return isOK;
233 }
234
235 /**
236 * ResultSet オブジェクトをクãƒãƒ¼ã‚ºã—ã¾ã™ã?
237 * ã“ã“ã§ã¯ã€å?ç?¸ã®ã‚¨ãƒ©ãƒ¼ã¯ã€æ¨™æº–å?力ã«å‡ºåŠ›ã™ã‚‹ã ã‘ã§ç„¡è¦–ã—ã¾ã™ã?
238 *
239 * @og.rev 4.0.0.0 (2007/02/08) æ–°è¦è¿½åŠ?
240 *
241 * @param result ResultSetオブジェク�
242 *
243 * @return æ£å¸¸:true/異常:false
244 */
245 public static boolean resultClose( final ResultSet result ) {
246 boolean isOK = true;
247
248 try {
249 if( result != null ) { result.close(); }
250 }
251 catch( SQLException ex ) {
252 String errMsg = "ResultSet ã‚?close ã™ã‚‹ã“ã¨ãŒå?æ¥ã¾ã›ã‚“ã€?
253 + ex.getMessage() + ":" + ex.getSQLState() + CR;
254 LogWriter.log( errMsg );
255 LogWriter.log( ex );
256 }
257 catch( RuntimeException ex ) {
258 isOK = false;
259 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€? + CR
260 + ex.getMessage() + CR;
261 LogWriter.log( errMsg );
262 LogWriter.log( ex );
263 }
264
265 return isOK;
266 }
267
268 /**
269 * ZipFile オブジェクトをクãƒãƒ¼ã‚ºã—ã¾ã™ã?
270 * Jar ファイルもã?ã“ã?メソãƒ?ƒ‰ã§ã‚¯ãƒãƒ¼ã‚ºã—ã¾ã™ã?
271 * ã“ã“ã§ã¯ã€å?ç?¸ã®ã‚¨ãƒ©ãƒ¼ã¯ã€æ¨™æº–å?力ã«å‡ºåŠ›ã™ã‚‹ã ã‘ã§ç„¡è¦–ã—ã¾ã™ã?
272 *
273 * @og.rev 5.5.2.6 (2012/05/25) findbugs対応ã«ä¼´ã??æ–°è¦è¿½åŠ?
274 *
275 * @param zipFile ZipFileオブジェク�
276 *
277 * @return æ£å¸¸:true/異常:false
278 */
279 public static boolean zipClose( final ZipFile zipFile ) {
280 boolean isOK = true;
281
282 try {
283 if( zipFile != null ) { zipFile.close(); }
284 }
285 catch( IOException ex ) {
286 String errMsg = "ZipFile/JarFile ã‚?close ã™ã‚‹ã“ã¨ãŒå?æ¥ã¾ã›ã‚“ã€?
287 + ex.getMessage() + ":" + zipFile.getName() + CR;
288 LogWriter.log( errMsg );
289 LogWriter.log( ex );
290 }
291 catch( RuntimeException ex ) {
292 isOK = false;
293 String errMsg = "予期ã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€? + CR
294 + ex.getMessage() + CR;
295 LogWriter.log( errMsg );
296 LogWriter.log( ex );
297 }
298
299 return isOK;
300 }
301 }