实现AbstractMultiTenantConnectionProvider [英] Implement an AbstractMultiTenantConnectionProvider
问题描述
我试图使用hibernate多租户(从第16章)。
I'm trying to use hibernate multi-tenancy (from chapter 16).
现在,我的 ExtendedStorageManager 使用此方法启动多租户会话: / p>
Right now my ExtendedStorageManager uses this method to start a multi-tenant session:
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 的实现=nofollow>此处。
Obviously I had a first error when testing because I totally missed the implementation of a MultiTenantConnectionProvider as explained here.
使用grepcode我发现了 AbstractMultiTenantConnectionProvider < a>看起来像我想要使用的。所以我创建了我的类扩展它:
Using grepcode I found out about AbstractMultiTenantConnectionProvider that looks like what I want to use. So I created my class extending it:
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。你能帮助我吗?
But I'm a bit clueless now on what to use to get a ConnectionProvider in these two cases. Can you help me?
PS:我发现 ConnectionProviderBuilder 。你认为我可以用它作为例子吗?
PS: I found ConnectionProviderBuilder. Do you think I can use it as an example to follow?
推荐答案
我认为你可以有自己的实现抽象类与以下类似:
I think that you can have your own implementation of the abstract class with something like the following :
public class XMLDMultiTenantConnectionProvider extends AbstractMultiTenantConnectionProvider {
private final ConnectionProvider xml1 = ConnectionProviderBuilder.buildConnectionProvider("xml1DataSource");
private final ConnectionProvider xml2 = ConnectionProviderBuilder.buildConnectionProvider("xml2DataSource");
/**
*
*/
private static final long serialVersionUID = -6679645015449636823L;
@Override
protected ConnectionProvider getAnyConnectionProvider() {
//Default Datasource (in this case i chose the first one as default)
return xml1;
}
@Override
protected ConnectionProvider selectConnectionProvider(String tenantIdentifier) {
if( "xml1".equals(tenantIdentifier) )
return xml1;
if( "xml2".equals(tenantIdentifier) )
return xml2;
return null;
}
}
和可理解的例子...
I think that could be a good and understandable example ...
这篇关于实现AbstractMultiTenantConnectionProvider的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!