alguien sabe como puedo lanzar un jar desde una aplicacion web?
el tema es que tengo una aplicacion web que tiene que hacer una gran carga de trabajo con datos de distintas bases de datos, pero no quiero que le de al usuario un timeout del navegador. mi idea es devolver al usuario desde el servlet a una pagina jsp de gracias o algo asi pero lanzar por debajo un jar o algo parecido que ejecute todo ese movimiento de datos que hay que hacer.
ademas, teniendo en cuenta que mi aplicacion web esta empaquetada como un war, donde deberia colocar en mi servidor (tomcat 5) la otra aplicacion (el .jar)? podria meter este jar dentro de mi propia aplicacion web (dentro del war) o tengo que colocarla en otro sitio?
Hola, Para lo que quieres hacer veo dos opciones. 1. Usa Quartz para programar un Job que haga el proceso "pesado" en segundo plano. 2. Usa JMS, mas precisamente haz un MDB (MessageDriven Bean) que se "despierte" cuando le encoles un mensaje y que ahí haga el proceso "pesado".
Ambos enfoques son totalmente asíncronos y así evitas el timeout al usuario. Por ningún motivo intentes usar threads.
Sobre en donde debería estar tu código del proceso pesado, pues debería estar en un jar dentro del lib de tu webapp o en una clase dentro de WEB-INF/classes/ Si es que usas Quartz
En caso de usar JMS, podría estar en una EAR o incluso podría estar dentro de un jar en el lib o en classes si utilizas Spring y en lugar de un MDB haces un MDP (MessageDriven Pojo)
> alguien sabe como puedo lanzar un jar desde una aplicacion web?
> el tema es que tengo una aplicacion web que tiene que hacer una gran carga > de trabajo con datos de distintas bases de datos, pero no quiero que le de > al usuario un timeout del navegador. mi idea es devolver al usuario desde el > servlet a una pagina jsp de gracias o algo asi pero lanzar por debajo un jar > o algo parecido que ejecute todo ese movimiento de datos que hay que hacer.
> ademas, teniendo en cuenta que mi aplicacion web esta empaquetada como un > war, donde deberia colocar en mi servidor (tomcat 5) la otra aplicacion (el > .jar)? podria meter este jar dentro de mi propia aplicacion web (dentro del > war) o tengo que colocarla en otro sitio?
<servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>InitServlet</servlet-name> <servlet-class>edu.inventario.snmp.InitServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
Donde puedes decirle que clase ejecutar cuando se inicie tu webapp, y la prioridad. Cuaklquier cosa me avisas.
Date: Wed, 26 Mar 2008 22:12:33 +0100From: quique.m...@gmail.comTo: javasos@googlegroups.com; servlet-...@elistas.netSubject: [JavaSOS] lanzar jar desde app webhola list@alguien sabe como puedo lanzar un jar desde una aplicacion web?el tema es que tengo una aplicacion web que tiene que hacer una gran carga de trabajo con datos de distintas bases de datos, pero no quiero que le de al usuario un timeout del navegador. mi idea es devolver al usuario desde el servlet a una pagina jsp de gracias o algo asi pero lanzar por debajo un jar o algo parecido que ejecute todo ese movimiento de datos que hay que hacer.ademas, teniendo en cuenta que mi aplicacion web esta empaquetada como un war, donde deberia colocar en mi servidor (tomcat 5) la otra aplicacion (el .jar)? podria meter este jar dentro de mi propia aplicacion web (dentro del war) o tengo que colocarla en otro sitio?-- saludosQuiQue______________________________________________________________ ___ MSN Video. http://video.msn.com/?mkt=es-es
> <servlet> > <description>This is the description of my J2EE component</description> > <display-name>This is the display name of my J2EE component</display-name> > <servlet-name>InitServlet</servlet-name> > <servlet-class>edu.inventario.snmp.InitServlet</servlet-class> > <load-on-startup>1</load-on-startup> > </servlet>
> Donde puedes decirle que clase ejecutar cuando se inicie tu webapp, y la > prioridad. > Cuaklquier cosa me avisas.
> ------------------------------ > Date: Wed, 26 Mar 2008 22:12:33 +0100 > From: quique.m...@gmail.com > To: javasos@googlegroups.com; servlet-...@elistas.net > Subject: [JavaSOS] lanzar jar desde app web
> hola list@
> alguien sabe como puedo lanzar un jar desde una aplicacion web?
> el tema es que tengo una aplicacion web que tiene que hacer una gran carga > de trabajo con datos de distintas bases de datos, pero no quiero que le de > al usuario un timeout del navegador. mi idea es devolver al usuario desde el > servlet a una pagina jsp de gracias o algo asi pero lanzar por debajo un jar > o algo parecido que ejecute todo ese movimiento de datos que hay que hacer.
> ademas, teniendo en cuenta que mi aplicacion web esta empaquetada como un > war, donde deberia colocar en mi servidor (tomcat 5) la otra aplicacion (el > .jar)? podria meter este jar dentro de mi propia aplicacion web (dentro del > war) o tengo que colocarla en otro sitio?
Domingo esta correcto en su apreciaci'on, pero si necesitas algo mas sencillo, no seria suficiente con crear un thread y ejecutar desde este el proceso largo? y dejar que el thread del servlet le responda a el usuario.
> Hola, > Para lo que quieres hacer veo dos opciones. > 1. Usa Quartz para programar un Job que haga el proceso "pesado" en > segundo plano. > 2. Usa JMS, mas precisamente haz un MDB (MessageDriven Bean) que se > "despierte" cuando le encoles un mensaje y que ahí haga el proceso "pesado".
> Ambos enfoques son totalmente asíncronos y así evitas el timeout al > usuario. Por ningún motivo intentes usar threads.
> Sobre en donde debería estar tu código del proceso pesado, > pues debería estar en un jar dentro del lib de tu webapp o en una clase > dentro de WEB-INF/classes/ Si es que usas Quartz
> En caso de usar JMS, podría estar en una EAR o incluso podría estar dentro > de un jar en el lib o en classes si utilizas Spring y en lugar de un MDB > haces un MDP (MessageDriven Pojo)
> > alguien sabe como puedo lanzar un jar desde una aplicacion web?
> > el tema es que tengo una aplicacion web que tiene que hacer una gran > > carga de trabajo con datos de distintas bases de datos, pero no quiero que > > le de al usuario un timeout del navegador. mi idea es devolver al usuario > > desde el servlet a una pagina jsp de gracias o algo asi pero lanzar por > > debajo un jar o algo parecido que ejecute todo ese movimiento de datos que > > hay que hacer.
> > ademas, teniendo en cuenta que mi aplicacion web esta empaquetada como > > un war, donde deberia colocar en mi servidor (tomcat 5) la otra aplicacion > > (el .jar)? podria meter este jar dentro de mi propia aplicacion web (dentro > > del war) o tengo que colocarla en otro sitio?
Lo que podés hacer es crear un Thread separado para hacer el trabajo pesado. Fijate la clase Thread y la interface Runnable. Vos deberías implementar Runnable, de la cual tenés que implementar el metodo run(), luego crear un Thread pasandolé tu clase, y luego llamar start() para comenzar. En ese punto la ejecusión se divide en dos, por un lado el llamado de start() continua con la siguiente instrucción, y el otro thread con lo que hayas programado en run().
> alguien sabe como puedo lanzar un jar desde una aplicacion web?
> el tema es que tengo una aplicacion web que tiene que hacer una gran > carga de trabajo con datos de distintas bases de datos, pero no quiero > que le de al usuario un timeout del navegador. mi idea es devolver al > usuario desde el servlet a una pagina jsp de gracias o algo asi pero > lanzar por debajo un jar o algo parecido que ejecute todo ese > movimiento de datos que hay que hacer.
> ademas, teniendo en cuenta que mi aplicacion web esta empaquetada como > un war, donde deberia colocar en mi servidor (tomcat 5) la otra > aplicacion (el .jar)? podria meter este jar dentro de mi propia > aplicacion web (dentro del war) o tengo que colocarla en otro sitio?
a ver, el caso es nuy sencillo: tengo una appweb que tira de varias bases de datos situadas en distintos servidores. cuando un usuario cambia un dato, debo replicar ese dato a todas las bases de datos. la verdad es que pensaba hacer un hilo que cogiera de una y replicara en las demas, pero al leer lo que han dicho de que no se me ocurra usar hilos ya me he quedado un poco asustado.
ahora estoy pensando en si se puede lanzar un webservice desde mi servlet y que sea este ws el que lo haga todo
otra pregunta, que no tiene nada que ver: esta appweb corre en una intranet. para acceder a ella, hace falta un usuario y clave que se guarda en base de datos. esto me funciona, pero ahora me ha surgido la duda de si tengo que usar o hacer algo de https o ssl o algo asi. por si sirve de algo, el server es tomcat 5. no tengo ni idea de como va lo de certificados digitales o servidores seguros o cosas asi
saludos y gracias a todos por vuestras aportaciones
QuiQue
El día 27/03/08, David Castañeda <david...@gmail.com> escribió:
> Domingo esta correcto en su apreciaci'on, pero si necesitas algo mas > sencillo, no seria suficiente con crear un thread y ejecutar desde este el > proceso largo? y dejar que el thread del servlet le responda a el usuario.
> > Hola, > > Para lo que quieres hacer veo dos opciones. > > 1. Usa Quartz para programar un Job que haga el proceso "pesado" en > > segundo plano. > > 2. Usa JMS, mas precisamente haz un MDB (MessageDriven Bean) que se > > "despierte" cuando le encoles un mensaje y que ahí haga el proceso "pesado".
> > Ambos enfoques son totalmente asíncronos y así evitas el timeout al > > usuario. Por ningún motivo intentes usar threads.
> > Sobre en donde debería estar tu código del proceso pesado, > > pues debería estar en un jar dentro del lib de tu webapp o en una clase > > dentro de WEB-INF/classes/ Si es que usas Quartz
> > En caso de usar JMS, podría estar en una EAR o incluso podría estar > > dentro de un jar en el lib o en classes si utilizas Spring y en lugar de un > > MDB haces un MDP (MessageDriven Pojo)
> > > alguien sabe como puedo lanzar un jar desde una aplicacion web?
> > > el tema es que tengo una aplicacion web que tiene que hacer una gran > > > carga de trabajo con datos de distintas bases de datos, pero no quiero que > > > le de al usuario un timeout del navegador. mi idea es devolver al usuario > > > desde el servlet a una pagina jsp de gracias o algo asi pero lanzar por > > > debajo un jar o algo parecido que ejecute todo ese movimiento de datos que > > > hay que hacer.
> > > ademas, teniendo en cuenta que mi aplicacion web esta empaquetada como > > > un war, donde deberia colocar en mi servidor (tomcat 5) la otra aplicacion > > > (el .jar)? podria meter este jar dentro de mi propia aplicacion web (dentro > > > del war) o tengo que colocarla en otro sitio?
Sin duda es lo mas simple, pero IMHO es mas correcto usar alguna infraestructura que se encargue del manejo a bajo nivel de los threads en el Servlet Container.
Ya de por si, las respuestas de un Servlet son multihilo, que son gestionados por el ServletContainer. Si en el código el servlet creamos un hilo, ¿Quien gestiona los recurso de ese hilo? Sobre todo si la ejecución de código de ese hilo es transaccional, ¿Cuando se registra esa transacción en el TransactionManager? Y la pregunta que considero mas importante ¿Quien detiene el Thread?
Por mencionar algo mas al respecto de threads en servlets en Weblogic se permite, pero no esta soportado. Les pongo un parrafo de la especificacion de Servlet 2.2 y que también aparece en la 2.4 "Aservlet container mayplace securityrestrictions onthe environment in
bytheJava2platform. Forexample, high-endapplicationserversmaylimit the
creationof aThreadobject toinsurethat other componentsof thecontainer are not negatively impacted. "
Las alternativas que yo sugiero han sido probadas en entornos transaccionales y jamas he tenido problemas. Sobre todo porque la programación con hilos es algo delicado que al menos yo se lo encargaría a alguien que tuviera buena experiencia en ambientes multihilo.
Si recomiendo el uso de Quatrz y JMS es porque son tecnologías muy probadas que no me van a dar dolores de cabeza.
> Domingo esta correcto en su apreciaci'on, pero si necesitas algo mas > sencillo, no seria suficiente con crear un thread y ejecutar desde este el > proceso largo? y dejar que el thread del servlet le responda a el usuario.
> > Para lo que quieres hacer veo dos opciones. > > 1. Usa Quartz para programar un Job que haga el proceso "pesado" en > > segundo plano. > > 2. Usa JMS, mas precisamente haz un MDB (MessageDriven Bean) que se > > "despierte" cuando le encoles un mensaje y que ahí haga el proceso "pesado".
> > Ambos enfoques son totalmente asíncronos y así evitas el timeout al > > usuario. Por ningún motivo intentes usar threads.
> > Sobre en donde debería estar tu código del proceso pesado, > > pues debería estar en un jar dentro del lib de tu webapp o en una clase > > dentro de WEB-INF/classes/ Si es que usas Quartz
> > En caso de usar JMS, podría estar en una EAR o incluso podría estar > > dentro de un jar en el lib o en classes si utilizas Spring y en lugar de un > > MDB haces un MDP (MessageDriven Pojo)
> > > alguien sabe como puedo lanzar un jar desde una aplicacion web?
> > > el tema es que tengo una aplicacion web que tiene que hacer una gran > > > carga de trabajo con datos de distintas bases de datos, pero no quiero que > > > le de al usuario un timeout del navegador. mi idea es devolver al usuario > > > desde el servlet a una pagina jsp de gracias o algo asi pero lanzar por > > > debajo un jar o algo parecido que ejecute todo ese movimiento de datos que > > > hay que hacer.
> > > ademas, teniendo en cuenta que mi aplicacion web esta empaquetada como > > > un war, donde deberia colocar en mi servidor (tomcat 5) la otra aplicacion > > > (el .jar)? podria meter este jar dentro de mi propia aplicacion web (dentro > > > del war) o tengo que colocarla en otro sitio?
> a ver, el caso es nuy sencillo: tengo una appweb que tira de varias bases > de datos situadas en distintos servidores. cuando un usuario cambia un dato, > debo replicar ese dato a todas las bases de datos. la verdad es que pensaba > hacer un hilo que cogiera de una y replicara en las demas, pero al leer lo > que han dicho de que no se me ocurra usar hilos ya me he quedado un poco > asustado.
> ahora estoy pensando en si se puede lanzar un webservice desde mi servlet > y que sea este ws el que lo haga todo
> otra pregunta, que no tiene nada que ver: esta appweb corre en una > intranet. para acceder a ella, hace falta un usuario y clave que se guarda > en base de datos. esto me funciona, pero ahora me ha surgido la duda de si > tengo que usar o hacer algo de https o ssl o algo asi. por si sirve de algo, > el server es tomcat 5. no tengo ni idea de como va lo de certificados > digitales o servidores seguros o cosas asi
> saludos y gracias a todos por vuestras aportaciones
> QuiQue
> El día 27/03/08, David Castañeda <david...@gmail.com> escribió:
> > Domingo esta correcto en su apreciaci'on, pero si necesitas algo mas > > sencillo, no seria suficiente con crear un thread y ejecutar desde este el > > proceso largo? y dejar que el thread del servlet le responda a el usuario.
> > > Para lo que quieres hacer veo dos opciones. > > > 1. Usa Quartz para programar un Job que haga el proceso "pesado" en > > > segundo plano. > > > 2. Usa JMS, mas precisamente haz un MDB (MessageDriven Bean) que se > > > "despierte" cuando le encoles un mensaje y que ahí haga el proceso "pesado".
> > > Ambos enfoques son totalmente asíncronos y así evitas el timeout al > > > usuario. Por ningún motivo intentes usar threads.
> > > Sobre en donde debería estar tu código del proceso pesado, > > > pues debería estar en un jar dentro del lib de tu webapp o en una clase > > > dentro de WEB-INF/classes/ Si es que usas Quartz
> > > En caso de usar JMS, podría estar en una EAR o incluso podría estar > > > dentro de un jar en el lib o en classes si utilizas Spring y en lugar de un > > > MDB haces un MDP (MessageDriven Pojo)
> > > > alguien sabe como puedo lanzar un jar desde una aplicacion web?
> > > > el tema es que tengo una aplicacion web que tiene que hacer una gran > > > > carga de trabajo con datos de distintas bases de datos, pero no quiero que > > > > le de al usuario un timeout del navegador. mi idea es devolver al usuario > > > > desde el servlet a una pagina jsp de gracias o algo asi pero lanzar por > > > > debajo un jar o algo parecido que ejecute todo ese movimiento de datos que > > > > hay que hacer.
> > > > ademas, teniendo en cuenta que mi aplicacion web esta empaquetada > > > > como un war, donde deberia colocar en mi servidor (tomcat 5) la otra > > > > aplicacion (el .jar)? podria meter este jar dentro de mi propia aplicacion > > > > web (dentro del war) o tengo que colocarla en otro sitio?
ademas que tienes que considerar la parte del manejo del proceso que va a realizarse desde el Hilo y como vas a manejar las fallas... la prouesta de Hilos va mas orientada a que si ves el post original la pregunta original era... "como lanzar un jar desde app web" lo cual, sin ofender quique que todos estamos aprendiendo, quiere decir que no tiene mucha experiencia como para enfrentarlo a JMS...
> Sin duda es lo mas simple, pero IMHO es mas correcto usar alguna > infraestructura que se encargue del manejo a bajo nivel de los threads en el > Servlet Container.
> Ya de por si, las respuestas de un Servlet son multihilo, que son > gestionados por el ServletContainer. Si en el código el servlet creamos un > hilo, ¿Quien gestiona los recurso de ese hilo? Sobre todo si > la ejecución de código de ese hilo es transaccional, ¿Cuando se registra > esa transacción en el TransactionManager? Y la pregunta que considero mas > importante ¿Quien detiene el Thread?
> Por mencionar algo mas al respecto de threads en servlets en Weblogic se > permite, pero no esta soportado. Les pongo un parrafo de la especificacion > de Servlet 2.2 y que también aparece en la 2.4 > "Aservlet container mayplace securityrestrictions onthe environment in
> bytheJava2platform. Forexample, high-endapplicationserversmaylimit the
> creationof aThreadobject toinsurethat other componentsof thecontainer are > not negatively impacted. "
> Las alternativas que yo sugiero han sido probadas en entornos > transaccionales y jamas he tenido problemas. Sobre todo porque > la programación con hilos es algo delicado que al menos yo se > lo encargaría a alguien que tuviera buena experiencia en ambientes > multihilo.
> Si recomiendo el uso de Quatrz y JMS es porque son tecnologías muy > probadas que no me van a dar dolores de cabeza.
> El día 26/03/08, David Castañeda <david...@gmail.com> escribió:
> > Domingo esta correcto en su apreciaci'on, pero si necesitas algo mas > > sencillo, no seria suficiente con crear un thread y ejecutar desde este el > > proceso largo? y dejar que el thread del servlet le responda a el usuario.
> > > Para lo que quieres hacer veo dos opciones. > > > 1. Usa Quartz para programar un Job que haga el proceso "pesado" en > > > segundo plano. > > > 2. Usa JMS, mas precisamente haz un MDB (MessageDriven Bean) que se > > > "despierte" cuando le encoles un mensaje y que ahí haga el proceso "pesado".
> > > Ambos enfoques son totalmente asíncronos y así evitas el timeout al > > > usuario. Por ningún motivo intentes usar threads.
> > > Sobre en donde debería estar tu código del proceso pesado, > > > pues debería estar en un jar dentro del lib de tu webapp o en una clase > > > dentro de WEB-INF/classes/ Si es que usas Quartz
> > > En caso de usar JMS, podría estar en una EAR o incluso podría estar > > > dentro de un jar en el lib o en classes si utilizas Spring y en lugar de un > > > MDB haces un MDP (MessageDriven Pojo)
> > > > alguien sabe como puedo lanzar un jar desde una aplicacion web?
> > > > el tema es que tengo una aplicacion web que tiene que hacer una gran > > > > carga de trabajo con datos de distintas bases de datos, pero no quiero que > > > > le de al usuario un timeout del navegador. mi idea es devolver al usuario > > > > desde el servlet a una pagina jsp de gracias o algo asi pero lanzar por > > > > debajo un jar o algo parecido que ejecute todo ese movimiento de datos que > > > > hay que hacer.
> > > > ademas, teniendo en cuenta que mi aplicacion web esta empaquetada > > > > como un war, donde deberia colocar en mi servidor (tomcat 5) la otra > > > > aplicacion (el .jar)? podria meter este jar dentro de mi propia aplicacion > > > > web (dentro del war) o tengo que colocarla en otro sitio?