AttachProvider
AttachProvider (연결 제공자)
자바 가상 머신에 연결(attach)하기 위한 attach provider 클래스입니다. com.sun.tools.attach.spi 패키지에 있으며, 서비스 제공자 인터페이스(SPI)로 쓰입니다.
본문
attach provider는 이 클래스의 구체적인 하위 클래스로, 인자 없는 생성자(zero-argument constructor)를 가지며 아래에 정의된 추상 메서드들을 구현합니다.
보통 특정 자바 가상 머신 구현·버전·작동 모드에 묶여 있습니다. 예를 들어 Oracle JDK는 Oracle HotSpot VM에만 연결할 수 있는 provider를 제공해요. 서로 다른 버전·벤더의 VM이 혼재된 환경이라면, 그 각각의 계열마다 attach provider 구현이 하나씩 존재하게 됩니다.
attach provider는 name과 type으로 식별됩니다. name은 보통 VM 벤더에 대응하는 이름이며, Oracle JDK는 역사적 이유로 패키지 이름 "sun"을 사용하는 provider를 제공해요. type은 연결 메커니즘에 대응합니다. 예를 들어 Doors IPC 메커니즘을 쓰는 구현은 type을 "doors"로 쓸 수 있어요. 이 name·type의 목적은 여러 provider가 설치된 환경에서 서로를 구분하기 위함입니다.
public abstract class AttachProvider extends Object
provider 구현은 providers() 메서드가 처음 호출될 때 로드되고 인스턴스화되며, 이 메서드는 플랫폼에 설치된 모든 provider 구현을 로드하려 시도합니다. 이 클래스의 모든 메서드는 여러 동시 스레드에서 안전하게 사용할 수 있어요. Java 1.6부터 존재합니다.
protected AttachProvider()
보안 관리자가 설치되어 있고 AttachPermission("createAttachProvider")를 거부하면 생성자가 SecurityException을 던집니다.
name() / type()
public abstract String name()
public abstract String type()
각각 이 provider의 이름과 타입을 반환합니다.
attachVirtualMachine()
public abstract VirtualMachine attachVirtualMachine(String id)
throws AttachNotSupportedException, IOException
public VirtualMachine attachVirtualMachine(VirtualMachineDescriptor vmd)
throws AttachNotSupportedException, IOException
자바 가상 머신에 연결합니다. id는 추상 식별자로, 구현에 따라 다르지만 보통 프로세스 식별자(pid)의 문자열 표현입니다. 식별자를 파싱할 수 없거나 존재하지 않는 VM이거나, 이 provider가 연결할 수 없는 버전이면 AttachNotSupportedException을 던져요. 두 번째 오버로드는 설명자의 provider()가 이 provider와 같은지 확인한 뒤 연결을 시도합니다.
listVirtualMachines()
public abstract List<VirtualMachineDescriptor> listVirtualMachines()
이 provider가 아는 자바 가상 머신 목록을 VirtualMachineDescriptor 목록으로 반환합니다.
providers()
public static List<AttachProvider> providers()
설치된 attach provider 목록을 반환합니다. provider는 META-INF/services에 com.sun.tools.attach.spi.AttachProvider라는 이름의 설정 파일에 구현 클래스의 정규화된 이름을 한 줄씩 적는 방식으로 설치됩니다. 첫 호출에서 모든 provider를 로드·인스턴스화하며, 이후 호출은 같은 목록을 반환합니다. 반환되는 목록은 수정 불가(unmodifiable)예요.