1

AbstractMultiTenantConnectionProvider を使用すると、いくつかの問題が発生します。1000 のテナントがあり、Web サーバーを再起動せずにさらに追加したい場合、selectConnectionProvider を簡単に使用するにはどうすればよいですか?

 @Override
protected ConnectionProvider selectConnectionProvider(String tenantIdentifier) {

if( "xml1".equals(tenantIdentifier) ) 
    return xml1;

if( "xml2".equals(tenantIdentifier) ) 
    return xml2;

return null;
}

この例でわかるように、テナントは静的にリンクされています。どうすればこの問題を解決できますか。ヒントや解決策をありがとう!乾杯、t。

ここからのフォローアップの質問です。 AbstractMultiTenantConnectionProvider を実装します。

4

1 に答える 1

2

必要に応じてテナントを登録/登録解除するレジストリ (パターンのように) にします (「必要に応じて」はアプリ/環境によって定義されます)。構造的に、MultiTenantConnectionProvider は内部的にマップです。以下を使用して、Hibernate SessionFactory から MultiTenantConnectionProvider にアクセスできます。

MultiTenantConnectionProvider multiTenantConnectionProvider = 
( (SessionFactoryImplementor) sessionFactory )
        .getServiceRegistry()
        .getService( MultiTenantConnectionProvider.class );
YourMultiTenantConnectionProviderImpl yourMultiTenantConnectionProvider = (YourMultiTenantConnectionProviderImpl) multiTenantConnectionProvider;
yourMultiTenantConnectionProvider.registerTenant( ... );
...
yourMultiTenantConnectionProvider.deregisterTenant( ... );

次に、開始/停止間でテナントを保持する方法 (ファイルへの書き込みなど) を決定する必要があります。個人的には、registerTenant/deregisterTenant 呼び出しの直後に永続化します。または、シャットダウンするまで待つこともできますが (YourMultiTenantConnectionProviderImpl に Stoppable を実装させる)、JVM がクラッシュした場合に一部を書き損ねる可能性があります。

于 2012-10-01T19:35:39.683 に答える