차례
고친 과정 | |
---|---|
고침 $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에 대해 다음과 같은 변경이 필요하다 :
getAllRelationTypeNames
getRelationServiceName
getRelationId
getAllRelationIds
getReferencedMBeans
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.