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