实现AbstractMultiTenantConnectionProvider [英] Implement an AbstractMultiTenantConnectionProvider

查看:587
本文介绍了实现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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