Sto facendo an application server e in esso ho bisogno di usare qualche manipolazione bytecode (ad esempio inserendo i metodi personalizzati equals
e hashCode
in classi annotate con @Entity
). Ora conferisco a JVM un Java Agent (l'opzione -javaagent) che esegue le trasformazioni bytecode utilizzando ASM.È possibile eseguire la manipolazione bytecode quando si utilizza OSGi?
Ho preso in considerazione l'utilizzo di OSGi, ma non so se mi consente di eseguire la manipolazione del codice byte necessaria.
- È possibile eseguire la manipolazione bytecode quando si utilizza OSGi? Come?
- È possibile che un bundle si dichiari, che richiede alcune manipolazioni del codice byte affinché funzioni? Ad esempio, il server delle applicazioni richiede che alcune delle sue classi principali vengano manipolate.
- È possibile specificare che un altro bundle richiede qualche manipolazione di codice, senza che il bundle ne sia a conoscenza? Ad esempio, tutte le applicazioni eseguite sul server devono essere manipolate, ma non è necessario che le applicazioni ne siano a conoscenza.
- E 'possibile che un bundle si dichiari, che tutti i pacchetti che dipendono da esso debbano essere manipolati in bytecode? Ciò mi renderebbe facile dichiarare che tutti coloro che dipendono dal pacchetto API che contiene l'annotazione
@Entity
devono essere manipolati.
Il pattern extender su OSGi ha molto poco a che fare con la manipolazione del bytecode. Gli aspetti dell'Equinozio usano il modo equinox specifico di installare un gancio ondeggiante. Come accennato in seguito, dal 4.3 esiste un modo standard per farlo. – aav
aav, capisco che il pattern extender ha poco a che fare con la manipolazione bytecode, quello a cui mi riferisco è un buon momento nel ciclo di vita dell'osgi per iniettare un meccanismo di manipolazione del codice byte. Ricorda anche che ho scritto questa risposta prima che OSGi 4.3 fosse effettivamente annunciato! È abbastanza chiaro che, poiché OSGi 4.3 supporta un'API reale, è quello che dovrebbe essere usato. Fare riferimento a "Sotto" è fuorviante poiché l'ordine di risposta può cambiare nel tempo (e la risposta corretta è ora sopra) –