Я хотел бы задать вам вопрос о области бобы с помощью cxf. Согласно документации, все бобы будут в области Singleton. Однако я хотел бы иметь их в запросе области.Сфера применения cxf jaxrs
В доке здесь http://cxf.apache.org/docs/jaxrs-services-configuration.html
я нашел:
Когда классы и поставщики регистрируются таким образом, жизненный цикл по умолчанию 'синглтона. Вы можете переопределить его, установив параметр «jaxrs.scope» со значением «prototype» (эквивалентно запросу).
Я попробовал тысячи вещей, и я не мог заставить их работать:
Вот мой веб-XML
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>CxfRestService</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/beans.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/resource/log4j.properties</param-value>
</context-param>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<init-param>
<param-name>jaxrs.scope</param-name>
<param-value>request</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
</web-app>
Я сделал простой тест с этим:
@Path("/")
@WebService(name = "profile", targetNamespace = "")
@Named
public class ProfileCXFService {
private String thisIsAValue;
/**
* Create a profile
*/
@POST
@Path("")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public Response createProfile(Profile profile){
if(thisIsAValue == null){
thisIsAValue = "toto";
} else{
return Response.serverError().entity("NOOOOOO").build();
}
return Response.ok().entity("YESSSSS").build();
}
Первый звонок - YESSS и второй NOOOOO.
Я хотел бы иметь все мои бобы в качестве запроса. Могу ли я найти общий способ его настройки.
На самом деле у меня нет проблем с singleton, так как единственными полями, которые у меня есть, являются сервисы, которые также являются singleton и единственным моментом, когда мне нужно использовать поля, специфичные для запроса, который я делаю в новом MyObject. Однако я слышал, что Singleton может вызвать задержку, если трафик растет на сервере.
У вас есть идеи, что я могу сделать?
Большое спасибо заранее и наилучшими пожеланиями
Джеффри