シングル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>