SHA256
62 lines
1.8 KiB
Java
62 lines
1.8 KiB
Java
package shine.db;
|
|
|
|
import shine.db.connection.DbProvider;
|
|
import shine.db.dao.DmDialogStateDAO;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.SQLException;
|
|
|
|
/**
|
|
* Нейтральная точка входа в runtime БД сервера.
|
|
*
|
|
* Runtime-сервер теперь поддерживает только PostgreSQL.
|
|
*/
|
|
public final class DbController implements DbProvider {
|
|
|
|
private static volatile DbController instance;
|
|
|
|
private final PostgresDbController delegate;
|
|
private volatile boolean dmDialogStateBootstrapped;
|
|
|
|
private DbController() {
|
|
this.delegate = PostgresDbController.getInstance();
|
|
}
|
|
|
|
public static DbController getInstance() {
|
|
if (instance == null) {
|
|
synchronized (DbController.class) {
|
|
if (instance == null) {
|
|
DbController created = new DbController();
|
|
instance = created;
|
|
created.bootstrapDmDialogStateIfNeeded();
|
|
}
|
|
}
|
|
}
|
|
return instance;
|
|
}
|
|
|
|
@Override
|
|
public Connection getConnection() throws SQLException {
|
|
return delegate.getConnection();
|
|
}
|
|
|
|
@Override
|
|
public void close() {
|
|
delegate.close();
|
|
}
|
|
|
|
private void bootstrapDmDialogStateIfNeeded() {
|
|
if (dmDialogStateBootstrapped) return;
|
|
synchronized (this) {
|
|
if (dmDialogStateBootstrapped) return;
|
|
try (Connection connection = delegate.getConnection()) {
|
|
DmDialogStateDAO.getInstance().bootstrapIfEmpty(connection);
|
|
dmDialogStateBootstrapped = true;
|
|
} catch (SQLException e) {
|
|
instance = null;
|
|
throw new RuntimeException("DM dialog state bootstrap failed", e);
|
|
}
|
|
}
|
|
}
|
|
}
|