2012-03-28 8 views
1

私はアプリケーションの新しいバージョンをデプロイするたびにmemcacheをクリアするJava GAEアプリケーションを使用しました。 static初期化子、つまり static { MemcacheServiceFactory.getMemcacheService()。clearAll();を使用しています。 }GAE初期化の推奨プラクティス

ただし、新しいインスタンスが開始されるたびにmemcacheもクリアされますが、これは望ましくない動作です。

初期化コードを実行する適切な方法は何ですか?アプリケーションの

TIA

+2

memcacheのエントリをバージョンアップしないで、バージョンが一致しない場合は、各展開でmemcacheの内容全体をプログラムでクリアするのではなく、バージョン番号をmemcacheキーに含めると、効果的にこれが処理されます(foo-1-blahがキャッシュにあり、foo-2-blahを要求しようとすると、それが欠落します)。 – Amber

+0

展開時にあなた自身で実行しない限り、各展開時に何かを実行する方法はありません。アンバーの提案は良いものです。 –

答えて

-4

一時間の初期化は、サーブレットのinit()メソッドで行うことができます。ここでの例では、上記の例で

public class CatalogServlet extends HttpServlet { 
    private BookDB bookDB; 
    public void init() throws ServletException { 
     bookDB = (BookDB)getServletContext(). 
     getAttribute("bookDB"); 
} 

ある、のServletContext属性が、当然のことながら、サーブレット呼び出し(状態を維持する通常の方法)の間に存在するだけで可変です。これはもちろん、あなたがどこか別の場所にこの変数をServletContextに格納していることを前提としています。もう1つの方法は、デプロイメント記述子に変数を作成することです。

<servlet 
    <servlet-name... 
    <servlet-class ... 
    <init-param> 
     <param-name>param1</param-name> 
     <param-value>value1</param-value> 
    </init-param> 
</servlet> 

これはそれに応答しない場合は、「新しいインスタンスが起動されるたびに」、明確にしてください:

は、あなたのデプロイメントディスクリプタ(web.xmlファイル)内の初期化パラメータを設定するには、ここでは一例です。

+0

App Engineによってインスタンスが開始されるたびに、initメソッドが呼び出されます。これは、要求のロードまたは非アクティブのためにいつでも発生する可能性があります。したがって、デプロイ後にinitメソッドが呼び出されると仮定するのは間違いです。これは、ポスターが要求したものです。 – Brummo

+0

彼は初期化パラメータを取得する方法を求めておらず、デプロイメントごとに初期化コードを1回だけ実行する方法を尋ねています。 GAEは、数百のインスタンスが一度に実行されることを想定して、無制限にインスタンスをスピンアップしてリッピングすることをお勧めします。 – Simon

3

私はmemcacheキーを工場で作成していますが、いつも私のアプリのバージョン番号が付いているので、新しいバージョンをアップロードすると新しいキーになります。古いキャッシュ値を忘れてしまいます。自分の。

web.xmlにadmin用のセキュリティ制約が定義されたサーブレットもあります。その後、アップグレード後に手動でURL(/ admin/example)を参照して管理者としてログインします。サーブレットには、ストアデータをアップグレードしてキャッシュをパージするためのタスクを開始するためのコードが1回実行されています。

<security-constraint> 
    <web-resource-collection> 
     <url-pattern>/admin/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>admin</role-name> 
    </auth-constraint> 
</security-constraint> 
+0

更新:最近、Googleは管理コンソールにアプリケーションのMemcacheを消去するためのボタンを追加しました。だから私はアップグレードするたびに、今私はそのボタンを押した。 – bsautner