lanzar jar desde app web

17 views
Skip to first unread message

QuiQue

unread,
Mar 26, 2008, 5:12:33 PM3/26/08
to jav...@googlegroups.com, servl...@elistas.net
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?

--

saludos

QuiQue

Domingo Suárez Torres

unread,
Mar 26, 2008, 5:55:58 PM3/26/08
to jav...@googlegroups.com
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)

 
Saludos

2008/3/26, QuiQue <quiqu...@gmail.com>:



--
domix

Jorge Cedeño

unread,
Mar 26, 2008, 6:27:26 PM3/26/08
to jav...@googlegroups.com, servl...@elistas.net
Puedes utilizar esto
 
<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.
 
 
Saludos Cordiales,
http://www.KimeraSolutions.com




Date: Wed, 26 Mar 2008 22:12:33 +0100
From: quiqu...@gmail.com
To: jav...@googlegroups.com; servl...@elistas.net
Subject: [JavaSOS] lanzar jar desde app web

Domingo Suárez Torres

unread,
Mar 26, 2008, 6:41:32 PM3/26/08
to jav...@googlegroups.com
Lo que has puesto es la configuración de un Servlet, si quieres algo que se ejecute al iniciar tu aplicación web debería ser un EventListener, o un ServletContextListener

Aún así, creo que el problema del compañero se refiere a cuando un usuario ejecuta alguna acción en su webapp que lanza un proceso pesado. Por lo cual no aplica código de inicialización como un EventListener,o el ServletContextListener

Saludos


2008/3/26, Jorge Cedeño <homeri...@hotmail.com>:



--
domix

David Castañeda

unread,
Mar 27, 2008, 12:42:59 AM3/27/08
to jav...@googlegroups.com
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.

2008/3/26 Domingo Suárez Torres <domingo...@gmail.com>:



--
David Castañeda R.

Ernesto De Santis

unread,
Mar 26, 2008, 6:39:52 PM3/26/08
to jav...@googlegroups.com
Hola Quique

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().


Saludos,
Ernesto.

QuiQue escribió:

QuiQue

unread,
Mar 27, 2008, 8:48:53 AM3/27/08
to jav...@googlegroups.com
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 <davi...@gmail.com> escribió:



--

saludos

QuiQue

Domingo Suárez Torres

unread,
Mar 27, 2008, 1:46:52 PM3/27/08
to jav...@googlegroups.com
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 

whichaservletexecutes. InaJava2Platform, StandardEdition(J2SETM, v.1.3or 

above) or Java2Platform, EnterpriseEdition(J2EETM, v.1.3or above) environ- 

ment,theserestrictionsshouldbeplacedusingthepermissionarchitecturedefined 

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.

 
Dejo aquí algunas referencias de threads en Sevlets

Saludos


El día 26/03/08, David Castañeda <davi...@gmail.com> escribió:



--
domix

Domingo Suárez Torres

unread,
Mar 27, 2008, 1:50:48 PM3/27/08
to jav...@googlegroups.com
Hola

El uso del WebService también es sincrono, por lo tanto también te va a dar el timeout.

Saludos

El día 27/03/08, QuiQue <quiqu...@gmail.com> escribió:



--
domix

David Castañeda

unread,
Mar 27, 2008, 3:52:51 PM3/27/08
to jav...@googlegroups.com
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...


2008/3/27 Domingo Suárez Torres <domingo...@gmail.com>:



--
David Castañeda R.

David Castañeda

unread,
Mar 27, 2008, 3:59:47 PM3/27/08
to jav...@googlegroups.com
No necesariamente tiene que ser sincrono el llamado a un web service pero ese es otro tema con hilos :)

http://today.java.net/pub/a/today/2006/09/19/asynchronous-jax-ws-web-services.html

2008/3/27 Domingo Suárez Torres <domingo...@gmail.com>:
Hola



--
David Castañeda R.

Domingo Suárez Torres

unread,
Mar 27, 2008, 6:14:56 PM3/27/08
to jav...@googlegroups.com

Sin duda la curva de aprendizaje pega para adoptar nuevas tecnologías, y en ocasiones no se dispone del tiempo para hacerlo.

Pero aun así, yo no podría recomendar algo que para mi no es correcto.

JMS trae mas curva de aprendizaje, pero el uso de Quartz lo veo mas sencillo de integrar.

Saludos


El día 27/03/08, David Castañeda <davi...@gmail.com> escribió:
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...



--
domix
Reply all
Reply to author
Forward
0 new messages