차례
| 고친 과정 | |
|---|---|
| 고침 $Revision: 1.1 $ | $Date: 2002/04/10 14:11:51 $ |
RelationService의 전체 설명, 이것이 하는 일과 왜 이렇케 하는지는 JMX 스펙에서 찾아볼 수 있다.
예제 Java 소스 파일들은 examples 디렉토리의 services/relation 아래에서 찾을 수 있다.
어떤 관계들이 설정되기 전에 RelationService가 MBeanServer에 등록되어야 한다.
예 5.1. RelationService 만들기
import javax.management.relation.RelationService;
MBeanServer server = MBeanServerFactory.createMBeanServer();
String className = "javax.management.relation.RelationService";
ObjectName objectName = new ObjectName("Relations:name=RelationService");
// The boolean value is to enable a purge of relations to determine invalid relations when an unregistration occurs of MBeans
Object[] params = {new Boolean(true)};
String[] signature = {"boolean"};
server.createMBean(className, objectName, null, params, signature);
등록된 RelationService를 갖게 되면, 우리의 use-case 시나리오에서 역할을 실행하게될 MBean들을 서버에서 생성하게 된다. 이는 우리의 RelationType인 반드시 javax.management.relation.RelationTypeSupport를 상속한 SimplePersonalLibrary 를 추가하여 가능하다. 이 클래스는 MBeanServer에 등록될 수 없다. 이것은 단지 RelationService에서 우리의 역할을 정의하는 것 뿐이다. RelationService에 RelationType을 추가하는 예제는 다음과 같다 :
예 5.2. RelationType 추가하기
// SimplePersonalLibrary is our RelationTypeSupport class
String relationTypeName = "my_library";
SimplePersonalLibrary library = new SimplePersonalLibrary(relationTypeName);
Object[] params = {library};
String[] signature = {"javax.management.relation.RelationType"};
server.invoke(objectName, "addRelationType", params, signature);
다음 단계는 지원 클래스에서 정의한 역할을 채우는 것과 SimplePersonalLibrary 클래스에서 정의한 최대 수자를 MBean에 추가하는 데에서 시작하게 될 것이다. MBeanServer에 MBean을 등록하는 것이 먼저라는 것을 뜻한다. 일단 등록되면, 우리 역할을 추가할 수 있다.
예 5.3. 역할 만들기
// building the owner Role
ArrayList ownerList = new ArrayList();
ownerList.add(ownerName1); // can only add owner to an owner role cardinality defined as 1
Role ownerRole = new Role("owner", ownerList);
// building the book role
ArrayList bookList = new ArrayList();
// we can have between 1 and 4 books more than 4 invalidates out relation and less than 1 invalidates it
bookList.add(bookName1);
bookList.add(bookName2);
bookList.add(bookName3);
Role bookRole = new Role("books", bookList);
// add our roles to the RoleList
RoleList libraryList = new RoleList();
libraryList.add(ownerRole);
libraryList.add(bookRole);
// now create the relation
Object[] params = {personalLibraryId, libraryTypeName, libraryList};
String[] signature = {"java.lang.String", "java.lang.String", "javax.management.relation.RoleList"};
m_server.invoke(m_relationObjectName, "createRelation", params, signature);
alternate 시나리오에 대해 보자 : 기본 역할이 관계를 무효화하게 되면 RelationService에서 제거되며, 비록 MBeanServer에 등록된 MBean을 통해서 개별적으로 접근할 수 있지만, RelationService를 통해 더이상 접근할 수 없게 된다.
SUN의 JMX 웹사이트에서
다운로드 받을 수 있는 RelationService 에제는 MX4J 구현에서도 실행할 수 있다.
MX4J는 MBean의 접근자들에 대한 구현을 server.getAttribute(..)와 server.setAttribute(...)
를 사용했지만, JMX 구현은 모두 server.invoke(..)를 사용하여 메소드 호출을 했기 때문에 몇가지 변경이 필요하다.
JMX에서 다운받은 예제를 사용기위헤서는 RelationAgent에 대해 다음과 같은 변경이 필요하다 :
getAllRelationTypeNamesgetRelationServiceNamegetRelationIdgetAllRelationIdsgetReferencedMBeans Note: except where the call comes from an external relation(represented by a subclass of javax.management.relation.RelationSupport or a type of javax.management.relation.RelationgetRelationTypeName Note: same as abovegetAllRoles Note: same as abovesetRole Note: same as aboveserver.invoke(...) to server.getAttribute(....) , server.setAttribute(...) depending on whether it sets or gets.