db init service now uses hibernate connection instead of separate connection. Also, user sessions are now reset using jdbc as well

This commit is contained in:
Rohan Sircar 2019-11-21 23:24:15 +05:30
parent bee90dcef0
commit 0ecfda9980

View File

@ -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<String, Boolean> listToMap(List<ApplicationStatus> applicationStatusList) {
Map<String, Boolean> 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();
}
}