- java.lang.Object
-
- com.sun.tools.attach.spi.AttachProvider
-
public abstract class AttachProvider extends Object
附加提供程序类以附加到Java虚拟机。附加提供程序是此类的具体子类,它具有零参数构造函数并实现下面指定的抽象方法。
附加提供程序实现通常与Java虚拟机实现,版本甚至操作模式相关联。 也就是说,特定的提供者实现通常只能附加到特定的Java虚拟机实现或版本。 例如,Sun的JDK实现附带了只能附加到Sun的HotSpot虚拟机的提供程序实现。 通常,如果环境由不同版本和不同供应商的Java虚拟机组成,那么每个实现或版本系列都将有一个附加提供程序实现。
附件提供商由其
name
和type
标识 。 该名称通常(但不是必须)是与VM供应商对应的名称。 例如,Sun JDK实现附带了使用名称“sun”的附加提供程序。 该类型通常对应于附加机制。 例如,使用Doors进程间通信机制的实现可能使用“门”类型。 名称和类型的目的是在安装了多个提供程序的环境中标识提供程序。在第一次调用
providers
方法时加载并实例化AttachProvider实现。 此方法尝试加载平台上安装的所有提供程序实现。此类中的所有方法都可以安全地供多个并发线程使用。
- 从以下版本开始:
- 1.6
-
-
构造方法摘要
构造方法 变量 构造器 描述 protected
AttachProvider()
初始化此类的新实例。
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 VirtualMachine
attachVirtualMachine(VirtualMachineDescriptor vmd)
附加到Java虚拟机。abstract VirtualMachine
attachVirtualMachine(String id)
附加到Java虚拟机。abstract List<VirtualMachineDescriptor>
listVirtualMachines()
列出此提供程序已知的Java虚拟机。abstract String
name()
返回此提供商的名称。static List<AttachProvider>
providers()
返回已安装的附加提供程序的列表。abstract String
type()
返回此提供商的类型。
-
-
-
构造方法详细信息
-
AttachProvider
protected AttachProvider()
初始化此类的新实例。- 异常
-
SecurityException
- 如果已安装安全管理器并且它拒绝AttachPermission
(“createAttachProvider
”)
-
-
方法详细信息
-
name
public abstract String name()
返回此提供商的名称。- 结果
- 此提供商的名称
-
type
public abstract String type()
返回此提供商的类型。- 结果
- 此提供程序的类型
-
attachVirtualMachine
public abstract VirtualMachine attachVirtualMachine(String id) throws AttachNotSupportedException, IOException
附加到Java虚拟机。Java虚拟机由抽象标识符标识。 此标识符的性质取决于平台,但在许多情况下,它将是进程标识符(或pid)的字符串表示形式。
该方法解析标识符并将标识符映射到Java虚拟机(以依赖于实现的方式)。 如果提供者无法解析标识符,则抛出
AttachNotSupportedException
。 解析后,此方法会尝试附加到Java虚拟机。 如果提供程序检测到标识符对应于不存在的Java虚拟机,或者它对应于不支持此提供程序实现的附加机制的Java虚拟机,或者它检测到Java虚拟机是该提供商无法附加,然后抛出AttachNotSupportedException
。- 参数
-
id
- 标识Java虚拟机的抽象标识符。 - 结果
- VirtualMachine表示目标虚拟机。
- 异常
-
SecurityException
- 如果已安装安全管理器并且它拒绝AttachPermission
(“attachVirtualMachine
”)或实施所需的其他权限。 -
AttachNotSupportedException
- 如果无法解析标识符,或者它对应于不存在的Java虚拟机,或者它对应于此提供程序无法附加的Java虚拟机。 -
IOException
- 如果发生其他一些I / O错误 -
NullPointerException
- 如果id
是null
-
attachVirtualMachine
public VirtualMachine attachVirtualMachine(VirtualMachineDescriptor vmd) throws AttachNotSupportedException, IOException
附加到Java虚拟机。可以使用
VirtualMachineDescriptor
描述Java虚拟机。 此方法调用描述符的provider()
方法以检查它是否等于此提供程序。 然后它尝试连接到Java虚拟机。- 参数
-
vmd
- 虚拟机描述符 - 结果
- VirtualMachine表示目标虚拟机。
- 异常
-
SecurityException
- 如果已安装安全管理器且它拒绝AttachPermission
(“attachVirtualMachine
”)或实施所需的其他权限。 -
AttachNotSupportedException
- 如果描述符的provider()
方法返回的提供程序不是此提供程序,或者它不对应于此提供程序可以附加到的Java虚拟机。 -
IOException
- 如果发生其他一些I / O错误 -
NullPointerException
- 如果vmd
是null
-
listVirtualMachines
public abstract List<VirtualMachineDescriptor> listVirtualMachines()
列出此提供程序已知的Java虚拟机。此方法返回
VirtualMachineDescriptor
元素的列表。 每个VirtualMachineDescriptor
描述了此提供程序可能附加到的Java虚拟机。 没有任何保证在列表中的每个描述符上调用attachVirtualMachine
都会成功。- 结果
- 描述此提供程序已知的Java虚拟机的虚拟机描述符列表(可能为空)。
-
providers
public static List<AttachProvider> providers()
返回已安装的附加提供程序的列表。如果满足以下条件,则会在平台上安装AttachProvider:
- 它安装在一个JAR文件中,该文件对AttachProvider类型的定义类加载器是可见的(通常,但不要求是
system class loader
)。 - JAR文件在资源目录
META-INF/services
包含名为com.sun.tools.attach.spi.AttachProvider
的提供程序配置。 - 提供程序配置文件列出了AttachProvider实现的完全限定类名。
提供程序配置文件的格式是每行一个完全限定的类名。 每个类名称周围的空格和制表符以及空行都将被忽略。 注释字符是
'#'
(0x23
),并且在每一行上忽略第一个注释字符后面的所有字符。 该文件必须以UTF-8编码。在第一次调用此方法时,将加载并实例化AttachProvider实现(使用zero-arg构造函数)。 第一次调用此方法返回的列表是提供程序列表。 此方法的后续调用将返回相同提供程序的列表。 该列表是不可修改的。
- 结果
- 已安装的附加提供程序列表。
- 它安装在一个JAR文件中,该文件对AttachProvider类型的定义类加载器是可见的(通常,但不要求是
-
-