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

Duda sobre compartir objecto Java

Estas en el tema de Duda sobre compartir objecto Java en el foro de Java en Foros del Web. Hola amigos, espero me puedan ayudar. La verdad es que no se mucho de Java, lo básico. Por eso necesito saber como compartir un objecto ...
  #1 (permalink)  
Antiguo 02/08/2010, 11:59
 
Fecha de Ingreso: enero-2009
Mensajes: 6
Antigüedad: 15 años, 3 meses
Puntos: 0
Duda sobre compartir objecto Java

Hola amigos, espero me puedan ayudar. La verdad es que no se mucho de Java, lo básico. Por eso necesito saber como compartir un objecto o recurso entre JSPs.

Les explico. Estoy trabajando con un sistema llamado KEA para deteccién de palabras clave. Le he hecho un frontend con JSP. KEA usa SKOS/RDF como vocabularios lo que representa que cada vez que se hace una petición se tenga que volver a cargar el vocabulario deseado en un objeto, esto conlleva problemas graves de rendimiento ya que tarda como 10 segs por petición.. si uso una sesión esto lleva a serializar la información y el resultado es casi el mismo.

Básicamente lo que necesito es crear el objecto que carga el vocabulario, guardar este en memoria de alguna forma que cuando otro JSP se cargue verifique si este objecto existe antes de tener que crearlo nuevamente... como una cache en memoria estilo Google Memory Buckets (para los que hallan leido sobre como funciona Google) o Zend Server Cache (para PHP) ... de esta forma el objeto ya estaria creado y se maxmiza el rendimiento.

Alguna idea?

Espero me ayuden

Saludos
  #2 (permalink)  
Antiguo 03/08/2010, 00:34
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Duda sobre compartir objecto Java

Si lo que buscas es compartir un objeto entre peticiones e incluso entre sesiones, lo que tienes que hacer es guardarlo en el ServletContext de tu aplicacion. A nivel de JSP es el objeto por defecto application.
Se le añaden cosas con application.setAttribute(nombre,objeto) y se recuperan con application.getAttribute(nombre).
Si te haces un metodo para que te lo recupere y al hacerlo, si no esta ya te lo inicialice por primera vez y te lo ponga en su sitio antes de devolerlo, listo.

De todas formas, cuando guardas un objeto en sesion, para compartir entre peticiones de un mismo usuario, los objetos no tienen por que serializarse, así que el resultado no tendría que ser el mismo, entre peticiones de la misma sesion.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 03/08/2010, 09:46
 
Fecha de Ingreso: enero-2009
Mensajes: 6
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Duda sobre compartir objecto Java

Osea, que si hago application.setAttribute(nombre,objeto) el objeto se guarda de forma nativa? te repito la pregunta pues si yo hago esto en PHP $_SESSION["name"] = objeto; el sistema lo serializa en automático, y justamente eso es lo que no necesito, sino que se guarde directo en memoria. Pero si me dices que es así pues perfecto, sos un genio! saludos, la verdad que no tengo como agradecer. Ya había notado la existencia de ese método, pero ni se me paso por la mente usarlo. Un saludo.
  #4 (permalink)  
Antiguo 03/08/2010, 11:27
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Duda sobre compartir objecto Java

No se que quiere decir "de forma nativa", pero por defecto en Java lo que guardas en el contexto o la sesión, se guardan en memoria en el servidor de aplicaciones.

Sólo se serializan si así lo configuras para poder tener los datos en caso de reinicio, o si haces un cluster de servidores. Por defecto, en memoria.

A diferencia del PHP clásico, las diferentes peticiones se ejecutan en el mismo proceso de S.O. y por eso almacenar cosas en memoria para compartirlas entre peticiones es muy sencillo.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 03/08/2010, 12:01
 
Fecha de Ingreso: enero-2009
Mensajes: 6
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Duda sobre compartir objecto Java

Gracias asi si me funciona, la verdad es que mejora muchisimo... pero ademas de eso no se como diablos cambiar al directorio actual de la app. Por ejemplo:

System.setProperty("user.dir", application.getRealPath(""));
File tmpDir = new File("temp");
tmpDir.mkdir();

Esto me sigue crando el directorio en tomcat/bin y no en el dir de la App, ahora si hago...

File tmpDir = new File(application.getRealPath("temp"));
tmpDir.mkdir();

Si me lo crea bien, pero esta solucion no me sirve de nada ya que KEA crea y busca archivos directamente "temp" basandose en que ya estamos en su directorio, esto desde la consola trabaja perfectamente pero desde JSP no, he creado un metodo para ello, pero tendria que modificar un camion de codigo de KEA que si lo ves te asustas... por eso es mas viable cambiar de directorio, como en PHP:

chdir("/path/to/dir");

He buscado en internet y solo me aparece:

System.setProperty("user.dir", "/path/to/dir");

Pero no funciona muy bien la verdad...se guarda el path y cuando hay otra peticion ya esta seteado a eso solito pero kea no entiende los paths, pues no encuentra los archivos, no puedes crear un directorio sino le pasas la ruta completa sin embargo ejecutas lo mismo de la consola y funciona perfecto, se te ocurre algo?


Saludos
  #6 (permalink)  
Antiguo 04/08/2010, 01:29
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Duda sobre compartir objecto Java

No puedes camibiarle el directorio de ejecución a un contenedor web mientras está en marcha. No sólo seguramente ignore el cambio, sino que si lo consiguieras seguramente todo el código del servidor que depende de saber donde está fallaría.

Lo mejor es cambiar el código para decirle explicitamente donde ha de crear los ficheros. Ya se que no es lo que te gustaría oir, pero... .

Si usas algo como el Eclipse, usando el "buscar en ficheros" por "new File" te puede facilitar las cosas.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: compartir
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 08:11.