SO versuche ich eine Klasse neu zu definieren. Ich habe eine Klasse namens Ordner. In OSGi (mit Felix) habe ich eine neue Ordner-Klasse mit den gleichen Methoden, aber einige zusätzliche Protokollierung.Klasse Redefinieren funktioniert nicht
Ich versuche, die Ordner-Klasse von Felix zu nehmen und den Hauptordner Klasse auf dem Hauptclassloader
I den Agenten beim Start gesetzt tue neu definieren.
new ByteBuddy()
.redefine(Class.forName(classToOverride.trim()), ClassFileLocator.ForClassLoader.of(felixClassLoader))
.name(classToOverride.trim())
.make() .load(contextClassLoader);
Ich habe verschiedene Strategien in der Lastmethode ausprobiert.
Ohne Strategien bekomme ich folgende Fehler
Caused by: java.lang.IllegalStateException: Cannot inject already loaded type: class com.dotmarketing.portlets.folders.model.Folder
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection.inject(ClassInjector.java:187) ~[byte-buddy-1.6.12.jar:?]
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default$InjectionDispatcher.load(ClassLoadingStrategy.java:187) ~[byte-buddy-1.6.12.jar:?]
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default.load(ClassLoadingStrategy.java:120) ~[byte-buddy-1.6.12.jar:?]
at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:79) ~[byte-buddy-1.6.12.jar:?]
at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:4376) ~[byte-buddy-1.6.12.jar:?]
at com.dotmarketing.osgi.GenericBundleActivator.publishBundleServices(GenericBundleActivator.java:177) ~[dotcms_4.1.0_563a5c3.jar:?]
Mit ClassReloadingStrategy.fromInstalledAgent ich keinen Fehler bekommen, aber nicht funktioniert.
Bedeutet, dass es nicht möglich ist, die Felder (Klassenlayout) mit AgentBuilder API oder AgentBuilder und Advice zu ändern, oder? –
Es ist nicht möglich, ein Werkzeug zu verwenden. –
Ich dachte, Ihr Stackoverflow würde erwähnt, wenn nur etwas Java Spec passiert? Welcher ist es? –