2016-02-18 2 views
0

Я использую Jax-RS 2.0 с версией Jersey 2.22.1 и Java SE 8, развернутой в Tomcat 8.0.30. У меня есть POJO, аннотированный соответствующими аннотациями JAX-RS, и его работа как ожидалось. Я также аннотировал POJO с @Singleton. Класс лениво создается как одноэлементный, что является ожидаемым поведением @Singleton. Но я хотел бы создать экземпляр класса с нетерпением, при запуске приложения. Есть ли способ сделать это? Я просмотрел аннотацию @Startup, но, к сожалению, это часть пакета EJB, и я не использую EJB (и я бы не хотел импортировать файл jar jjb).Как создать JAX-RS аннотированный одноэлементный класс EAGERLY, созданный экземпляр

Я также использую Springframework 4.2.4, который будет по умолчанию охотно инстанцирования одиночек при использовании @Service или @Component аннотаций, но, к сожалению, я не могу использовать эти аннотации в JAX-RS POJO (поэтому класс простирается от SpringBeanAutowiringSupport .

Я приложил код Java, но с тех пор его работы, как и ожидалось, я не уверен, что хотел бы добавить что-нибудь полезное

import javax.inject.Singleton; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.GET; 
import javax.ws.rs.Produces; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.FormParam; 
import javax.ws.rs.core.MediaType; 
import org.xxx.profile.util.GeneralUtil; 
import org.xxx.profile.util.WebServiceLogger; 
import org.xxx.profile.util.datatransfer.AccountDTO; 
import org.xxx.profile.web.exception.RestException; 
import org.xxx.profile.web.exception.FailureResponse; 
import org.springframework.web.context.support.SpringBeanAutowiringSupport; 


@Singleton 
@Path("account") 
public class AccountWebService extends SpringBeanAutowiringSupport{ 


    @Autowired 
    private AccountLogic accountLogic; 

    @Autowired 
    protected SimpleParser simplerParser; 


    @GET 
    @Path("get/{id: [a-zA-Z][a-zA-Z_0-9]*}") 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
    public AccountDTO retrieveAccount(@PathParam("id") String customerId) throws RestException { 
     try { 
      return accountLogic.retrieveAccount(customerId); 
     } 
     catch(Exception e){ 
      String transactionID = GeneralUtil.getUniqueID(); 
      WebServiceLogger.severe(transactionID, "Unable to retrieve an account for the customerId: " + customerId, e, this.getClass()); 
      throw new RestException(new FailureResponse(FailureResponse.Status.FAIL, "add user friendly message here", transactionID), e); 
     } 
    } 

} 

ответ

0

См Jersey 2.22.1 User Guide:.

Если вы хотите использовать поддержку Джерси Spring DI вам нужно будет добавить джерси-spring3 модуля в список ваших зависимостей:

<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-spring3</artifactId> 
    <version>2.22.1</version> 
</dependency> 

Это похоже на работу для весны 4, тоже. См. Question 21443088

+1

BTW ... следующее сообщение поможет разрешить любые исключения контекста весны, которые бросаются при использовании jersey-spring3 без файла конфигурации с пружиной (100% -ная аннотация) ... https://java.net/jira/просмотр/ДЖЕРСИ-2038 –

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