Foros del Web » Programación para mayores de 30 ;) » Java »

Arrancar clase al arrancar Spring

Estas en el tema de Arrancar clase al arrancar Spring en el foro de Java en Foros del Web. Hola, Estoy desarrollando un proyecto con Spring y tengo una duda. Necesito arrancar una clase a la vez que arranco la aplicación Spring. A ver ...
  #1 (permalink)  
Antiguo 07/08/2009, 07:54
 
Fecha de Ingreso: agosto-2009
Mensajes: 29
Antigüedad: 14 años, 8 meses
Puntos: 0
Arrancar clase al arrancar Spring

Hola,

Estoy desarrollando un proyecto con Spring y tengo una duda. Necesito arrancar una clase a la vez que arranco la aplicación Spring. A ver si me explico, a la aplicación Spring se conectaran unas máquinas y el usuario podrá controlarlas a traves de mi aplicacion con un teclado por pantalla. La cuestión es que las dos máquinas (host de aplicación Spring y máquina 'controlada') tienen que estar conectadas por un socket TCP y es la 'controlada' la que se conecta cuando quiere (al encenderse, pero puede ser en cualquier momento). Por eso necesitaria un serverSocket escuchando nada más 'arrancar' la aplicación Spring, pero no se me ocurre como hacerlo.

Alguna idea?

Muchisimas gracias por adelantado
  #2 (permalink)  
Antiguo 08/08/2009, 08:37
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Arrancar clase al arrancar Spring

Hola:

El constructor de cualquier bean que arranques con spring puede arrancar el ServerSocket (eso sí, en un hilo separado para no bloquear la construcción de los siguientes bean)

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 09/08/2009, 03:18
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

¿El framework de Spring no te ofrece ningún método init() o algo por el estilo? Tiene que haber algo ya que se trata de Servlets al fin y al cabo.

Creo que sería más correcto que arrancarlo desde un bean.
  #4 (permalink)  
Antiguo 10/08/2009, 02:27
 
Fecha de Ingreso: agosto-2009
Mensajes: 29
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

Hola.

Gracias a los 2. El caso es que con esos 2 métodos el ServerSocket arrancaría cuando alguien entre en la web por primera vez, y la idea era que el ServerSocket arrancara aunque nadie entre en la web en días. Ya se que es una tontería porque no cuesta nada entrar en la web cada vez que le haga un deploy, pero de la otra manera me resulta más elegante. (De momento voy a intentarlo con los beans)
  #5 (permalink)  
Antiguo 10/08/2009, 03:17
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

Por eso mismo te lo estoy diciendo. El init() se llamará cuando se arranque el servidor de aplicaciones.

Lo que se me ocurre es lo siguiente: en web.xml tiene que haber por narices un Servlet de Spring. Haces tu propio servlet heredando del de Spring y sobreescribes el método init(). No olvides poner super.init() al principio del todo para que también inicialice lo de Spring.
  #6 (permalink)  
Antiguo 10/08/2009, 04:26
 
Fecha de Ingreso: agosto-2009
Mensajes: 29
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

Hola Relaxamos,

La verdad es que me parece una gran idea, no se me había ocurrido (y no se que había entendido cuando la he leído en el primer post). El problema es que me dice que el método es final y no lo puedo sobreescribir. El servlet en cuestion es un: org.springframework.web.servlet.DispatcherServlet.
Muchas gracias por tu ayuda.
  #7 (permalink)  
Antiguo 10/08/2009, 04:51
 
Fecha de Ingreso: agosto-2009
Mensajes: 29
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

Vale, me autorespondo. He conseguido reescribir el método init(). Lo que me decía que era un método final, era el init() sin parámetros, pero si que me ha dejado reescribir el "public void init(ServletConfig config)". Dentro de él he puesto "super.init(config);" para que se inicialice lo de Spring, y además la llamada a la clase del ServerSocket.
Pero el problema es el mismo, arranca cuando alguien entra por primera vez en la web, así que no he avanzado mucho. Pero muchas gracias por la idea, seguiré investigando por esa vía y si lo consigo ya lo escribire.

Saludos!
  #8 (permalink)  
Antiguo 10/08/2009, 05:08
 
Fecha de Ingreso: agosto-2009
Mensajes: 29
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

Y solucionado!
Al final lo he conseguido. La solución era hacer lo mismo que explica relaxamos, pero en vez de sobreescribir el método init() del servlet, hay que sobreescribir el contextInitialized del ContextLoaderListener. Este metodo se llama al principio de todo, y no con la primera llamada al servlet, como el DispatcherServlet, y le podemos añadir lo que queramos, mientras luego hagamos el super.contextInitialized.

Saludos a todos, y a relaxamos y chuidiang por vuestro tiempo.
  #9 (permalink)  
Antiguo 10/08/2009, 06:48
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

Bueno, si te funciona yo encantado.

Aún así me daría miedo tocar el ContextLoader.

Prueba con esto. En web.xml tiene que estar algo parecido a:

<servlet>
<servlet-name>LoQueSeaBlaBla</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

Te he resaltado en negrita lo imporante.
  #10 (permalink)  
Antiguo 10/08/2009, 08:20
 
Fecha de Ingreso: agosto-2009
Mensajes: 29
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

Gracias de nuevo Relaxamos.
He probado el "load on startup" en el web.xml y funciona perfectamente. Asi que lo cambiaré y utilizaré este método en vez de sobreescribir el ContextLoader ya que me parece algo más 'seguro', no tan en las 'entrañas' de Spring.

Saludos!
  #11 (permalink)  
Antiguo 10/08/2009, 10:04
 
Fecha de Ingreso: julio-2009
Mensajes: 64
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

Nada, que aproveche.
  #12 (permalink)  
Antiguo 04/08/2010, 04:12
 
Fecha de Ingreso: noviembre-2006
Mensajes: 12
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Arrancar clase al arrancar Spring

Podrias indicar finalmente de que clas extiende tu servlet ?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:41.