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

Librerías java a bajo nivel

Estas en el tema de Librerías java a bajo nivel en el foro de Java en Foros del Web. Supongamos que los proyectos A y B utilizan la librería lib.jar, pero dicha lib.jar no es compartida, cada proyecto tiene su propia copia en su ...
  #1 (permalink)  
Antiguo 15/09/2006, 06:39
 
Fecha de Ingreso: noviembre-2005
Mensajes: 97
Antigüedad: 18 años, 5 meses
Puntos: 0
Librerías java a bajo nivel

Supongamos que los proyectos A y B utilizan la librería lib.jar, pero dicha lib.jar no es compartida, cada proyecto tiene su propia copia en su carpeta lib.

Cuando se despliega en el servidor, y de ahí a la JVM, cuando se carga la clase1 del lib.jar en el proyecto A, si luego se carga esa misma clase en el proyecto B, ¿qué hace la JVM?.

Alguien sabe si, al llamarse ambas clase1, no carga la clase para el proyecto B utilizando la que se había cargado para el proyecto A? o por el contrio al estar en rutas distintas los lib.jar si que carga la clase1 para el proyecto B de su librería particular?

Cualquier ayuda, pagina con información, etc... me serviría mucho
  #2 (permalink)  
Antiguo 15/09/2006, 09:30
Avatar de hugo777  
Fecha de Ingreso: enero-2002
Ubicación: Lima, Perú
Mensajes: 757
Antigüedad: 22 años, 3 meses
Puntos: 1
Hola, si es la misma JVM, entonces sóla una de las lib.jar se cargará. Pero aún si cada jar contiene las misma clases.

Entonces, para evitar esto:

1) Ten clases con nombres diferentes en cada jar. Asegúrate que no se repitan tus clases en los diferentes jars.
2) Si tienes dos proyectos A y B, y son aplicaciones independientes, entonces cada uno debería iniciarse en una JVM diferente.
__________________
Saludos,

H@C..
  #3 (permalink)  
Antiguo 16/09/2006, 08:48
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Cita:
Iniciado por hugo777 Ver Mensaje
Hola, si es la misma JVM, entonces sóla una de las lib.jar se cargará. Pero aún si cada jar contiene las misma clases.
No es cierto . Las clases no se manejan a nivel de Maquina Virtual (JVM) si no a nivel de Cargador de Clases (ClassLoader). Dos ClassLoader diferentes pueden tener cargadas dos lib.jar iguales y cada uno las cargara y las tratará por separado como si fueran distintas. Eso mismo es lo que ocurre en las aplicaciones web, donde cada contexto tiene su propio classloader para las clases propias de la aplicacion (WEB-INF/classes y WEB-INF/lib).

En las aplicaciones normales que solo utilizan un classloader entonces funciona como dice Hugo por que 1JVM=1ClassLoader, pero en muchos casos no es así.

S!
  #4 (permalink)  
Antiguo 17/09/2006, 07:20
 
Fecha de Ingreso: noviembre-2005
Mensajes: 97
Antigüedad: 18 años, 5 meses
Puntos: 0
Okis, muchas gracias. Es que eso me suponía un gran problema si no, porque hay varios proyectos que utilizan una librería, pero esa libreria contiene clases con atributos estáticos, y claro, si sólo se carga una vez dicha librería y todos los proyectos modifican dichos atributos estáticos a la vez, y leen de ahí, etc... me daría muchisimos problemas.

He vuelto a estar buscando información, pero leí además que la carga de clases primero se buscaba en el sistema, luego en otro sitio (no recuerdo), y por último en el classpath de la aplicación. Al tener cada proyecto web su classpath particular apuntando a su carpeta lib con dicha librería, entendí tambien que se cargaba la librería para cada proyecto en particular.

Muchas gracias por la ayuda gente!
  #5 (permalink)  
Antiguo 19/09/2006, 09:09
Avatar de hugo777  
Fecha de Ingreso: enero-2002
Ubicación: Lima, Perú
Mensajes: 757
Antigüedad: 22 años, 3 meses
Puntos: 1
Gracias por la aclaración GreenEyed.
__________________
Saludos,

H@C..
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 05:17.