2013-03-08 2 views
2

Я хотел бы знать, каково ожидаемое поведение жизненного цикла для класса, который отвечает запросам REST.Жизненный цикл ресурса Apache Wink

У меня есть класс, полученный из javax.ws.rs.core.Application, который идентифицирует другой класс для ответа на запросы.

В этом другом классе это аннотируется с помощью @Path ("foo"), и методы в этом классе аннотируются с @Path ("bar"). Когда запрос сделан в foo/bar, я вижу, что конструктор выполнен, тогда метод PostConstruct правильно вызван. После того как метод возвращает ответ клиенту, я вижу, что PreDestroy вызывается, а затем класс раздавлен. По следующему запросу процесс повторяется.

Это правильное поведение? Или есть способ, которым этот класс может оставаться в памяти, так что ему не нужно проходить конструктор и PostConstruct каждый раз, когда выполняется запрос? Этот метод основан на сортировке JAXB и различных XSL-преобразованиях - я хотел бы кэшировать скомпилированные объекты преобразования XSLT, а также результаты некоторых преобразований, но если класс повторно инициализируется каждый раз, когда он вызывается, это делает невозможным локальное кэширование.

Это работает с Java 7, Wink и Tomcat 7. Может кто-нибудь, пожалуйста, сообщите мне, если это ожидаемое поведение, или мне не хватает чего-то, что просто сохранит этот класс?

Спасибо.

ответ

1

По спецификации JAX-RS ресурсы (классы, аннотированные @Path) создаются с учетом запроса.

Существует несколько способов отменить это поведение.

Самый простой способ, который может использоваться в соответствии со спецификацией JAX-RS, заключается в том, чтобы создать экземпляр ресурса самостоятельно (вы несете ответственность за вызов PostConstruct, не уверены, когда и как вы звоните в PostDestroy в этом случае) и возвратите используя javax.ws.rs.core.Application.getSingletons()

В качестве альтернативы вы можете добавить аннотацию @org.apache.wink.common.annotations.Scope(ScopeType.SINGLETON) на свой ресурс.

Если вы используете Spring, Wink имеет аккуратный модуль интеграции Spring, поэтому жизненный цикл Spring будет использоваться. См. http://incubator.apache.org/wink/1.0/html/5.5%20Spring%20Integration.html

Смежные вопросы