S-JIS[2023-12-09]
TsurugiのTsubakuro(Java通信ライブラリー)のServiceClientのメモ。
Tsubakuro 1.1.0(Tsurugi 1.0.0-BETA2)で、ServiceClientというマーカーインターフェースが追加された。
TsubakuroにはSqlClientやKvsClient等の様々なサービスのクライアントがあるが、それらのインターフェースがServiceClientを継承している。
@ServiceMessageVersion( service = SqlClient.SERVICE_SYMBOLIC_ID, major = SqlClient.SERVICE_MESSAGE_VERSION_MAJOR, minor = SqlClient.SERVICE_MESSAGE_VERSION_MINOR) public interface SqlClient extends ServerResource, ServiceClient { 〜 }
ServiceClientを継承したクライアントには、ServiceMessageVersionアノテーションが付いている。
これはそのサービスのService Message Version(SMV)を表している。
例えばTsubakuro 1.1.0のSqlClientの場合、service="sql", major=1, minor=0である。(「sql-1.0」を意味している)
ServiceClientCollectorは、依存ライブラリー内にある全てのサービスクライアントを取得する為のクラス。
import java.util.List; import com.tsurugidb.tsubakuro.client.ServiceClient; import com.tsurugidb.tsubakuro.client.ServiceClientCollector;
List<? extends Class<? extends ServiceClient>> list = ServiceClientCollector.collect(false); for (var clazz : list) { System.out.println(clazz); }
↓実行例(Tsubakuro 1.1.0)
interface com.tsurugidb.tsubakuro.auth.AuthClient interface com.tsurugidb.tsubakuro.datastore.DatastoreClient interface com.tsurugidb.tsubakuro.sql.SqlClient
※AuthClient, DatastoreClient, SqlClientはtsubakuro-sessionの中に入っている
ServiceClientCollectorには、サービスクライアントクラスのService Message Version(SMV)の文字列を取得するメソッドが用意されている。
List<? extends Class<? extends ServiceClient>> list = ServiceClientCollector.collect(false); for (var clazz : list) { Optional<String> smv = ServiceClientCollector.findServiceMessageVersion(clazz); System.out.printf("%s: %s%n", clazz.getSimpleName(), smv.orElse("null")); }
↓実行例(Tsubakuro 1.1.0)
AuthClient: auth-0.0 DatastoreClient: datastore-0.0 SqlClient: sql-1.0
※ServiceMessageVersionアノテーションが付いていないクラスを指定した場合、Optional.emptyが返る