1

SpringMVCとSpringSecurityを使用するアプリケーションがあります。

アプリケーションプロジェクトには、ejbsとWebアプリケーションがあります。

ユーザー用の共通データベースとユーザーグループごとの1つのデータベースがあります。

したがって、ユーザーが認証するとき、Spring Securityは共通データベースを使用してログイン/パスワードをチェックし、コントローラーがejbを呼び出すと、エンティティマネージャーはユーザーのグループデータベースに接続します。

私の目標は、ユーザー/グループとそれに関連するデータベースをその場で作成することです。

例 :

共通データベースlocalhost:3306database_schema1には

  USERS
----------------------
| NAME    | GROUP_ID |
----------------------
| Pierre  |        1 |
| Paul    |        1 |
| Jacques |        2 |
----------------------

  GROUPS
------------------------------------------
| ID | URL            | SCHEMA_NAME      |
------------------------------------------
|  1 | localhost:3307 | database_schema1 |
|  2 | localhost:3308 | database_schema1 |
------------------------------------------

Pierreが認証すると、ホームページはejbを呼び出します。このejbには、スキーマdat​​abase_schema1を使用してグループ1データベースlocalhost:3307に接続する必要があるエンティティマネージャーがあります。

Jacquesが認証する場合は、グループ2データベースである必要があります。

プロジェクトをビルドするときにわからない特定のデータベースを使用するようにエンティティマネージャーに指示するにはどうすればよいですか?

つまり、ejbでpersistence.xmlを使用したくないのですが、認証されたユーザーに応じてエンティティマネージャーを動的に初期化します。

Persistence.createEntityManagerFactory()はこのコンテキストで機能しますか?もしそうなら、それは最良の解決策ですか?

4

1 に答える 1

0

これを行うには、データベースURLをから削除し、persistence.xml実行時に指定します。

Map<String, String> params = new HashMap<String, String>();
// put the correct URL here
// you can also specify any other parameter from 'persistence.xml'
String dbUrl = "jdbc:mysql://localhost:3308/database_schema1"; 
params.put("javax.persistence.jdbc.url", dbUrl);
EntityManagerFactory factory = 
  Persistence.createEntityManagerFactory("...", params);

次に、このfactoryオブジェクトを使用して、必要に応じてEntityManagerインスタンスを作成します。

于 2013-02-11T19:18:39.077 に答える