2012-01-07 7 views
0

へのその後のリクエストの間でオブジェクトを再利用すると、XSLT変換を実行するサーブレットがあります。私はフロントで実行していましたが、時には仕上げに時間がかかっていました。だから今私はバックエンドでこれを実行しています。私のGAEアプリケーションで動的Google App Engineバックエンド

これは私がやったことです:サーブレットを呼び出すときに 1 /ファイル「backends.xml」を作成するには、「XSLTのドメインへ 2 /プリペンド「XSLTを」という名前のダイナミックな公共のバックエンドを定義する:

http://xslt.[appname].appspot.com/getCoordinates?[params] 

これは機能します!

この「getCoordinates」サーブレットに対する一連の呼び出しが行われるのが典型的な動作です。各リクエストは、この「getCoordinates」サーブレットの「doGet」メソッドを起動します。サーブレットは、Saxonプロセッサの初期化を行います.xsltCompiler、xsltExecutable、およびxsltTransformerですが、これらのオブジェクトはすべて後続のリクエストで再利用できます。

私の質問:はどのように私は「_ah /スタート」にバックエンドの初期化要求のハンドラには、この初期化コードを分離するためにプログラムする必要がありますか?

'_ah/start'へのリクエストに応答する別のサーブレット 'startXslt'を作成し、このサーブレットのdoGetメソッド内のすべての汎用オブジェクトを初期化すれば、どのようにしてオブジェクトを'getCoordinates'サーブレットの 'doGet'メソッド?

(私は非常にJavaサーブレットプログラミングを経験していないよ、私は、これはより多くのJavaサーブレットのプログラミングではなく、GAE特有の一般的な質問などであってもよい数える、またはそれはありますか?)

答えて

0

はい、それはです一般的な質問があり、実際には何百もの方法があります。 Btw、ほとんどのプロジェクトはいくつかのフレームワークに基づいており、それはそれに依存します。プレーンなrawサーブレットを使い始めるなら、他のオプションを見てみることを強くお勧めします。 GAEにはGaelykがあります。またはSpring MVCはほとんどのpopulart(それ?)一般的な使用のフレームワークです。 class static field

  • 店、それを(それがアプリの起動時に呼び出されます)

    • のinit init()方法、および:あなたが今のソリューションを必要とする場合

      ところで、私は、次のいずれかをお勧めすることができますstatic {}ブロック内のinit(あなたが最初の呼び出しで、一度それを初期化することができます)

    この変圧器のためsingletonを作る
  • (クラスの初期化時に呼び出されるが、インスタンス間で共有しました)
  • 0

    バックエンドを使用すると、単一のインスタンスだけが使用され、バックエンドに対処するときに再利用されるように制御できるので、良い考えです。

    このように、すべてのサーブレットは同じJVMインスタンス内で実行されるため、他の応答ではsplixが示唆するようにシングルトンパターンを使用して共有オブジェクトを作成できます。

    私が理解しているように、自分のオブジェクトを初期化するためにバックエンドの初期化をどのようにフックできるかということに関係しています。その場合は、ServletContextListenerを実装し、コードをcontextInitialized(ServletContextEvent)メソッドに置くことができます。

    このメソッドは、新しいインスタンスが作成されるたびに1回呼び出されます(フロントエンドまたはバックエンドのいずれかになります)。

    関連する問題