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 }