休止状態のマルチテナンシーを使用しようとしています (第 16 章から)。
現在、ExtendedStorageManagerはこのメソッドを使用してマルチテナント セッションを開始しています。
public Session getClabSession(int serverId, String customerSchema) {
if (!clabFactories.containsKey(serverId)) {
DbServers d = databaseConfigurations.get(serverId);
clabCustomerConfig.setProperty(
"hibernate.connection.url",
ResourceBundleService.getInstance().decorateBundle(
"database.connection.pattern", d.getHost(),
d.getPort()));
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(clabCustomerConfig.getProperties())
.buildServiceRegistry();
SessionFactory factory = clabCustomerConfig
.buildSessionFactory(serviceRegistry);
clabFactories.put(d.getId(), factory);
serviceRegistry = null;
factory = null;
}
Session session = clabFactories.get(serverId).withOptions()
.tenantIdentifier(customerSchema).openSession();
session.setDefaultReadOnly(false);
return session;
}
hereで説明されているように、 MultiTenantConnectionProviderの実装を完全に見逃したため、明らかにテスト時に最初のエラーが発生しました。
grepcode を使用して、使用したいもののように見えるAbstractMultiTenantConnectionProviderについて知りました。だから私はそれを拡張するクラスを作成しました:
public class XMLDMultiTenantConnectionProvider extends
AbstractMultiTenantConnectionProvider {
/**
*
*/
private static final long serialVersionUID = -6679645015449636823L;
@Override
protected ConnectionProvider getAnyConnectionProvider() {
return null;
}
@Override
protected ConnectionProvider selectConnectionProvider(
String tenantIdentifier) {
// TODO Auto-generated method stub
return null;
}
}
しかし、これら 2 つのケースで ConnectionProvider を取得するために何を使用すればよいか、今は少しわかりません。手伝って頂けますか?
PS: ConnectionProviderBuilderを見つけました。従うべき例としてそれを使用できると思いますか?