GAE инициализация рекомендуемая практика - PullRequest
1 голос
/ 29 марта 2012

У меня есть приложение Java GAE, которое должно очищать кэш памяти при каждом развертывании новой версии приложения. Я использую статический инициализатор, т.е. static { . MemcacheServiceFactory.getMemcacheService () CLEARALL (); }

Однако, это также очистило бы memcache при запуске нового экземпляра, что не является желаемым поведением.

Как правильно выполнить код инициализации?

ТИА

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Я создаю ключи memcache, используя фабрику, и к ним всегда добавляется номер версии моего приложения, поэтому, когда я загружаю новую версию, ключи новые, я забываю о старых кэшированных значениях, которые исчезнут сами по себе.,

У меня также есть сервлет, определенный в web.xml с ограничением безопасности только для администратора, затем я обновляю его URL (/ admin / example) после обновления вручную - вход в систему с правами администратора.В сервлете есть мой код «Выполнить один раз», который запускает любые задачи по обновлению данных магазина и очистке кэша.

<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 голосов
/ 29 марта 2012

Однократная инициализация приложений может быть выполнена в методе сервлета init (). Вот пример

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

В приведенном выше примере атрибут ServletContext - это, конечно, просто переменная, которая существует между вызовами сервлета (обычный способ поддержания состояния). Это, конечно, предполагает, что вы где-то еще хранили эту переменную в ServletContext. Другой способ - создать переменную в дескрипторе развертывания.

Чтобы установить параметры инициализации в дескрипторе развертывания (web.xml), вот пример:

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

Если это не отвечает, пожалуйста, уточните «всякий раз, когда запускается новый экземпляр».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...