1 45 package org.openejb.alt.config; 46 47 import java.io.File ; 48 import java.net.URL ; 49 import java.sql.Connection ; 50 import java.sql.DriverManager ; 51 import java.sql.PreparedStatement ; 52 import java.sql.ResultSet ; 53 import java.sql.SQLException ; 54 import java.sql.Statement ; 55 import java.util.Properties ; 56 57 import org.openejb.util.FileUtils; 58 import org.openejb.util.JarUtils; 59 import org.openejb.OpenEJB; 60 import org.openejb.loader.SystemInstance; 61 62 78 public class ValidationTable { 79 80 81 private static ValidationTable table; 82 83 101 private static final String _createTable = "CREATE TABLE validation ( jar_path CHAR(150) PRIMARY KEY, last_validated CHAR(13), validator_version CHAR(20))"; 102 private static final String _selectValidated = "select last_validated, validator_version from validation where jar_path = ?"; 103 private static final String _updateValidated = "update validation set last_validated = (?), validator_version = ? where jar_path = ?"; 104 private static final String _insertValidated = "insert into validation (jar_path, last_validated, validator_version) values (?,?,?)"; 105 106 private static final String jdbcDriver = "org.enhydra.instantdb.jdbc.idbDriver"; 107 private static final String jdbcUrl = "jdbc:idb:conf/registry.properties"; 108 private static final String userName = "system"; 109 private static final String password = "system"; 110 111 private Connection conn; 112 114 private ValidationTable(){ 115 try{ 116 ClassLoader cl = OpenEJB.getContextClassLoader(); 118 Class.forName( jdbcDriver, true, cl); 119 conn = getConnection(); 121 } catch (Exception e){ 122 e.printStackTrace(); 123 } 124 try{ 125 Statement stmt = conn.createStatement(); 129 stmt.execute(_createTable); 130 stmt.close(); 131 } catch (Exception e){ 132 } finally { 134 try{ 135 conn.close(); 136 } catch (Exception e){} 137 } 138 } 139 140 private Connection getConnection() throws SQLException { 141 return DriverManager.getConnection(jdbcUrl, userName, password); 142 } 143 144 public static ValidationTable getInstance(){ 145 if (table == null) { 146 table = new ValidationTable(); 147 } 148 149 return table; 150 } 151 152 public boolean isValidated(String jarFile){ 153 try{ 154 File jar = SystemInstance.get().getBase().getFile(jarFile); 155 long lastModified = jar.lastModified(); 156 long lastValidated = getLastValidated(jar); 157 return (lastValidated > lastModified); 160 } catch (Exception e){ 161 return false; 162 } 163 } 164 165 public void setValidated(String jarFile){ 166 setLastValidated(jarFile, System.currentTimeMillis()); 167 } 168 169 170 public long getLastValidated(File jar){ 171 long validated = 0L; 172 try{ 173 conn = getConnection(); 174 175 String jarFileURL = jar.toURL().toExternalForm(); 176 177 PreparedStatement stmt = conn.prepareStatement(_selectValidated); 179 stmt.setString(1, jarFileURL); 180 181 ResultSet results = stmt.executeQuery(); 182 if (results.next()) { 183 String version = results.getString(2); 184 if (version == null || version.equals(getVersion())) { 186 validated = results.getLong(1); 187 } 189 } 190 stmt.close(); 191 } catch (Exception e){ 192 } finally { 195 try{conn.close();} catch (Exception e){} 196 } 197 return validated; 198 } 199 200 201 209 private long _getLastValidated(String jarFileURL){ 210 long validated = 0L; 211 try{ 212 conn = getConnection(); 213 214 PreparedStatement stmt = conn.prepareStatement(_selectValidated); 215 stmt.setString(1, jarFileURL); 216 217 ResultSet results = stmt.executeQuery(); 218 if (results.next()) { 219 validated = results.getLong(1); 220 } 221 stmt.close(); 222 } catch (Exception e){ 223 } finally { 226 try{conn.close();} catch (Exception e){} 227 } 228 return validated; 229 } 230 231 public void setLastValidated(String jarFile, long timeValidated){ 232 try{ 233 conn = getConnection(); 234 File jar = SystemInstance.get().getBase().getFile(jarFile); 235 String jarFileURL = jar.toURL().toExternalForm(); 236 PreparedStatement stmt = null; 239 if (_getLastValidated(jarFileURL) != 0L) { 240 stmt = conn.prepareStatement(_updateValidated); 241 stmt.setLong(1, timeValidated); 242 stmt.setString(2, getVersion()); 243 stmt.setString(3, jarFileURL); 244 } else { 245 stmt = conn.prepareStatement(_insertValidated); 246 stmt.setString(1, jarFileURL); 247 stmt.setLong(2, timeValidated); 248 stmt.setString(3, getVersion()); 249 } 250 251 stmt.executeUpdate(); 252 stmt.close(); 253 } catch (Exception e){ 254 } finally { 257 try{conn.close();} catch (Exception e){} 258 } 259 } 260 261 private String version = null; 262 263 private String getVersion(){ 264 if (version == null) { 265 268 Properties versionInfo = new Properties (); 269 270 try { 271 JarUtils.setHandlerSystemProperty(); 272 versionInfo.load( new URL ( "resource:/openejb-version.properties" ).openConnection().getInputStream() ); 273 } catch (java.io.IOException e) { 274 } 275 version = (String )versionInfo.get( "version" ); 276 } 277 return version; 278 } 279 } | Popular Tags |