2

マルチデータベースでマルチテナンシーを行おうとしています。この章から、 MultiTenantConnectionProviderImplを取り上げました。

そして、ここで問題があります。Eclipse はクラスConnectionProviderUtilsを見つけることができません。依存関係のある Maven を使用しています。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.1.4.Final</version>
    </dependency>
4

2 に答える 2

5

私はあなたを失望させたくありませんが、私はしばらく前に同じ問題を抱えていました. ポイントは、ドキュメントでは ConnectionProviderUtil がかなり誤解を招くことです。そのようなことはない。ConnectionProviderUtil は、自分で実装する必要があるものです。MultiTenantConnectionProviderで独自のDataSource(c3p0 プールされたもの) を構築し、そこから接続を渡すことでこれを実装しました。

そのため、自分でゼロから実装する必要があります。参考までに、ソリューションへの私の方法を次に示します。Hibernate 4.2 および Spring 3.1.1 を使用して MultiTenantConnectionProvider をセットアップする

マルチ DB アプローチの場合、TenantIdentifier に基づいて、異なるものを に自動配線し、切り替えるDataSourcesことができます。MultiTenantConnectionProvider詳細については、この回答を参照してください: https://stackoverflow.com/a/16769595/2319179

編集: Spring を使用する場合、次のように appcontext で DataSource を設定できます。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="<jdbcdriver>" />
            <property name="url" value="jdbc:SQLServer://<host>:<port>;databaseName=<dbname>" />
            <property name="username" value="<user>" />
            <property name="password" value="<pw>" />
       </bean>

Java からビルドする必要がある場合は、次のようにします。

        cpds = new DriverManagerDataSource();
cpds.setDriverClass(<jdbc.driver>);
cpds.setJdbcUrl(<jdbc.url>);
cpds.setUser("<user>");
cpds.setPassword("<pw>"));

簡単なグーグル検索で適切なドライバーが表示されるはずです。

于 2013-05-28T13:02:59.617 に答える
0

ConnectionProvider接続を取得するための戦略をカスタマイズするために使用するものです。すべてのスキーマが同じであれば、これはマルチテナンシーを実装するのに最適な場所の 1 つです。

に加えて、「テナンシー」を保持するためにConnectionProviderが必要であり、おそらくそれを設定するには が必要です (ログイン時に設定されるセッション変数から)。これは、Spring の仕組みに似ています。ThreadLocalServletFilterOpenSessionInViewFilter

全体として、これは非常にシンプルで効果的なソリューションを提供できます。

http://literatejava.com/hibernate/multi-tenancy-architecture-with-hibernate/

于 2014-03-31T09:29:43.383 に答える