Hola, debo de estar pasando por alto algo obvio:
¿Por qué la respuesta es "1" y no "tantos como peticiones concurrentes"?
Pregunta 16, JVM sin SingleThreadModel
- NachoMarAr
- PreparaTIC25
- Mensajes: 115
- Registrado: 21 May 2015, 14:48
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Pregunta 16, JVM sin SingleThreadModel
Buenas.
Sin ser experto en servlets, entiendo que si no implementa SingleThreadModel entonces soporta multithreads, por lo que una única instancia de la clase puede tratar cada petición mediante un thread concurrente, y, por tanto, no hace falta tener más de una instancia de la clase
Sin ser experto en servlets, entiendo que si no implementa SingleThreadModel entonces soporta multithreads, por lo que una única instancia de la clase puede tratar cada petición mediante un thread concurrente, y, por tanto, no hace falta tener más de una instancia de la clase
- marioyo100
- PreparaTIC27
- Mensajes: 32
- Registrado: 23 Abr 2013, 10:08
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Pregunta 16, JVM sin SingleThreadModel
Yo creo que la respuesta está mal:
http://docs.oracle.com/javaee/1.4/api/j ... rvlet.html
service
public void service(ServletRequest req,
ServletResponse res)
throws ServletException,
java.io.IOException
Called by the servlet container to allow the servlet to respond to a request.
This method is only called after the servlet's init() method has completed successfully.
The status code of the response always should be set for a servlet that throws or sends an error.
Servlets typically run inside multithreaded servlet containers that can handle multiple requests concurrently. Developers must be aware to synchronize access to any shared resources such as files, network connections, and as well as the servlet's class and instance variables. More information on multithreaded programming in Java is available in the Java tutorial on multi-threaded programming.
https://tomcat.apache.org/tomcat-5.5-do ... Model.html
public interface SingleThreadModel
Ensures that servlets handle only one request at a time. This interface has no methods.
If a servlet implements this interface, you are guaranteed that no two threads will execute concurrently in the servlet's service method. The servlet container can make this guarantee by synchronizing access to a single instance of the servlet, or by maintaining a pool of servlet instances and dispatching each new request to a free servlet.
un saludo
http://docs.oracle.com/javaee/1.4/api/j ... rvlet.html
service
public void service(ServletRequest req,
ServletResponse res)
throws ServletException,
java.io.IOException
Called by the servlet container to allow the servlet to respond to a request.
This method is only called after the servlet's init() method has completed successfully.
The status code of the response always should be set for a servlet that throws or sends an error.
Servlets typically run inside multithreaded servlet containers that can handle multiple requests concurrently. Developers must be aware to synchronize access to any shared resources such as files, network connections, and as well as the servlet's class and instance variables. More information on multithreaded programming in Java is available in the Java tutorial on multi-threaded programming.
https://tomcat.apache.org/tomcat-5.5-do ... Model.html
public interface SingleThreadModel
Ensures that servlets handle only one request at a time. This interface has no methods.
If a servlet implements this interface, you are guaranteed that no two threads will execute concurrently in the servlet's service method. The servlet container can make this guarantee by synchronizing access to a single instance of the servlet, or by maintaining a pool of servlet instances and dispatching each new request to a free servlet.
un saludo
- sray
- Usuario registrado
- Mensajes: 145
- Registrado: 29 Feb 2016, 19:24
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Pregunta 16, JVM sin SingleThreadModel
Yo creo que la respuesta es correcta.
Tened en cuenta que la pregunta es "¿cuántos objetos de dicha clase estarán cargados en la memoria de la JVM?"
Cuando se hace una llamada a un servlet:
- Si no está cargado en el contenedor web, se crea una instancia de la clase Servlet, ejecuta su método init y posteriormente dará servicio con alguno de los métodos de servicio: doGet, doPost, doPut,...
- Si ya estaba cargado en el contenedor, cuando llega la petición, simplemente se encamina dicha petición a los métodos de servicio: doGet, doPost, doPut,..
Por lo tanto, sólo tenemos un objeto de dicha clase cargado en la memoria de JVM, que es lo que se preguntaba.
Respecto a SingleThreadModel, la diferencia es que dicho interfaz asegura que solo existe una instancia en un momento concreto gestionando una petición. De tal manera que, si llega otra petición en ese momento, se pone en cola y se procesa posteriormente.
Si no se implementa SingleThreadModel, se atenderán varias peticiones concurrentemente pero siempre a través de la misma instancia del servlet.
Lo que sí es cierto es que la interfaz SingleThreadModel ya está declarada com obsoleta desde el API Servlet 2.4.
Tened en cuenta que la pregunta es "¿cuántos objetos de dicha clase estarán cargados en la memoria de la JVM?"
Cuando se hace una llamada a un servlet:
- Si no está cargado en el contenedor web, se crea una instancia de la clase Servlet, ejecuta su método init y posteriormente dará servicio con alguno de los métodos de servicio: doGet, doPost, doPut,...
- Si ya estaba cargado en el contenedor, cuando llega la petición, simplemente se encamina dicha petición a los métodos de servicio: doGet, doPost, doPut,..
Por lo tanto, sólo tenemos un objeto de dicha clase cargado en la memoria de JVM, que es lo que se preguntaba.
Respecto a SingleThreadModel, la diferencia es que dicho interfaz asegura que solo existe una instancia en un momento concreto gestionando una petición. De tal manera que, si llega otra petición en ese momento, se pone en cola y se procesa posteriormente.
Si no se implementa SingleThreadModel, se atenderán varias peticiones concurrentemente pero siempre a través de la misma instancia del servlet.
Lo que sí es cierto es que la interfaz SingleThreadModel ya está declarada com obsoleta desde el API Servlet 2.4.
-
- Usuario registrado
- Mensajes: 15
- Registrado: 25 Nov 2013, 14:22
- Agradecido: 0
- Agradecimiento recibido: 0
Re: Pregunta 16, JVM sin SingleThreadModel
No es lo mismo un hilo que una instancia de la clase, y en el enunciado está hablando de cuántos objetos de la clase están cargados, es decir, del número de instancias, no hilos.
Que implemente la interfaz SingleThreadModel sólo significa que se ejecutará una petición de forma concurrente en lugar de múltiples peticiones. Independientemente de si la implementa o no, el número de objetos instanciados de la clase de un servlet cargado, es 1.
Por tanto la respuesta de la plantilla provisional es correcta.
Que implemente la interfaz SingleThreadModel sólo significa que se ejecutará una petición de forma concurrente en lugar de múltiples peticiones. Independientemente de si la implementa o no, el número de objetos instanciados de la clase de un servlet cargado, es 1.
Por tanto la respuesta de la plantilla provisional es correcta.
- marioyo100
- PreparaTIC27
- Mensajes: 32
- Registrado: 23 Abr 2013, 10:08
- Agradecido: 0
- Agradecimiento recibido: 0