11.5.5. カスタムサービス
11.5.5.1. カスタムサービスについて
ビルドされた
org.hibernate.service.ServiceRegistry
は不変であると見なされます。サービス自体は再設定を許可することもありますが、ここで言う不変とはサービスの追加や置換を意味します。そのため org.hibernate.service.ServiceRegistryBuilder
によって提供される別のロールは、生成された org.hibernate.service.ServiceRegistry
に格納されるサービスを微調整できるようにします。
カスタムサービスについて
org.hibernate.service.ServiceRegistryBuilder
に通知する方法は 2 つあります。
org.hibernate.service.spi.BasicServiceInitiator
クラスを実装してサービスクラスの要求に応じた構築を制御し、addInitiator
メソッドよりorg.hibernate.service.ServiceRegistryBuilder
へ追加します。- サービスクラスをインスタンス化し、
addService
メソッドよりorg.hibernate.service.ServiceRegistryBuilder
へ追加します。
サービスを追加する方法とイニシエーターを追加する方法はいずれも、レジストリーの拡張 (新しいサービスロールの追加) やサービスのオーバーライド (サービス実装の置換) に対して有効です。
例11.22 ServiceRegistryBuilder を用いた既存サービスのカスタマーサービスへの置き換え
ServiceRegistryBuilder registryBuilder = new ServiceRegistryBuilder( bootstrapServiceRegistry ); serviceRegistryBuilder.addService( JdbcServices.class, new FakeJdbcService() ); ServiceRegistry serviceRegistry = registryBuilder.buildServiceRegistry(); public class FakeJdbcService implements JdbcServices{ @Override public ConnectionProvider getConnectionProvider() { return null; } @Override public Dialect getDialect() { return null; } @Override public SqlStatementLogger getSqlStatementLogger() { return null; } @Override public SqlExceptionHelper getSqlExceptionHelper() { return null; } @Override public ExtractedDatabaseMetaData getExtractedMetaDataSupport() { return null; } @Override public LobCreator getLobCreator(LobCreationContext lobCreationContext) { return null; } @Override public ResultSetWrapper getResultSetWrapper() { return null; } @Override public JdbcEnvironment getJdbcEnvironment() { return null; } }