Search in sources :

Example 76 with ClassFileTransformer

use of java.lang.instrument.ClassFileTransformer in project pinpoint by naver.

the class MockPluginContextLoadResult method getClassFileTransformer.

@Override
public List<ClassFileTransformer> getClassFileTransformer() {
    List<ClassFileTransformer> classFileTransformerList = new ArrayList<>();
    PluginsSetupResult pluginsSetupResult = getPluginsSetupResult();
    for (PluginSetupResult pluginContext : pluginsSetupResult.getPluginSetupResults()) {
        List<ClassFileTransformer> classFileTransformer = pluginContext.getClassTransformerList();
        classFileTransformerList.addAll(classFileTransformer);
    }
    return classFileTransformerList;
}
Also used : ClassFileTransformer(java.lang.instrument.ClassFileTransformer) PluginsSetupResult(com.navercorp.pinpoint.profiler.plugin.PluginsSetupResult) ArrayList(java.util.ArrayList) PluginSetupResult(com.navercorp.pinpoint.profiler.plugin.PluginSetupResult)

Example 77 with ClassFileTransformer

use of java.lang.instrument.ClassFileTransformer in project pinpoint by naver.

the class MockApplicationContextModuleTest method testMockApplicationContext.

@Test
public void testMockApplicationContext() {
    ProfilerConfig profilerConfig = spy(new DefaultProfilerConfig());
    when(profilerConfig.getStaticResourceCleanup()).thenReturn(true);
    Instrumentation instrumentation = Mockito.mock(Instrumentation.class);
    AgentOption agentOption = new DefaultAgentOption(instrumentation, "mockAgentId", "mockAgentName", "mockApplicationName", false, profilerConfig, Collections.<String>emptyList(), Collections.<String>emptyList());
    Module pluginModule = new PluginApplicationContextModule();
    InterceptorRegistryBinder interceptorRegistryBinder = new TestInterceptorRegistryBinder();
    Module testInterceptorRegistryModule = InterceptorRegistryModule.wrap(interceptorRegistryBinder);
    ModuleFactory moduleFactory = new OverrideModuleFactory(pluginModule, testInterceptorRegistryModule);
    DefaultApplicationContext applicationContext = new DefaultApplicationContext(agentOption, moduleFactory);
    Injector injector = applicationContext.getInjector();
    // singleton check
    AgentInfoSender instance1 = injector.getInstance(AgentInfoSender.class);
    AgentInfoSender instance2 = injector.getInstance(AgentInfoSender.class);
    Assert.assertSame(instance1, instance2);
    ClassFileTransformer instance4 = injector.getInstance(ClassFileTransformer.class);
    applicationContext.close();
}
Also used : ClassFileTransformer(java.lang.instrument.ClassFileTransformer) InterceptorRegistryBinder(com.navercorp.pinpoint.profiler.interceptor.registry.InterceptorRegistryBinder) ProfilerConfig(com.navercorp.pinpoint.bootstrap.config.ProfilerConfig) DefaultProfilerConfig(com.navercorp.pinpoint.bootstrap.config.DefaultProfilerConfig) DefaultProfilerConfig(com.navercorp.pinpoint.bootstrap.config.DefaultProfilerConfig) Instrumentation(java.lang.instrument.Instrumentation) AgentInfoSender(com.navercorp.pinpoint.profiler.AgentInfoSender) ModuleFactory(com.navercorp.pinpoint.profiler.context.module.ModuleFactory) DefaultApplicationContext(com.navercorp.pinpoint.profiler.context.module.DefaultApplicationContext) DefaultAgentOption(com.navercorp.pinpoint.bootstrap.DefaultAgentOption) Injector(com.google.inject.Injector) DefaultAgentOption(com.navercorp.pinpoint.bootstrap.DefaultAgentOption) AgentOption(com.navercorp.pinpoint.bootstrap.AgentOption) Module(com.google.inject.Module) Test(org.junit.Test)

Example 78 with ClassFileTransformer

use of java.lang.instrument.ClassFileTransformer in project pinpoint by naver.

the class DefaultTransformerRegistry method addModifier0.

