2017-12-02 25 views
1

Tomcat 및 저지 서블릿의 매우 간단한 설정 작업을하고 있습니다. 방금 모든 요청에 ​​대해 생성 된 서블릿 클래스에 주목했습니다. 내가 서블릿에 대해 읽은 것은 init(), service(), destroy()를 한번씩 수행한다는 것이다. 왜 내 설정에 해당하지 않는가?저지 서브릿 클래스는 모든 요청으로 구성됩니다.

다음은 내 web.xml을

<!DOCTYPE web-app PUBLIC 
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
     "http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 

    <servlet> 
     <servlet-name>contact-dropbox-servlet</servlet-name> 
     <servlet-class> 
      org.glassfish.jersey.servlet.ServletContainer 
     </servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.inbhiwadi.services</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>contact-dropbox-servlet</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

입니다 그리고 내 서블릿 엔트리 클래스는 다음과 같습니다

@Path("/contact") 
@Slf4j 
public class ContactDropboxService { 

    private ContactDAO contactDAO; 

    private NotificationPublisher notificationPublisher; 

    public ContactDropboxService() { 
     ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Module.xml"); 
     this.contactDAO = (ContactDAO) context.getBean("contactDAO"); 
     this.notificationPublisher = (NotificationPublisher) context.getBean("notificationPublisher"); 
     log.debug("ContactDropboxService constructed one more time"); 
    } 

    @GET 
    public String greet() { 
     log.info("Welcome to InBhiwadi contact services!"); 
     return "Welcome to InBhiwadi contact services"; 
    } 

    @POST 
    @Path("/drop") 
    public Response create(Contact contact) { 

     log.debug("Received contact is : [{}]", contact.toString()); 
     contactDAO.create(contact); 
     notificationPublisher.publish(contact.toString()); 
     return Response.accepted("Contact dropped in box").build(); 
    } 
} 

내가 ContactDropboxService의 단일 인스턴스를 여러 요청을 처리를 위해 무엇을해야합니까?

답변

2

기본적으로 Jersey는 요청 당 리소스 클래스를 인스턴스화합니다. 리소스 클래스의 인스턴스를 하나만 가지려면 @Singleton으로 주석을 달아야합니다. 자세한 내용은이 체크 아웃 할 수 있습니다. question

+0

동시 요청을 처리하는 방법에 대해 궁금합니다. 다른 요청이 먼저 제공되기 전에 여러 스레드가 분기됩니다. 그렇다면 병행 성을 수동으로 처리해야합니까? –