GAE初始化推荐的做法

时间:2012-03-28 21:36:42

标签: java google-app-engine initialization

我有一个Java GAE应用程序,应该在部署新版本的应用程序时清除内存缓存。我正在使用静态初始化程序,即     静态的 {         。MemcacheServiceFactory.getMemcacheService()clearAll();     }

但是,无论何时启动新实例,这都会清除内存缓存,这不是所希望的行为。

执行初始化代码的正确方法是什么?

TIA

2 个答案:

答案 0 :(得分:3)

我使用工厂创建我的memcache密钥,并且它们总是附加我的应用程序的版本号,所以当我上传新版本时,密钥是新的我忘了旧的缓存值,这将自行消失。

我还在web.xml中定义了一个servlet,其中只有admin的安全约束,然后我在升级后手动浏览到它的URL(/ admin / example) - 以admin身份登录。 servlet运行了一次代码,以启动升级存储数据和清除缓存的任何任务。

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

答案 1 :(得分:-4)

应用程序的一次初始化可以在Servlet的init()方法中完成。这是一个例子

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

在上面的例子中,ServletContext属性当然只是servlet调用之间存在的变量(维护状态的常规方式)。当然,这假设您在其他地方将此变量存储在ServletContext中。另一种方法是在部署描述符中创建变量。

要在部署描述符(web.xml)中设置初始化参数,下面是一个示例:

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

如果没有回答,请说明“每当启动新实例时”。