private void addModifier0(Map<String, ClassFileTransformer> registry, ClassFileTransformer transformer, String className) {
    final String classInternalName = JavaAssistUtils.javaNameToJvmName(className);
    final ClassFileTransformer old = registry.put(classInternalName, transformer);
    if (old != null) {
        throw new IllegalStateException("Transformer already exist. className:" + classInternalName + " new:" + transformer.getClass() + " old:" + old.getClass());
    }
}
Also used : MatchableClassFileTransformer(com.navercorp.pinpoint.profiler.plugin.MatchableClassFileTransformer) ClassFileTransformer(java.lang.instrument.ClassFileTransformer)

Example 79 with ClassFileTransformer

use of java.lang.instrument.ClassFileTransformer in project pinpoint by naver.

the class LambdaTransformBootloader method retransform.

private void retransform(Instrumentation instrumentation) {
    final String lambdaMetaFactoryName = "java.lang.invoke.InnerClassLambdaMetafactory";
    try {
        final Class<?> lamdbaFactoryClazz = Class.forName(lambdaMetaFactoryName, false, null);
        logger.info("retransformClasses:{}", lamdbaFactoryClazz);
        final ClassFileTransformer classFileTransfomrer = new InnerClassLambdaMetafactoryTransformer();
        instrumentation.addTransformer(classFileTransfomrer, true);
        try {
            instrumentation.retransformClasses(lamdbaFactoryClazz);
        } finally {
            instrumentation.removeTransformer(classFileTransfomrer);
        }
    } catch (Exception e) {
        logger.warn("retransform fail class:{}", lambdaMetaFactoryName, e);
    }
}
Also used : ClassFileTransformer(java.lang.instrument.ClassFileTransformer) InnerClassLambdaMetafactoryTransformer(com.navercorp.pinpoint.profiler.instrument.transformer.InnerClassLambdaMetafactoryTransformer)

Example 80 with ClassFileTransformer

use of java.lang.instrument.ClassFileTransformer in project pinpoint by naver.

the class DynamicTransformServiceTest method testRetransform_Fail_memoryleak_prevent.

@Test()
public void testRetransform_Fail_memoryleak_prevent() throws Exception {
    final Instrumentation instrumentation = mock(Instrumentation.class);
    when(instrumentation.isModifiableClass(any(Class.class))).thenReturn(true);
    doAnswer(new Answer<Void>() {

        @Override
        public Void answer(InvocationOnMock invocation) throws Throwable {
            throw new UnmodifiableClassException();
        }
    }).when(instrumentation).retransformClasses(any(Class.class));
    DefaultDynamicTransformerRegistry listener = new DefaultDynamicTransformerRegistry();
    final ClassFileTransformer classFileTransformer = mock(ClassFileTransformer.class);
    DynamicTransformService dynamicTransformService = new DynamicTransformService(instrumentation, listener);
    try {
        dynamicTransformService.retransform(String.class, classFileTransformer);
        Assert.fail("expected retransform fail");
    } catch (Exception e) {
    }
    Assert.assertEquals(listener.size(), 0);
}
Also used : ClassFileTransformer(java.lang.instrument.ClassFileTransformer) InvocationOnMock(org.mockito.invocation.InvocationOnMock) UnmodifiableClassException(java.lang.instrument.UnmodifiableClassException) Instrumentation(java.lang.instrument.Instrumentation) UnmodifiableClassException(java.lang.instrument.UnmodifiableClassException) Test(org.junit.Test)

Aggregations

ClassFileTransformer (java.lang.instrument.ClassFileTransformer)81 Test (org.junit.Test)40 Instrumentation (java.lang.instrument.Instrumentation)37 IllegalClassFormatException (java.lang.instrument.IllegalClassFormatException)17 ProtectionDomain (java.security.ProtectionDomain)12 ByteArrayClassLoader (net.bytebuddy.dynamic.loading.ByteArrayClassLoader)9 Callable (java.util.concurrent.Callable)7 MatchableClassFileTransformer (com.navercorp.pinpoint.profiler.plugin.MatchableClassFileTransformer)6 SimpleType (net.bytebuddy.test.packaging.SimpleType)6 ArrayList (java.util.ArrayList)5 ByteBuddy (net.bytebuddy.ByteBuddy)5 IOException (java.io.IOException)4 URLClassLoader (java.net.URLClassLoader)4 ByteArrayInputStream (java.io.ByteArrayInputStream)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)3 InputStream (java.io.InputStream)3 URL (java.net.URL)3 CodeSource (java.security.CodeSource)3 UnmodifiableClassException (java.lang.instrument.UnmodifiableClassException)2 Certificate (java.security.cert.Certificate)2