diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..94c0cbd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+logging/
+compiled-builds/
+*.iml
+.idea/
+target/**
+TODO.txt
+packet.pkt
+plugins/**
+src/test/
+target/
+config.ini
+*.txt
+*.jar
+*.log
+*.zip
+.DS_Store
+
diff --git a/Emulator/pom.xml b/Emulator/pom.xml
index cf63987..850f932 100644
--- a/Emulator/pom.xml
+++ b/Emulator/pom.xml
@@ -69,7 +69,9 @@
maven-javadoc-plugin
3.2.0
- -Xdoclint:none
+
+ -Xdoclint:none
+
public
@@ -104,9 +106,9 @@
- mysql
- mysql-connector-java
- 8.0.22
+ com.mysql
+ mysql-connector-j
+ 8.3.0
runtime
diff --git a/Emulator/src/main/java/com/eu/habbo/database/DatabasePool.java b/Emulator/src/main/java/com/eu/habbo/database/DatabasePool.java
index 9a33ba2..a2e8bac 100644
--- a/Emulator/src/main/java/com/eu/habbo/database/DatabasePool.java
+++ b/Emulator/src/main/java/com/eu/habbo/database/DatabasePool.java
@@ -8,44 +8,55 @@ import org.slf4j.LoggerFactory;
class DatabasePool {
private final Logger log = LoggerFactory.getLogger(DatabasePool.class);
+ private static final String DB_POOL_MAX_SIZE = "db.pool.maxsize";
+ private static final String DB_POOL_MIN_SIZE = "db.pool.minsize";
+ private static final String DB_HOSTNAME_KEY = "db.hostname";
+ private static final String DB_PORT_KEY = "db.port";
+ private static final String DB_PASSWORD_KEY = "db.password";
+ private static final String DB_NAME_KEY = "db.database";
+ private static final String DB_USER_KEY = "db.username";
+ private static final String DB_PARAMS_KEY = "db.params";
private HikariDataSource database;
+ private static DatabasePool instance;
+
+ DatabasePool() {
+ // Private constructor for singleton pattern
+ }
+
+ public static synchronized DatabasePool getInstance() {
+ if (instance == null) {
+ instance = new DatabasePool();
+ }
+ return instance;
+ }
public boolean getStoragePooling(ConfigurationManager config) {
try {
HikariConfig databaseConfiguration = new HikariConfig();
- databaseConfiguration.setMaximumPoolSize(config.getInt("db.pool.maxsize", 50));
- databaseConfiguration.setMinimumIdle(config.getInt("db.pool.minsize", 10));
- databaseConfiguration.setJdbcUrl("jdbc:mysql://" + config.getValue("db.hostname", "localhost") + ":" + config.getValue("db.port", "3306") + "/" + config.getValue("db.database", "habbo") + config.getValue("db.params"));
- databaseConfiguration.addDataSourceProperty("serverName", config.getValue("db.hostname", "localhost"));
- databaseConfiguration.addDataSourceProperty("port", config.getValue("db.port", "3306"));
- databaseConfiguration.addDataSourceProperty("databaseName", config.getValue("db.database", "habbo"));
- databaseConfiguration.addDataSourceProperty("user", config.getValue("db.username"));
- databaseConfiguration.addDataSourceProperty("password", config.getValue("db.password"));
- databaseConfiguration.addDataSourceProperty("dataSource.logger", "com.mysql.jdbc.log.StandardLogger");
- databaseConfiguration.addDataSourceProperty("dataSource.logSlowQueries", "true");
- databaseConfiguration.addDataSourceProperty("dataSource.dumpQueriesOnException", "true");
- databaseConfiguration.addDataSourceProperty("prepStmtCacheSize", "500");
- databaseConfiguration.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
- // databaseConfiguration.addDataSourceProperty("dataSource.logWriter", Logging.getErrorsSQLWriter());
- databaseConfiguration.addDataSourceProperty("cachePrepStmts", "true");
- databaseConfiguration.addDataSourceProperty("useServerPrepStmts", "true");
- databaseConfiguration.addDataSourceProperty("rewriteBatchedStatements", "true");
- databaseConfiguration.addDataSourceProperty("useUnicode", "true");
- databaseConfiguration.setAutoCommit(true);
- databaseConfiguration.setConnectionTimeout(300000L);
- databaseConfiguration.setValidationTimeout(5000L);
- databaseConfiguration.setLeakDetectionThreshold(20000L);
- databaseConfiguration.setMaxLifetime(1800000L);
- databaseConfiguration.setIdleTimeout(600000L);
- //databaseConfiguration.setDriverClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
+ databaseConfiguration.setMaximumPoolSize(config.getInt(DB_POOL_MAX_SIZE, 50));
+ databaseConfiguration.setMinimumIdle(config.getInt(DB_POOL_MIN_SIZE, 10));
+ databaseConfiguration.setJdbcUrl("jdbc:mysql://" + config.getValue(DB_HOSTNAME_KEY, "localhost") + ":" + config.getValue(DB_PORT_KEY, "3306") + "/" + config.getValue(DB_NAME_KEY) + config.getValue(DB_PARAMS_KEY));
+ databaseConfiguration.addDataSourceProperty("serverName", config.getValue(DB_HOSTNAME_KEY, "localhost"));
+ databaseConfiguration.addDataSourceProperty("port", config.getValue(DB_PORT_KEY, "3306"));
+ databaseConfiguration.addDataSourceProperty("databaseName", config.getValue(DB_NAME_KEY));
+ databaseConfiguration.addDataSourceProperty("user", config.getValue(DB_USER_KEY));
+ databaseConfiguration.addDataSourceProperty("password", config.getValue(DB_PASSWORD_KEY));
+ log.info("INITIALIZING DATABASE SERVER: " + config.getValue(DB_HOSTNAME_KEY));
+ log.info("ON PORT: " + config.getValue(DB_PORT_KEY));
+ log.info("HABBO DATABASE: " + config.getValue(DB_NAME_KEY));
+
this.database = new HikariDataSource(databaseConfiguration);
} catch (Exception e) {
+ log.error("Error initializing database connection pool: {}", e.getMessage());
return false;
}
return true;
}
public HikariDataSource getDatabase() {
- return this.database;
+ if (database == null) {
+ throw new IllegalStateException("Database connection pool is not initialized.");
+ }
+ return database;
}
}
\ No newline at end of file