From 0ecfda9980c44f4495fc1b0b2d7eecd05248f3a8 Mon Sep 17 00:00:00 2001 From: Rohan Sircar Date: Thu, 21 Nov 2019 23:24:15 +0530 Subject: [PATCH] db init service now uses hibernate connection instead of separate connection. Also, user sessions are now reset using jdbc as well --- .../chatto/service/DBInitializerService.java | 80 ++++++++++++++++--- 1 file changed, 68 insertions(+), 12 deletions(-) diff --git a/chatto/src/main/java/org/ros/chatto/service/DBInitializerService.java b/chatto/src/main/java/org/ros/chatto/service/DBInitializerService.java index a97ba00..da936bb 100644 --- a/chatto/src/main/java/org/ros/chatto/service/DBInitializerService.java +++ b/chatto/src/main/java/org/ros/chatto/service/DBInitializerService.java @@ -12,6 +12,11 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.transaction.Transactional; + +import org.hibernate.Session; import org.ros.chatto.model.ApplicationStatus; import org.ros.chatto.model.UserSession; import org.ros.chatto.repository.UserSessionRepository; @@ -54,9 +59,11 @@ public class DBInitializerService { @Autowired private UserSessionRepository userSessionRepository; - + private final Logger logger = LoggerFactory.getLogger(DBInitializerService.class); - + + @PersistenceContext + private EntityManager entityManager; public void connectDB() throws SQLException { connection = DriverManager.getConnection(url, userName, password); @@ -70,6 +77,21 @@ public class DBInitializerService { // while(resultSet.next()) // { // System.out.println(resultSet.get); +// } + resultSet.next(); + int numTables = resultSet.getInt("num_tables"); +// System.out.println(numTables); + return numTables; + } + + public int getNumTables(Connection connection) throws SQLException { + PreparedStatement preparedStatement = connection.prepareStatement(numTablesQuery); +// preparedStatement.get + preparedStatement.setString(1, dbName); + ResultSet resultSet = preparedStatement.executeQuery(); +// while(resultSet.next()) +// { +// System.out.println(resultSet.get); // } resultSet.next(); int numTables = resultSet.getInt("num_tables"); @@ -78,25 +100,51 @@ public class DBInitializerService { } @EventListener(ApplicationReadyEvent.class) + @Transactional public void doSomethingAfterStartup() throws SQLException, IOException { // setProperties(); - - connectDB(); + +// connectDB(); logger.info("Application Started - running initializer service"); // System.out.println("Checking database and application state"); -// - if (getNumTables() == 0) { - logger.info("Database is empty. Populating tables and roles"); - populateDB(); - } - closeConnection(); + Session session = entityManager.unwrap(Session.class); + + session.doWork(connection -> { + if (getNumTables(connection) == 0) { + logger.info("Database is empty. Populating tables and roles"); + try { + populateDB(connection); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + }); + +// if (getNumTables() == 0) { +// logger.info("Database is empty. Populating tables and roles"); +// populateDB(); +// } +// closeConnection(); + + session.doWork(connection -> { + resetAllUserSessions(connection); + }); resetAllUserSessions(userSessionRepository.findAll()); } - public void populateDB() throws SQLException, IOException { + private void populateDB() throws SQLException, IOException { + ScriptUtils.executeSqlScript(connection, + new EncodedResource(new ClassPathResource("scheme.sql"), StandardCharsets.UTF_8)); + ScriptUtils.executeSqlScript(connection, + new EncodedResource(new ClassPathResource("datae.sql"), StandardCharsets.UTF_8)); + + } + + private void populateDB(Connection connection) throws SQLException, IOException { ScriptUtils.executeSqlScript(connection, new EncodedResource(new ClassPathResource("scheme.sql"), StandardCharsets.UTF_8)); ScriptUtils.executeSqlScript(connection, @@ -114,7 +162,6 @@ public class DBInitializerService { new EncodedResource(new ClassPathResource("datae.sql"), StandardCharsets.UTF_8)); } - Map listToMap(List applicationStatusList) { Map statusMap = new HashMap<>(); for (ApplicationStatus applicationStatus : applicationStatusList) { @@ -135,5 +182,14 @@ public class DBInitializerService { }).collect(Collectors.toList()); userSessionRepository.saveAll(userSessionsResetList); } + + private void resetAllUserSessions(Connection connection) throws SQLException + { + String sql = "update user_sessions set online=0, num_sessions=0"; + + PreparedStatement preparedStatement = connection.prepareStatement(sql); + + preparedStatement.executeUpdate(); + } } \ No newline at end of file