estoy haciendo an application server y en él tenga que utilizar alguna manipulación de código de bytes (por ejemplo, la inserción de encargo equals
y hashCode
métodos a clases con anotada @Entity
). Ahora le doy a la JVM un Java Agent (la opción -javaagent) que codifica las transformaciones mediante ASM.¿Es posible hacer una manipulación de bytecode cuando se usa OSGi?
He estado considerando el uso de OSGi, pero no sé si me permite hacer la manipulación necesaria del bytecode.
- ¿Es posible hacer una manipulación de bytecode cuando se usa OSGi? ¿Cómo?
- ¿Es posible que un paquete se declare a sí mismo, que requiere alguna manipulación de bytecode para que funcione? Por ejemplo, el servidor de aplicaciones requiere que se manipulen algunas de sus propias clases principales.
- ¿Es posible especificar que algún otro paquete requiera alguna manipulación de bytecode, sin que ese paquete lo sepa? Por ejemplo, todas las aplicaciones que se ejecutan en el servidor deben ser manipuladas, pero las aplicaciones no necesitan saber al respecto.
- ¿Es posible que un paquete se declare a sí mismo, que todos los paquetes que dependen de él deben ser manipulados por bytecode? Esto me facilitaría declarar que todos los que dependen del paquete de API que contiene la anotación
@Entity
, deben ser manipulados.
patrón de extensión en OSGi tiene muy poco que ver con la manipulación de bytecode. Los aspectos de Equinox usan una forma equinox específica de instalar un gancho que agita. Como se menciona a continuación, desde 4.3 hay una forma estándar de hacerlo. – aav
aav, entiendo que el patrón del extensor tenga poco que ver con la manipulación del bytecode, a lo que me refiero es a un buen momento en el ciclo de vida de osgi para inyectar un mecanismo de manipulación de código de bytes. ¡También tenga en cuenta que escribí esta respuesta antes de que OSGi 4.3 fuera realmente anunciado! Está bastante claro que, dado que una API real es compatible con OSGi 4.3, eso es lo que se debe usar. Referirse a "Abajo" es engañoso ya que el orden de respuesta puede cambiar con el tiempo (y la respuesta correcta está ahora arriba) –