Adición programática de servicios declarativos

¿Es posible agregar servicios declarativos usando algún tipo de API?

Un poco de historia:

Tengo una aplicación de servidor basada en scripts dinámicos (se pueden agregar, editar o eliminar en cualquier momento). Esos scripts tienen dependencias con los servicios OSGi y posiblemente entre sí. Cada vez que se edita una secuencia de comandos, la secuencia de comandos se compila en javascript y se detectan sus dependencias.

En ese momento, me gustaría (volver a) registrarlo como un servicio declarativo, para que se active o desactive cuando sus dependencias entren y desaparezcan.

  • ¿Es esto posible? ¿O hay algo importante que me estoy perdiendo?
  • Si no es posible con un estándar OSGi, ¿hay alguna solución específica para Felix o Equinox?
  • ¿Puedes hacer eso en los otros marcos, como iPojo o blueprint?

preguntado el 22 de mayo de 12 a las 13:05

¿Está seguro de que no puede utilizar los servicios OSGi "normales"? es decir, la API de nivel inferior - BundleContext.registerService() y otros? -

Sí, eso es posible, pero los servicios OSGi "normales" no tienen el concepto de dependencias con otros servicios, por lo que implicaría reconstruir una gran parte de DS. Terminé generando paquetes e instalando/actualizando esos, y dejando que DS se encargue del resto. Hice una charla sobre esto en ApacheCon 2012: slideshare.net/FrankLyaruu/scripting-languages-in-osgi -

1 Respuestas

No hay una API para agregar imperativamente servicios declarativos. Puede usar la API OSGi normal para registrarse y usar servicios. ¿Quizás eso es lo que quieres?

Es posible que desee consultar el Administrador de dependencias que puede proporcionar un modelo de API que le brinde el soporte de dependencia que desea.

contestado el 22 de mayo de 12 a las 15:05

"No hay API para imperativamente add declarativo servicios". ¡Guau! (Mi énfasis) Sin embargo, no es muy difícil imaginar tal API, ¿verdad? Podría ser bastante poderosa. - cuarenta y dos

Si desea hacer esto, cree un fragmento para un paquete que contenga las clases y agregue el DS XML al fragmento. Es bastante fácil crear dinámicamente un archivo JAR tan simple, ya que el manifiesto solo requiere unas pocas líneas de código. - Pedro Kriens

Sí, suena un poco como una paradoja, ¿no? @PeterKriens Lo he considerado, pero la cuestión es que tendré muchos de esos servicios (más de 2000). Para poder agregarlos/eliminarlos individualmente, necesitaría más de 2000 paquetes o fragmentos, y tengo la sensación de que no es una buena idea. - Frank Lee

Echaré un vistazo al administrador de dependencias de Felix y veré adónde me lleva. Nunca entendí su función, pero podría ser lo que necesito. Voy a publicar cualquier resultado interesante aquí. En cuanto al uso de la implementación del servicio regular, eso funcionará, pero luego necesitaría 'hacer rodar mi propio' administrador de dependencias. Supongo que puedo hacerlo, pero estoy bastante seguro de que las implementaciones de DS existentes son mucho mejores. - Frank Lee

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.