【问题标题】:Java 9 Jigsaw support for javaagentJava 9 Jigsaw 对 javaagent 的支持
【发布时间】:2017-07-13 04:27:40
【问题描述】:

Java 9(特别是 Jigsaw)中是否有任何计划来支持 Java 监控代理的特殊要求?

通常,监控代理需要能够访问默认情况下原始 Java 应用程序不可用的类、包和模块。通过 -javaagent 命令行参数加载到 JVM 中的监控代理不会作为模块加载,即使 jar 文件包含 module-info.class 文件也是如此。我能够为监控代理提供所需权限的唯一方法是添加命令行参数,为所有未命名的模块提供这些权限。

【问题讨论】:

    标签: monitoring java-9 agent java-module


    【解决方案1】:

    Instrumentation class was extended 具有允许重新定义任何模块的方法。它允许您添加额外的模块读取、导出、打开、服务使用和提供:

    void redefineModule(Module module,
                        Set<Module> extraReads,
                        Map<String,Set<Module>> extraExports,
                        Map<String,Set<Module>> extraOpens,
                        Set<Class<?>> extraUses,
                        Map<Class<?>,List<Class<?>>> extraProvides);
    

    此外,ClassFileTransformer API 已扩展为在转换时注册 Java Module

    default byte[] transform(Module module,
                             ClassLoader loader,
                             String className,
                             Class<?> classBeingRedefined,
                             ProtectionDomain protectionDomain,
                             byte[] classfileBuffer)
                      throws IllegalClassFormatException;
    

    此模块与检测 API 相结合,可以进行任何必要的调整。

    目前,Java 代理仍然加载在类路径上,没有应用任何模块化;然而,这可能会改变,因为 Java 9 还不是最终版本。

    【讨论】:

    • 谢谢。这有很大帮助。尝试了新的 redefineModule() 方法,它似乎做了我们需要的事情
    猜你喜欢
    • 2013-10-04
    • 2017-09-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多