1 31 package org.blojsom.util.database; 32 33 import org.apache.commons.logging.Log; 34 import org.apache.commons.logging.LogFactory; 35 import org.blojsom.util.BlojsomUtils; 36 import org.hibernate.SQLQuery; 37 import org.hibernate.Session; 38 import org.hibernate.SessionFactory; 39 import org.hibernate.Transaction; 40 41 import javax.servlet.ServletConfig ; 42 import java.io.BufferedReader ; 43 import java.io.InputStream ; 44 import java.io.InputStreamReader ; 45 import java.io.StringReader ; 46 import java.sql.Connection ; 47 import java.sql.PreparedStatement ; 48 import java.util.List ; 49 50 57 public class DatabaseLoader { 58 59 private Log _logger = LogFactory.getLog(DatabaseLoader.class); 60 61 private static final String DEFAULT_DETECT_BLOJSOM_SQL = "show tables;"; 62 63 private String _dbScript; 64 private SessionFactory _sessionFactory; 65 private ServletConfig _servletConfig; 66 private String _detectBlojsomSQL; 67 private boolean _upgrading = false; 68 69 72 public DatabaseLoader() { 73 } 74 75 80 public void setSessionFactory(SessionFactory sessionFactory) { 81 _sessionFactory = sessionFactory; 82 } 83 84 89 public void setDbScript(String dbScript) { 90 _dbScript = dbScript; 91 } 92 93 98 public void setServletConfig(ServletConfig servletConfig) { 99 _servletConfig = servletConfig; 100 } 101 102 107 public void setDetectBlojsomSQL(String detectBlojsomSQL) { 108 _detectBlojsomSQL = detectBlojsomSQL; 109 } 110 111 116 public void setUpgrading(boolean upgrading) { 117 _upgrading = upgrading; 118 } 119 120 123 public void init() { 124 if (_dbScript == null) { 125 if (_logger.isErrorEnabled()) { 126 _logger.error("No database creation script defined"); 127 } 128 129 return; 130 } 131 132 if (BlojsomUtils.checkNullOrBlank(_detectBlojsomSQL)) { 133 _detectBlojsomSQL = DEFAULT_DETECT_BLOJSOM_SQL; 134 } 135 136 Session session = _sessionFactory.openSession(); 137 Transaction tx = null; 138 139 try { 140 tx = session.beginTransaction(); 141 142 if (!_upgrading) { 143 if (_logger.isInfoEnabled()) { 144 _logger.info("About to create blojsom database"); 145 } 146 } else { 147 if (_logger.isInfoEnabled()) { 148 _logger.info("About to upgrade blojsom database"); 149 } 150 } 151 152 SQLQuery sqlQuery = session.createSQLQuery(_detectBlojsomSQL); 153 List tables = sqlQuery.list(); 154 155 if (tables.size() > 0 && !_upgrading) { 156 if (_logger.isInfoEnabled()) { 157 _logger.info("blojsom database already created"); 158 } 159 } else { 160 Connection sqlConnection = session.connection(); 161 162 InputStream is = _servletConfig.getServletContext().getResourceAsStream(_dbScript); 163 BufferedReader bufferedReader = new BufferedReader (new InputStreamReader (is)); 164 String input; 165 StringBuffer sql = new StringBuffer (); 166 167 while ((input = bufferedReader.readLine()) != null) { 168 if (!input.startsWith("--") && !"".equals(input.trim())) { 169 if (!input.endsWith(";")) { 170 sql.append(input).append(" "); 171 } else { 172 sql.append(input).append("\n"); 173 } 174 } 175 } 176 177 if (_logger.isInfoEnabled()) { 178 _logger.info("Read in sql script"); 179 } 180 181 bufferedReader = new BufferedReader (new StringReader (sql.toString())); 182 PreparedStatement preparedStatement; 183 184 while ((input = bufferedReader.readLine()) != null) { 185 preparedStatement = sqlConnection.prepareStatement(input); 186 preparedStatement.execute(); 187 } 188 189 if (!_upgrading) { 190 if (_logger.isInfoEnabled()) { 191 _logger.info("Finised blojsom database creation"); 192 } 193 } else { 194 if (_logger.isInfoEnabled()) { 195 _logger.info("Finised upgrading blojsom database"); 196 } 197 } 198 } 199 200 tx.commit(); 201 } catch (Exception e) { 202 if (_logger.isErrorEnabled()) { 203 _logger.error(e); 204 } 205 206 if (tx != null) { 207 tx.rollback(); 208 } 209 } finally { 210 session.close(); 211 } 212 } 213 } 214 | Popular Tags |