Esto es un problema.JDBC/OSGi y cómo cargar de forma dinámica los controladores sin indicar explícitamente las dependencias en el paquete?
Tengo una base de código bien estructurada pero monolítica que tiene una arquitectura modular primitiva (todos los módulos implementan interfaces pero comparten la misma ruta de clase). Me doy cuenta de la locura de este enfoque y los problemas que representa cuando voy a implementar en los servidores de aplicaciones que pueden tener diferentes versiones en conflicto de mi biblioteca.
Depende de alrededor de 30 jarras en este momento y estoy a mitad de camino, sin embargo. Ahora, algunos de mis módulos son fáciles de declarar como dependencias versionadas, como mis componentes de red. Ellos referencian estáticamente las clases dentro del JRE y otras bibliotecas BNDded, pero mis componentes relacionados con JDBC instancian a través de Class.forName (...) y pueden usar uno de varios controladores.
Estoy dividiendo todo en paquetes OSGi por área de servicio.
- Mi core classes/interfaces.
- Informar de componentes relacionados.
- Componentes relacionados con el acceso a la base de datos (a través de JDBC).
- etc ....
que deseo para mi código para poder seguir utilizándose sin OSGi través archivo JAR individual con todos mis dependencias y sin OSGi en absoluto (a través de jarjar) y también para ser modular a través de los metadatos OSGi y paquetes granulares con información de dependencia.
¿Cómo puedo configurar mi paquete y mi código para que se pueda utilizar de forma dinámica cualquier conductor en la ruta de clase y/o dentro del entorno contenedor OSGi (Felix/Equinox/etc.)?
¿Hay un método en tiempo de ejecución para detectar si estoy ejecutando en un contenedor OSGi que es compatible con contenedores (Felix/Equinox/etc.)?
¿Debo usar un mecanismo de carga de clase diferente si estoy en un contenedor OSGi?
¿Tengo que importar clases OSGi en mi proyecto para poder cargar un controlador JDBC en tiempo de paquete desconocido a través de mi módulo de base de datos?
También tengo un segundo método para obtener un controlador (a través de JNDI, que solo es realmente aplicable cuando se ejecuta en un servidor de aplicaciones). ¿Necesito cambiar mi código de acceso JNDI para servidores de aplicaciones OSGi-aware?
Gracias por la información, especialmente la DynamicImport-paquete: * punta que, sorprendentemente, no pude encontrar a través de búsqueda en Internet. Con respecto a la segunda respuesta, un fragmento podría ser bueno si tiene tiempo. Sin embargo, marcaré esto como la respuesta aprobada de todos modos, ya que usted respondió mis preguntas principales. Gracias. – Chris