por qué tomcat tiene su propio cargador de clases. ¿cuál es la ventaja de tener un classloader definido por el usuariopor qué necesitamos el cargador de clases definido por el usuario en java
Respuesta
Aísla las diversas aplicaciones de Internet desplegadas en el contenedor; es decir, el comportamiento de una aplicación weba no se verá afectado por (des) implementación de otra aplicación weba.
Cada aplicación web solo ve sus propias clases, no las que proporcionan otras aplicaciones. Esto permite que diferentes webapps usen diferentes versiones de la misma clase. Desplegar varias aplicaciones de Internet sería una pesadilla sin ese aislamiento.
De manera similar, los paquetes OSGI obtienen sus propios cargadores de clases para que diferentes paquetes puedan usar diferentes versiones del mismo complemento. Una vez más, este aislamiento hace que sea menos probable que agregar un complemento (con sus bibliotecas dependientes) afecte a los otros complementos del sistema.
Tomcat (y otros contenedores de aplicaciones) deben ser capaces de manejar clases de carga desde archivos WAR etc. ¿Cómo podría hacer eso sin usar cargadores de clase definidos por el usuario?
EDITAR: Básicamente necesita cargadores de clases definidos por el usuario si necesita cargar clases o recursos de maneras "inusuales" ... como por ejemplo de un archivo EAR o WAR. Como otro ejemplo, puede cargar clases desde una base de datos, o desde algún almacenamiento seguro.
skeet por qué no pueden usar el cargador de clases o el cargador de clase del sistema –
@Suresh S: ¿Alguno de ellos sabe cómo procesar un archivo WAR o EAR? ? –
skeet gracias por la respuesta breif al cargar desde la base de datos. –
Trabajé en un sistema una vez que tenía un cargador de clases que cargaba clases desde una base de datos distribuida. De esta forma, podría modificar su código, compilarlo y hacer que el compilador lo volcara en el DB; luego, cualquiera que reiniciara su sistema lo cargaría inmediatamente (esto era para clientes en un sistema cliente/servidor distribuido donde los administradores podían crear su propia pantalla módulos sobre la marcha y enviarlos a los clientes).
Esto tenía problemas por cierto, gran teoría, pero no puedo recomendarlo.
- 1. Clasificadores de Java: ¿por qué buscar primero el cargador de clases padre?
- 2. Definición de Guid definido por el usuario
- 3. ¿Por qué necesitamos Application Server en Java?
- 4. ¿Por qué necesitamos interfaces en Java?
- 5. ¿Es posible instrumentar con clases javassist java core? Clases cargadas por el cargador de clases bootstrap
- 6. ¿Por qué necesitamos "var self = this" en clases en Javascript?
- 7. ¿Por qué incluso necesitamos el operador "delete []"?
- 8. ¿Por qué necesitamos el método ContinueWith?
- 9. ¿Por qué necesitamos Thread.MemoryBarrier()?
- 10. ¿Por qué necesitamos fibras
- 11. El método __mul__ definido por el usuario no es conmutativo
- 12. Por qué el objeto creado por el cargador de clases no tienen la oportunidad de recoger la basura en sí
- 13. ¿Por qué no se puede descargar una clase sin descargar el cargador de clases?
- 14. ¿Por qué necesitamos usar operadores de turno en Java?
- 15. TIPO definido por el usuario en bases de datos
- 16. ¿Qué es un cargador de clases aislado en Java?
- 17. ¿Por qué necesitamos ng-click?
- 18. ¿Por qué necesitamos web-sockets?
- 19. ¿Por qué necesitamos usar Radix?
- 20. ¿Por qué necesitamos struct? (C#)
- 21. ¿Por qué necesitamos marcos burlones?
- 22. ¿Por qué necesitamos mesa virtual?
- 23. ¿Por qué necesitamos C Unions?
- 24. ¿Cuál es el propósito del cargador de la clase Java?
- 25. Matriz OpenCV de tipo definido por el usuario
- 26. Seriado de clase definido por el usuario, C++ y msgpack
- 27. ¿A qué se parecen las clases de valores definidas por el usuario de Java?
- 28. ¿Por qué es necesario configurar el cargador de clases con Scala RemoteActors?
- 29. ¿Por qué hay clases de contenedor en Java?
- 30. ¿por qué necesitamos zone_highmem en x86?
Como otra respuesta podría mencionar que estoy bastante seguro de que si sobrescribe el cargador de clases puede hacer algunas cosas de meta bastante impresionantes con su código. Puede permitirle implementar sus propios esquemas de cifrado y debe poder hacer algunos trucos de estilo aspect-j (por ejemplo, tener cada llamada a "Log" etiquetada con el nombre del número de clase/línea del que está registrando). No lo hice. hacer esto una "Respuesta" porque no he hecho esto pero creo que es posible. –