1

シングルDb/マルチスキーマに基づくマルチテナントアプリの開発。テナント間で共有されるデータがあり、さらに各テナントにはプライベートデータ用の個別のスキーマがあるため、共通のスキーマがあります。認証データ(ユーザーID / pwd /テナントID)は、ログイン時にアクセスする共通スキーマに保持されます。認証されると、共通スキーマとテナントスキーマへの権限を持つテナントごとに一意のユーザーID/パスワードログインがあります。「テナントユーザーID/pwd」は、暗号化されたセキュリティトークンの一部としてクライアント(ステートレス)に返され、後続のWebまたはREST呼び出しで返されます。

プーリングにはSpring、Hibernate 4、C3POを使用しています。たくさん読んだり検索したりして、それは可能だと思いますが、例は見つかりませんでした。その後のREST呼び出しで、クライアント提供のセキュリティトークンからユーザーID /パスワードを抽出した後、これらを休止状態に渡してデータベースへの接続を構築するか、接続に同じユーザーID/パスワードが存在する場合は同じユーザーID/パスワードで既存の接続を使用しますプール。現在、次のようにデータソースをエンティティファクトリに配線しています。java、hibernate、springなどは非常に新しいですが、検索に何時間も費やしており、この時点で正しい方向に向ける必要があります。

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass" value="${jdbc.connection.driver}" />
    <property name="jdbcUrl" value="${jdbc.connection.url}" />
    <property name="user" value="${jdbc.connection.username}" />
    <property name="password" value="${jdbc.connection.password}" />
    <property name="minPoolSize" value="1" />
    <property name="maxPoolSize" value="30" />
    <property name="acquireIncrement" value="5" />
    <property name="idleConnectionTestPeriod" value="300" />
    <property name="maxIdleTime" value="300" />
    <property name="maxStatements" value="0" />
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.o1rm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="jobmanagement" />
    <property name=""></property>
</bean>
4

2 に答える 2