1

私はマルチテナントのPlayFramework2.1アプリケーションの開発に取り組んでいます。GlobalSettingsクラスのonRequestメソッドをオーバーライドして、リクエストのサブドメインに基づいてカスタム構成をロードおよび設定する予定です。問題は、これがPlay2.xでどのように可能になるかわからないことです。

サーバーの起動時にコマンドラインでシステムプロパティを上書きできますが、リクエストごとにJavaコードでプログラムでこれを行うにはどうすればよいですか?

コードは次のようになります(私は推測します):

@Override
public play.mvc.Action onRequest(Request request, Method actionMethod) {
    //Look up configuration settings in Cache based on request subdomain
    //(i.e. Cache.get("subdomain.conf"))
    //if not in cache: 
           //load appropriate configuration file for this subdomain (java.io.File)
           //set new configuration from file for this request
           //cache the configuration for future use in a new thread
   //else
           //set configuration from cache for this request
   return super.onRequest(request, actionMethod);
  }

}

URLの検索とキャッシュの取得/設定は簡単ですが、Play Framework 2.1の新しい構成をプログラムで設定する方法がわかりません。ドキュメントでは、このようなことについて少し説明しています。

何かご意見は?誰かがこれを行うためのより良い、より効率的な方法を知っていますか?

4

1 に答える 1

0

そこで、ある種の回り道で、ScalaGlobalを使用してマルチテナントPlayアプリケーションの基盤を作成しました。フィルタを使用してこれを実装するより効率的な方法があるかもしれませんが、これは今のところうまくいくようです。これは、Javaでは簡単に実装できないようです。

構成ファイルを使用する代わりに、データベースを使用しています。キー値キャッシュを使用する方がはるかに効率的だと思いますが、今のところこれは機能しているようです。

Global.scalaの場合:

object Global extends GlobalSettings {

  override def onRouteRequest(request: RequestHeader): Option[Handler] = {
    if (request.session.get("site").isEmpty){
      val id = models.Site.getSiteIDFromURL(request.host)
      request.session.+("site" -> id)
    }
    super.onRouteRequest(request)
  }

}

そして、明らかに、リクエストドメインやリクエストに設定されたセッション値に基づいてサイトをクエリするデータベースモデルを作成する必要があります。誰かがもっと良い方法を知っているなら、私はそれを聞きたいです。

于 2013-10-04T15:21:14.903 に答える