起動・前提準備
初期テーブル、依存状態、定期処理の点灯など、このクラスが動き始める前提をまとめています。
My S Q L Score Service に関するサービス層・業務処理を担当します。
com.example.rankingpluginMySQLScoreService.javaclassクラス直前の Javadoc は見つかりませんでした。ソースとメソッド構成から責務を補完しています。
My S Q L Score Service に関するサービス層・業務処理を担当します。(root) パッケージの中でも 789 行規模の中核クラスで、永続化境界・スケジューラが一か所に集まっています。中規模クラス群の中では変更影響が広く、章立てで読む価値が高いため重点解説へ追加しています。
MySQLScoreServiceinitTablesAndCachesloadLastRolloverMonthloadMonthlyTopenqueueDeltasaveScoresaveLastRolloverMonthsaveMonthlyHistorysaveAll初期テーブル、依存状態、定期処理の点灯など、このクラスが動き始める前提をまとめています。
外部から呼ばれる公開メソッドや、対象プレイヤー・対象データ・対象ワールドを引き当てる経路です。
メモリ状態と保存状態を揃え、結果を次の呼び出しや画面表示へ繋ぐ部分です。
停止時やフロー終端で残る実体・タスク・キャッシュを戻す出口です。
DB テーブルとの境界です。スキーマ変更や保存漏れの切り分けはここから行います。
このクラスが前提状態を揃え、外部から利用可能な形まで立ち上がる流れです。新規依存の追加や起動失敗の調査はまずここから追います。
イベント受理、判定、状態更新、通知までの主経路です。体感不具合や想定外の分岐はこの流れのどこで止まるかを見ると切り分けやすいです。
結果を保持し、必要なら永続化し、最後に掃除まで行う出口です。画面更新だけ合って保存が壊れるケースや残骸が残るケースの確認に向きます。
SQL 文字列から抽出できた主要テーブルです。スキーマ変更時の確認用です。
| Signature | 説明 | 主要呼び出し |
|---|---|---|
public MySQLScoreService(JavaPlugin plugin, DataSource ds) | 推奨:共有 DataSource 受け取りコンストラクタ | 主要呼び出しなし |
public MySQLScoreService(JavaPlugin plugin, DataSource ds, VerifiedScorePlayers verifiedPlayers) | 依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。 | initTablesAndCaches → getScheduler → runTaskTimerAsynchronously → flushAllPending → getLogger → warning |
public MySQLScoreService(JavaPlugin plugin, MySQLConfig cfg) | 互換:古い呼び出し用(内部で共有プールに委譲) | init |
| Name | Visibility | Kind | 説明 |
|---|---|---|---|
| getDataSource | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| MySQLScoreService | public | コンストラクタ | 推奨:共有 DataSource 受け取りコンストラクタ |
| MySQLScoreService | public | コンストラクタ | 依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。 |
| MySQLScoreService | public | コンストラクタ | 互換:古い呼び出し用(内部で共有プールに委譲) |
| isEligiblePlayerName | private | メソッド | 条件判定を行い、後続処理の分岐に使える真偽値を返します。 |
| initTablesAndCaches | private | メソッド | 初期化と各種登録を行い、機能を有効化します。 |
| getScore | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| getRank | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| saveScore | public | メソッド | ★重要: 以前は saveScore() が即DBへ「絶対値更新」していたが、 addScore() が「deltaバッチ反映」になった時点で saveScore() と addScore() の順序が崩れると「後からdeltaが足される」事故が起きる。 |
| addScore | public | メソッド | addScore の主要処理を担当します。 |
| flush | public | メソッド | flush の主要処理を担当します。 |
| flushAllPending | private | メソッド | DB への問い合わせまたは更新処理を担当します。 |
| loadLastRolloverMonth | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| saveLastRolloverMonth | public | メソッド | 状態を永続化または更新し、最新状態へ反映します。 |
| saveMonthlyHistory | public | メソッド | 状態を永続化または更新し、最新状態へ反映します。 |
| getAllScores | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| getTopScores | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| getCacheView | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| getRevision | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| getTopScoresCached | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| getRanksCached | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| getLiveSnapshot | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| refreshFromExternalDb | private | メソッド | refreshFromExternalDb の主要処理を担当します。 |
| hasScoresTaggedForMonth | public | メソッド | 条件判定を行い、後続処理の分岐に使える真偽値を返します。 |
| getScoresForStoredMonth | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| clearCurrentScoresForMonth | public | メソッド | DB への問い合わせまたは更新処理を担当します。 |
| saveAll | public | メソッド | 状態を永続化または更新し、最新状態へ反映します。 |
| saveMonthlyScores | public | メソッド | 状態を永続化または更新し、最新状態へ反映します。 |
| updateHighScores | public | メソッド | 状態を永続化または更新し、最新状態へ反映します。 |
| clearCurrentScores | public | メソッド | DB への問い合わせまたは更新処理を担当します。 |
| getMonthlyTop | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| getMonthlyTopCached | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| loadMonthlyTop | private | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| getHighTop | public | メソッド | 必要な状態を取得し、呼び出し側で利用しやすい形へ返します。 |
| shutdown | public | メソッド | 共有プールはここでは閉じない(DbPool. |
| fetchMap | private | メソッド | DB への問い合わせまたは更新処理を担当します。 |
| fetchTop | private | メソッド | fetchTop の主要処理を担当します。 |
| enqueueDelta | public | メソッド | enqueueDelta の主要処理を担当します。 |
| hasMonthlyScores | public | メソッド | 条件判定を行い、後続処理の分岐に使える真偽値を返します。 |
| hasAnyCurrentScores | public | メソッド | 条件判定を行い、後続処理の分岐に使える真偽値を返します。 |
| wasBackfilled | public | メソッド | DB への問い合わせまたは更新処理を担当します。 |
| markBackfilled | public | メソッド | DB への問い合わせまたは更新処理を担当します。 |
public DataSource getDataSource()必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
なし
public MySQLScoreService(JavaPlugin plugin, DataSource ds)推奨:共有 DataSource 受け取りコンストラクタ
JavaPlugin pluginDataSource dsなし
public MySQLScoreService(JavaPlugin plugin, DataSource ds, VerifiedScorePlayers verifiedPlayers)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
JavaPlugin pluginDataSource dsVerifiedScorePlayers verifiedPlayersなし
public MySQLScoreService(JavaPlugin plugin, MySQLConfig cfg)互換:古い呼び出し用(内部で共有プールに委譲)
JavaPlugin pluginMySQLConfig cfgなし
private boolean isEligiblePlayerName(String name)条件判定を行い、後続処理の分岐に使える真偽値を返します。
String nameなし
private void initTablesAndCaches()初期化と各種登録を行い、機能を有効化します。
なし
public long getScore(String player)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
String playerなし
public int getRank(String playerName)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
String playerNameなし
public void saveScore(String player, long score)★重要: 以前は saveScore() が即DBへ「絶対値更新」していたが、 addScore() が「deltaバッチ反映」になった時点で saveScore() と addScore() の順序が崩れると「後からdeltaが足される」事故が起きる。
String playerlong scoreなし
public long addScore(String player, long delta)addScore の主要処理を担当します。
String playerlong deltaなし
public void flush()flush の主要処理を担当します。
なし
private void flushAllPending()DB への問い合わせまたは更新処理を担当します。
なし
public YearMonth loadLastRolloverMonth(ZoneId tz)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
ZoneId tzなし
public void saveLastRolloverMonth(YearMonth ym)状態を永続化または更新し、最新状態へ反映します。
YearMonth ymなし
public void saveMonthlyHistory(YearMonth month, Map<String, Long> scores)状態を永続化または更新し、最新状態へ反映します。
YearMonth monthMap<String, Long> scoresなし
public Map<String, Long> getAllScores()必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
なし
public List<Entry<String, Long>> getTopScores(int lim)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
int limなし
public Map<String, Long> getCacheView()必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
なし
public long getRevision()必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
なし
public List<Map.Entry<String, Long>> getTopScoresCached(int limit, long ttlMs)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
int limitlong ttlMsなし
public Map<String, Integer> getRanksCached(long ttlMs, int topLimit)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
long ttlMsint topLimitなし
public LiveSnapshot getLiveSnapshot(int topLimit, long ttlMs)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
int topLimitlong ttlMsなし
private void refreshFromExternalDb()refreshFromExternalDb の主要処理を担当します。
なし
public boolean hasScoresTaggedForMonth(YearMonth ym)条件判定を行い、後続処理の分岐に使える真偽値を返します。
YearMonth ymなし
public Map<String, Long> getScoresForStoredMonth(YearMonth ym)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
YearMonth ymなし
public void clearCurrentScoresForMonth(YearMonth ym)DB への問い合わせまたは更新処理を担当します。
YearMonth ymなし
public void saveAll()状態を永続化または更新し、最新状態へ反映します。
なし
public void saveMonthlyScores(YearMonth month, Map<String, Long> scores)状態を永続化または更新し、最新状態へ反映します。
YearMonth monthMap<String, Long> scoresなし
public void updateHighScores(Map<String, Long> highs)状態を永続化または更新し、最新状態へ反映します。
Map<String, Long> highsなし
public void clearCurrentScores()DB への問い合わせまたは更新処理を担当します。
なし
public List<Map.Entry<String, Long>> getMonthlyTop(YearMonth month, int limit)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
YearMonth monthint limitなし
public List<Map.Entry<String, Long>> getMonthlyTopCached(YearMonth month, int limit, long ttlMs)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
YearMonth monthint limitlong ttlMsなし
private List<Map.Entry<String, Long>> loadMonthlyTop(YearMonth month, int limit)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
YearMonth monthint limitなし
public List<Entry<String, Long>> getHighTop(int lim)必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
int limなし
public void shutdown()共有プールはここでは閉じない(DbPool.
なし
private Map<String, Long> fetchMap(String tbl, String c1, String c2)DB への問い合わせまたは更新処理を担当します。
String tblString c1String c2なし
private List<Map.Entry<String, Long>> fetchTop(String tbl, String keyColumn, String valueColumn, int limit)fetchTop の主要処理を担当します。
String tblString keyColumnString valueColumnint limitなし
public void enqueueDelta(String player, long delta)enqueueDelta の主要処理を担当します。
String playerlong deltaなし
public boolean hasMonthlyScores(YearMonth ym)条件判定を行い、後続処理の分岐に使える真偽値を返します。
YearMonth ymなし
public boolean hasAnyCurrentScores()条件判定を行い、後続処理の分岐に使える真偽値を返します。
なし
public boolean wasBackfilled(YearMonth ym)DB への問い合わせまたは更新処理を担当します。
YearMonth ymなし
public void markBackfilled(YearMonth ym)DB への問い合わせまたは更新処理を担当します。
YearMonth ymなし
MySQLScoreService → initTablesAndCaches → getScheduler → runTaskTimerAsynchronously → flushAllPending → getLoggerMySQLScoreService → initinitTablesAndCaches → getConnection → createStatement → executeUpdate → scores → monthly_scoresloadLastRolloverMonth → getConnection → prepareStatement → executeQuery → next → getStringloadMonthlyTop → getConnection → prepareStatement → setInt → getYear → getMonthValue