【发布时间】:2012-09-03 07:43:20
【问题描述】:
我正在尝试使用休眠多租户(来自chapter 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;
}
显然我在测试时遇到了第一个错误,因为我完全错过了 MultiTenantConnectionProvider 的实现,正如 here 所解释的那样。
使用 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;
}
}
但是我现在对在这两种情况下使用什么来获取 ConnectionProvider 有点无能为力。你能帮帮我吗?
PS:我找到了ConnectionProviderBuilder。你觉得我可以以此为榜样效仿吗?
【问题讨论】:
标签: java hibernate database-connection