2012-03-15 17 views
3

私は、Webアプリケーションのマルチテナント化ソリューションを探しています。 Separate Schema Modelを使用してアプリケーションを実装したいと思います。セッションごとにデータソースがあると思っています。これを行うために、私はデータソースとエンティティマネージャをセッションスコープに入れましたが、動作していません。私はユーザーがusernameとpasswordとtenantIdを入力したときにdata-access-context.xml(データソースと他のリポジトリBeanを含む)ファイルを読み込むことを考えています。私はそれが良い解決策であるかどうかを知りたいですか?SpringによるマルチテナントJPA

答えて

2

マルチテナントはやや難しい問題であり、JPAプロバイダ側で処理する必要があるため、クライアントコードの観点からは何も変わりません。 はマルチテナンシー(EclipseLink/Development/Indigo/Multi-Tenancyを参照)をサポートしています。が最近追加されました。

もう1つの方法は、AbstractRoutingDataSourceを参照してください。Multi tenancy in Hibernateを参照してください。

セッションスコープを使用することはあまりにも危険です(データベース接続数は数千に増え、すべてのセッション/ユーザーにはほとんどかかりません)最後にEntityManagerとその基礎となるデータベース接続はシリアル化できないため、セッションを移行したり、適切。

+2

Hibernateは、JPA(@ PersistenceContext/EntityManager)ではなく、SessionFactory(つまりHibernateネイティブ)を使用する場合にのみマルチテナントをサポートします。 – pap

+0

こんにちは、あなたの答えに感謝します。本当に役に立ちました。そしてあなたは正しいです。それはJPAをサポートしません。私は 'AbstractRoutingDataSource'を使用することを選択しました。しかし、問題は、起動時に初期化されたデータソースとentitymanagerのBeanです。とにかく、これが春にどのように設定されて、ユーザーが認証された後で初期化されるのですか? – mettok

+0

@ user1057347:新しい質問を開いてください。これはコメントで説明するにはあまりにも複雑すぎます(将来は十分には目立たないでしょう)。私はフォローアップできるように新しい質問へのリンクを投稿してください。 –

0

私はマルチテナントシステムの数で働いてきた。ここでの課題は、あなたがあなたのビジネスに発展するソリューションを提供

  1. オープンアーキテクチャと
  2. を維持する方法である。

第2の課題を最初に見てみましょう。マルチテナントシステムは、同じデータ(レコード)に容量の異なる複数のテナント(たとえばhttps://bugs.eclipse.org/bugs/show_bug.cgi?id=355458)がアクセスできるユースケースをサポートする必要がある場合に発展する傾向があります。したがって、システムには最終的にアクセス制御リストが必要です。

オープンアーキテクチャを維持するために、標準(JPAなど)にコーディングすることができます。 EclipseLinkやHibernateへのコーディングは私を不快にさせます。

スプリングセキュリティACLは、これらの両方の課題に対して非常に柔軟なコミュニティ対応ソリューションを提供します。試してみてください。私はそのパフォーマンスに満足してくれました。しかし、私はあなたに注意する必要があります、それは私の周りに私の頭を得るためにいくつかの掘削が必要でした。