Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jersey REST Server: instantiating resource classes

A tutorial on the Jersey REST server [1] says of the Jersey servlet:

This servlet analyzes the incoming HTTP request and selects the correct class and method to respond to this request. This selection is based on annotations in the class and methods.

When the servlet "selects the correct class and method", does it re-instantiate the class every time? Or does it keep one instance of every resource class?

This would seem to matter because, if these resources classes have references to objects that store application-wide state, these state objects would be re-instantiated along with the resources, and would not end up storing state data correctly.

[1] http://www.vogella.com/articles/REST/article.html#restjersey

like image 281
ktm5124 Avatar asked Feb 06 '13 20:02

ktm5124


2 Answers

Jersey will establish a new instance of each class per request unless you annotate the class with @Singleton.

See: https://jersey.java.net/documentation/latest/jaxrs-resources.html#d0e2331

like image 191
condit Avatar answered Sep 21 '22 01:09

condit


Actually according to this post default annotation type is change from singleton to per-request. Which means before one instance is used for every request but now create new class object for per-request. If you postwant to change it you can use resourceFactory annotation.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@ResourceFactory(SingletonProvider.class)
public @interface Singleton {}

Also you can check this link for com.sun.jersey.spi.resource JavaDoc

like image 30
erhun Avatar answered Sep 19 '22 01:09

erhun