306
HP Universal CMDB 소프트웨어 버전: 10.10 개발자 참조 안내서 문서 릴리스 날짜: 2013년 11월 소프트웨어 릴리스 날짜: 2013년 11월

HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

HP Universal CMDB소프트웨어버전: 10.10

개발자참조안내서

문서릴리스날짜: 2013년 11월

소프트웨어릴리스날짜: 2013년 11월

Page 2: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

법적고지

보증

HP제품및서비스에대한모든보증사항은해당제품및서비스와함께제공된명시적보증서에규정되어있습니다. 여기에수록된어떤내용도추가보증을구

성하는것으로해석될수없습니다. HP는여기에수록된기술적또는편집상의오류나누락에대해책임지지않습니다.

본정보는예고없이변경될수있습니다.

제한된권리범례

기밀컴퓨터소프트웨어. 소유, 사용또는복사하기위해서는 HP로부터유효한라이센스를확보해야합니다. FAR 12.211 및 12.212에의거하여상용컴퓨터소

프트웨어, 컴퓨터소프트웨어문서및상용품목에대한기술데이터는공급업체의표준상용라이센스아래에서미국정부에사용이허가되었습니다.

저작권고지

© Copyright 2002 - 2013 Hewlett-Packard Development Company, L.P.

상표고지

Adobe®는 Adobe Systems Incorporated의상표입니다.

Microsoft®및Windows®는 Microsoft Corporation의미국등록상표입니다.

UNIX®는 The Open Group의등록상표입니다.

문서업데이트이문서의제목페이지에는다음과같은식별정보가있습니다.

소프트웨어버전을의미하는소프트웨어버전번호 문서가업데이트될때마다변경되는문서릴리스날짜 이소프트웨어버전의릴리스날짜를나타내는소프트웨어릴리스날짜

최근업데이트를확인하거나문서의최신버전을사용하고있는지확인하려면다음사이트로이동합니다. http://h20230.www2.hp.com/selfsolve/manuals

이사이트를사용하려면 HP Passport 사용자로등록하여로그인해야합니다. HP Passport ID를등록하려면다음웹사이트를방문하십시오.

http://h20229.www2.hp.com/passport-registration.html

아니면 HP Passport 로그인페이지에서 New users - please register링크를클릭합니다.

적절한제품지원서비스에가입할경우업데이트버전이나새버전도제공됩니다. 자세한내용은 HP판매담당자에게문의하십시오.

지원다음 HP Software Support Online 웹사이트를방문하십시오. http://www.hp.com/go/hpsoftwaresupport

이웹사이트에서는연락처정보를비롯하여 HP소프트웨어에서제공하는제품, 서비스및지원에대한자세한내용을확인할수있습니다.

온라인지원을통해사용자가스스로문제를해결할수있습니다. 또한업무관리에필요한대화식기술지원도구에신속하고효율적으로액세스할수있습니다.

소중한지원고객으로서지원웹사이트를통해다음과같은혜택을누릴수있습니다.

관심있는지식문서를검색할수있습니다. 지원사례및개선요청을제출하고추적할수있습니다. 소프트웨어패치를다운로드할수있습니다. 지원계약을관리할수있습니다. HP지원연락처를조회할수있습니다. 사용가능한서비스에대한정보를검토할수있습니다. 다른소프트웨어고객과의토론에참여할수있습니다. 소프트웨어교육을조사하고등록할수있습니다.

대부분의지원영역을이용하려면 HP Passport 사용자로등록하여로그인해야합니다. 이영역에서는지원계약이필요할수도있습니다. HP Passport ID를등

록하려면다음웹사이트를방문하십시오.

http://h20229.www2.hp.com/passport-registration.html

액세스수준에대한자세한내용을보려면다음웹사이트를방문하십시오.

http://h20230.www2.hp.com/new_access_levels.jsp

HP Software Solutions Now를통해 HPSW솔루션및통합포털웹사이트에액세스할수있습니다. 이사이트를통해비즈니스요구에맞는 HP제품솔루션을

검색할수있으며, 사이트에서 HP제품간통합의전체목록과함께 ITIL프로세스목록도확인할수있습니다. 이웹사이트의 URL은

http://h20230.www2.hp.com/sc/solutions/index.jsp입니다.

온라인도움말의 PDF버전정보이설명서는온라인도움말의 PDF버전입니다. 이 PDF파일은도움말정보에서여러항목을쉽게인쇄하거나온라인도움말을 PDF형식으로읽을수있도록제

공됩니다. 웹브라우저에서온라인도움말형식으로보도록컨텐츠가작성되었기때문에, 일부항목의형식은적절하지않을수있습니다. 일부대화식항목은이

PDF버전에표시되지않을수있습니다. 이러한항목은온라인도움말내에서성공적으로인쇄할수있습니다.

개발자참조안내서

HP Universal CMDB (10.10) 2/306 페이지

Page 3: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

목차

목차 3

디스커버리및통합어댑터만들기 10

1장:어댑터개발및작성 11

어댑터개발및작성개요 11

컨텐츠만들기 11

어댑터개발주기 12

데이터흐름관리및통합 14

디스커버리개발과비즈니스가치연관 15

통합요구사항조사 16

통합컨텐츠개발 19

디스커버리컨텐츠개발 21

디스커버리어댑터및관련구성요소 21

어댑터구분 22

디스커버리어댑터구현 23

1단계:어댑터만들기 26

2단계:어댑터에작업할당 32

3단계: Jython 코드만들기 33

원격프로세스실행구성 33

2장: Jython 어댑터개발 35

HP 데이터흐름관리API 참조 35

Jython 코드만들기 35

Jython 내에서외부Java JAR파일사용 36

코드실행 36

기본스크립트수정 36

Jython 파일의구조 37

가져오기 38

기본함수– DiscoveryMain 38

함수정의 38

Jython 스크립트로결과생성 40

개발자참조안내서

HPUniversal CMDB (10.10) 3/306 페이지

Page 4: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

ObjectStateHolder구문 40

대량의데이터보내기 41

Framework 인스턴스 42

올바른자격증명찾기(연결어댑터용) 45

Java에서예외처리 48

Jython 버전2.1에서2.5.3으로의마이그레이션문제해결 48

Jython 어댑터에서지역화지원 50

새로운언어에대한지원추가 50

기본언어변경 51

인코딩할문자집합결정 52

지역화된데이터를사용할새작업정의 52

키워드를사용하지않는명령디코딩 53

리소스번들사용 54

API 참조 55

DFM코드기록 57

Jython 라이브러리및유틸리티 58

3장:오류메시지 61

오류메시지개요 61

오류작성규칙 61

오류심각도수준 64

4장:일반데이터베이스어댑터개발 66

일반데이터베이스어댑터개요 67

일반데이터베이스어댑터의TQL쿼리 67

조정 68

Hibernate를 JPA 공급자로사용 68

어댑터만들기준비 71

어댑터패키지준비 75

어댑터구성–간단한방법 78

adapter.conf 파일구성 79

예:간단한방법을사용하여노드및 IP주소채우기 79

어댑터구성–고급방법 82

개발자참조안내서

HPUniversal CMDB (10.10) 4/306 페이지

Page 5: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

플러그인구현 87

어댑터배포 90

어댑터편집 90

통합포인트만들기 90

보기만들기 90

결과계산 90

결과보기 91

보고서보기 91

로그파일사용 91

Eclipse를사용하여CIT 특성과데이터베이스테이블매핑 91

어댑터구성파일 98

adapter.conf 파일 100

simplifiedConfiguration.xml 파일 101

orm.xml 파일 103

reconciliation_types.txt 파일 116

reconciliation_rules.txt 파일(이전버전과의호환용) 116

transformations.txt 파일 118

discriminator.properties 파일 119

replication_config.txt 파일 120

fixed_values.txt 파일 120

Persistence.xml 파일 120

NT 인증을사용하여데이터베이스에연결 121

기본변환기 122

플러그인 127

구성의예 127

어댑터로그파일 136

외부참조 137

문제해결및제한사항 138

5장: Java어댑터개발 139

연합프레임워크개요 139

연합프레임워크와의어댑터및매핑상호작용 144

개발자참조안내서

HPUniversal CMDB (10.10) 5/306 페이지

Page 6: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

통합TQL쿼리에대한연합프레임워크 144

연합프레임워크,서버,어댑터및매핑엔진간의상호작용 146

채우기에대한연합프레임워크흐름 155

어댑터인터페이스 156

어댑터리소스디버그 157

새외부데이터원본에대해어댑터추가 158

샘플어댑터만들기 166

XML구성태그및속성 167

DataAdapterEnvironment인터페이스 168

OutputStreamopenResourceForWriting(String resourceName) throws

FileNotFoundException; 168

InputStreamopenResourceForReading(String resourceName) throws

FileNotFoundException; 169

Properties openResourceAsProperties(String propertiesFile) throws

IOException; 170

String openResourceAsString(String resourceName) throws IOException; 170

public void saveResourceFromString(String relativeFileName, String value)

throws IOException; 171

boolean resourceExists(String resourceName); 171

boolean deleteResource(String resourceName); 171

Collection<문자열> listResourcesInPath(String path); 172

DataAdapterLogger getLogger(); 172

DestinationConfig getDestinationConfig(); 172

int getChunkSize(); 172

int getPushChunkSize(); 172

ClassModel getLocalClassModel(); 173

CustomerInformation getLocalCustomerInformation(); 173

Object getSettingValue(String name); 173

Map<문자열,개체>getAllSettings(); 173

boolean isMTEnabled(); 173

String getUcmdbServerHostName(); 174

6장:밀어넣기어댑터개발 175

밀어넣기어댑터개발및배포 175

개발자참조안내서

HPUniversal CMDB (10.10) 6/306 페이지

Page 7: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

어댑터패키지빌드 176

문제해결 178

밀어넣기어댑터의TQL모범사례 179

매핑만들기 179

매핑파일작성 180

매핑파일준비 180

Jython 스크립트작성 183

차등동기화지원 187

일반XML밀어넣기어댑터SQL쿼리 188

일반웹서비스밀어넣기어댑터 189

매핑파일참조 207

매핑파일스키마 209

매핑결과스키마 221

사용자지정 225

7장:강화된일반밀어넣기어댑터개발 227

개요 227

매핑파일 227

Groovy Traveler 230

Groovy 스크립트작성 233

PushConnector인터페이스구현 234

어댑터패키지빌드 235

매핑파일스키마 236

API 사용 242

8장: API 소개 243

API 개요 243

9장:HPUniversal CMDB API 244

규칙 244

HPUniversal CMDB API 사용 244

응용프로그램의일반구조 245

클래스경로에API Jar파일저장 247

통합사용자만들기 248

개발자참조안내서

HPUniversal CMDB (10.10) 7/306 페이지

Page 8: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

UCMDB API 사용사례 250

예 251

10장:HPUniversal CMDB웹서비스API 252

규칙 252

HPUniversal CMDB웹서비스API 개요 253

웹서비스호출 255

CMDB쿼리 256

UCMDB업데이트 259

UCMDB클래스모델쿼리 260

getClassAncestors 260

getAllClassesHierarchy 261

getCmdbClassDefinition 261

영향분석에대한쿼리 262

UCMDB일반매개변수 262

UCMDB출력매개변수 265

UCMDB쿼리메서드 266

executeTopologyQueryByNameWithParameters 266

executeTopologyQueryWithParameters 267

getChangedCIs 268

getCINeighbours 268

getCIsByID 269

getCIsByType 270

getFilteredCIsByType 270

getQueryNameOfView 273

getTopologyQueryExistingResultByName 274

getTopologyQueryResultCountByName 274

pullTopologyMapChunks 275

releaseChunks 276

UCMDB업데이트메서드 277

addCIsAndRelations 277

addCustomer 278

개발자참조안내서

HPUniversal CMDB (10.10) 8/306 페이지

Page 9: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

deleteCIsAndRelations 278

removeCustomer 279

updateCIsAndRelations 279

UCMDB영향분석메서드 279

calculateImpact 280

getImpactPath 280

getImpactRulesByNamePrefix 281

실제상태웹서비스API 281

UCMDB웹서비스API 사용사례 283

예 284

11장:데이터흐름관리Java API 285

데이터흐름관리Java API 사용 285

12장:데이터흐름관리웹서비스API 287

데이터흐름관리웹서비스API 개요 287

규칙 288

웹서비스호출 288

데이터흐름관리메서드및데이터구조 288

데이터구조 289

디스커버리작업메서드관리 289

트리거메서드관리 291

도메인및프로브데이터메서드 293

자격증명데이터메서드 295

데이터새로고침메서드 297

코드샘플 299

자격증명추가작업의예 302

피드백을보내주십시오! 306

개발자참조안내서

HPUniversal CMDB (10.10) 9/306 페이지

Page 10: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

HPUniversal CMDB (10.10) 10/306 페이지

디스커버리및통합어댑터만들기

Page 11: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

1장: 어댑터개발및작성

이장의내용:

어댑터개발및작성개요 11

컨텐츠만들기 11

통합컨텐츠개발 19

디스커버리컨텐츠개발 21

디스커버리어댑터구현 23

1단계:어댑터만들기 26

2단계:어댑터에작업할당 32

3단계: Jython 코드만들기 33

원격프로세스실행구성 33

어댑터개발및작성개요

새어댑터개발에대한실제계획을시작하기에앞서일반적으로이개발과연관된프로세스및상호

작용을이해해야합니다.

다음섹션에서는디스커버리개발프로젝트를성공적으로관리하고실행하기위해알아야할사항

과준비해야할사항을파악하는데도움이되는정보를제공합니다.

이장:

l HPUniversal CMDB에대한실무지식을갖추고있으며시스템을구성하는요소에어느정도익

숙하다고간주하고설명합니다.개발자의학습과정을돕기위한안내서이므로완벽한지침을제

공하지는않습니다.

l HPUniversal CMDB의새디스커버리컨텐츠에대한계획,조사,구현단계와지침및고려사항

을다룹니다.

l 데이터흐름관리프레임워크의주요API에대한정보를제공합니다.사용가능한API에관한전

체문서는HP Universal CMDB데이터흐름관리API 참조를참조하십시오.다른비공식API도있지만이러한API는기본어댑터에사용하더라도변경될수있습니다.

컨텐츠만들기

이섹션의내용:

l "어댑터개발주기(12페이지)"

l "데이터흐름관리및통합(14페이지)"

HPUniversal CMDB (10.10) 11/306 페이지

Page 12: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "디스커버리개발과비즈니스가치연관(15페이지)"

l "통합요구사항조사(16페이지)"

어댑터개발주기

다음그림은어댑터작성을위한순서도를보여줍니다.개발및테스트가반복적으로발생하는중간

섹션에서대부분의시간이소요됩니다.

어댑터개발의각단계가마지막단계에빌드됩니다.

어댑터모양및작동방식이마음에들면패키지화할준비가된것입니다.UCMDB패키지관리자를

사용하거나수동으로구성요소를내보내어패키지*.zip파일을만듭니다.생산을위해릴리스하기

전에,모범사례로서모든구성요소를고려하고성공적으로패키지화했는지확인하기위해다른

UCMDB시스템에이패키지를배포하고테스트해야합니다.패키지화에대한자세한내용은HPUniversal CMDB관리안내서에서"패키지관리자"를참조하십시오.

다음섹션에서는각단계를자세히살펴보며가장중요한단계와모범사례를알아보겠습니다.

l "조사및준비단계(13페이지)"

l "어댑터개발및테스트(13페이지)"

l "어댑터패키지화및제품화(14페이지)"

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 12/306 페이지

Page 13: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

조사및준비단계

조사및준비단계는개발을추진하게된비즈니스요구와사용사례를포괄적으로다루고,어댑터를

개발하고테스트하는데필요한설비확보에대해서도설명합니다.

1. 기존어댑터를수정하려는경우기술적으로가장먼저수행할단계는해당어댑터를백업하여

원상태로되돌릴수있도록하는것입니다.새어댑터를만들려는경우가장유사한어댑터를복

사하여적절한이름으로저장합니다.자세한내용은HPUniversal CMDB데이터흐름관리안내서에서"리소스창"을참조하십시오.

2. 어댑터에서데이터를수집하는데사용할방법을조사합니다.

n 외부도구/프로토콜을사용하여데이터가져오기

n 어댑터에서데이터를기반으로CI를만드는방법개발

n 이제유사한어댑터모양파악

3. 다음기준에따라가장비슷한어댑터를결정합니다.

n 만들어진동일한CI

n 사용된동일한프로토콜(SNMP)

n 동일한종류의대상(OS유형,버전등)

4. 전체패키지를복사합니다.

5. 작업영역에패키지컨텐츠의압축을풀고어댑터(XML)및 Jython(.py) 파일의이름을바꿉니

다.

어댑터개발및테스트

어댑터개발및테스트단계는반복이매우잦은프로세스입니다.어댑터가형태를갖추기시작하면

최종사용사례에대해테스트를시작하고변경한후다시테스트하며,어댑터가요구사항을충족할

때까지이프로세스를반복합니다.

시작및사본준비

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 13/306 페이지

Page 14: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 어댑터의XML부분,즉1행의이름(id),만든CI 유형,호출된Jython 스크립트이름을수정합니

다.

l 원래어댑터와동일한결과로실행중인사본을가져옵니다.

l 대부분의코드,특히심각한결과를생성하는코드를주석처리합니다.

개발및테스트

l 다른샘플코드를사용하여변경내용을개발합니다.

l 어댑터를실행하여테스트합니다.

l 복잡한결과의유효성을검사하려면전용보기를사용하고,간단한결과의유효성을검사하려면

검색을수행합니다.

어댑터패키지화및제품화

어댑터패키지화및제품화단계는개발의마지막단계입니다.패키지화단계로넘어가기전에,모범

사례로서나머지디버깅항목,문서및주석을정리하고보안고려사항을검토하는등의작업을위

해최종통과절차를거쳐야합니다.어댑터의내부작동을설명할수있도록최소한추가정보문서

는항상가지고있어야합니다.누군가(개발자자신도포함)가앞으로이어댑터를살펴보아야할수

있으며,이경우가장간단한문서조차큰도움이될것입니다.

정리및문서

l 디버깅제거

l 주섹션에서모든함수를주석처리하고일부시작주석추가

l 사용자가테스트할수있는샘플TQL및보기만들기

패키지만들기

l 패키지관리자를사용하여어댑터, TQL등을내보냅니다.자세한내용은HPUniversal CMDB관리안내서에서"패키지관리자"를참조하십시오.

l 패키지가다른패키지에대해갖고있는종속관계를확인합니다.예를들어해당패키지로만든

CI가어댑터에대한입력CI인지확인합니다.

l 패키지관리자를사용하여패키지zip를만듭니다.자세한내용은HPUniversal CMDB관리안내서에서"패키지관리자"를참조하십시오.

l 새컨텐츠의일부를제거하고재배포하거나다른테스트시스템에배포하여배포를테스트합니

다.

데이터흐름관리및통합

DFM어댑터는다른제품과통합할수있습니다.다음정의를고려하십시오.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 14/306 페이지

Page 15: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l DFM은여러대상으로부터특정컨텐츠를수집합니다.

l 통합과정은한시스템으로부터다중유형의컨텐츠를수집합니다.

이러한정의는컬렉션의메서드를구별하지않으며DFM도마찬가지입니다.새어댑터를개발하는

프로세스는새통합을개발하는프로세스와같습니다.동일한조사를실시하고새로운어댑터와기

존어댑터에대해동일하게선택한후동일한방식으로어댑터를작성하는등의프로세스입니다.바

뀌는점은다음몇가지뿐입니다.

l 최종어댑터의일정을정합니다.통합어댑터를디스커버리보다자주실행할수도있지만사용사

례에따라다릅니다.

l 입력CI:

n 통합:입력하지않고실행할CI가아닌트리거:파일이름또는원본이어댑터매개변수를통

해전달됩니다.

n 디스커버리:입력을위해일반CMDB CI를사용합니다.

통합프로젝트의경우거의항상기존어댑터를다시사용해야합니다.통합방향(HPUniversal

CMDB에서다른제품으로또는다른제품에서HPUniversal CMDB로)에따라개발방법이달라질

수있습니다.입증된기술을이용하여자체적으로사용할수있도록복사가능한필드패키지가있습

니다.

HPUniversal CMDB에서다른프로젝트로통합하려면다음을수행합니다.

l 내보낼관계및CI를생성하는TQL을만듭니다.

l 일반래퍼어댑터를사용하여TQL을실행하고외부제품이읽을수있도록XML파일에결과를

작성합니다.

참고: 필드패키지에대한예는HP소프트웨어지원에문의하십시오.

HPUniversal CMDB에다른제품을통합하는경우다른제품에서데이터를표시하는방법에따라

통합어댑터가다르게작동합니다.

통합유형 다시사용할참조의예

제품의데이터베이스에직접액세스 HPED

내보내기를통해생성한csv 또는xml파일에서읽기 HPServiceCenter

제품의API에액세스 BMC Atrium/Remedy

디스커버리개발과비즈니스가치연관

새디스커버리컨텐츠개발에관한사용사례는비즈니스사례를통해추진해야하고비즈니스가치

를창출하도록계획해야합니다.즉,시스템구성요소를CI에매핑하고CMDB에추가하는것은비

즈니스가치를창출하기위해서입니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 15/306 페이지

Page 16: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

응용프로그램매핑에컨텐츠를사용하는것은여러사용사례에서일반적인중간단계이지만그렇

게할수없는경우도있습니다.컨텐츠를최종적으로어떻게사용하든관계없이계획을세울때다

음질문에답해야합니다.

l 소비자는누구인가?소비자는CI(및CI 간의관계)가제공하는정보에대해어떤반응을보일것

인가?CI 및관계를보게될비즈니스상황은어떤상황인가?이러한CI의소비자는사람인가,제

품인가,아니면둘다인가?

l CMDB에CI 및관계의완벽한결합이존재한다면비즈니스가치를창출하기위해이들을어떻게

사용할계획인가?

l 완벽한매핑은어떤형태여야하는가?

n 각CI 간의관계를가장의미있게설명하는용어는무엇인가?

n 어떤유형의CI가가장중요한가?

n 맵의최종용도는무엇이고최종사용자는누구인가?

l 완벽한보고서레이아웃은어떤것인가?

비즈니스정당성을확립했으면다음단계는문서에비즈니스가치를포함할차례입니다.즉,그리기

도구를사용하여완벽한맵을그리고그영향및CI 간의종속관계,보고서,변경내용추적방법,중

요한변경내용,모니터링,규정준수여부,사용사례에따른추가적인비즈니스가치를파악해야합

니다.

이드로잉(또는모델)을청사진이라고합니다.

예를들어특정구성파일이변경되었을때응용프로그램에서이를인지해야할경우에는그려진맵

에서이파일이관련있는적절한CI에매핑되고연결되어야합니다.

개발된컨텐츠의최종사용자인해당분야의SME(내용전문가)와협력합니다.이전문가는비즈니

스가치를제공하기위해CMDB에있어야할중요한엔터티(특성및관계가포함된CI)를지적해야

합니다.

한가지방법으로응용프로그램소유자에게(이경우에는SME에게도)질문서를제공할수있어야

합니다.소유자는위의목표와청사진을지정할수있어야합니다.소유자는적어도응용프로그램의

현재아키텍처를제공해야합니다.

불필요한데이터는제외하고중요한데이터만매핑해야합니다.나중에언제든지어댑터를보강할

수있습니다.실현가능하고가치를제공하는제한된디스커버리를설정하는것을목표로해야합니

다.대량의데이터를매핑하면더욱인상적인맵을만들수있지만개발하는데시간이많이걸리고

혼란스러울수있습니다.

모델및비즈니스가치가분명하면다음단계로넘어갑니다.다음단계에서더욱구체적인정보가제

공되면이단계로다시돌아올수있습니다.

통합요구사항조사

이단계에서는DFM에서디스커버리해야하는CI 및관계의청사진(디스커버리할특성을포함해야

함)이필요합니다.자세한내용은"어댑터개발및작성개요(11페이지)"를참조하십시오.

이섹션에는다음항목이포함됩니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 16/306 페이지

Page 17: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "기존어댑터수정(17페이지)"

l "새어댑터작성(17페이지)"

l "모델조사(17페이지)"

l "기술조사(18페이지)"

l "데이터액세스방법선택지침(18페이지)"

l "요약(19페이지)"

기존어댑터수정

기본어댑터또는필드어댑터가있지만다음과같은경우에기존어댑터를수정합니다.

l 필요한특정특성을디스커버리하지못한경우

l 특정유형의대상(OS)이디스커버리되지않거나잘못디스커버리되는경우

l 특정관계를디스커버리하거나만들지못하는경우

기존어댑터가작업일부(작업전체가아니라)를수행하면우선기존어댑터를평가하고이러한어

댑터중하나가필요한작업을거의수행하는지확인합니다.필요한작업을수행하는경우기존어댑

터를수정할수있습니다.

기존필드어댑터를사용할수있는지도평가해야합니다.필드어댑터는사용할수있지만기본어

댑터가아닌디스커버리어댑터입니다.필드어댑터의현재목록을받으려면HP소프트웨어지원에

문의하십시오.

새어댑터작성

다음과같은경우새어댑터를개발해야합니다.

l 어댑터를작성하는것이정보(일반적으로약50~100개의CI 및관계)를CMDB에수동으로삽

입하는것보다빠르거나일회성작업이아닌경우

l 새어댑터를개발할필요가있는경우

l 기본어댑터또는필드어댑터를사용할수없는경우

l 결과를다시사용할수있는경우

l 대상환경또는해당데이터를사용할수있는경우(볼수없는항목은디스커버리할수없음)

모델조사

l UCMDB클래스모델(CI 유형관리자)을찾아청사진의엔터티및관계를기존CIT에연결합니

다.버전업그레이드중에는복잡해질수있는상황을피하기위해현재모델을유지하는것이좋

습니다.모델을확장해야할경우업그레이드가기본CIT를덮어쓸수있으므로새CIT를만들어

야합니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 17/306 페이지

Page 18: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 현재모델에일부엔터티,관계또는특성이없는경우이들을만들어야합니다.HPUniversal

CMDB를설치할때마다이러한CIT를배포할수있어야하므로이러한CIT가포함된패키지(나

중에이패키지와관련된모든디스커버리,보기및기타아티팩트도여기에포함됨)를만드는것

이좋습니다.

기술조사

CMDB에관련CI가있는지확인했으면다음단계는관련시스템에서이데이터를검색하는방법을

결정할차례입니다.

데이터검색은보통프로토콜을사용하여응용프로그램의관리부분,응용프로그램의실제데이터

또는응용프로그램과관련된구성파일이나데이터베이스에액세스하여수행합니다.시스템에대

한정보를제공할수있는데이터원본은모두중요합니다.기술조사를수행하려면조사대상시스

템에대한광범위한지식과경우에따라창의성이필요합니다.

사내작성응용프로그램의경우응용프로그램소유자에게질문서양식을제공하면도움이될수있

습니다.이양식에서소유자는청사진및비즈니스가치에필요한정보를제공할수있는응용프로

그램의모든분야를나열해야합니다.이정보는관리데이터베이스,구성파일,로그파일,관리인터

페이스,관리프로그램,웹서비스,전송된메시지또는이벤트등을포함해야하며이외다른정보도

포함할수있습니다.

기성제품의경우제품의문서,포럼또는지원을중심으로살펴보아야합니다.관리(administration)

안내서,플러그인및통합안내서,관리(management) 안내서등을검토하십시오.데이터가여전히

관리인터페이스에나타나지않는경우응용프로그램의구성파일,레지스트리항목,로그파일,NT

이벤트로그및올바른작동을제어하는응용프로그램의모든아티팩트에대해읽어보십시오.

데이터액세스방법선택지침

관련성: 대부분의데이터를제공하는원본또는원본의조합을선택합니다.대부분의정보가하나의

원본에있고나머지정보는여기저기흩어져있거나액세스하기어려운경우나머지정보를가져오

기위한노력이나위험에비해그가치를평가해봅니다.때때로투자한노력에비해그가치나비용

이적절하지않을경우청사진을축소하는것으로결정할수도있습니다.

다시사용:HPUniversal CMDB에이미특정연결프로토콜지원이포함되어있는경우해당지원을

사용하는것이좋습니다.이는DFM프레임워크에서연결을위해기존의클라이언트및구성을제공

할수있음을의미합니다.그렇지않은경우인프라개발에투자가필요할수도있습니다.데이터흐

름관리>Data Flow Probe 설정>도메인및프로브창에서현재지원되는HPUniversal CMDB연

결프로토콜을볼수있습니다.각프로토콜에대한자세한내용은HPUCMDB디스커버리및통합컨텐츠안내서에서지원되는프로토콜을설명하는섹션을참조하십시오.

모델에새CI를추가하여새프로토콜을추가할수있습니다.자세한내용은HP소프트웨어지원에

문의하십시오.

참고: Windows레지스트리데이터에액세스하기위해WMI 또는NTCMD를사용할수있습니

다.

보안: 정보에액세스하려면보통자격증명(사용자이름,비밀번호)이필요합니다.자격증명은

CMDB에입력되고제품전체에서안전하게유지됩니다.가능한경우그리고보안을강화해도사용

자가설정한다른원칙과충돌하지않는경우,가장덜까다로우면서도액세스에필요한답을제공하

는자격증명이나프로토콜을선택하십시오.예를들어JMX(표준관리인터페이스,제한됨)및

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 18/306 페이지

Page 19: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

Telnet두가지를통해정보를사용할수있는경우JMX를사용하는것이좋습니다. JMX는기본적

으로제한된액세스를제공하며보통기본플랫폼에대해서는액세스를제공하지않기때문입니다.

편리성:일부관리인터페이스에는매우진보된기능이포함될수도있습니다.예를들어더욱쉽게

쿼리(SQL,WMI)를작성하여정보트리를탐색하거나구문분석을위한정규식을빌드할수있는기

능을말합니다.

개발자대상:최종적으로어댑터를개발할사람에게는특정기술을선호하는경향이있을수있습니

다.두가지기술이다른요인에서같은비용으로거의같은정보를제공하는경우이점도고려할수

있습니다.

요약

이단계의결과는액세스방법및각방법에서추출할수있는관련정보를설명하는문서입니다.이

문서에는각원본에서관련된각청사진데이터로연결하는매핑도포함해야합니다.

위지침에따라각액세스방법을표시해야합니다.이제마지막으로,디스커버리할원본과각원본

에서청사진모델(이제해당UCMDB모델에매핑되어있어야함)로추출할정보에대한계획을세

워야합니다.

통합컨텐츠개발

새통합을만들기전에다음질문을통해통합의요구사항을파악해야합니다.

l 이통합은데이터를CMDB에복사해야하는가?데이터를기록으로추적해야하는가?원본을신

뢰할수없는가?

이러한질문에"예"라고대답할경우채우기가필요합니다.

l 통합은보기및TQL쿼리를위해데이터를실시간으로연합해야하는가?데이터변경내용의정

확성이중요한가?CMDB에복사하기에는데이터크기가너무크지만일반적으로요청되는데이

터크기는작은가?

이러한질문에"예"라고대답할경우연합이필요합니다.

l 통합은원격데이터원본에데이터를밀어넣어야하는가?

이러한질문에"예"라고대답할경우데이터밀어넣기가필요합니다.

참고: 유연성을최대화하기위해연합흐름및채우기흐름을같은통합에구성할수있습니다.

여러가지통합유형에대한자세한내용은HPUniversal CMDB데이터흐름관리안내서에서통합스튜디오를참조하십시오.

통합어댑터를만들때사용할수있는옵션은다음다섯가지입니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 19/306 페이지

Page 20: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

1. Jython 어댑터:

n 기존디스커버리패턴

n Jython으로작성

n 채우기에사용됨

자세한내용은"Jython 어댑터개발(35페이지)"을참조하십시오.

2. Java어댑터:

n 연합SDK프레임워크에서어댑터인터페이스중하나를구현하는어댑터입니다.

n 필수구현에따라하나이상의연합,채우기또는데이터밀어넣기에사용할수있습니다.

n Java로처음부터작성하여가능한모든원본또는대상에연결할코드를작성할수있습니다.

n 하나의데이터원본또는대상에연결되는작업에적합합니다.

자세한내용은"Java어댑터개발(139페이지)"을참조하십시오.

3. 일반DB어댑터:

n 연합SDK프레임워크를사용하는Java어댑터를기반으로하는추상어댑터입니다.

n 외부데이터저장소에연결되는어댑터를만들수있습니다.

n 연합과채우기를모두지원합니다(변경내용지원을위해구현되는Java플러그인사용).

n 기본적으로XML및속성구성파일에기반하여비교적정의하기쉽습니다.

n 기본구성은UCMDB클래스와데이터베이스열을매핑하는orm.xml 파일에기반합니다.

n 하나의데이터원본에연결되는작업에적합합니다.

자세한내용은"일반데이터베이스어댑터개발(66페이지)"을참조하십시오.

4. 일반밀어넣기어댑터:

n Java어댑터(연합SDK프레임워크)및Jython 어댑터에기반한추상어댑터입니다.

n 원격대상에데이터를밀어넣는어댑터를만들수있습니다.

n UCMDB클래스및XML과,대상에데이터를밀어넣는Jython 스크립트간의매핑만정의하

면되므로비교적정의하기쉽습니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 20/306 페이지

Page 21: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

n 하나의데이터대상에연결되는작업에적합합니다.

n 데이터밀어넣기에사용됩니다.

자세한내용은"밀어넣기어댑터개발(175페이지)"을참조하십시오.

5. 강화된일반밀어넣기어댑터:

n 일반밀어넣기어댑터의위기능을모두포함합니다.

n 루트요소기반어댑터입니다.

n UCMDB트리데이터구조를대상트리데이터구조에매핑합니다.

자세한내용은"강화된일반밀어넣기어댑터개발(227페이지)"을참조하십시오.

다음표는각어댑터의기능을보여줍니다.

흐름/어댑터 Jython

어댑터

Java

어댑터

일반DB

어댑터

일반밀어넣기

어댑터

강화된일반밀어넣기

어댑터

채우기 ü ü ü û û

연합 û ü ü û û

데이터밀어넣기 û ü û ü ü

디스커버리컨텐츠개발

이섹션의내용:

l "디스커버리어댑터및관련구성요소(21페이지)"

l "어댑터구분(22페이지)"

디스커버리어댑터및관련구성요소

다음다이어그램은어댑터의구성요소및이러한구성요소가디스커버리를실행하기위해상호작

용하는구성요소를보여줍니다.녹색구성요소는실제어댑터이고파란색구성요소는어댑터와

상호작용하는구성요소입니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 21/306 페이지

Page 22: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

어댑터의최소개념은XML문서와Jython 스크립트라는두개의파일입니다.입력CI,자격증명및

사용자제공라이브러리를포함한디스커버리프레임워크는런타임시어댑터에표시됩니다.이두

가지디스커버리어댑터구성요소는데이터흐름관리를통해관리됩니다.이러한구성요소는작업

중에CMDB자체에저장되며외부패키지가남아있어도작업에참조되지않습니다.패키지관리자

에서는새디스커버리및통합컨텐츠기능을유지할수있습니다.

어댑터에대한입력CI는TQL에의해제공되며,시스템제공변수에있는어댑터스크립트에표시됩

니다.어댑터매개변수는대상데이터로도제공되므로어댑터의특정함수에따라어댑터의작업을

구성할수있습니다.

DFM응용프로그램은새어댑터를만들고테스트하는데사용됩니다.어댑터작성중에는

Universal Discovery,어댑터관리및Data Flow Probe 설정페이지를사용합니다.

어댑터는패키지로저장되고전송됩니다.패키지관리자응용프로그램및JMX콘솔은새로만든어

댑터에서패키지를만들고새시스템에어댑터를배포하는데사용됩니다.

어댑터구분

하나의어댑터에서전체디스커버리를정의할수있습니다.그러나좋은설계는복잡한시스템을더

욱간단하고,보다관리하기쉬운구성요소로분리할수있어야합니다.

다음은어댑터프로세스를분리하기위한지침및모범사례입니다.

l 단계에따라디스커버리를수행해야합니다.각단계는시스템의영역또는계층을매핑해야하는

어댑터에의해표시됩니다.어댑터는디스커버리할이전단계또는계층에따라시스템의디스커

버리를계속해야합니다.예를들어어댑터A는응용프로그램서버TQL결과에의해트리거되고

응용프로그램서버계층을매핑합니다.이매핑의일부로JDBC 연결구성요소가매핑됩니다.

어댑터B는JDBC 연결구성요소를트리거TQL로등록하며어댑터A의결과를사용하여데이터

베이스계층에액세스(예를들어JDBC URL특성을통해)하고데이터베이스계층을매핑합니다.

l 2단계연결패러다임:대부분의시스템에서데이터에액세스하려면자격증명이필요합니다.즉,

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 22/306 페이지

Page 23: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이러한시스템에대해사용자/비밀번호조합을사용해야합니다.DFM관리자는안전한방법으

로시스템에자격증명정보를제공하고우선순위가지정된몇가지로그인자격증명을제공할

수있습니다.이를프로토콜사전이라고합니다.어떠한이유로든시스템에액세스할수없는경

우추가디스커버리는수행할필요가없습니다.연결에성공하면이후의디스커버리권한을위해

성공적으로사용된자격증명설정이무엇인지를나타낼방법이있어야합니다.

다음과같은경우이러한두단계를통해두어댑터가분리됩니다.

n 연결어댑터:초기트리거를수락하는어댑터로,해당트리거에서원격에이전트가있는지찾

습니다.프로토콜사전에서이에이전트의유형과일치하는모든항목을입력하여찾습니다.

찾는데성공하면이어댑터가그결과로원격에이전트CI(SNMP,WMI 등)를제공합니다.또

한이러한CI는이후에연결할수있도록프로토콜사전에서올바른항목을지정합니다.이에

이전트CI는컨텐츠어댑터에대한트리거의일부입니다.

n 컨텐츠어댑터:이어댑터의사전조건은이전어댑터의성공적인연결입니다(TQL에서지정

한사전조건).이러한유형의어댑터는원격에이전트CI에서올바른자격증명을가져와이들

을사용하여디스커버리된시스템에로그인하는방법이있으므로더이상모든프로토콜사전

을찾아볼필요가없습니다.

l 다른일정고려사항은디스커버리부문에도영향을줄수있습니다.예를들어시스템에서휴식

시간중에만쿼리할수있으므로다른시스템을디스커버리하는어댑터에어댑터를참가시킬수

있는경우에도일정이다르면두개의어댑터를만들어야함을의미합니다.

l 같은시스템을디스커버리하기위한서로다른관리인터페이스또는기술의디스커버리는각각

별도의어댑터에배치되어야합니다.그래야각시스템또는조직에적합한액세스방법을활성화

할수있습니다.예를들어일부조직에는컴퓨터에대한WMI 액세스권한이있지만SNMP에이

전트는설치되어있지않습니다.

디스커버리어댑터구현

DFM작업은원격(또는로컬)시스템에액세스하고,추출한데이터를CI로모델링하고,해당CI를

CMDB에저장하기위해수행합니다.DFM작업은다음단계로구성됩니다.

1. 어댑터만들기

어댑터에포함할스크립트를선택하여컨텍스트,매개변수및결과유형이포함된어댑터파일

을구성합니다.자세한내용은"1단계:어댑터만들기(26페이지)"를참조하십시오.

2. 디스커버리작업만들기

일정정보및트리거쿼리로작업을구성합니다.자세한내용은"2단계:어댑터에작업할당(32

페이지)"을참조하십시오.

3. 디스커버리코드편집

어댑터파일에포함되어있고DFM프레임워크를참조하는Jython 또는Java코드를편집할수

있습니다.자세한내용은"3단계: Jython 코드만들기(33페이지)"를참조하십시오.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 23/306 페이지

Page 24: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

새어댑터를작성하려면위의각구성요소를만듭니다.각구성요소는이전단계의구성요소에자

동으로바인딩됩니다.예를들어작업을만들고관련어댑터를선택하고나면어댑터파일이작업에

바인딩됩니다.

어댑터코드

원격시스템에연결하고,해당데이터를쿼리하고,CMDB데이터로매핑하는등Jython 코드로실

제구현을수행합니다.예를들어,코드에는데이터베이스에연결하고이데이터베이스에서데이터

를추출하는논리가포함되어있습니다.이경우코드는JDBC URL,사용자이름,비밀번호,포트등

을받도록되어있습니다.이러한매개변수는TQL쿼리에답하는데이터베이스의각인스턴스별로

지정됩니다.어댑터(트리거CI 데이터)에서이러한변수를정의하면,작업을실행할때이러한특정

세부정보가실행할코드에전달됩니다.

어댑터에서Java클래스이름또는Jython 스크립트이름으로이코드를참조할수있습니다.이섹

션에서는DFM코드를Jython 스크립트로작성하는방법을설명합니다.

어댑터에는디스커버리를실행할때사용할스크립트목록을포함할수있습니다.새어댑터를만들

때는보통새스크립트를작성하고어댑터에할당합니다.새스크립트에는기본템플릿이포함되지

만다른스크립트중하나를마우스오른쪽버튼으로클릭하고다른이름으로저장을선택하여그스

크립트를템플릿으로사용할수있습니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 24/306 페이지

Page 25: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

새Jython 스크립트를작성하는방법에대한자세한내용은"3단계: Jython 코드만들기(33페이지)

"를참조하십시오.리소스창에서다음과같이스크립트를추가합니다.

스크립트목록은어댑터에정의된순서대로하나씩실행됩니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 25/306 페이지

Page 26: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

참고: 스크립트는또다른스크립트에의해단독으로라이브러리로사용되고있더라도지정되

어야합니다.이경우라이브러리스크립트를사용하는스크립트전에먼저라이브러리스크립

트를정의해야합니다.이예에서는 processdbutils.py스크립트가마지막 host_processes.py스크립트에서사용하는라이브러리입니다.라이브러리는 DiscoveryMain()함수가없어실행가능한일반스크립트와구별됩니다.

1단계: 어댑터만들기

어댑터는함수의정의라고간주할수있습니다.이함수는입력정의를정의하고,입력에대한논리

를실행하며,출력을정의하고,결과를제공합니다.

각어댑터는입력과출력을지정합니다.입력과출력은모두어댑터에특별히정의된트리거CI입니

다.어댑터는입력트리거CI에서데이터를추출하고이데이터를코드에매개변수로전달합니다.

관련CI의데이터가코드에전달되는경우도가끔있습니다.자세한내용은HPUniversal CMDB데이터흐름관리안내서에서관련CI 창을참조하십시오.어댑터의코드는코드에전달되는이러한특정입력트리거CI 매개변수와는별개의일반코드입니다.

입력구성요소에대한자세한내용은HPUniversal CMDB데이터흐름관리안내서에서데이터흐름관리개념을참조하십시오.

이섹션에는다음항목이포함됩니다.

l "어댑터입력(트리거CIT 및입력쿼리)정의(26페이지)"

l "어댑터출력정의(29페이지)"

l "어댑터매개변수다시정의(30페이지)"

l "프로브선택다시정의-선택사항(31페이지)"

l "원격프로세스에사용할클래스경로구성-선택사항(32페이지)"

1. 어댑터입력(트리거CIT및입력쿼리)정의

트리거CIT 및입력쿼리구성요소를사용하여특정CI를어댑터입력으로정의합니다.

n 트리거CIT는어댑터의입력으로사용되는CIT를정의합니다.예를들어 IP를디스커버리할

어댑터의경우입력CIT는네트워크가됩니다.

n 입력쿼리는편집가능한일반쿼리로,CMDB에대한쿼리를정의합니다.입력쿼리는CIT에

대한추가제약조건을정의하고(예를들어작업에 hostID또는 application_ip특성이필요한경우),어댑터에추가CI 데이터가필요한경우이를정의할수있습니다.

어댑터에트리거CI와관련된CI의추가정보가필요한경우입력TQL에노드를더추가할

수있습니다.자세한내용은HPUniversal CMDB모델링안내서에서TQL쿼리에쿼리노드및관계를추가하는방법을참조하십시오.

n 트리거CI 데이터에는트리거CI에대한모든필수정보뿐아니라,입력 TQL에다른노드가

정의된경우해당노드의정보도포함됩니다.DFM은변수를사용하여CI에서데이터를검색

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 26/306 페이지

Page 27: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

합니다.프로브로작업을다운로드할때트리거CI 데이터변수가실제CI 인스턴스의특성에

존재하는실제값으로바뀝니다.

n 대상데이터의값이목록이면해당목록에서프로브로전송될항목수를정의할수있습니다.

이값을정의하려면기본값에이어지는항목수다음에콜론을추가합니다.대상데이터에기

본값이없으면콜론을두개입력합니다.

예를들어,대상데이터를 name=portId, value= ${PHYSICALPORT.root_id:NA:1}또는name=portId, value= ${PHYSICALPORT.root_id::1}과같이입력하는경우에는포트목록에서첫번째포트만프로브로전송됩니다.

변수를실제데이터로바꾸는작업의예:

이예에서는변수에의해 IpAddress CI 데이터가시스템의실제 IpAddress CI 인스턴스

에존재하는실제값으로바뀝니다.

IpAddress CI의트리거된CI 데이터에는 fileName변수가포함됩니다.이변수를사용하면입력TQL의CONFIGURATION_DOCUMENT노드를호스트에있는구성파일의실제

값으로바꿀수있습니다.

모든변수가실제값으로바뀐트리거CI 데이터가프로브에업로드됩니다.어댑터스크립

트에는정의된변수의실제값을검색하기위해DFM Framework를사용하는명령이포함

됩니다.

Framework.getTriggerCIData ('ip_address')

fileName및 path변수는CONFIGURATION_DOCUMENT노드(입력쿼리편집기에정의됨-이전예참조)의 data_name및 document_path특성을사용합니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 27/306 페이지

Page 28: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

전체크기의그림을보려면썸네일을클릭합니다.

Protocol, credentialsId및 ip_address변수는 root_class, credentials_id및application_ip특성을사용합니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 28/306 페이지

Page 29: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

2. 어댑터출력정의

어댑터의출력은디스커버리된CI의목록(데이터흐름관리 >어댑터관리 >어댑터정의탭 >

디스커버리된CIT)과그CI 사이의링크입니다.

CIT를토폴로지맵,즉구성요소와구성요소가서로연결된방식으로볼수도있습니다(디스커

버리된CIT를맵으로보기버튼클릭).

DFM코드(즉, Jython 스크립트)에의해디스커버리된CI가UCMDB의

ObjectStateHolderVector형식으로반환됩니다.자세한내용은"Jython 스크립트로결과생성(40페이지)"을참조하십시오.

어댑터출력의예:

이예에서는 IPCI 출력에포함할CIT를정의합니다.

a. 데이터흐름관리>어댑터관리에액세스합니다.

b. 리소스창에서네트워크>어댑터>NSLOOKUP_on_Probe를선택합니다.

c. 어댑터정의탭에서디스커버리된CIT 창으로이동합니다.

d. 어댑터출력에포함할CIT가나열됩니다.목록에서CIT를추가하거나제거합니다.자

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 29/306 페이지

Page 30: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

세한내용은HPUniversal CMDB데이터흐름관리안내서에서어댑터정의탭을참조하십시오.

3. 어댑터매개변수다시정의

둘이상의작업에서어댑터를구성하려는경우어댑터매개변수를다시정의할수있습니다.예

를들어 SQL_NET_Dis_Connection어댑터를 SQL로 MSSQL 연결 작업과 SQL로 Oracle 연결작업모두에서사용합니다.

어댑터매개변수를다시정의하는작업의예:

이예에서는어댑터하나를사용하여Microsoft SQL Server및Oracle 데이터베이스를모

두디스커버리할수있도록어댑터매개변수를다시정의하는작업을보여줍니다.

a. 데이터흐름관리>어댑터관리에액세스합니다.

b. 리소스창에서Database_Basic >어댑터 >SQL_NET_Dis_Connection을선택합니

다.

c. 어댑터정의탭에서어댑터매개변수창으로이동합니다. protocolType매개변수의값은all입니다.

d. SQL_NET_Dis_Connection_MsSql 어댑터를마우스오른쪽버튼으로클릭하고디스

커버리작업으로이동>SQL로MSSQL연결을선택합니다.

e. 속성탭을표시합니다.매개변수창으로이동합니다.

MicrosoftSQLServer값이모두 값을덮어씁니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 30/306 페이지

Page 31: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

참고:SQL로Oracle 연결작업에도같은매개변수가포함되어있지만매개변수값은

Oracle 값으로덮어쓰게됩니다.

매개변수를추가하거나,삭제하거나,편집하는방법에대한자세한내용은HPUniversalCMDB데이터흐름관리안내서에서어댑터정의탭을참조하십시오.

DFM에서이매개변수에따라Microsoft SQL Server인스턴스를찾기시작합니다.

4. 프로브선택다시정의 -선택사항

UCMDB서버에는UCMDB에의해검색된트리거CI를사용하고다음옵션중하나에따라각

트리거CI에대해작업을실행해야하는프로브를자동으로선택하는발송메커니즘이있습니

다.

n IP 주소CI 유형의경우: 이 IP에대해정의된프로브를사용합니다.

n 실행중인소프트웨어CI 유형의경우:application_ip및 application_ip_domain 특성을사

용하고관련도메인의 IP에대해정의된프로브를선택합니다.

n 기타CI 유형의경우: CI의관련노드(있는경우)에따라노드의 IP를사용합니다.

자동프로브선택은CI의관련노드에따라수행됩니다.CI의관련노드를가져온후에발송메

커니즘은노드의 IP중하나를선택하고,프로브의네트워크범위정의에따라프로브를선택합

니다.

다음과같은경우에는프로브를수동으로지정해야하며자동발송메커니즘을사용하지않습

니다.

n 어댑터에대해실행해야하는프로브를이미알고있고프로브를선택하기위해자동발송메

커니즘을사용할필요가없는경우(예:트리거CI가프로브게이트웨이인경우)

n 자동프로브선택에실패할수있는경우다음과같은상황에서발생할수있습니다.

o 트리거CI에network CIT와같은관련노드가없는경우

o 트리거CI의노드에 IP가여러개있고각 IP가서로다른프로브에속하는경우

어댑터와함께사용할프로브를수동으로지정하려면다음을수행합니다.

n 어댑터를선택하고어댑터구성탭을클릭합니다.

n 트리거발송옵션아래에서기본Probe 선택다시정의를선택합니다.

n 상자에다음형식중하나로프로브를입력합니다.

프로브이름 프로브의이름입니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 31/306 페이지

Page 32: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

IP 주소 프로브의 IP주소입니다. IPv4 또는 IPv6 형식으로정의할수있습니다.

IP, 도메인 IPv4 형식: 16.59.63.86,DefaultDomain

IPv6 형식: 2001:0:9d46:953c:34a9:1e6b:f2ff:fffe,CustomDomain

도메인이름 프로브를선택해야할도메인입니다.

예:

5. 원격프로세스에사용할클래스경로구성 -선택사항

자세한내용은"원격프로세스실행구성(33페이지)"을참조하십시오.

2단계: 어댑터에작업할당

각어댑터에는실행정책을정의하는연관된작업이하나이상있습니다.작업을사용하면트리거된

CI의서로다른집합에대해같은어댑터의일정을다르게지정할수있으며각집합에서로다른매

개변수를제공할수도있습니다.

아래그림에서와같이,디스커버리모듈트리에작업이나타나면이것이사용자가활성화한엔터티

입니다.

트리거 TQL 선택

각작업은트리거TQL과연관되어있습니다.이러한트리거TQL은이작업의어댑터에대해입력트

리거CI로사용된결과를게시합니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 32/306 페이지

Page 33: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

트리거TQL은입력TQL에제약조건을추가할수있습니다.예를들어입력TQL의결과가SNMP에

연결된 IP이면트리거TQL의결과는195.0.0.0-195.0.0.10 범위의SNMP에연결된 IP일수있습

니다.

참고: 트리거TQL은입력TQL이참조하는동일한개체를참조해야합니다.예를들어입력TQL

이SNMP를실행하는 IP를쿼리하는경우같은작업의트리거TQL을정의할때호스트에연결

된 IP를쿼리하도록정의할수없습니다.일부 IP는입력TQL에서요구하는것처럼SNMP개체

에연결되어있지않을수있기때문입니다.

일정정보설정

프로브에대한일정정보는트리거CI에서코드를실행할시간을지정합니다.트리거된새CI가있을

때즉시호출확인란을선택한경우코드또한이후의일정설정에관계없이프로브에도달할때각

트리거CI에서한번실행됩니다.

각작업에대해정해진일정이발생할때마다프로브에서해당작업에대해축적된모든트리거CI에

대해코드를실행합니다.자세한내용은HPUniversal CMDB데이터흐름관리안내서에서"디스커버리스케줄러대화상자"를참조하십시오.

어댑터매개변수다시정의

작업을구성할때어댑터매개변수를다시정의할수있습니다.자세한내용은"어댑터매개변수다

시정의(30페이지)"를참조하십시오.

3단계: Jython 코드만들기

HPUniversal CMDB에서는Jython 스크립트를사용하여어댑터를작성합니다.예를들어SNMP를

사용하여시험하거나컴퓨터에연결할때 SNMP_NET_Dis_Connection어댑터에서 SNMP_Connection.py스크립트를사용합니다. Jython은Python을기반으로하며Java로구동되는언어입니다.

Jython에서작업하는방법에대한자세한내용은다음웹사이트를참조하십시오.

l http://www.jython.org

l http://www.python.org

자세한내용은"Jython 코드만들기(35페이지)"를참조하십시오.

원격프로세스실행구성

Data Flow Probe의프로세스와별개인프로세스에서디스커버리작업을위한디스커버리를실행할

수있습니다.

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 33/306 페이지

Page 34: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

예를들어,해당작업에서프로브의라이브러리와버전이다르거나프로브의라이브러리와호환되

지않는 .jar 라이브러리를사용하는경우별도의원격프로세스에서작업을실행할수있습니다.

작업에잠재적으로사용되는메모리양이많고(많은데이터사용)프로브에OutOMemory 문제가

발생하지않도록하려는경우에도별도의원격프로세스에서작업을실행할수있습니다.

원격프로세스로실행되도록작업을구성하려면어댑터의구성파일에서다음매개변수를정의합

니다.

매개변수 설명

remoteJVMArgs 원격Java프로세스에대한JVM매개변수입니다.

runInSeparateProcess true로설정하면별도의프로세스에서디스커버리작업이실행됩니

다.

remoteJVMClasspath (선택사항)원격프로세스의클래스경로를사용자지정하여기본프

로브클래스경로를다시정의할수있습니다.이매개변수는프로브

의 jar와사용자정의된디스커버리에필수인사용자지정 jar의버전이

호환되지않을경우에유용합니다.

remoteJVMClasspath 매개변수가정의되지않았거나비어있을경

우기본프로브클래스경로가사용됩니다.

새디스커버리작업을개발하고프로브 jar라이브러리버전이해당작

업의 jar라이브러리와충돌하지않게하려면기본디스커버리를실행

하는데필요한최소클래스경로이상을사용해야합니다.최소클래

스경로는basic_discovery_minimal_classpath 매개변수의

DataFlowProbe.properties 파일에정의됩니다.

remoteJVMClasspath 사용자지정의예:

l 사용자지정 jar을기본프로브클래스경로앞에붙이거나뒤에추

가하려면다음과같이 remoteJVMClasspath 매개변수를사용자

지정합니다.

custom1.jar;%classpath%;custom2.jar -

이경우, custom1.jar은기본프로브클래스경로앞에오고

custom2.jar은프로브클래스경로뒤에추가됩니다.

l 최소클래스경로를사용하려면다음과같이

remoteJVMClasspath 매개변수를사용자지정합니다.

custom1.jar;%minimal_classpath%;custom2.jar

개발자참조안내서

1장:어댑터개발및작성

HPUniversal CMDB (10.10) 34/306 페이지

Page 35: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

2장: Jython 어댑터개발

이장의내용:

HP 데이터흐름관리API 참조 35

Jython 코드만들기 35

Jython 어댑터에서지역화지원 50

DFM코드기록 57

Jython 라이브러리및유틸리티 58

HP 데이터흐름관리 API 참조

사용가능한API에관한전체문서는HP Universal CMDB데이터흐름관리API 참조를참조하십시오.이러한파일은다음폴더에있습니다.

<UCMDB설치디렉터리>\UCMDBServer\deploy\ucmdb-

docs\docs\eng\APIs\DDM_JavaDoc\index.html

Jython 코드만들기

HPUniversal CMDB에서는Jython 스크립트를사용하여어댑터를작성합니다.예를들어SNMP를

사용하여컴퓨터에연결하려고할때SNMP_NET_Dis_Connection 어댑터에서SNMP_

Connection.py 스크립트를사용합니다. Jython은Python을기반으로하며Java로구동되는언어

입니다.

Jython에서작업하는방법에대한자세한내용은다음웹사이트를참조하십시오.

l http://www.jython.org

l http://www.python.org

다음섹션에서는DFM프레임워크내에서실제로Jython 코드를작성하는방법을설명합니다.이

섹션에서는Jython 스크립트와이스크립트가호출하는프레임워크사이의연결지점에대해구체

적으로설명하고,가능하면항상사용해야하는Jython 라이브러리및유틸리티에대해서도설명합

니다.

참고:

l Universal Discovery용으로작성된스크립트는Jython 버전 2.5.3과호환되어야합니다.

l 사용가능한API에관한전체문서는HP Universal CMDB데이터흐름관리API 참조를참조하십시오.

HPUniversal CMDB (10.10) 35/306 페이지

Page 36: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이섹션에는다음항목이포함됩니다.

l "Jython 내에서외부Java JAR파일사용(36페이지)"

l "코드실행(36페이지)"

l "기본스크립트수정(36페이지)"

l "Jython 파일의구조(37페이지)"

l "Jython 스크립트로결과생성(40페이지)"

l "Framework 인스턴스(42페이지)"

l "올바른자격증명찾기(연결어댑터용)(45페이지)"

l "Java에서예외처리(48페이지)"

Jython 내에서외부 Java JAR파일사용

새Jython 스크립트를개발할때외부Java라이브러리(JAR파일)또는타사실행파일이때때로

Java유틸리티아카이브,연결아카이브(예: JDBC 드라이버JAR파일)또는실행파일(예:자격증

명없는디스커버리에사용되는nmap.exe)로필요합니다.

이러한리소스는패키지의외부리소스폴더아래에번들로포함되어야합니다.이폴더에있는리소

스는HPUniversal CMDB서버에연결하는모든프로브에자동으로전송됩니다.

그리고디스커버리를시작하면JAR파일리소스가Jython의클래스경로로로드되어그안의모든

클래스를가져오거나사용할수있게됩니다.

코드실행

작업을활성화하면모든필수정보를포함한작업이프로브로다운로드됩니다.

프로브는작업에지정된정보를사용하여DFM코드를실행하기시작합니다.

Jython 코드흐름은스크립트의기본항목부터실행하여CI를디스커버리할코드를실행한후디스

커버리된 CI의벡터결과를제공합니다.

기본스크립트수정

기본스크립트를수정할때는최소한만수정하고필요한메서드는모두외부스크립트에포함합니

다.그러면최신버전의HPUniversal CMDB로이동할때변경내용을더욱효과적으로추적할수

있으며코드를덮어쓰지않습니다.

예를들어기본스크립트에서다음한줄의코드는응용프로그램별로웹서버이름을계산하는메서

드를호출합니다.

serverName = iplanet_cspecific.PlugInProcessing(serverName, transportHN, mam_utils)

이이름을계산하는방법을결정하는더욱복잡한논리는다음과같이외부스크립트에포함됩니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 36/306 페이지

Page 37: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

# implement customer specific processing for 'servername' attribute ofhttpplugin#def PlugInProcessing(servername, transportHN, mam_utils_handle):        # support application-specific HTTP plug-in naming        if servername == "appsrv_instance":                # servername is supposed to match up with the j2ee server name,however some groups do strange things with their                # iPlanet plug-in files. this is the best work-around we couldfind. this join can't be done with IP address:port                # because multiple apps on a web server share the same IP:portfor multiple websphere applications                logger.debug('httpcontext_webapplicationserver attribute hasbeen changed from [' + servername + '] to [' + transportHN[:5] + '] tofacilitate websphere enrichment')                servername = transportHN[:5]        return servername

외부스크립트는외부리소스폴더에저장합니다.자세한내용은HPUniversal CMDB데이터흐름관리안내서에서"리소스창"을참조하십시오.이스크립트를패키지에추가하면다른작업에도이스크립트를사용할수있습니다.패키지관리자를사용하는방법에대한자세한내용은HPUniversal CMDB관리안내서에서"패키지관리자"를참조하십시오.

변경한코드한줄은업그레이드하는동안새버전의기본스크립트가덮어쓰게되므로이줄을바꿔

야합니다.그러나외부스크립트는덮어쓰지않습니다.

Jython 파일의구조

Jython 파일은특정순서에따라세부분으로구성됩니다.

1. 가져오기

2. 기본함수-DiscoveryMain

3. 함수정의(선택사항)

다음은Jython 스크립트의예입니다.

# imports sectionfrom appilog.common.system.types import ObjectStateHolderfrom appilog.common.system.types.vectors import ObjectStateHolderVector# Function definitiondef foo:    # do something# Main Functiondef DiscoveryMain(Framework):    OSHVResult = ObjectStateHolderVector()    ## Write implementation to return new result CIs here...

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 37/306 페이지

Page 38: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

    return OSHVResult

가져오기

Jython 클래스는계층구조네임스페이스전체에사용됩니다.버전7.0 이상에서는이전버전과달

리암시적가져오기가없기때문에사용하는모든클래스를명시적으로가져와야합니다.성능상의

이유와,필요한세부내용을표시하여Jython 스크립트에대한이해를돕기위해이렇게변경되었습

니다.

l Jython 스크립트를가져오려면:

import logger

l Java클래스를가져오려면:

from appilog.collectors.clients import ClientsConsts

기본함수 – DiscoveryMain

각Jython 실행가능스크립트파일에는기본함수인DiscoveryMain이포함되어있습니다.

DiscoveryMain함수는스크립트의기본항목으로,처음실행되는함수입니다.기본함수는다음과같이스크립트에정의된다른함수를호출할수도있습니다.

def DiscoveryMain(Framework):

Framework 인수는기본함수정의에지정되어있어야합니다.이인수는기본함수에서스크립트를

실행하는데필요한정보(예:트리거CI와매개변수에대한정보)를가져오기위해사용하며,스크립

트를실행하는동안발생하는오류를보고하는데에도사용할수있습니다.

Jython 스크립트는기본메서드없이도만들수있습니다.그러한스크립트는다른스크립트에서호

출하는라이브러리스크립트로사용됩니다.

함수정의

각스크립트는기본코드에서호출하는추가함수를포함할수있습니다.그러한함수는각각현재

스크립트나다른스크립트에있는다른함수를호출할수있습니다(import문사용).다른스크립트를사용하려면패키지의Scripts 섹션에추가해야합니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 38/306 페이지

Page 39: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

다른함수를호출하는함수의예:

다음예에서기본코드는내부메서드 doOSUserOSH(..)를호출하는 doQueryOSUsers(..)메서드를호출합니다.

def doOSUserOSH(name):    sw_obj = ObjectStateHolder('winosuser')

    sw_obj.setAttribute('data_name', name)    # return the object    return sw_objdef doQueryOSUsers(client, OSHVResult):    _hostObj = modeling.createHostOSH(client.getIpAddress())    data_name_mib = '1.3.6.1.4.1.77.1.2.25.1.1,1.3.6.1.4.1.77.1.2.25.1.2,string'    resultSet = client.executeQuery(data_name_mib)    while resultSet.next():        UserName = resultSet.getString(2)        ########## send object ##############        OSUserOSH = doOSUserOSH(UserName)        OSUserOSH.setContainer(_hostObj)        OSHVResult.add(OSUserOSH)def DiscoveryMain(Framework):    OSHVResult = ObjectStateHolderVector()    try:        client = Framework.createClient(Framework.getTriggerCIData(BaseClient.CREDENTIALS_ID))    except:        Framework.reportError('Connection failed')    else:        doQueryOSUsers(client, OSHVResult)

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 39/306 페이지

Page 40: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

        client.close()    return OSHVResult

이스크립트가여러어댑터와관련된글로벌라이브러리라면각어댑터에추가하는대신

jythonGlobalLibs.xml구성파일(어댑터관리>리소스창 > AutoDiscoveryContent >구성파일)의스크립트목록에추가할수있습니다.

Jython 스크립트로결과생성

각Jython 스크립트는특정트리거 CI에서실행되고그결과로 DiscoveryMain함수의반환값을반환합니다.

스크립트결과는실제로CMDB에삽입하거나업데이트할CI와링크그룹입니다.이스크립트는

ObjectStateHolderVector형식의CI와링크그룹을반환합니다.

ObjectStateHolder클래스는CMDB에정의된개체또는링크를나타내는수단입니다.ObjectStateHolder개체에는CIT 이름그리고특성과특성값의목록이들어있습니다.ObjectStateHolderVector는 ObjectStateHolder인스턴스의벡터입니다.

ObjectStateHolder 구문

이섹션에서는DFM결과를UCMDB모델로빌드하는방법을설명합니다.

CI에대해특성을설정하는작업의예:

ObjectStateHolder클래스는DFM결과그래프를설명합니다.각CI와링크(관계)는

ObjectStateHolder클래스의인스턴스내에다음과같은Jython 코드샘플로포함됩니다.# siebel application server 1 appServerOSH =ObjectStateHolder('siebelappserver' ) 2

appServerOSH.setStringAttribute('data_name', sblsvrName) 3

appServerOSH.setStringAttribute ('application_ip', ip) 4 appServerOSH.setContainer

(appServerHostOSH)

l 첫번째줄은siebelappserver 유형의CI를만듭니다.

l 두번째줄은data_name이라는특성과sblsvrName 값(서버이름에대해디스커버리된값

으로설정된Jython 변수)을만듭니다.

l 세번째줄은키특성이아니면서CMDB에서업데이트되는특성을설정합니다.

l 네번째줄은제약을빌드하는과정입니다(결과는그래프).이줄은이응용프로그램서버가

호스트(범위의다른 ObjectStateHolder클래스)내에포함되도록지정합니다.

참고: Jython 스크립트에서보고하는각CI는CI의CI 유형에대한모든키특성의값을포함해

야합니다.

관계(링크)의예:

다음의링크예는그래프표시방법을설명합니다.1 linkOSH =ObjectStateHolder('route') 2 linkOSH.setAttribute('link_end1', gatewayOSH)

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 40/306 페이지

Page 41: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

3 linkOSH.setAttribute('link_end2', appServerOSH)

l 첫번째줄은링크를만듭니다.이링크는 ObjectStateHolder클래스의링크이기도합니다.둘사이의유일한차이점은 route가링크CI 유형이라는점입니다.

l 두번째줄과세번째줄은각링크의끝에노드를지정합니다.이작업은각링크의최소키

특성이기때문에지정해야하는링크의end1 및end2 특성을사용하여수행됩니다.특성값

은 ObjectStateHolder인스턴스입니다.끝 1과끝 2에대한자세한내용은HPUniversalCMDB데이터흐름관리안내서에서"링크"를참조하십시오.

주의:링크는방향을가지고있습니다.End 1 및End 2 노드가각끝의유효한CIT에해당하는

지확인해야합니다.노드가유효하지않으면결과개체가유효성검사에실패하여제대로보고

되지않습니다.자세한내용은HPUniversal CMDB모델링안내서에서"CI 유형관계"를참조하십시오.

벡터(CI 수집)의예:

특성이있는개체와양끝에개체가있는링크를만들었으면이제이들을그룹화해야합니다.해

당개체와링크를다음과같이 ObjectStateHolderVector인스턴스에추가하면됩니다.

oshvMyResult = ObjectStateHolderVector()oshvMyResult.add(appServerOSH)oshvMyResult.add(linkOSH)

이복합결과를CMDB서버로전송할수있도록프레임워크에보고하는방법에대한자세한내

용은sendObjects 메서드를참조하십시오.

결과그래프가 ObjectStateHolderVector인스턴스에어셈블되고나면CMDB에삽입될수있도록DFM프레임워크에반환되어야합니다.이작업은 DiscoveryMain()함수의결과로ObjectStateHolderVector인스턴스를반환함으로써수행됩니다.

참고:공통CIT의OSH를만드는방법에대한자세한내용은"modeling.py(60페이지)"를참조

하십시오.

대량의데이터보내기

대량의데이터(대개20KB이상)를보내면UCMDB에서처리하기어렵습니다.이크기의데이터는

UCMDB로보내기전에더작은청크로분할해야합니다.모든청크가UCMDB에올바르게삽입되

려면각청크에청크의CI에필요한식별정보가포함되어있어야합니다.이는Jython 통합을배포

할때의일반적인시나리오입니다. sendObjects 메서드는청크의결과를보내는데사용됩니다.

Jython 스크립트에서다수의결과가전송되는경우(기본값은20,000이지만

"DataFlowProbe.properties 파일"에서appilog.agent.local.maxTaskResultSize 키를사용하여

이값을구성할수있음)토폴로지에따라결과를청크로분할해야합니다.이청크는결과가

UCMDB에올바르게입력되도록식별규칙을고려하여수행해야합니다. Jython 스크립트가결과

를청크로분할하지않을경우프로브에서결과를청크로분할하려고하지만,이경우결과집합이

크면성능이저하될수있습니다.

참고: 청크는일반디스커버리작업이아닌Jython 통합어댑터에사용해야합니다.이는디스

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 41/306 페이지

Page 42: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

커버리작업이일반적으로특정트리거와관련된정보를디스커버리하고대량의정보는보내지

않기때문입니다. Jython 통합의경우대량의데이터는통합의단일트리거에서디스커버리됩

니다.

또한적은수의결과에대해서도청크를사용할수있습니다.이경우서로다른청크의CI 간에관계

가있으며Jython 스크립트개발자는다음두가지옵션중에서선택할수있습니다.

l CI에대한링크가포함된모든청크내의전체CI와모든CI 식별정보를다시보냅니다.

l CI의UCMDB ID를사용합니다.이렇게하려면Jython 스크립트는UCMDB ID를얻기위해

UCMDB서버에서각청크가처리될때까지기다려야합니다.이모드(동기결과보내기라고함)

를사용하도록설정하려면SendJythonResultsSynchronously 태그를어댑터에추가합니다.

이태그는청크보내기를마칠때청크에있는CI의UCMDB ID를프로브에서이미받았는지확

인합니다.어댑터개발자는다음청크를생성하는데UCMDB ID를사용할수있습니다.UCMDB

ID를사용하려면프레임워크API getIdMapping을사용합니다.

getIdMapping사용예

첫번째청크에서노드를보내고,두번째청크에서프로세스를보냅니다.프로세스의루트컨테

이너는노드입니다.프로세스 root_container특성에서노드의전체objectStateHolder를보

내는대신getIdMapping API를사용하여노드의UCMDB ID를가져오고프로세스 root_

container특성에서노드 ID만사용하여청크를더작게만들수있습니다.

Framework 인스턴스

Framework 인스턴스는Jython 스크립트의기본함수에서제공하는유일한인수입니다.이인수는

스크립트를실행하는데필요한정보(예:트리거 CI와어댑터매개변수에대한정보)를가져오기위

해사용할수있는인터페이스이며,스크립트를실행하는동안발생하는오류를보고하는데에도사

용됩니다.자세한내용은"HP 데이터흐름관리API 참조(35페이지)"를참조하십시오.

Framework 인스턴스의올바른사용법은이인스턴스를사용하는각메서드에인수로전달됩니다.

예:

def DiscoveryMain(Framework):OSHVResult = helperMethod (Framework)

            return OSHVResultdef helperMethod (Framework):    ....

probe_name = Framework.getDestinationAttribute('probe_name')...return result

이섹션에서는다음과같이가장중요한Framework 사용법을설명합니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 42/306 페이지

Page 43: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "Framework.getTriggerCIData(String attributeName)(43페이지)"

l "Framework.createClient(credentialsId, props)(43페이지)"

l "Framework.getParameter (String parameterName)(44페이지)"

l "Framework.reportError(String message) 및 Framework.reportWarning(String message)(45

페이지)"

Framework.getTriggerCIData(String attributeName)

이API는어댑터에정의된트리거 CI 데이터와스크립트에정의된트리거CI 데이터사이의중간단

계를제공합니다.

자격증명정보를검색하는작업의예:

다음트리거 CI 데이터정보를요청하는경우:

작업에서자격증명정보를검색하려면다음API를사용합니다.

credId = Framework.getTriggerCIData('credentialsId')

Framework.createClient(credentialsId, props)

클라이언트개체를만들고해당클라이언트에서명령을실행하여원격컴퓨터에연결합니다.클라

이언트를만들려면 ClientFactory클래스를검색합니다. getClientFactory() 메서드는요청한클라이언트프로토콜유형을수신합니다.프로토콜상수는ClientsConsts 클래스에정의되어있습니

다.자격증명및지원되는프로토콜에대한자세한내용은HPUCMDB디스커버리및통합컨텐츠안내서를참조하십시오.

자격증명 ID에대한Client인스턴스를만드는작업의예:

자격증명 ID에대한 Client인스턴스를만들려면:

properties = Properties()codePage = Framework.getCodePage()properties.put( BaseAgent.ENCODING, codePage)client = Framework.createClient(credentailsID ,properties)

이제 Client인스턴스를사용하여관련컴퓨터또는응용프로그램에연결할수있습니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 43/306 페이지

Page 44: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

WMI 클라이언트를만들고WMI 쿼리를실행하는작업의예:

WMI 클라이언트를만들고그클라이언트를사용하여WMI 쿼리를실행하려면:

wmiClient = Framework.createClient(credential)resultSet = wmiClient. executeQuery("SELECT TotalPhysicalMemory                                                       FROM    Win32_LogicalMemoryConfiguration")

참고: createClient() API가작동하도록하려면트리거된CI 데이터창에서트리거CI 데이터매개변수에credentialsId = ${SOURCE.credentials_id} 매개변수를추가합니다.아니면다

음함수를호출할때수동으로자격증명 ID를추가할수도있습니다.

wmiClient = clientFactory().createClient(credentials_id).

다음다이어그램은일반적으로지원되는API에서클라이언트의계층구조를나타냅니다.

클라이언트및지원되는API에대한자세한내용은DFM Framework의BaseClient,

ShellClient 및QueryClient를참조하십시오.이러한파일은다음폴더에있습니다.

<UCMDB루트디렉터리>\UCMDBServer\deploymdb-

docs\docs\eng\APIs\DDM_Schema\webframe.html

Framework.getParameter (String parameterName)

경우에따라서는트리거CI에대한정보를검색할뿐아니라어댑터매개변수값도검색해야합니

다.예:

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 44/306 페이지

Page 45: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

protocolType 매개변수의값을검색하는작업의예:

Jython 스크립트에서 protocolType매개변수의값을검색하려면다음API를사용합니다.

protocolType = Framework.getParameterValue('protocolType')

Framework.reportError(String message) 및 Framework.reportWarning(Stringmessage)

스크립트를실행하는동안몇가지오류(예:연결실패,하드웨어문제,시간제한)가발생할수있습

니다.이러한오류가감지되면프레임워크에서문제를보고할수있습니다.보고된메시지는서버에

도달하여사용자에게표시됩니다.

오류및메시지보고의예:

다음예는 reportError(<오류 메시지>) API의사용법을보여줍니다.

try:    client = Framework.createClient(Framework.getTriggerCIData(BaseClient.CREDENTIALS_ID))

except:    strException = str(sys.exc_info()[1]).strip()    Framework. reportError ('Connection failed: %s' % strException)

API(Framework.reportError(String message), Framework.reportWarning(Stringmessage)) 중하나를사용하여문제를보고할수있습니다.두API의차이점은오류를보고할때프로브에서전체세션의매개변수가포함된통신로그파일을파일시스템에저장한다는점입니다.이

런방식으로세션을추적하고오류를더욱잘파악할수있습니다.

오류메시지에대한자세한내용은"오류메시지(61페이지)"를참조하십시오.

올바른자격증명찾기(연결어댑터용)

원격시스템에연결하려는어댑터는가능한모든자격증명을찾아야합니다.클라이언트를만들때

필요한매개변수중하나는자격증명 ID입니다.연결스크립트는가능한자격증명설정에대한액

세스권한을얻고 Framework.getAvailableProtocols()메서드를사용하여하나씩연결해봅니다.자격증명설정하나가성공하면어댑터가이트리거CI(IP에해당하는자격증명 ID 포함)의호

스트에대한CI 연결개체를CMDB에보고합니다.이후의어댑터는이연결개체CI를사용하여자

격증명설정에직접연결할수있습니다.즉,어댑터가가능한모든자격증명을다시연결해볼필요

가없습니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 45/306 페이지

Page 46: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

참고: 다음프로토콜유형의경우중요한데이터(비밀번호,개인키등)에대한액세스가차단됩

니다.

sshprotocol, ntadminprotocol, as400protocol, vmwareprotocol, wmiprotocol,

vcloudprotocol, sapjmxprotocol, websphereprotocol, siebelgtwyprotocol, sapprotocol,

ldapprotocol, udaprotocol, ntcmdprotocol, snmpprotocol, jbossprotocol, telnetprotocol,

powershellprotocol, sqlprotocol, weblogicprotocol

이러한프로토콜유형을사용하려면전용클라이언트를사용해야합니다.

다음예는SNMP프로토콜의모든항목을가져오는방법을보여줍니다.여기서 IP는트리거CI 데이

터에서가져온것입니다(# 트리거 CI 데이터 값 가져오기).

연결스크립트는가능한모든프로토콜자격증명을요청하고(# 모든 프로토콜 자격 증명 검

토)하나가성공할때까지반복해서연결을시도합니다(resultVector).자세한내용은"어댑터구분(22페이지)"에서2단계연결패러다임항목을참조하십시오.

import loggerimport netutilsimport sysimport errorcodesimport errorobject

# Java importsfrom java.util import Propertiesfrom com.hp.ucmdb.discovery.common import CollectorsConstantsfrom appilog.common.system.types.vectors import ObjectStateHolderVectorfrom com.hp.ucmdb.discovery.library.clients import ClientsConstsfrom com.hp.ucmdb.discovery.library.scope import DomainScopeManager

TRUE = 1FALSE = 0

def mainFunction(Framework, isClient, ip_address = None):_vector = ObjectStateHolderVector()errStr = ''

       ip_domain = Framework.getDestinationAttribute('ip_domain')       # Get the Trigger CI data values       ip_address = Framework.getDestinationAttribute('ip_address')

if (ip_domain == None):   ip_domain = DomainScopeManager.getDomainByIp(ip_address, None)

protocols = netutils.getAvailableProtocols(Framework,ClientsConsts.SNMP_PROTOCOL_NAME, ip_address, ip_domain)if len(protocols) == 0:    errStr = 'No credentials defined for the triggered ip'    logger.debug(errStr)    errObj = errorobject.createError(errorcodes.NO_CREDENTIALS_FOR_

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 46/306 페이지

Page 47: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

TRIGGERED_IP, [ClientsConsts.SNMP_PROTOCOL_NAME], errStr)    return (_vector, errObj)

connected = 0# Go over all the protocol credentialsfor protocol in protocols:    client = None    try:        try:            logger.debug('try to get snmp agent for: %s:%s' % (ip_address, ip_domain))            if (isClient == TRUE):                properties = Properties()                properties.setProperty(CollectorsConstants.DESTINATION_DATA_IP_ADDRESS, ip_address)                properties.setProperty(CollectorsConstants.DESTINATION_DATA_IP_DOMAIN, ip_domain)                client = Framework.createClient(protocol,properties)            else:                properties = Properties()                properties.setProperty(CollectorsConstants.DESTINATION_DATA_IP_ADDRESS, ip_address)                client = Framework.createClient(protocol,properties)            logger.debug('Running test connection queries')            testConnection(client)            Framework.saveState(protocol)            logger.debug('got snmp agent for: %s:%s' % (ip_address,ip_domain))            isMultiOid = client.supportMultiOid()            logger.debug('snmp server isMultiOid state=%s'%isMultiOid)

client.close()                   client = None

except:            if client != None:                client.close()                client = None            logger.debugException('Unexpected SNMP_AGENTException:')            lastExceptionStr = str(sys.exc_info()[1]).strip()    finally:        if client != None:            client.close()            client = None

return (_vector, error)

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 47/306 페이지

Page 48: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

Java에서예외처리

일부Java클래스에서는오류발생시예외가발생합니다.예외를포착하여처리하는것이좋습니

다.그렇게하지않으면어댑터가예상치않게종료됩니다.

알려진예외를포착할때는대부분로그에대한스택추적을인쇄하고UI에적절한메시지를표시해

야합니다.

참고: Python에도동일한이름의기본예외클래스가있기때문에다음예에표시된대로Java

기본예외클래스를가져오는것이매우중요합니다.

from java.lang import Exception as JExceptiontry:

client = Framework.createClient(Framework.getTriggerCIData(BaseClient.CREDENTIALS_ID))except JException, ex:

# process java exceptions onlyFramework.reportError('Connection failed')logger.debugException(str(ex))

        return

심각한예외가아니라서스크립트를계속실행할수있으면 reportError()메서드호출을생략하고스크립트를계속실행해야합니다.

Jython 버전 2.1에서 2.5.3으로의마이그레이션문제해결

Universal Discovery는이제Jython 버전2.5.3을사용합니다.모든기본스크립트가올바르게마

이그레이션되었습니다.이업그레이드전에디스커버리에서사용할자체Jython 스크립트를개발

한경우다음과같은문제가발생할수있습니다.이경우표시된대로수정해야합니다.

참고: 다음과같이내용을변경하려면숙련된Jython 개발자여야합니다.

문자열형식지정

l 오류메시지: TypeError: int argument required

l 가능한원인: 정수데이터가포함된문자열변수의10진수에문자열형식지정사용

l 문제가있는Jython 2.1 코드:

variable = "43"print "%d" % variable

l 올바른Jython 2.5.3 코드:

variable = "43"print "%s" % variable

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 48/306 페이지

Page 49: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

또는

variable = "43"print "%d" % int(variable)

문자열유형확인

아래코드는입력에유니코드문자열이포함된경우제대로작동하지않을수있습니다.

l 문제가있는Jython 2.1 코드: isinstance(unicodeStringVariable,'')

l 올바른Jython 2.5.3 코드: isinstance(unicodeStringVariable,basestring)

basestring을통해비교하여개체가 str의인스턴스인지또는유니코드의인스턴스인지테스트해야합니다.

파일에 ASCII가아닌문자포함

l 오류메시지:

SyntaxError: Non-ASCII character in file 'x', , but no encoding declared; seehttp://www.python.org/peps/pep-0263.html for details

l 올바른Jython 2.5.3 코드: (파일의첫번째줄에다음항목을추가합니다.)

# coding: utf-8

하위패키지가져오기

l 오류메시지:

AttributeError: 'module' object has no attribute 'sub_package_name'

l 가능한원인: import 문에하위패키지의이름을명시적으로지정하지않고하위패키지를가져왔

습니다.

l 문제가있는Jython 2.1 코드:

import aprint dir(a.b)

하위패키지를명시적으로가져오지않습니다.

l 올바른Jython 2.5.3 코드:

import a.b

또는

from a import b

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 49/306 페이지

Page 50: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

반복기변경사항

Jython 2.2부터는__iter__ 메서드를사용하여for-in 블록의범위에서컬렉션을반복합니다.반복

기는next메서드를구현하여적절한요소를반환해야합니다.그렇지않으면컬렉션의끝에도달한

경우StopIteration 오류가발생합니다. __iter__ 메서드가구현되지않은경우에는대신getitem 메

서드가사용됩니다.

예외발생

l 예외를발생시키는Jython 2.1 메서드는더이상사용되지않습니다.

raise Exception, 'Failed getting contents of file'

l 예외를발생시키는권장Jython 2.5.3 메서드는다음과같습니다.

raise Exception('Failed getting contents of file')

Jython 어댑터에서지역화지원

다국어로캘기능을사용하면DFM을여러OS(운영체제)언어로사용할수있고런타임시적절하

게사용자지정할수있습니다.

이섹션의내용:

l "새로운언어에대한지원추가(50페이지)"

l "기본언어변경(51페이지)"

l "인코딩할문자집합결정(52페이지)"

l "지역화된데이터를사용할새작업정의(52페이지)"

l "키워드를사용하지않는명령디코딩(53페이지)"

l "리소스번들사용(54페이지)"

l "API 참조(55페이지)"

새로운언어에대한지원추가

이작업에서는새로운언어에대한지원을추가하는방법을설명합니다.

이작업에는다음단계가포함됩니다.

l "리소스번들(*.properties 파일)추가(50페이지)"

l "언어개체선언및등록(51페이지)"

1. 리소스번들(*.properties 파일) 추가

실행할작업에따라리소스번들을추가합니다.다음표에는DFM작업및각작업에서사용되

는리소스번들이나열되어있습니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 50/306 페이지

Page 51: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

작업 리소스번들의기본이름

셸을통해파일모니터링 langFileMonitoring

셸별호스트리소스및응용프로그램 langHost_Resources_By_TTY, langTCP

DNS서버에서NSLOOKUP을사용하여셸

을통해호스팅

langNetwork

셸을통해연결호스팅 langNetwork

셸또는SNMP를통해네트워크데이터수

langTCP

SNMP를통해리소스및응용프로그램호

스팅

langTCP

NTCMD를통한Microsoft Exchange 연

결,NTCMD를통한Microsoft Exchange

토폴로지

msExchange

NTCMD를통한MS클러스터 langMsCluster

번들에대한자세한내용은"리소스번들사용(54페이지)"을참조하십시오.

2. 언어개체선언및등록

새언어를정의하려면현재지원되는모든언어목록이포함된shellutils.py 스크립트에다음두

줄의코드를추가합니다.이스크립트는 AutoDiscoveryContent패키지에포함되어있습니다.이스크립트를보려면어댑터관리창에액세스합니다.자세한내용은HPUniversal CMDB데이터흐름관리안내서에서"어댑터관리창"을참조하십시오.

a. 다음과같이언어를선언합니다.

LANG_RUSSIAN = Language(LOCALE_RUSSIAN, 'rus', ('Cp866', 'Cp1251'),(1049,), 866)

클래스언어에대한자세한내용은"API 참조(55페이지)"를참조하십시오.클래스로캘개

체에대한자세한내용은

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Locale.html을참조하십시오.기존

로캘을사용하거나새로캘을정의할수있습니다.

b. 다음컬렉션에언어를추가하여등록합니다.

LANGUAGES = (LANG_ENGLISH, LANG_GERMAN, LANG_SPANISH, LANG_RUSSIAN, LANG_JAPANESE)

기본언어변경

OS언어를확인할수없는경우기본언어가사용됩니다.기본언어는shellutils.py 파일에지정되어

있습니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 51/306 페이지

Page 52: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

#default language for fallbackDEFAULT_LANGUAGE = LANG_ENGLISH

기본언어를변경하려면DEFAULT_LANGUAGE변수를다른언어로초기화합니다.자세한내용은

"새로운언어에대한지원추가(50페이지)"를참조하십시오.

인코딩할문자집합결정

명령출력디코딩에적합한문자집합은런타임시결정됩니다.다국어솔루션은다음사실과가정에

따라결정됩니다.

1. 로캘과는별도로OS언어를결정할수있습니다.예를들어Windows에서chcp명령을실행하

거나Linux에서 locale 명령을실행하여결정할수있습니다.

2. 관계언어인코딩은잘알려져있으며정적으로정의할수있습니다.예를들어러시아어는가장

일반적인두가지인코딩인 Cp866및 Windows-1251을사용합니다.

3. 언어마다하나의문자집합이기본설정됩니다.예를들어러시아어의기본문자집합은 Cp866입니다.이는대부분의명령이이인코딩으로출력됨을의미합니다.

4. 다음명령출력이제공되는인코딩은예측할수없지만주어진언어에가능한인코딩중하나입

니다.예를들어러시아어로캘이설정된Windows컴퓨터를사용하는경우시스템에서ver 명

령출력은Cp866으로제공되지만 ipconfig명령은Windows-1251로제공됩니다.

5. 알려진명령은출력에서알려진키워드를생성합니다.예를들어 ipconfig명령에는 IP-

Address문자열이변환된형식으로포함됩니다.따라서영어OS의경우 IP-Address,러시아

어OS의경우 ,독일어OS의경우 IP-Adresse 등이 ipconfig명령출력에포함됩니다.

명령출력이어떤언어로생성되었는지디스커버리되면(# 1) 가능한문자집합이하나또는둘로제

한됩니다(# 2).뿐만아니라이출력에포함된키워드를알수있게됩니다(# 5).

그러므로해결책은결과에서키워드를검색하여가능한인코딩중하나로명령출력을디코딩하는

것입니다.키워드가검색되면현재문자집합은올바른인코딩으로간주됩니다.

지역화된데이터를사용할새작업정의

이작업에서는지역화된데이터를사용할수있는새작업을작성하는방법을설명합니다.

Jython 스크립트는보통명령을실행하고출력을구문분석합니다.올바르게디코딩된방법으로이

명령출력을받으려면ShellUtils 클래스에대한API를사용합니다.자세한내용은"HPUniversal

CMDB웹서비스API 개요(253페이지)"를참조하십시오.

이코드는보통다음형식으로사용됩니다.

client = Framework.createClient(protocol, properties)shellUtils = shellutils.ShellUtils(client)languageBundle = shellutils.getLanguageBundle ('langNetwork',shellUtils.osLanguage, Framework)strWindowsIPAddress = languageBundle.getString('windows_ipconfig_str_ip_address')

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 52/306 페이지

Page 53: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

ipconfigOutput = shellUtils.executeCommandAndDecode('ipconfig /all',strWindowsIPAddress)#Do work with output here

1. 클라이언트를만듭니다.

client = Framework.createClient(protocol, properties)

2. ShellUtils 클래스의인스턴스를만들고여기에운영체제언어를추가합니다.언어가추가되지

않으면기본언어가사용됩니다(대개영어가사용됨).

shellUtils = shellutils.ShellUtils(client)

개체를초기화하는동안DFM에서컴퓨터언어를자동으로검색하고미리정의된 Language개체에서기본인코딩을설정합니다.기본인코딩은인코딩목록에서가장먼저나타나는인스턴

스입니다.

3. getLanguageBundle 메서드를사용하여shellclient에서적절한리소스번들을검색합니다.

languageBundle = shellutils.getLanguageBundle ('langNetwork',shellUtils.osLanguage, Framework)

4. 리소스번들에서특정명령에적합한키워드를검색합니다.

strWindowsIPAddress = languageBundle.getString('windows_ipconfig_str_ip_address')

5. executeCommandAndDecode 메서드를호출하고ShellUtils 개체에서이메서드로키워드

를전달합니다.

ipconfigOutput = shellUtils.executeCommandAndDecode('ipconfig /all',strWindowsIPAddress)

사용자를API 참조(여기에이메서드에대한자세한설명이있음)에연결하려면ShellUtils 개체

도필요합니다.

6. 일반적인방법으로출력을구문분석합니다.

키워드를사용하지않는명령디코딩

현재의지역화방법은키워드를사용하여모든명령출력을디코딩합니다.자세한내용은"지역화된

데이터를사용할새작업정의(52페이지)"의리소스번들에서키워드검색에대한단계를참조하십

시오.

그러나다른방법은첫번째명령출력만키워드를사용하여디코딩하고그밖의명령은첫번째명령

을디코딩하는데사용한문자집합으로디코딩합니다.그렇게하려면ShellUtils 개체의

getCharsetName 및useCharset 메서드를사용합니다.

일반적인사용예는다음과같습니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 53/306 페이지

Page 54: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

1. executeCommandAndDecode 메서드를한번호출합니다.

2. getCharsetName 메서드를통해최근에사용한문자집합이름을가져옵니다.

3. ShellUtils 개체의useCharset 메서드를호출하여shellUtils에서기본적으로이문자집합을

사용하도록합니다.

4. ShellUtils의 execCmd메서드를한번또는여러번호출합니다.이전단계에서지정한문자집

합을사용하여출력이반환됩니다.추가로발생되는디코딩작업이없습니다.

리소스번들사용

리소스번들은확장자가properties(*.properties)인파일입니다.속성파일은 key = value형식으로데이터를저장하는사전이라고생각할수있습니다.속성파일의각행에는하나의 key = value연관이있습니다.리소스번들의기본기능은키에따라값을반환하는것입니다.

리소스번들은프로브컴퓨터의

C:\hp\UCMDB\DataFlowProbe\runtime\probeManager\discoveryConfigFiles 아래에

있습니다.리소스번들은UCMDB서버에서다른구성파일로다운로드됩니다.그리고리소스창에

서편집하거나,추가하거나,제거할수있습니다.자세한내용은HPUniversal CMDB데이터흐름관리안내서에서"구성파일창"을참조하십시오.

대상을디스커버리할때DFM은일반적으로명령출력이나파일컨텐츠에서텍스트를구문분석해

야합니다.이구문분석은대개정규식에따라수행됩니다.언어가다르면다른정규식을사용하여

구문분석해야합니다.모든언어에대해코드를한번씩작성하려면모든언어별데이터를리소스

번들로추출해야합니다.언어마다하나의리소스번들이있습니다.하나의리소스번들에여러언어

의데이터를포함할수있지만DFM에서는하나의리소스번들에한언어의데이터만포함됩니다.

Jython 스크립트자체는하드코드된특정언어관련데이터(예:특정언어관련정규식)를포함하지

않습니다.스크립트는원격시스템의언어를확인하고적절한리소스번들을로드하며특정키로모

든언어별데이터를가져옵니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 54/306 페이지

Page 55: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

DFM에서리소스번들은 <base_name>_<language_identifier>.properties와같은특정이름형식을사용합니다(예: langNetwork_spa.properties).기본리소스번들은 <base_name>.properties와같은형식을사용합니다(예: langNetwork.properties).

base_name형식은이번들의용도를반영합니다.예를들어 langMsCluster는리소스번들에MS클러스터작업에사용되는언어별리소스가포함되어있음을나타냅니다.

language_identifier형식은언어를식별하는데사용되는세자로된머리글자어입니다.예를들어 rus는러시아어를나타내고 ger은독일어를나타냅니다.이언어식별자는 Language개체의선언에포함됩니다.

API 참조

이섹션의내용:

l "언어클래스(55페이지)"

l "executeCommandAndDecode 메서드(56페이지)"

l "getCharsetName 메서드(56페이지)"

l "useCharset 메서드(56페이지)"

l "getLanguageBundle 메서드(56페이지)"

l "osLanguage 필드(57페이지)"

언어클래스

이클래스는언어에대한정보(예:리소스번들접미사,가능한인코딩등)를캡슐화합니다.

필드

이름 설명

locale 로캘을나타내는Java개체입니다.

bundlePostfix 리소스번들접미사입니다.이접미사는리소스번들파일이름에서언어를식

별하는데사용됩니다.예를들어 langNetwork_ger.properties 번들에는

ger 번들접미사가포함되어있습니다.

charsets 이언어를인코딩하는데사용되는문자집합입니다.각언어에는몇개의문자

집합이있을수있습니다.예를들어러시아어는일반적으로 Cp866및Windows-1251인코딩으로인코딩됩니다.

wmiCodes Microsoft Windows OS에서언어를식별하는데사용되는WMI 코드의목록

입니다.가능한코드는http://msdn.microsoft.com/en-

us/library/aa394239(VS.85).aspx의OSLanguage 섹션에모두나열되어있

습니다.OS언어를식별하는방법중하나는WMI 클래스OS에서 OSLanguage속성을쿼리하는것입니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 55/306 페이지

Page 56: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이름 설명

codepage 특정언어에사용되는코드페이지입니다.예를들어 866은러시아어컴퓨터에사용되고 437은영어컴퓨터에사용됩니다.OS언어를식별하는방법중하나는 chcp명령으로기본코드페이지를검색하는것입니다.

executeCommandAndDecode 메서드

이메서드는비즈니스논리Jython 스크립트에서사용하도록되어있으며,디코딩작업을캡슐화하

고디코딩된명령출력을반환합니다.

인수

이름 설명

cmd 실행할실제명령입니다.

keyword 디코딩작업에사용할키워드입니다.

framework DFM에서실행가능한모든Jython 스크립트에전달되는프레임워크개체입

니다.

timeout 명령시간제한입니다.

waitForTimeout 시간제한이초과될때클라이언트에서대기할지여부를지정합니다.

useSudo sudo를사용할지여부를지정합니다(UNIX컴퓨터클라이언트에만해당).

language 언어를자동으로검색하는대신직접언어를지정할수있습니다.

getCharsetName메서드

이메서드는최근에사용한문자집합의이름을반환합니다.

useCharset 메서드

이메서드는 ShellUtils인스턴스에대한문자집합을설정합니다.그러면초기데이터디코딩에이문자집합이사용됩니다.

인수

이름 설명

charsetName 문자집합의이름(예: windows-1251또는 UTF-8)입니다.

"getCharsetName 메서드(56페이지)"도참조하십시오.

getLanguageBundle 메서드

이메서드는올바른리소스번들을가져오는데사용해야합니다.이메서드는다음API를바꿉니다.

Framework.getEnvironmentInformation().getBundle(...)

인수

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 56/306 페이지

Page 57: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이름 설명

baseName 언어접미사가없는번들의이름(예: langNetwork)입니다.

language 언어개체입니다. ShellUtils.osLanguage를여기에전달해야합니다.

framework DFM에서실행가능한모든Jython 스크립트에전달되는프레임워크공통개

체입니다.

osLanguage 필드

이필드에는언어를나타내는개체가포함되어있습니다.

DFM 코드기록

전체실행(모든매개변수포함)을기록하면코드를디버깅하고테스트하는경우등에매우유용할

수있습니다.이작업에서는모든관련변수를포함한전체실행을기록하는방법을설명합니다.그

뿐아니라일반적으로디버그수준에서조차로그파일에기록되지않는기타디버그정보를볼수있

습니다.

DFM코드를기록하려면다음을수행합니다.

1. 데이터흐름관리>Universal Discovery에액세스합니다.실행을기록해야하는작업을마우

스오른쪽버튼으로클릭하고어댑터로이동을선택하여어댑터관리응용프로그램을엽니다.

2. 아래와같이어댑터구성탭에서실행옵션창을찾습니다.

3. 통신로그만들기상자를항상으로변경합니다.로깅옵션을설정하는방법에대한자세한내용

은HPUniversal CMDB데이터흐름관리안내서에서"실행옵션창"을참조하십시오.

다음예는셸을통해연결호스팅작업이실행되고통신로그만들기상자를항상또는실패시로

설정한경우생성되는XML로그파일입니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 57/306 페이지

Page 58: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

다음예는메시지및스택추적매개변수를보여줍니다.

Jython 라이브러리및유틸리티

어댑터에서는몇가지유틸리티스크립트가널리사용됩니다.이러한스크립트는 AutoDiscovery패키지의일부이며프로브에다운로드된다른스크립트와함께

C:\hp\UCMDB\DataFlowProbe\runtime\probeManager\discoveryScripts 아래에있

습니다.

참고: 프로브가작업을시작하면 discoveryScript폴더가동적으로만들어집니다.

유틸리티스크립트중하나를사용하려면스크립트의 import 섹션에다음 import 줄을추가합니다.

import <스크립트 이름>

AutoDiscovery Python 라이브러리에는Jython 유틸리티스크립트가포함되어있습니다.이러한

라이브러리스크립트는DFM의외부라이브러리로간주되며,구성파일폴더에있는

jythonGlobalLibs.xml파일에정의되어있습니다.

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 58/306 페이지

Page 59: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

jythonGlobalLibs.xml파일에나타나는각스크립트는프로브를시작할때기본적으로로드되므로어댑터정의에서명시적으로사용할필요가없습니다.

이섹션에는다음항목이포함됩니다.

l "logger.py(59페이지)"

l "modeling.py(60페이지)"

l "netutils.py(60페이지)"

l "shellutils.py(60페이지)"

logger.py

logger.py 스크립트에는오류보고를위한로그유틸리티및helper함수가포함되어있습니다.이

스크립트의디버그,정보및오류API를호출하여로그파일에쓸수있습니다.로그메시지는

C:\hp\UCMDB\DataFlowProbe\runtime\log에기록됩니다.

메시지는C:\hp\UCMDB\DataFlowProbe\conf\log\probeMgrLog4j.properties 파일에

서PATTERNS_DEBUG어펜더에대해정의된디버그수준에따라로그파일에입력됩니다.기본수

준은 DEBUG입니다.자세한내용은"오류심각도수준(64페이지)"을참조하십시오.

##################################################################################### PATTERNS_DEBUG log#########################################################################################log4j.category.PATTERNS_DEBUG=DEBUG, PATTERNS_DEBUGlog4j.appender.PATTERNS_DEBUG=org.apache.log4j.RollingFileAppenderlog4j.appender.PATTERNS_DEBUG.File=C:\hp\UCMDB\DataFlowProbe\runtime\log/probeMgr-patternsDebug.loglog4j.appender.PATTERNS_DEBUG.Append=truelog4j.appender.PATTERNS_DEBUG.MaxFileSize=15MBlog4j.appender.PATTERNS_DEBUG.Threshold=DEBUG

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 59/306 페이지

Page 60: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

log4j.appender.PATTERNS_DEBUG.MaxBackupIndex=10log4j.appender.PATTERNS_DEBUG.layout=org.apache.log4j.PatternLayoutlog4j.appender.PATTERNS_DEBUG.layout.ConversionPattern=<%d> [%-5p] [%t] -%m%nlog4j.appender.PATTERNS_DEBUG.encoding=UTF-8

명령프롬프트콘솔에는정보및오류메시지도나타납니다.

API에는다음두가지집합이있습니다.

l logger.<debug/info/warn/error>

l logger.<debugException/infoException/warnException/errorException>

첫번째집합은적절한로그수준에서모든문자열인수의연결을발급하고두번째집합은연결을발

급할뿐아니라최근에발생한예외의스택추적도발급하여더자세한정보를제공합니다.예:

logger.debug('found the result')logger.errorException('Error in discovery')

modeling.py

modeling.py 스크립트에는호스트, IP,프로세스CI 등을만드는API가포함됩니다.이러한API를

사용하면공통개체를만들수있고코드의가독성을향상시킬수있습니다.예:

ipOSH= modeling.createIpOSH(ip)host = modeling.createHostOSH(ip_address)member1 = modeling.createLinkOSH('member', ipOSH, networkOSH)

netutils.py

netutils.py 라이브러리는네트워크및TCP정보를검색(예:운영체제이름검색,MAC 주소의유효

성확인, IP주소의유효성확인등)하는데사용됩니다.예:

dnsName = netutils.getHostName(ip, ip)isValidIp = netutils.isValidIp(ip_address)address = netutils.getHostAddress(hostName)

shellutils.py

shellutils.py 라이브러리는셸명령을실행하고실행된명령의끝상태를검색할수있는API를제공

하고,해당끝상태에따라다중명령을실행할수있도록합니다.라이브러리는셸클라이언트에서

초기화되고이클라이언트를사용하여명령을실행하고결과를검색합니다.예:

ttyClient = Framework.createClient(Framework.getTriggerCIData(BaseClient.CREDENTIALS_ID), Props)clientShUtils = shellutils.ShellUtils(ttyClient)if (clientShUtils.isWinOs()):        logger.debug ('discovering Windows..')

개발자참조안내서

2장: Jython 어댑터개발

HPUniversal CMDB (10.10) 60/306 페이지

Page 61: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

3장: 오류메시지

이장의내용:

오류메시지개요 61

오류작성규칙 61

오류심각도수준 64

오류메시지개요

디스커버리중에연결실패,하드웨어문제,예외,시간제한등의많은오류가발견될수있습니다.

이러한오류는정규디스커버리흐름이실패할때마다Universal Discovery 창에표시됩니다.문제

의원인이된트리거CI에서드릴다운하여오류메시지자체를볼수있습니다.

DFM은상황에따라무시할수있는오류(예:도달할수없는호스트)와조치를취해야할오류(예:자

격증명문제또는구성파일이나DLL파일없음)를구분합니다.뿐만아니라DFM은연속실행시같

은오류가발생할경우에도오류를한번만보고하고오류가한번만발생해도오류를보고합니다.

패키지를만들때적절한메시지를패키지에리소스로추가할수있습니다.패키지를배포할때메시

지도올바른위치에배포됩니다.메시지는"오류작성규칙(61페이지)"에설명된대로규칙을준수

해야합니다.

DFM은다국어오류메시지를지원합니다.작성하는메시지를해당지역의언어로표시되도록지역

화할수있습니다.

오류검색에대한자세한내용은HPUniversal CMDB데이터흐름관리안내서에서디스커버리진행률및결과를참조하십시오.

통신로그를설정하는방법에대한자세한내용은HPUniversal CMDB데이터흐름관리안내서에서"실행옵션창"을참조하십시오.

오류작성규칙

l 각오류는오류메시지코드및인수배열(int, String[])로식별됩니다.메시지코드와인수배열

의조합으로특정오류를정의합니다.매개변수의배열은null일수있습니다.

l 각오류코드는고정문자열인간단한메시지와0개이상의인수가포함된템플릿문자열인세부

메시지에매핑됩니다.템플릿의인수개수와실제매개변수개수가일치하는것으로간주됩니

다.

오류메시지코드의예:

10234는다음과같이간단한메시지로오류를나타낼수있습니다.

Connection Error

다음과같이세부메시지로오류를나타낼수도있습니다.

Could not connect via {0} protocol due to timeout of {1} msec

HPUniversal CMDB (10.10) 61/306 페이지

Page 62: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

여기서각항목은다음과같습니다.

{0} =첫번째인수:프로토콜이름

{1} =두번째인수:시간제한길이(밀리초)

이섹션에는다음항목도포함됩니다.

l "속성파일컨텐츠(62페이지)"

l "오류메시지속성파일(62페이지)"

l "로캘이름지정규칙(62페이지)"

l "오류메시지코드(62페이지)"

l "분류되지않은컨텐츠오류(63페이지)"

l "프레임워크의변경내용(63페이지)"

속성파일컨텐츠

속성파일에는각오류메시지코드의키두개가포함되어야합니다.예를들어오류45의경우다음

과같은키를포함해야합니다.

l DDM_ERROR_MESSAGE_SHORT_45.간단한오류설명입니다.

l DDM_ERROR_MESSAGE_LONG_45.긴오류설명으로,매개변수(예: {0},{1})를포함할수

있습니다.

오류메시지속성파일

속성파일에는오류메시지코드와두메시지(간단한메시지와세부메시지)간의맵이포함되어야

합니다.

속성파일이배포되고나면해당데이터와기존데이터가병합됩니다.즉,새메시지코드는추가되

고이전메시지코드는다시정의됩니다.

인프라속성파일은AutoDiscoveryInfra 패키지에포함됩니다.

로캘이름지정규칙

l 기본로캘의경우:<파일이름>.properties.errors

l 특정로캘의경우:<파일이름>_xx.properties.errors

여기서xx는로캘(예: infraerr_fr.properties.errors 또는 infraerr_en_us.properties.errors)

입니다.

오류메시지코드

다음오류코드는HPUniversal CMDB에기본적으로포함됩니다.이목록에직접작성한오류메시

개발자참조안내서

3장:오류메시지

HPUniversal CMDB (10.10) 62/306 페이지

Page 63: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

지를추가할수있습니다.

오류이름 오류코드 설명

내부 100-199 대부분Jython 스크립트를실행하는동안발생한예외

에서확인됨

연결 200-299 연결실패,대상컴퓨터에에이전트없음,대상에도달할

수없음등

자격증명관련 300-399 사용권한이거부됨,자격증명이없어연결시도가차단

시간제한 400-499 연결/명령수행중시간제한초과

예기치못한동작

또는잘못된동작

500-599 구성파일없음,예기치못한중단등

정보검색 600-699 대상컴퓨터에정보없음,에이전트에서정보쿼리실패

리소스관련 700-799 메모리부족과관련된오류또는클라이언트가제대로

릴리스되지않음

구문분석 800-899 텍스트구문분석오류

인코딩 900 입력오류,지원되지않는인코딩

SQL관련 901-903, 924 SQL작업에서받은오류

HTTP관련 904-909 HTTP연결중에생성된오류,HTTP오류코드에서구

문분석된오류

특정응용프로그램 910-923 응용프로그램별문제로인해보고된오류(예:잘못된

LSOF버전,대기열관리자없음등)

분류되지않은컨텐츠오류

오래된컨텐츠를퇴행없이지원하기위해응용프로그램및SDK관련메서드에서메시지코드100

오류(즉,분류되지않은스크립트오류)를다르게처리합니다.

이러한오류는메시지코드별로그룹화되지않고(즉,같은유형의오류로간주되지않음)메시지컨

텐츠별로그룹화됩니다.즉,스크립트에서오래되어사용되지않는메서드(메시지문자열은있고오

류코드는없음)로오류를보고하면모든메시지가같은오류코드를받지만응용프로그램또는

SDK관련메서드에서는메시지가다르면다른오류로표시됩니다.

프레임워크의변경내용

(com.hp.ucmdb.discovery.library.execution.BaseFramework)

다음메서드가인터페이스에추가되었습니다.

개발자참조안내서

3장:오류메시지

HPUniversal CMDB (10.10) 63/306 페이지

Page 64: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l void reportError(int msgCode, String[] params);

l void reportWarning(int msgCode, String[] params);

l void reportFatal(int msgCode, String[] params);

다음의오래된메서드는이전버전과의호환을위해여전히지원되지만사용되지않음으로표시됩

니다.

l void reportError(String message);

l void reportWarning (String message);

l void reportFatal (String message);

오류심각도수준

어댑터가트리거CI에대한실행을마치면상태를반환합니다.오류또는경고가보고되지않으면상

태는성공입니다.

심각도수준은가장좁은범위에서넓은범위순으로나열됩니다.

치명적인오류

이수준은다음과같이인프라문제,DLL파일없음또는예외등심각한오류를보고합니다.

l 작업생성실패(프로브없음,변수없음등)

l 스크립트를실행할수없음

l 서버에서결과를처리하지못하여CMDB에데이터를쓰지못함

오류

이수준은DFM이데이터를검색하지못하는문제를보고합니다.일반적으로이러한오류에는조치

(예:시간제한연장,범위변경,매개변수변경,다른사용자자격증명추가등)가필요하므로철저

히검토합니다.

l 사용자간섭이필요할수있는경우(예:추가조사가필요할수있는네트워크문제또는자격증

명문제)에는오류가보고됩니다.이러한오류는디스커버리의오류가아니라구성의오류입니

다.

l 보통디스커버리된컴퓨터또는응용프로그램의예기치못한동작으로인한내부오류(예:구성

파일없음등)

경고

실행에성공했지만사용자가알고있어야하는심각하지않은문제가있을수있습니다.이경우

DFM에서는심각도를경고로표시합니다.더자세한디버깅세션을시작하기전에이러한CI를보고

데이터가없는지확인해야합니다.경고에는원격호스트에에이전트가설치되지않았거나,잘못된

데이터로인해특성이잘못계산되었다는등의메시지가포함될수있습니다.

개발자참조안내서

3장:오류메시지

HPUniversal CMDB (10.10) 64/306 페이지

Page 65: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 연결에이전트(SNMP,WMI) 없음

l 디스커버리에성공했지만사용가능한모든정보가디스커버리되지않음

개발자참조안내서

3장:오류메시지

HPUniversal CMDB (10.10) 65/306 페이지

Page 66: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

4장: 일반데이터베이스어댑터개발

이장의내용:

일반데이터베이스어댑터개요 67

일반데이터베이스어댑터의TQL쿼리 67

조정 68

Hibernate를 JPA 공급자로사용 68

어댑터만들기준비 71

어댑터패키지준비 75

어댑터구성–간단한방법 78

어댑터구성–고급방법 82

플러그인구현 87

어댑터배포 90

어댑터편집 90

통합포인트만들기 90

보기만들기 90

결과계산 90

결과보기 91

보고서보기 91

로그파일사용 91

Eclipse를사용하여CIT 특성과데이터베이스테이블매핑 91

어댑터구성파일 98

기본변환기 122

플러그인 127

구성의예 127

어댑터로그파일 136

외부참조 137

문제해결및제한사항 138

HPUniversal CMDB (10.10) 66/306 페이지

Page 67: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

일반데이터베이스어댑터개요

일반데이터베이스어댑터플랫폼의목적은RDBMS(관계형데이터베이스관리시스템)와통합하고

데이터베이스에대해TQL쿼리및채우기작업을실행할수있는어댑터를만드는것입니다.일반데

이터베이스어댑터에서지원하는RDBMS로는Oracle, Microsoft SQL Server, MySQL이있습니다.

이버전의데이터베이스어댑터구현은지속성공급자로Hibernate ORM라이브러리를사용하는

JPA(Java Persistence API) 표준에기반합니다.

일반데이터베이스어댑터의 TQL 쿼리

채우기작업의경우,모델링스튜디오의레이아웃설정대화상자에서필요한모든CI 레이아웃을선

택해야합니다.자세한내용은HPUniversal CMDB모델링안내서에서"쿼리노드속성/관계속성대화상자"를참조하십시오.CI에서특성을식별해야하며이러한특성이없으면CI를UCMDB에추

가할수없습니다.

다음제한은일반데이터베이스어댑터에서계산한TQL쿼리에만해당합니다.

l 하위그래프는지원되지않습니다.

l 복합관계는지원되지않습니다.

l 주기또는주기일부분은지원되지않습니다.

다음TQL쿼리는주기의예입니다.

l 함수레이아웃은지원되지않습니다.

l 0..0 카디널리티는지원되지않습니다.

l 조인 관계는지원되지않습니다.

l 한정자조건은지원되지않습니다.

l 두CI 사이를연결하려면외부데이터베이스원본에테이블형태의관계나외래키가있어야합니

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 67/306 페이지

Page 68: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

다.

조정

조정은어댑터쪽의TQL계산중에수행됩니다.조정이발생할수있도록CMDB쪽이조정 CIT라는

연합엔터티에매핑됩니다.

매핑.CMDB의각특성이데이터원본의열에매핑됩니다.

매핑이바로완료되더라도매핑데이터에대한변환함수도지원됩니다.새함수는Java코드(예:

lowercase, uppercase)를통해추가할수있습니다.이러한함수는값(CMDB와연합데이터베이

스에서로다른형식으로저장되어있는값)을변환하기위해사용됩니다.

참고:

l CMDB와외부데이터베이스원본을연결하려면데이터베이스에적절한연관이있어야합

니다.자세한내용은"선행조건(71페이지)"을참조하십시오.

l CMDB ID와의조정도지원됩니다.

l 글로벌 ID와의조정도지원됩니다.

Hibernate를 JPA 공급자로사용

Hibernate는몇가지종류의관계형데이터베이스(예:Oracle 및Microsoft SQL Server)를통해

Java클래스를테이블에매핑할수있는OR(개체-관계)매핑도구입니다.자세한내용은"기능제한

(138페이지)"을참조하십시오.

기본매핑에서각Java클래스는단일테이블에매핑됩니다.한층더고급단계의매핑을사용하면

상속매핑(CMDB데이터베이스에서발생가능)이가능합니다.

기타지원되는기능에는여러테이블에클래스하나를매핑하는기능,컬렉션지원기능및일대일,

일대다,다대일유형의연관기능이있습니다.자세한내용은아래의"연관(70페이지)"을참조하십

시오.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 68/306 페이지

Page 69: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

여기서설명하려는작업에서는Java클래스를만들필요가없습니다.매핑은CMDB클래스모델

CIT에서데이터베이스테이블방향으로정의됩니다.

이섹션에는다음항목도포함됩니다.

l "개체-관계매핑의예(69페이지)"

l "연관(70페이지)"

l "사용성(70페이지)"

개체-관계매핑의예

다음예는개체-관계매핑을설명합니다.

하나의데이터베이스테이블에매핑된하나의CMDB클래스의예:

A1, A2, A3특성이있는클래스 M1이 c1, c2, c3열이있는테이블 1에매핑되었습니다.이는임의의 M1인스턴스가테이블 1에일치하는행을가지고있음을의미합니다.

두개의데이터베이스테이블에매핑된하나의CMDB클래스의예:

상속의예:

이사례는각클래스가고유한데이터베이스테이블을가지고있는CMDB에사용됩니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 69/306 페이지

Page 70: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

판별자가있는단일테이블상속의예:

클래스의전체계층구조가단일데이터베이스테이블에매핑됩니다.이테이블의열은매핑된

클래스의전체특성으로이루어진상위집합을구성합니다.해당테이블에는추가열(판별자)도포함되는데,이열의값은이항목에매핑되어야하는특정클래스를나타냅니다.

연관

연관에는일대다,다대일,다대다등세가지유형이있습니다.서로다른데이터베이스개체사이를

연결하려면외래키열(일대다의경우)이나매핑테이블(다대다의경우)을사용하여이러한연관중

하나를정의해야합니다.

사용성

JPA 스키마는매우광범위하므로쉽게연결을정의할수있도록간소화된XML파일이제공됩니다.

이XML파일을사용할수있는사용사례는다음과같습니다.연합데이터가하나의연합클래스로

모델링되었습니다.이클래스에는연합클래스가아닌CMDB클래스에대한다대일관계가있습니

다.그리고연합클래스와연합클래스가아닌클래스간에가능한관계유형이하나뿐입니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 70/306 페이지

Page 71: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

어댑터만들기준비

이작업에서는어댑터를만드는데필요한준비사항을설명합니다.

참고: UCMDB API에서일반DB어댑터의샘플을볼수있습니다.특히,DDMi어댑터샘플에는

복잡한orm.xml 파일과일부플러그인인터페이스에대한구현이포함되어있습니다.

이작업에는다음단계가포함됩니다.

l "선행조건(71페이지)"

l "CI 유형만들기(72페이지)"

l "관계만들기(73페이지)"

1. 선행조건

데이터베이스에데이터베이스어댑터를사용할수있는지유효성을검사하려면다음사항을확

인하십시오.

n 데이터베이스에조정클래스및그특성(multinode라고도함)이있습니다.예를들어노드

이름에따라조정을실행하는경우노드이름이있는열이포함된테이블이있는지확인합니

다. cmdb_id노드에따라조정을실행하는경우에는CMDB에있는노드의CMDB ID와일치하는CMDB ID가있는열이있는지확인합니다.조정에대한자세한내용은"조정(68페이

지)"을참조하십시오.

ID NAME IP_ADDRESS

31 BABA 16.59.33.60

33 ext3.devlab.ad 16.59.59.116

46 LABM1MAM15 16.59.58.188

72 cert-3-j2ee 16.59.57.100

102 labm1sun03.devlab.ad 16.59.58.45

114 LABM2PCOE73 16.59.66.79

116 CUT 16.59.41.214

117 labm1hp4.devlab.ad 16.59.60.182

n 관계가있는두CIT를상관관계로연결하려면CIT 테이블간에상관관계데이터가있어야

합니다.상관관계는외래키열이나매핑테이블을기준으로지정할수있습니다.예를들어

노드와티켓간에상관관계를만들려면티켓테이블에노드 ID가포함된열이있거나,노드

테이블에티켓 ID가연결된열이있거나, end1이노드 ID이고 end2가티켓 ID인매핑테이블이있어야합니다.상관관계데이터에대한자세한내용은"Hibernate를 JPA 공급자로사용

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 71/306 페이지

Page 72: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

(68페이지)"을참조하십시오.

다음표는외래키 NODE_ID열을보여줍니다.

NODE_ID CARD_ID CARD_TYPE CARD_NAME

2015 1 직렬버스컨트롤러 Intel 82801EB USB Universal

Host Controller

3581 2 시스템 Intel 631xESB/6321ESB/3100 칩

셋LPC

3581 3 디스플레이 ATI ES1000

3581 4 기본시스템주변장치 HPProLiant iLO 2 레거시지원기능

n 각CIT는하나이상의테이블에매핑될수있습니다.CIT 하나를둘이상의테이블에매핑하

려면기본키가다른테이블에있는기본테이블과고유한값열이있는지확인하십시오.

예를들어티켓은 ticket1과 ticket2등의두테이블에매핑됩니다.첫번째테이블에는 c1및 c2열이있고두번째테이블에는 c3및 c4열이있습니다.이둘을하나의테이블로간주할수있도록하려면두테이블에동일한기본키가있어야합니다.아니면,첫번째테이블기본

키가두번째테이블의열일수있습니다.

다음예에서는테이블간에 CARD_ID라는같은기본키를공유합니다.

CARD_ID CARD_TYPE CARD_NAME

1 직렬버스컨트롤러 Intel 82801EB USB Universal Host Controller

2 시스템 Intel 631xESB/6321ESB/3100 칩셋LPC

3 디스플레이 ATI ES1000

4 기본시스템주변장치 HPProLiant iLO 2 레거시지원기능

CARD_ID CARD_VENDOR

1 Hewlett-Packard Company

2 (표준USB호스트컨트롤러)

3 Hewlett-Packard Company

4 (표준시스템장치)

5 Hewlett-Packard Company

2. CI 유형만들기

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 72/306 페이지

Page 73: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이단계에서는RDBMS(외부데이터원본)의데이터를나타낸CIT를만듭니다.

a. UCMDB에서CI 유형관리자에액세스하고새CI 유형을만듭니다.자세한내용은HPUniversal CMDB모델링안내서에서"CI 유형을만드는방법"를참조하십시오.

b. CIT에필요한특성(예:마지막액세스시간,벤더등)을추가합니다.이러한특성은어댑터

가외부데이터원본에서검색하여CMDB보기로가져올특성입니다.

3. 관계만들기

이단계에서는UCMDB CIT와외부데이터원본에서데이터를나타내는새CIT 간에관계를추

가합니다.

새CIT에적절하고유효한관계를추가합니다.자세한내용은HPUniversal CMDB모델링안내서에서"관계추가/제거대화상자"를참조하십시오.

참고: 이단계에서는데이터에가져올메서드를아직정의하지않았기때문에아직연합데

이터를보거나외부데이터를채울수없습니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 73/306 페이지

Page 74: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

Containment관계를만드는작업의예:

a. CIT 관리자에서다음두CIT를선택합니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 74/306 페이지

Page 75: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

b. 두CIT 간에Containment관계를만듭니다.

어댑터패키지준비

이단계에서는일반DB어댑터패키지를적절한위치에넣어구성합니다.

1. C:\hp\UCMDB\UCMDBServer\content\adapters 폴더에서db-adapter.zip 패키지

를찾습니다.

2. 로컬임시디렉터리에패키지의압축을풉니다.

3. 다음과같이어댑터XML파일을편집합니다.

n 텍스트편집기에서discoveryPatterns\db_adapter.xml 파일을엽니다.

n 다음과같이adapter id특성을찾아이름을바꿉니다.

<pattern id="MyAdapter" displayLabel="My Adapter"xsi:noNamespaceSchemaLocation="../../Patterns.xsd"description="Discovery Pattern Description"         schemaVersion="9.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"displayName="UCMDB API Population">

어댑터에서채우기를지원하는경우<adapter-capabilities>요소에다음기능을추가해야

합니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 75/306 페이지

Page 76: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

         <support-replicatioin-data>             <source>                 <changes-source>             </source>         </support-replicatioin-data>

HPUniversal CMDB의통합포인트창에있는어댑터목록에표시레이블또는 ID가나타납

니다.

일반DB어댑터를만들때support-replicatioin-data 태그에서changes-source 태그를

편집할필요가없습니다. FcmdbPluginForSyncGetChangesTopology 플러그인을구현

하면마지막실행후로변경된토폴로지가반환됩니다.플러그인이구현되지않은경우에는

전체토폴로지가반환되고반환된CI에따라자동삭제가수행됩니다.

CMDB를데이터로채우는방법에대한자세한내용은HPUniversal CMDB데이터흐름관리안내서에서"통합스튜디오페이지"를참조하십시오.

n 어댑터가버전8.x의매핑엔진을사용하는경우(즉,새조정매핑엔진을사용하지않는경

우)다음요소를

<default-mapping-engine>

다음요소로바꿉니다.

<default-mapping-engine>com.hp.ucmdb.federation.mappingEngine.AdapterMappingEngine</default-mapping-engine>

새매핑엔진으로되돌리려면요소를다음값으로되돌립니다.

<default-mapping-engine>

n 범주정의를찾습니다.

<category>Generic</category>

Generic 범주이름을선택한범주로변경합니다.

참고: 범주가Generic으로지정된어댑터는새통합포인트를만들때통합스튜디오에

나열되지않습니다.

n 데이터베이스와의연결은사용자이름(스키마),비밀번호,데이터베이스유형,데이터베이

스호스트시스템이름및데이터베이스이름또는SID를사용하여설명할수있습니다.

이러한연결유형에대해매개변수는어댑터XML파일의parameter 섹션에다음과같은요

소를갖습니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 76/306 페이지

Page 77: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<parameters>    <!--The description attribute may be written in simple text orHTML.-->    <!--The host attribute is treated as a special case by UCMDB-->    <!--and will automatically select the probe name (if possible)-->    <!--according to this attribute's value.-->    <!--Display name and description may be overwritten by I18N values-->        <parameter name="host" display-name="Hostname/IP" type="string"description="The host name or IP address of the remote machine"mandatory="false" order-index="10" />        <parameter name="port" display-name="Port" type="integer"description="The remote machine's connection port" mandatory="false"order-index="11" />        <parameter name="dbtype" display-name="DB Type" type="string"description="The type of database" valid-values="Oracle;SQLServer;MySQL;BO" mandatory="false" order-index="13">Oracle</parameter>        <parameter name="dbname" display-name="DB Name/SID"type="string" description="The name of the database or its SID (in caseof Oracle)" mandatory="false" order-index="13" />        <parameter name="credentialsId" display-name="Credentials ID"type="integer" description="The credentials to be used"mandatory="true" order-index="12" /></parameters>

참고: 이것이기본구성입니다.따라서db_adapter.xml 파일에이미이정의가포함되어

있습니다.

이방법으로데이터베이스에대한연결을구성할수없는경우가있습니다.예를들어,Oracle

RAC에연결하거나CMDB에제공된것과다른데이터베이스드라이버를사용하여연결하는

경우입니다.

이러한경우사용자이름(스키마),비밀번호및연결URL문자열을사용하여연결을설명할수

있습니다.

이를정의하려면다음과같이어댑터의XM매개변수섹션을편집합니다.

<parameters>    <!--The description attribute may be written in simple text or HTML.-->    <!--The host attribute is treated as a special case by CMDBRTSM-->    <!--and will automatically select the probe name (if possible)-->    <!--according to this attribute's value.-->    <!--Display name and description may be overwritten by I18N values-->        <parameter name="url" display-name="Connection String"

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 77/306 페이지

Page 78: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

type="string" description="The connection string to connect to thedatabase" mandatory="true" order-index="10" />        <parameter name="credentialsId" display-name="Credentials ID"type="integer" description="The credentials to be used" mandatory="true"order-index="12" /></parameters>

다음은기본DataDirect드라이버를사용하여Oracle RAC에연결하는URL의예입니다.

jdbc:me-

rcury:oracle://labm3amdb17:1521;ServiceName=RACQA;AlternateServers=

(labm3amdb18:1521);LoadBalancing=true

4. 임시디렉터리에서adapterCode 폴더를열고GenericDBAdapter의이름을이전단계에서

사용한adapter id의값으로바꿉니다.

이폴더에는어댑터의구성(예:CMDB의어댑터이름,쿼리및클래스)과어댑터가지원하는

RDBMS의필드가포함되어있습니다.

5. 필요에따라어댑터를구성합니다.자세한내용은"어댑터구성–간단한방법(78페이지)"을참

조하십시오.

6. "다음과같이어댑터XML파일을편집합니다.(75페이지)"단계에설명된대로adapter id특성

에지정한이름과동일한이름을사용하여 *.zip파일을만듭니다.

참고: descriptor.xml 파일은모든패키지에있는기본파일입니다.

7. 이전단계에서만든새패키지를저장합니다.어댑터의기본디렉터리는

C:\hp\UCMDB\UCMDBServer\content\adapters입니다.

어댑터구성 –간단한방법

간단한방법은어댑터가사용하는simplifiedConfiguration.xml 매핑파일을만들기위한방법입니

다.이방법을사용하면단일CIT의기본채우기또는연합을수행할수있습니다.

이섹션에제공된지침에서는CMDB의특정CI 유형에대한클래스모델을RDBMS에매핑하는방

법을설명합니다.

이섹션에설명된모든구성파일은"어댑터패키지준비(75페이지)"에서압축을푼

C:\hp\UCMDB\UCMDBServer\content\adapters 폴더의db-adapter.zip 패키지에있습

니다.

참고: 이방법을실행하면자동으로생성되는orm.xml 파일은고급방법으로작업할때사용할

수있는좋은예입니다.

이간단한방법은다음작업이필요한경우에사용합니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 78/306 페이지

Page 79: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 노드특성과같은단일노드연합/채우기

l 일반데이터베이스어댑터기능시연

이메서드가지원하는사항은다음과같습니다.

l 단일노드연합/채우기만지원

l 다대일가상관계만지원

adapter.conf 파일구성

어댑터가간단한구성방법을사용하도록 adapter.conf파일의설정을변경하려면다음을수행합니다.

1. 텍스트편집기에서adapter.conf 파일을엽니다.

2. use.simplified.xml.config=<true/false>줄을찾습니다.

3. use.simplified.xml.config=true로변경합니다.

예:간단한방법을사용하여노드및 IP 주소채우기

이예는 IP Address에Containment링크를통해연관된Node를UCMDB에채우는과정을보여줍

니다.RDBMS에는컴퓨터이름,컴퓨터노드,컴퓨터의 IP주소데이터가포함된simpleNode라는

테이블이있습니다.

simpleNode 테이블의컨텐츠는다음과같습니다.

채우기는다음과같이세단계로수행됩니다.

1. "simplifiedConfiguration.xml 만들기(79페이지)"

2. "TQL만들기(81페이지)"

3. "통합포인트만들기(82페이지)"

simplifiedConfiguration.xml 만들기

다음과같이simplifiedConfiguration.xml을만듭니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 79/306 페이지

Page 80: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

1. 다음과같이cmdb-class엔터티를만듭니다.

<cmdb-class cmdb-class-name="node" default-table-name="simpleNode">

CI 유형은node이고RDBMS테이블이름은simpleNode입니다.

2. 다음과같이테이블의primary-key를설정합니다.

<primary-key column-name="host_id"/>

이기본키는orm.xml 파일에있는엔터티 ID와동일합니다.

3. 다음과같이 reconciliation-by-two-nodes규칙을설정합니다.

<reconciliation-by-two-nodes connected-node-cmdb-class-name="ip_address"cmdb-link-type="containment">

이태그는Node와 IpAddress CI 유형사이의관계를정의합니다.관계유형은Containment

링크입니다.연결된두CI 유형에서조정을수행합니다.연결된노드의특성매핑(이경우

IpAddress)은 connected-node 특성에정의됩니다.

4. 다음과같이조정특성사이에OR조건을추가합니다.

<or is-ordered="true">

이태그는조정특성간에OR관계를정의하므로첫번째조정특성이 true이면조정규칙전체

가 true로설정됩니다.

5. 다음특성을추가합니다.

<attribute cmdb-attribute-name="name" column-name="host_name" ignore-case="true"/>

이태그는UCMDB에있는node.name과simpleNode 테이블에있는host_name 열사이의

매핑을설정합니다.

data_note 특성에대해서도같은과정을수행합니다.

<attribute cmdb-attribute-name="data_note" column-name="note" ignore-case="true"/>

연결된노드특성을추가합니다.

<connected-node-attribute cmdb-attribute-name="name" column-name="ip_address"/>

이태그는 ip_address.name과simpleNode 테이블에있는 ip_address열사이의매핑을설

정합니다.

6. 열린태그를순서대로닫습니다.

</or>

</reconciliation-by-two-nodes>

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 80/306 페이지

Page 81: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

</cmdb-class>

simplifiedConfiguration.xml 파일의내용은이제다음과같이표시됩니다.

<?xml version="1.0" encoding="UTF-8"?><generic-db-adapter-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../META-CONF/simplifiedConfiguration.xsd">   <cmdb-class cmdb-class-name="node" default-table-name="simpleNode">       <primary-key column-name="host_id"/>   <reconciliation-by-two-nodes connected-node-cmdb-class-name="ip_address"cmdb-link-type="containment">       <or is-ordered="true">       <attribute cmdb-attribute-name="name" column-name="host_name" ignore-case="true"/>       <attribute cmdb-attribute-name="data_note" column-name="note" ignore-case="true"/>          <connected-node-attribute cmdb-attribute-name="name" column-name="ip_address"/>       </or>       </reconciliation-by-two-nodes>   </cmdb-class></generic-db-adapter-config>

TQL 만들기

TQL은 ip_address에대한Containment링크로연결된node입니다.노드는다음과같이 root로

표시되어야합니다.

TQL을만들려면다음을수행합니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 81/306 페이지

Page 82: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

1. 모델링>모델링스튜디오로이동합니다.

2. 새로만들기버튼을클릭하고새쿼리를만듭니다.

3. CI 유형탭으로이동하여Node CI 유형과 IpAddress CI 유형을TQL화면으로끕니다.

4. Node와 IpAddress를Containment관계로연결합니다.

5. Node 요소를마우스오른쪽버튼으로클릭하고쿼리노드속성을선택합니다.

6. 요소이름을Root로변경합니다.

7. 요소레이아웃탭으로이동합니다.특성조건으로특정특성을선택합니다.사용가능한특성창

에서Name 및Note를선택하여특정특성창으로이동합니다.

8. IpAddress요소를마우스오른쪽버튼으로클릭하고쿼리노드속성을선택합니다.

9. 요소레이아웃탭으로이동합니다.특성조건으로특정특성을선택합니다.사용가능한특성창

에서Name을선택하여특정특성창으로이동합니다.

10. TQL을저장합니다.

통합포인트만들기

다음과같이통합포인트를만듭니다.

1. 데이터흐름관리>통합스튜디오로이동한후새통합포인트버튼을클릭합니다.

2. 통합포인트의세부정보를삽입하고확인을클릭합니다.

3. 채우기탭에서새통합작업버튼을선택하고이전에만든TQL을추가합니다.

4. 통합포인트를저장하고전체동기화실행버튼을클릭합니다.

어댑터구성 –고급방법

이러한구성파일은어댑터패키지를준비할때압축을푼

C:\hp\UCMDB\UCMDBServer\content\adapters 폴더의db-adapter.zip 패키지에있습

니다.자세한내용은"어댑터패키지준비(75페이지)"를참조하십시오.

이작업에는다음단계가포함됩니다.

l "orm.xml 파일구성(82페이지)"

l "reconciliation_rules.txt 파일구성(86페이지)"

orm.xml 파일구성

이단계에서는CMDB의CIT와관계를RDBMS의테이블에매핑합니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 82/306 페이지

Page 83: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

1. 텍스트편집기에서orm.xml 파일을엽니다.

이파일에는기본적으로필요한만큼의여러CIT와관계를매핑하는데사용하는템플릿이포함

되어있습니다.

참고: Microsoft Corporation의메모장에서는버전에상관없이orm.xml 파일을편집하지

마십시오.Notepad++, UltraEdit 또는기타타사텍스트편집기를사용합니다.

2. 매핑할데이터엔터티에따라파일을변경합니다.자세한내용은다음예를참조하십시오.

다음유형의관계는orm.xml 파일에서매핑할수있습니다.

n 일대일:

이관계유형의코드는다음과같습니다.

<one-to-one name="end1" target-entity="node">        <join-column name="Device_ID" ></one-to-one><one-to-one name="end2" target-entity="sw_sub_component">        <join-column name="Device_ID" >        <join-column name="Version_ID" ></one-to-one>

n 다대일:

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 83/306 페이지

Page 84: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이관계유형의코드는다음과같습니다.

<many-to-one name="end1" target-entity="node">        <join-column name="Device_ID" ></many-to-one><one-to-one name="end2" target-entity="sw_sub_component">        <join-column name="Device_ID" >        <join-column name="Version_ID" ></one-to-one>

n 다대다:

이관계유형의코드는다음과같습니다.

<many-to-one name="end1" target-entity="node">        <join-column name="Device_ID" ></many-to-one><many-to-one name="end2" target-entity="sw_sub_component">        <join-column name="Device_ID" >        <join-column name="Version_ID" ></many-to-one>

이름지정규칙에대한자세한내용은"이름지정규칙(107페이지)"을참조하십시오.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 84/306 페이지

Page 85: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

데이터모델과RDBMS 간엔터티매핑의예:

참고: 구성할필요가없는특성은다음예에서생략되었습니다.

n CMDB CIT의클래스:

<entity class="generic_db_adapter.node">

n RDBMS의테이블이름:

<table name="Device"/>

n RDBMS테이블의고유한식별자열이름:

<column name="Device ID"/>

n CMDB CIT의특성이름:

<basic name="name">

n 외부데이터원본의테이블필드이름:

<column name="Device_Name"/>

n "CI 유형만들기(72페이지)"에서만든새CIT의이름:

<entity class="generic_db_adapter.MyAdapter">

n RDBMS의해당테이블이름:

<table name="SW_License"/>

n RDBMS의고유 ID:

n CMDB CIT의특성이름및RDBMS의해당특성이름:

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 85/306 페이지

Page 86: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

데이터모델과RDBMS 간관계매핑의예:

n CMDB관계의클래스:

<entity class="generic_db_adapter.node_containment_MyAdapter">

n 관계가수행되는RDBMS테이블의이름:

<table name="MyAdapter"/>

n RDBMS의고유 ID:

<id name="id1">        <column updatable="false" insertable="false"name="Device_ID">        <generated-value strategy="TABLE"/></id><id name="id2">        <column updatable="false" insertable="false"name="Version_ID">        <generated-value strategy="TABLE"/></id>

n 관계유형및CMDB CIT:

<many-to-one target-entity="node" name="end1">

n RDBMS의기본키및외래키필드:

<join-column updatable="false" insertable="false"referenced-column-name="[column_name]" name="Device_ID" />

reconciliation_rules.txt 파일구성

이단계에서는어댑터에서CMDB및RDBMS를조정할때적용할규칙을정의합니다(매핑엔진을

사용하는경우에만버전 8.x와의호환성을위해).

1. 텍스트편집기에서META-INF\reconciliation_rules.txt 파일을엽니다.

2. 매핑하는CIT에따라파일을변경합니다.예를들어노드CIT를매핑하려면다음식을사용합니

다.

multinode[node] ordered expression[^name]

참고:

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 86/306 페이지

Page 87: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

n 데이터베이스의데이터가대/소문자를구분하는경우제어문자(^)를삭제하지마십시

오.

n 여는각괄호각각에해당하는닫는괄호가있는지확인하십시오.

자세한내용은"reconciliation_rules.txt 파일(이전버전과의호환용)(116페이지)"을참조하십시

오.

플러그인구현

이작업에서는플러그인을사용하여일반DB어댑터를구현하고배포하는방법을설명합니다.

참고: 어댑터용플러그인을작성하기전에"어댑터패키지준비(75페이지)"에설명된필요한단

계를모두완료해야합니다.

1. 옵션1 – Java기반플러그인작성

a. UCMDB서버설치디렉터리에서다음 jar파일을개발클래스경로로복사합니다.

o tools\adapter-dev-kit\db-adapter-framework 폴더에서db-interfaces.jar 파

일및db-interfaces-javadoc.jar 파일을복사합니다.

o \tools\adapter-dev-kit\SampleAdapters\production-lib 폴더의 federation-

api.jar 파일및 federation-api-javadoc.jar 파일을복사합니다.

참고: 플러그인을개발하는방법에대한자세한내용은db-interfaces-

javadoc.jar 및 federation-api-javadoc.jar 파일과다음위치의온라인문서를

참조하십시오.

o C:\hp\UCMDB\UCMDBServer\deploy\ucmdb-

docs\docs\eng\APIs\DBAdapterFramework_JavaAPI\index.html

o C:\hp\UCMDB\UCMDBServer\deploy\ucmdb-

docs\docs\eng\APIs\Federation_JavaAPI\index.html

b. 플러그인의Java인터페이스를구현하는Java클래스를작성합니다.인터페이스는db-

interfaces.jar 파일에정의되어있습니다.아래표는각플러그인에대해구현해야하는인

터페이스를나타냅니다.

플러그인유형 인터페이스이름 메서드

전체토폴로지동

기화

FcmdbPluginForSyncGetFullTopology getFullTopology

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 87/306 페이지

Page 88: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

플러그인유형 인터페이스이름 메서드

변경내용동기화 FcmdbPlu-

ginForSyncGetChangesTopology

getChangesTopology

레이아웃동기화 FcmdbPluginForSyncGetLayout getLayout

지원되는쿼리검

FcmdbPlu-

ginForSyncGetSupportedQueries

getSupportedQueries

TQL쿼리정의및

결과변경

FcmdbPlug-

inGetTopologyCmdbFormat

get-

TopologyCmdbFormat

CI에대한레이아

웃요청변경

FcmdbPluginGetCIsLayout getCisLayout

링크에대한레이

아웃요청변경

FcmdbPluginGetRelationsLayout getRelationsLayout

ID 다시밀어넣기 FcmdbPluginPushBackIds getPushBackIdsSQL

플러그인의클래스에는공용기본생성자가있어야합니다.또한모든인터페이스는

initPlugin이라는메서드를노출합니다.이메서드는다른메서드보다먼저호출되고포함하

는어댑터의환경개체로어댑터를초기화하는데사용됩니다.

FcmdbPluginForSyncGetChangesTopology가구현되면두가지방법으로변경을보고

합니다.

o 항상전체루트토폴로지를보고합니다. 이토폴로지에따라자동삭제기능이제거해야

할CI를찾습니다.이경우다음을사용하여자동삭제기능을사용가능하도록설정합니

다.

<autoDeleteCITs isEnabled="true">                <CIT>link                </CIT>                <CIT>object                </CIT>            </autoDeleteCITs>

o 제거되었거나업데이트된각CI 인스턴스를보고합니다. 이경우다음을사용하여자동

삭제메커니즘을사용되지않도록설정합니다.

 <autoDeleteCITs isEnabled="false">                <CIT>link                </CIT>                <CIT>object                </CIT>            </autoDeleteCITs>

c. Java코드를컴파일하기전에연합SDK JAR및일반DB어댑터JAR을클래스경로에포함

해야합니다.연합SDK는C:\hp\UCMDB\UCMDBServer\lib 디렉터리에있는

federation_api.jar 파일입니다.

d. 배포하기전에클래스를 jar파일로압축하고어댑터패키지의adapterCode\<어댑터이

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 88/306 페이지

Page 89: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

름>폴더아래에배치합니다.

2. 옵션2 – Groovy 기반플러그인작성

a. 어댑터관리메뉴에서어댑터패키지구성파일아래에Groovy 코드파일

(MyPlugin.groovy)을만듭니다.

b. Groovy 클래스에서적절한인터페이스를구현합니다.인터페이스는db-interfaces.jar파

일에정의되어있습니다.위표를참조하십시오.

3. 플러그인은어댑터의\META-INF폴더에있는plugins.txt 파일을사용하여구성됩니다.

다음은DDMi어댑터의파일을보여주는예입니다.

# mandatory plugin to sync full topology[getFullTopology]com.hp.ucmdb.adapters.ed.plugins.replication.EDReplicationPlugin# mandatory plugin to sync changes in topology[getChangesTopology]com.hp.ucmdb.adapters.ed.plugins.replication.EDReplicationPlugin# mandatory plugin to sync layout[getLayout]com.hp.ucmdb.adapters.ed.plugins.replication.EDReplicationPlugin# plugin to get supported queries in sync. If not defined return all tqlsnames[getSupportedQueries]# internal not mandatory plugin to change tql definition and tql result[getTopologyCmdbFormat]# internal not mandatory plugin to change layout request and CIs result[getCisLayout]# internal not mandatory plugin to change layout request and relationsresult[getRelationsLayout]# internal not mandatory plugin to change action on pushBackIds[pushBackIds]

범례:

# -주석줄.

[<어댑터유형>] – 특정어댑터유형의정의가시작되는섹션입니다.

각 [<어댑터유형>] 아래에빈줄을삽입해연관된플러그인클래스가없음을나타내거나플러

그인클래스의정규화된이름을나열할수있습니다.

4. 어댑터를새 jar파일및업데이트된plugins.xml파일로압축합니다.패키지의나머지파일은일

반DB어댑터에기반한어댑터의파일과같아야합니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 89/306 페이지

Page 90: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

어댑터배포

1. UCMDB에서패키지관리자에액세스합니다.자세한내용은HPUniversal CMDB관리안내서에서"패키지관리자페이지"를참조하십시오.

2. 서버에패키지배포(로컬디스크로부터)아이콘 을클릭하여어댑터패키지로이동합니다.패키지를선택하고열기를클릭한다음배포를클릭하여패키지관리자의패키지를표시합니

다.

3. 목록에서패키지를선택하고패키지리소스보기아이콘 을클릭하여패키지관리자가패키지컨텐츠를인식하는지확인합니다.

어댑터편집

어댑터를만들고배포하고나면UCMDB내에서편집할수있습니다.자세한내용은HPUniversalCMDB데이터흐름관리안내서에서"어댑터관리"를참조하십시오.

통합포인트만들기

이단계에서는연합이작동하는지확인합니다.즉,연결과XML파일이유효한지확인합니다.그러나

이확인작업으로는XML이RDBMS의올바른필드에매핑되는지는확인할수없습니다.

1. UCMDB에서통합스튜디오(데이터흐름관리 >통합스튜디오)에액세스합니다.

2. 통합포인트를만듭니다.자세한내용은HPUniversal CMDB데이터흐름관리안내서에서"새통합포인트/통합포인트편집대화상자"를참조하십시오.

이통합포인트를사용하여연합할수있는모든CIT가연합탭에표시됩니다.자세한내용은

HPUniversal CMDB데이터흐름관리안내서에서"연합탭"을참조하십시오.

보기만들기

이단계에서는CIT의인스턴스를볼수있는보기를만듭니다.

1. UCMDB에서모델링스튜디오(모델링>모델링스튜디오)에액세스합니다.

2. 보기를만듭니다.자세한내용은HPUniversal CMDB모델링안내서에서"패턴보기를만드는방법"를참조하십시오.

결과계산

이단계에서는결과를확인합니다.

1. UCMDB에서모델링스튜디오(모델링>모델링스튜디오)에액세스합니다.

2. 보기를엽니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 90/306 페이지

Page 91: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

3. 쿼리결과개수계산 버튼을클릭하여결과를계산합니다.

4. 미리보기버튼을클릭하여보기에서CI를봅니다.

결과보기

이단계에서는결과를보고절차의문제를디버깅합니다.예를들어보기에아무것도표시되지않으

면orm.xml 파일에서정의를확인하고관계특성을제거한다음어댑터를다시로드합니다.

1. UCMDB에서 IT 유니버스관리자에액세스합니다(모델링> IT 유니버스관리자).

2. CI를선택합니다.속성탭에연합의결과가표시됩니다.

보고서보기

이단계에서는토폴로지결과를봅니다.자세한내용은HPUniversal CMDB모델링안내서에서"토폴로지보고서개요"를참조하십시오.

로그파일사용

계산흐름,어댑터수명주기를이해하고디버그정보를보려면로그파일을참조하면됩니다.자세

한내용은"어댑터로그파일(136페이지)"을참조하십시오.

Eclipse를사용하여CIT 특성과데이터베이스테이블매핑

주의: 이절차는컨텐츠개발에관한고급지식을갖춘사용자를위해작성되었습니다.궁금한

사항은HP소프트웨어지원에문의하십시오.

이작업에서는다음기능을위해Eclipse J2EE에디션과함께제공되는JPA 플러그인을설치하고

사용하는방법을설명합니다.

l CMDB클래스특성과데이터베이스테이블열간에그래픽매핑을사용할수있습니다.

l 정확성을확인하는동시에매핑파일(orm.xml)을수동으로편집할수있습니다.정확성확인에는구문확인뿐아니라클래스특성및매핑된데이터베이스테이블열이올바르게표시되었는지

확인하는기능이포함됩니다.

l 상세한정확성확인기능으로,매핑파일을CMDB서버에배포하고오류를볼수있습니다.

l CMDB서버에서샘플쿼리를정의하고Eclipse에서직접실행하여매핑파일을테스트합니다.

플러그인의버전1.1은UCMDB버전9.01 이상과Eclipse IDE for Java EE Developers 버전

1.2.2.20100217-2310 이상과호환됩니다.

이작업에는다음단계가포함됩니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 91/306 페이지

Page 92: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "선행조건(92페이지)"

l "설치(92페이지)"

l "작업환경준비(93페이지)"

l "어댑터만들기(94페이지)"

l "CMDB플러그인구성(94페이지)"

l "UCMDB클래스모델가져오기(94페이지)"

l "ORM파일생성– UCMDB클래스를데이터베이스테이블에매핑(94페이지)"

l "ID 매핑(95페이지)"

l "특성매핑(95페이지)"

l "올바른링크매핑(95페이지)"

l "ORM파일생성–보조테이블사용(96페이지)"

l "보조테이블정의(96페이지)"

l "보조테이블에특성매핑(96페이지)"

l "기존ORM파일을기본으로사용(97페이지)"

l "어댑터에서기존ORM파일가져오기(97페이지)"

l "orm.xml 파일의정확성확인–내장된정확성확인기능(97페이지)"

l "새통합포인트만들기(97페이지)"

l "CMDB에ORM파일배포(98페이지)"

l "샘플TQL쿼리실행(98페이지)"

1. 선행조건

다음사이트에서Eclipse를실행할컴퓨터에Java Runtime Environment(JRE) 6의최신업데

이트를설치합니다.

해당제품은http://java.sun.com/javase/downloads/index.jsp사이트에서다운로드할수

있습니다.

2. 설치

a. Eclipse IDE for Java EE Developers를

http://www.eclipse.org/downloads에서로컬폴더(예:C:\Program Files\eclipse)

로다운로드하고압축을풉니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 92/306 페이지

Page 93: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

b. com.hp.plugin.import_cmdb_model_1.0.jar을

C:\hp\UCMDB\UCMDBServer\tools\db-adapter-eclipse-plugin\bin에서

C:\Program Files\Eclipse\plugins로복사합니다.

c. C:\Program Files\Eclipse\eclipse.exe를시작합니다. Java가상컴퓨터가없다는메

시지가표시되면다음명령줄을사용하여eclipse.exe를시작합니다.

"C:\Program Files\eclipse\eclipse.exe" -vm "<JRE 설치 폴더>\bin"

3. 작업환경준비

이단계에서는작업영역,데이터베이스,연결및드라이버속성을설정합니다.

a. workspaces_gdb.zip파일을C:\hp\UCMDB\

UCMDBServer\tools\db-adapter-eclipse-plugin\workspace에서

C:\Documents and Settings\All Users로압축을풉니다.

참고: 정확한폴더경로를사용해야합니다.파일의압축을잘못된경로에풀거나,압축

을풀지않은상태로두는경우절차가제대로수행되지않습니다.

b. Eclipse에서다음과같이File > Switch Workspace >Other를선택합니다.

사용하는제품에따라다음과같이선택합니다.

o SQL Server의경우C:\Documents and Settings\All Users\workspace_gdb_

sqlserver 폴더를선택합니다.

o MySQL의경우C:\Documents and Settings\All Users\workspace_gdb_mysql

폴더를선택합니다.

o Oracle의경우C:\Documents and Settings\All Users\workspace_gdb_oracle

폴더를선택합니다.

c. OK를클릭합니다.

d. Eclipse에서프로젝트탐색기보기를표시하고<활성 프로젝트> > JPA 컨텐츠>

persistence.xml > <활성프로젝트이름>> orm.xml을선택합니다.

e. Data Source Explorer보기(왼쪽아래창)에서데이터베이스연결을마우스오른쪽버튼으

로클릭하고Properties 메뉴를선택합니다.

f. Properties for <연결이름>대화상자에서Common을선택하고Connect every time

the workbench is started확인란을선택합니다.Driver Properties를선택하고연결속성

을입력합니다. Test Connection을클릭하고연결이잘되었는지확인합니다.OK를클릭

합니다.

g. Data Source Explorer보기에서데이터베이스연결을마우스오른쪽버튼으로클릭하고

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 93/306 페이지

Page 94: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

Connect를클릭합니다.데이터베이스연결아이콘아래에데이터베이스스키마및테이블

이포함된트리가표시됩니다.

4. 어댑터만들기

"1단계:어댑터만들기(26페이지)"에설명된지침에따라어댑터를만듭니다.

5. CMDB 플러그인구성

a. Eclipse에서UCMDB > Settings를클릭하여CMDB Settings대화상자를엽니다.

b. 활성프로젝트로새로만든JPA 프로젝트를아직선택하지않은경우선택합니다.

c. CMDB호스트이름(예 localhost또는 labm1.itdep1)을입력합니다.포트번호나 http://접두사는주소에포함할필요가없습니다.

d. CMDB API에액세스할수있는사용자이름과비밀번호(보통admin/admin)를입력합니

다.

e. CMDB서버의C:\hp폴더가네트워크드라이브로매핑되었는지확인합니다.

f. C:\hp아래에서관련어댑터의기본폴더를선택합니다.기본폴더는dbAdapter.jar 파일

및META-INF하위폴더가포함된폴더입니다.해당경로는

C:\hp\UCMDB\UCMDBServer\runtime\fcmdb\CodeBase\<adapter name>

이어야합니다.끝에백슬래시(\)가없어야합니다.

6. UCMDB 클래스모델가져오기

이단계에서는JPA 엔터티로매핑할CIT를선택합니다.

a. UCMDB >CMDB클래스모델가져오기를클릭하여CI 유형선택대화상자를엽니다.

b. JPA 엔터티로매핑할CI 유형을선택합니다.확인을클릭합니다.CI 유형은Java클래스로

가져옵니다.가져온내용이활성프로젝트의src 폴더아래에나타나는지확인합니다.

7. ORM파일생성 – UCMDB 클래스를데이터베이스테이블에매핑

이단계에서는이전단계에서가져온Java클래스를데이터베이스테이블에매핑합니다.

a. DB연결이연결되었는지확인합니다.프로젝트탐색기에서활성프로젝트(기본값:

myProject)를마우스오른쪽버튼으로클릭합니다. JPA 보기를선택하고연결에서기본스

키마다시정의확인란을선택한다음관련데이터베이스스키마를선택합니다.확인을클

릭합니다.

b. CIT를매핑합니다. JPA 구조보기에서엔터티매핑분기를마우스오른쪽버튼으로클릭하

고클래스추가를선택합니다.영구클래스추가대화상자가열립니다.매핑형식필드(엔터

티)는변경하지마십시오.

c. 찾아보기를클릭하고매핑할UCMDB클래스를선택합니다(모든UCMDB클래스는

generic_db_adapter 패키지에속함).

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 94/306 페이지

Page 95: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

d. 두대화상자에서모두확인을클릭합니다.선택한클래스가JPA 구조보기의엔터티매핑

분기에표시됩니다.

참고: 엔터티가특성트리없이표시되면프로젝트탐색기보기에서활성프로젝트를

마우스오른쪽버튼으로클릭합니다.닫기,열기를차례로선택합니다.

e. JPA 세부정보보기에서UCMDB클래스를매핑할기본데이터베이스테이블을선택합니

다.다른모든필드는변경하지마십시오.

8. ID 매핑

JPA 표준에따라각영구클래스에하나이상의 ID 특성이있어야합니다.UCMDB클래스의경

우최대3개의특성을 ID로매핑할수있습니다.잠재적 ID 특성을 id1, id2, id3이라고지칭합니

다.

ID 특성을매핑하려면다음을수행합니다.

a. JPA 구조보기의엔터티매핑분기아래에서해당클래스를확장하고관련특성(예: id1)을

마우스오른쪽버튼으로클릭한다음XML및맵에특성추가...를선택합니다.

b. 영구특성추가대화상자가열립니다.매핑형식필드에서 Id를선택하고확인을클릭합니

다.

c. JPA 세부정보보기에서 ID 필드를매핑할데이터베이스테이블열을선택합니다.

9. 특성매핑

이단계에서는특성을데이터베이스열에매핑합니다.

a. JPA 구조보기의엔터티매핑분기아래에서해당클래스를확장하고관련특성(예: host_

hostname)을마우스오른쪽버튼으로클릭한다음XML및맵에특성추가...를선택합니

다.

b. 영구특성추가대화상자가열립니다.매핑형식필드에서기본을선택하고확인을클릭합

니다.

c. JPA 세부정보보기에서특성필드를매핑할데이터베이스테이블열을선택합니다.

10. 올바른링크매핑

"ORM파일생성– UCMDB클래스를데이터베이스테이블에매핑(94페이지)"단계에설명된

UCMDB클래스매핑단계를수행하여올바른링크를표시합니다.그러한각클래스의이름은

<end1 엔터티이름>_<링크이름>_<end 2 엔터티이름>구조로되어있습니다.예를들어호

스트와위치사이의포함링크는generic_db_adapter.host_contains_location이라는Java

클래스로표시됩니다.자세한내용은"reconciliation_rules.txt 파일(이전버전과의호환용)

(116페이지)"을참조하십시오.

a. 링크클래스의 ID 특성을 "ID 매핑(95페이지)"에설명된대로매핑합니다.각 ID 특성에대

해, JPA 세부정보보기에서세부정보확인란그룹을확장하고삽입가능및업데이트가능

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 95/306 페이지

Page 96: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

확인란의선택을취소합니다.

b. 링크클래스의end1 및end2 특성을다음과같이매핑합니다.링크클래스의각end1 및

end2 특성의경우:

o JPA 구조보기의엔터티매핑분기아래에서해당클래스를확장하고관련특성(예:

end1)을마우스오른쪽버튼으로클릭한다음XML및맵에특성추가...를선택합니다.

o 영구특성추가대화상자의매핑형식필드에서다대일또는일대일을선택합니다.

o 지정된end1 또는end2 CI에이유형의링크를여러개포함할수있는경우다대일을선

택합니다.그렇지않은경우일대일을선택합니다.예를들어host_contains_ip링크의

경우호스트하나는여러개의 IP를포함할수있어야하므로host끝은다대일로매핑하

고, IP하나는호스트를하나만포함할수있으므로 ip끝은일대일로매핑해야합니다.

o JPA 세부정보보기에서대상엔터티(예: generic_db_adapter.host)를선택합니다.

o JPA 세부정보보기의조인열섹션에서기본값다시정의를선택합니다.편집을클릭합

니다.조인열편집대화상자에서end1/end2 대상엔터티테이블의항목을가리키는링

크데이터베이스테이블의외래키열을선택합니다. end1/end2 대상엔터티테이블에

서참조되는열이름이해당 ID 특성에매핑되어있는경우참조되는열이름을변경하지

않고그대로두십시오.그렇지않으면외래키열이가리킬열이름을선택합니다.삽입

가능및업데이트가능확인란의선택을취소하고확인을클릭합니다.

o end1/end2 대상엔터티에둘이상의 ID가있으면추가버튼을클릭하여조인열을더추

가하고이전단계에설명된방법과동일하게이러한열을매핑합니다.

11. ORM파일생성 –보조테이블사용

JPA를사용하면Java클래스하나를둘이상의데이터베이스테이블에매핑할수있습니다.예

를들어Host를Device 테이블에매핑하여해당특성대부분이지속되도록설정하고,

NetworkNames테이블에매핑하여host_hostName이지속되도록설정할수있습니다.이경

우Device는기본테이블이고NetworkNames는보조테이블입니다.보조테이블은원하는수

만큼정의할수있습니다.유일한조건은기본테이블과보조테이블의항목간에일대일관계가

있어야한다는점입니다.

12. 보조테이블정의

JPA 구조보기에서적절한클래스를선택합니다. JPA 세부정보보기에서보조테이블섹션에

액세스한다음추가를클릭합니다.보조테이블추가대화상자에서적절한보조테이블을선택

합니다.다른필드는변경하지마십시오.

기본테이블과보조테이블에동일한기본키가없으면JPA 세부정보보기의기본키조인열

섹션에서조인열을구성합니다.

13. 보조테이블에특성매핑

클래스특성을다음과같이보조테이블의필드에매핑합니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 96/306 페이지

Page 97: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

a. "특성매핑(95페이지)"에설명된대로특성을매핑합니다.

b. JPA 세부정보보기의열섹션에있는테이블필드에서보조테이블이름을선택하여기본

값을바꿉니다.

14. 기존ORM파일을기본으로사용

기존orm.xml 파일을개발중인프로젝트의기본으로사용하려면다음단계를수행합니다.

a. 기존orm.xml 파일에매핑된모든CIT를활성Eclipse 프로젝트로가져왔는지확인합니다.

b. 기존파일에서엔터티매핑의일부또는전부를선택하고복사합니다.

c. Eclipse JPA 관점에서orm.xml 파일의원본탭을선택합니다.

d. 복사한모든엔터티매핑을편집한orm.xml 파일의<entity-mappings>태그아래에있는

<schema>태그밑에붙여넣습니다. schema태그를 "ORM파일생성– UCMDB클래스

를데이터베이스테이블에매핑(94페이지)"단계에설명된대로구성했는지확인하십시오.

붙여넣은모든엔터티가이제JPA 구조보기에표시됩니다.이제부터는orm.xml 파일의

xml코드를통해그래픽방식으로그리고수동으로모두매핑을편집할수있습니다.

e. 저장을클릭합니다.

15. 어댑터에서기존ORM파일가져오기

어댑터가이미있는경우Eclipse 플러그인을사용하여어댑터의ORM파일을그래픽방식으로

편집할수있습니다. orm.xml 파일을Eclipse로가져와플러그인을사용하여편집한다음다시

UCMDB컴퓨터에배포합니다.ORM파일을가져오려면Eclipse 도구모음에서버튼을누릅니

다.확인대화상자가표시됩니다.확인을클릭합니다.ORM파일이UCMDB컴퓨터에서활성

Eclipse 프로젝트로복사되고UCMDB클래스모델에서모든관련클래스를가져옵니다.

JPA 구조보기에관련클래스가표시되지않으면프로젝트탐색기보기에서활성프로젝트를

마우스오른쪽버튼으로클릭하고닫기를선택한다음열기를선택합니다.

지금부터Eclipse를사용하여그래픽방식으로ORM파일을편집한다음"CMDB에ORM파일

배포(98페이지)"에설명된대로다시UCMDB컴퓨터에배포할수있습니다.

16. orm.xml 파일의정확성확인 –내장된정확성확인기능

Eclipse JPA 플러그인은orm.xml 파일에오류가있는지확인하고오류를표시합니다.구문오

류(예:잘못된태그이름,닫히지않은태그,누락된 ID)와매핑오류(예:잘못된특성이름또는

데이터베이스테이블필드이름)를모두확인합니다.오류가있는경우문제보기에오류에대한

설명이표시됩니다.

17. 새통합포인트만들기

이어댑터의CMDB에통합포인트가없는경우통합스튜디오에서만들수있습니다.자세한내

용은HPUniversal CMDB데이터흐름관리안내서에서 Integration Studio를참조하십시오.

열리는대화상자에서통합포인트이름을입력합니다. orm.xml 파일이어댑터폴더로복사됩

니다.가져온모든CI 유형을지원되는클래스로사용하여통합포인트가만들어집니다.단,

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 97/306 페이지

Page 98: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

reconciliation_rules.txt 파일에서multinode CIT를구성한경우이CIT는제외됩니다.자세한

내용은"reconciliation_rules.txt 파일(이전버전과의호환용)(116페이지)"을참조하십시오.

18. CMDB에 ORM파일배포

orm.xml 파일을저장하고UCMDB >ORM배포를클릭하여이파일을UCMDB서버에배포합

니다. orm.xml 파일이어댑터폴더로복사되고어댑터가다시로드됩니다.작업결과가작업결

과대화상자에표시됩니다.다시로드프로세스중에오류가발생하면Java예외스택추적이

대화상자에표시됩니다.아직어댑터를사용하여통합포인트를정의하지않은경우배포할때

매핑오류가감지되지않습니다.

19. 샘플 TQL 쿼리실행

a. 모델링스튜디오에서쿼리(보기가아님)를정의합니다.자세한내용은HPUniversalCMDB모델링안내서에서Modeling Studio를참조하십시오.

b. "새통합포인트만들기(97페이지)"단계에서만든어댑터를사용하여통합포인트를만듭

니다.자세한내용은HPUniversal CMDB데이터흐름관리안내서에서"새통합포인트/통합포인트편집대화상자"를참조하십시오.

c. 어댑터를만드는동안쿼리에사용해야하는CI 유형이이통합포인트에서지원되는지확

인합니다.

d. CMDB플러그인을구성할때설정대화상자에서이샘플쿼리이름을사용하십시오.자세

한내용은위의"CMDB플러그인구성(94페이지)"단계를참조하십시오.

e. TWL실행버튼을클릭하여샘플TQL을실행하고새로만든orm.xml 파일을사용하여필요

한결과를반환하는지확인합니다.

어댑터구성파일

이섹션에서논의할파일은C:\hp\UCMDB\UCMDBServer\content\adapters 폴더의db-

adapter.zip 패키지에있습니다.

이섹션에서는다음구성파일에대해설명합니다.

l "adapter.conf 파일(100페이지)"

l "simplifiedConfiguration.xml 파일(101페이지)"

l "orm.xml 파일(103페이지)"

l "reconciliation_types.txt 파일(116페이지)"

l "reconciliation_rules.txt 파일(이전버전과의호환용)(116페이지)"

l "transformations.txt 파일(118페이지)"

l "discriminator.properties 파일(119페이지)"

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 98/306 페이지

Page 99: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "replication_config.txt 파일(120페이지)"

l "fixed_values.txt 파일(120페이지)"

l "Persistence.xml 파일(120페이지)"

일반구성

l adapter.conf. 어댑터구성파일입니다.자세한내용은"adapter.conf 파일(100페이지)"을참

조하십시오.

간단한구성

l simplifiedConfiguration.xml. orm.xml, transformations.txt, reconciliation_rules.txt를기

능이더적은파일로바꾸는구성파일입니다.자세한내용은"simplifiedConfiguration.xml 파일

(101페이지)"을참조하십시오.

고급구성

l orm.xml. CMDB CIT와데이터베이스테이블간을매핑한개체-관계매핑파일입니다.자세한

내용은"orm.xml 파일(103페이지)"을참조하십시오.

l reconciliation_rules.txt.조정규칙이포함되어있습니다.자세한내용은"reconciliation_

rules.txt 파일(이전버전과의호환용)(116페이지)"을참조하십시오.

l transformations.txt.CMDB값에서데이터베이스값으로변환하거나그반대로변환하는데적

용할변환기를지정하는변환파일입니다.자세한내용은"transformations.txt 파일(118페이지)

"을참조하십시오.

l Discriminator.properties. 이파일은지원되는각CI 유형을가능한해당값목록(쉼표로구분

된목록)에매핑합니다.자세한내용은"discriminator.properties 파일(119페이지)"을참조하십

시오.

l Replication_config.txt. 이파일은쉼표로구분된CI 목록과,해당속성조건이복제플러그인을

통해지원되는관계유형을포함합니다.자세한내용은"replication_config.txt 파일(120페이

지)"을참조하십시오.

l Fixed_values.txt.이파일을사용하면특정CIT의특정특성에대해고정값을구성할수있습니

다.자세한내용은"fixed_values.txt 파일(120페이지)"을참조하십시오.

Hibernate 구성

l persistence.xml. 기본Hibernate 구성을다시정의하는데사용됩니다.자세한내용은

"Persistence.xml 파일(120페이지)"을참조하십시오.

어댑터에대한임시테이블지원사용

임시테이블을사용하도록설정하면어댑터가원격데이터베이스와더효율적으로작동하여데이터

베이스와네트워크에대한로드를줄이고성능을향상할수있습니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 99/306 페이지

Page 100: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

일반데이터베이스어댑터에서임시테이블지원을사용하도록설정하려면다음조건을충족해야

합니다.

l 데이터베이스에연결하기위해제공된자격증명은임시테이블을만들고,수정하고,삭제할수

있는권한을포함해야합니다.

l adapter.conf 구성파일에서다음설정을구성하십시오.

temp.tables.enabled=true

performance.enable.single.sql=true

참고: 임시테이블은Microsoft SQL및Oracle용으로만지원됩니다.

adapter.conf 파일

이파일에는다음설정이포함됩니다.

l use.simplified.xml.config=false.true: simplifiedConfiguration.xml을사용합니다.

참고: 이파일은 orm.xml, transformations.txt, reconciliation_rules.txt를기능이더적은파일로바꾸는데사용합니다.

l dal.ids.chunk.size=300. 이값을변경하지마십시오.

l dal.use.persistence.xml=false. true:어댑터가 persistence.xml에서Hibernate 구성을읽습니다.

참고: Hibernate 구성을다시정의하지않는것이좋습니다.

l performance.memory.id.filtering=true. GDBA가TQLS를실행할때,많은수의 ID가검색되

어SQL을사용하여데이터베이스로다시전송해야하는경우가있습니다.이러한과도한작업을

방지하고성능을향상시키기위해GDBA는전체보기/테이블을읽고메모리내의결과를필터링

합니다.

l id.reconciliation.cmdb.id.type=string/bytes. ID 조정을사용하여일반DB어댑터를매핑할

때META-INF/ adapter.conf 속성을변경하여cmdb_id를 string또는bytes/raw열유형에매

핑할수있습니다.

l performance.enable.single.sql=true.이매개변수는선택사항입니다.이매개변수가파일

에나타나지않으면기본값이 true입니다. true로설정된경우,일반데이터베이스어댑터는실행

중인각쿼리(채우기또는연합쿼리중하나)에대해단일SQL문을생성합니다.단일SQL문을

사용하면일반데이터베이스어댑터의성능과메모리사용률이향상됩니다. false로설정된경

우,일반데이터베이스어댑터는다중SQL문을생성하며단일SQL문을생성할때보다소요되

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 100/306 페이지

Page 101: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

는시간과메모리가많을수있습니다.다음과같은시나리오에서는이특성이 true로설정되어도

어댑터가단일SQL문을생성하지않습니다.

n 어댑터가연결되어있는데이터베이스가Oracle 또는SQL Server가아닐경우

n 실행되는TQL에0..* 및 1..* 이외의카디널리티조건이포함된경우(예: 2..* 또는0..2 카디널

리티조건이있는경우)

l in.expression.size.limit=950(기본값).이매개변수는인수목록의크기제한에도달하면실행

된SQL의 'IN' 식을분할합니다.

l stringlist.delimiter.of.<CIT 이름>.<특성이름>=<구분기호>.문자열목록특성을일반데이터

베이스어댑터의데이터베이스열에매핑하려면연결된값목록이포함된문자열열에특성을매

핑해야합니다.예를들어CI 유형이policy인policy_category 특성을매핑하려는경우문자열

열에value1, value2, value3 등세가지값의목록을정의하는value1##value2##value3 값

목록이포함되어있으면stringlist.delimiter.of.policy.policy_category=##설정을사용합니

다.

l temp.tables.enabled=true.성능향상을위해임시테이블을사용하도록설정합니다.

performance.enable.single.sql이사용되도록설정된경우에만사용할수있습니다

(Microsoft SQL및Oracle에서만지원됨).데이터베이스서버에서일부권한이필요할수있습니

다.

l temp.tables.min.value=50.임시테이블을사용하는데필요한조건값(또는 ID)의수를정의

합니다.

simplifiedConfiguration.xml 파일

이파일은UCMDB클래스를데이터베이스테이블에간단히매핑하는데사용됩니다.파일편집에

필요한템플릿에액세스하려면어댑터관리 > db-adapter >구성파일로이동합니다.

이섹션에는다음항목이포함됩니다.

l "simplifiedConfiguration.xml 파일템플릿(101페이지)"

l "제한(103페이지)"

simplifiedConfiguration.xml 파일템플릿

l CMDB-class-name 속성은다음과같은multinode 유형(TQL에서연합CIT를연결할노드)입

니다.

<?xml version="1.0" encoding="UTF-8"?><generic-DB-adapter-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../META-CONF/simplifiedConfiguration.xsd">    <CMDB-class CMDB-class-name="node" default-table-name="[table_name]">        <primary-key column-name="[column_name]"/>

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 101/306 페이지

Page 102: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l reconciliation-by-two-nodes.하나또는두개의노드를사용하여조정을수행할수있습니

다.이예에서는두개의노드를사용하여조정합니다.

l connected-node-CMDB-class-name. 조정TQL에필요한두번째클래스유형입니다.

l CMDB-link-type. 조정TQL에필요한관계유형입니다.

l link-direction. 조정TQL의관계방향입니다(node에서 ip_address로의방향또는 ip_address에서 node로의방향).

<reconciliation-by-two-nodes connected-node-CMDB-class-name="ip_address" CMDB-link-type="containment" link-direction="main-to-connected">

조정식은OR식의형태이고각OR식에는AND식이포함됩니다.

l is-ordered. 조정을순서형태로수행할지아니면일반 OR비교를통해수행할지결정합니다.

<or is-ordered="true">

조정속성이기본클래스(multinode)에서검색되는경우attribute 태그를사용하고,그렇지않으

면connected-node-attribute 태그를사용합니다.

l ignore-case.true: UCMDB클래스모델의데이터를RDBMS의데이터와비교할때대/소문자

는구분하지않습니다.

<attribute CMDB-attribute-name="name" column-name="[column_name]" ignore-case="true"/>

열이름은외래키열(multinode 기본키열을가리키는값이있는열)의이름입니다.

multinode 기본키열이여러개의열로구성된경우외래키열도각기본키열에하나씩여러개

가필요합니다.

<foreign-primary-key column-name="[column_name]" CMDB-class-primary-key-column="[column_name]"/>

기본키열이거의없으면이열을복제합니다.

<primary-key column-name="[column_name]"/>

l from-CMDB-converter 및 to-CMDB-converter 속성은다음인터페이스를구현하는Java

클래스입니다.

n com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.FcmdbDalTransformerFromExternalDB

n com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.FcmdbDalTransformerToExternalDB

CMDB및데이터베이스의값이서로다른경우이러한변환기를사용합니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 102/306 페이지

Page 103: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이예에서는괄호안에기록된XML파일(generic-enum-transformer-example.xml)에따라열거자를변환하는데 GenericEnumTransformer를사용합니다.

<attribute CMDB-attribute-name="[CMDB_attribute_name]" column-name="[column_name]" from-CMDB-converter="com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl. GenericEnumTransformer(generic-enum-transformer-example.xml)" to-CMDB-onverter="com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.GenericEnumTransformer(generic-enum-transformer-example.xml)" />

<attribute CMDB-attribute-name="[CMDB_attribute_name]" column-name="[column_name]" />

<attribute CMDB-attribute-name="[CMDB_attribute_name]" column-name="[column_name]" />

</class>

</generic-DB-adapter-config>

제한

l 데이터베이스원본의단일노드를포함하는TQL쿼리만매핑하는데사용할수있습니다.예를

들어 node > ticket및 ticket TQL쿼리를실행할수있습니다.데이터베이스에서노드의계층구조를가져오려면고급orm.xml 파일을사용해야합니다.

l 일대다관계만지원됩니다.예를들어각노드에서하나이상의티켓을가져올수있습니다.둘이

상의노드에속한티켓은가져올수없습니다.

l 동일한클래스를서로다른유형의CMDB CIT에연결할수없습니다.예를들어 ticket을 node에연결하도록정의하면어플리케이션에도연결할수없습니다.

orm.xml 파일

이파일은CMDB CIT를데이터베이스테이블에매핑하는데사용됩니다.

새파일을만드는데사용할템플릿은

C:\hp\UCMDB\

UCMDBServer\runtime\fcmdb\CodeBase\GenericDBAdapter\META-INF디렉터리에

있습니다.

배포된어댑터의XML파일을편집하려면어댑터관리 > db-adapter >구성파일로이동합니다.

이섹션에는다음항목이포함됩니다.

l "orm.xml 파일템플릿(104페이지)"

l "다중ORM파일(107페이지)"

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 103/306 페이지

Page 104: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "이름지정규칙(107페이지)"

l "테이블이름대신인라인SQL문사용(107페이지)"

l "orm.xml 스키마(108페이지)"

l "orm.xml 파일만들기의예(112페이지)"

l "각원격제품버전에대해특정orm.xml 구성(115페이지)"

orm.xml 파일템플릿

<?xml version="1.0" encoding="UTF-8"?><entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/ormhttp://java.sun.com/xml/ns/persistence/orm_1_0.xsd">    <description>Generic DB adapter orm</description>

패키지이름은변경하지마십시오.

    <package>generic_db_adapter</package>

entity. CMDB CIT의이름이며,multinode 엔터티입니다.

class에는generic_db_adapter 접두사를포함해야합니다.

    <entity class="generic_db_adapter.node">        <table name="[table_name]" />

엔터티가두개이상의테이블에매핑된경우보조테이블을사용합니다.

        <secondary-table name="" />        <attributes>

판별자가있는단일테이블상속의경우다음코드를사용합니다.

        <inheritance strategy="SINGLE_TABLE" />        <discriminator-value>node</discriminator-value>        <discriminator-column name="[column_name]" />

id 태그가있는특성은기본키열입니다.이러한기본키열의이름지정규칙이 idX(id1, id2 등)인지

확인합니다.여기서X는기본키의열인덱스입니다.

            <id name="id1">

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 104/306 페이지

Page 105: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

기본키의열이름만변경합니다.

                <column updatable="false" insertable="false" name="[column_name]" />                <generated-value strategy="TABLE"/>            </id>

basic. CMDB특성을선언하는데사용됩니다. name 및column_name 속성만편집해야합니다.

            <basic name="name">                <column updatable="false" insertable="false" name="[column_name]" />            </basic>

판별자가있는단일테이블상속의경우다음과같이확장클래스를매핑합니다.

    <entity name="[cmdb_class_name]" class="generic_db_adapter.nt" name="nt">

        <discriminator-value>nt        </discriminator-value>        <attributes>    </entity>    <entity class="generic_db_adapter.unix" name="unix">        <discriminator-value>unix</discriminator-value>        <attributes>    </entity>    <entity name="[CMDB_class_name]" class="generic_db_adapter.[CMDB[cmdb_class_name]">        <table name="[default_table_name]" />        <secondary-table name="" />        <attributes>            <id name="id1">                <column updatable="false" insertable="false" name="[column_name]" />                <generated-value strategy="TABLE"/>            </id>            <id name="id2">                <column updatable="false" insertable="false" name="[column_name]" />                <generated-value strategy="TABLE"/>            </id>            <id name="id3">                <column updatable="false" insertable="false" name="[column_name]" />                <generated-value strategy="TABLE"/>            </id>

다음예는접두사없이CMDB특성이름을보여줍니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 105/306 페이지

Page 106: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

            <basic name="[CMDB_attribute_name]">                <column updatable="false" insertable="false" name="[column_name]" />            </basic>            <basic name="[CMDB_attribute_name]">                <column updatable="false" insertable="false" name="[column_name]" />            </basic>            <basic name="[CMDB_attribute_name]">                <column updatable="false" insertable="false" name="[column_name]" />            </basic>        </attributes>    </entity>

관계엔터티이며,이름지정규칙은end1Type_linkType_end2Type입니다.이예에서end1Type

은node이고 linkType은composition입니다.

    <entity name="node_composition_[CMDB_class_name]" class="generic_db_adapter.node_composition_[CMDB_class_name]">        <table name="[default_table_name]" />        <attributes>            <id name="id1">                <column updatable="false" insertable="false" name="[column_name]" />                <generated-value strategy="TABLE"/>            </id>

대상엔터티는이속성이가리키는엔터티입니다.이예에서end1은node 엔터티에매핑됩니다.

many-to-one.여러관계를하나의노드에연결할수있습니다.

join-column.end1 ID(대상엔터티 ID)가포함된열입니다.

referenced-column-name. 조인열에사용되는 ID가포함된대상엔터티의열이름(node)입니

다.

            <many-to-one target-entity="node" name="end1">                <join-column updatable="false" insertable="false" referenced-column-name="[column_name]" name="[column_name]" />            </many-to-one>

one-to-one. 하나의관계를하나의[CMDB_class_name]에연결할수있습니다.

            <one-to-one target-entity="[CMDB_class_name]" name="end2">                <join-column updatable="false" insertable="false" referenced-column-name="" name="[column_name]" />

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 106/306 페이지

Page 107: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

            </one-to-one>        </attributes>    </entity></entity-mappings>

node attribute.노드특성추가방법에대한예입니다.

<entity class="generic_db_adapter.host_node">

<discriminator-value>host_node</discriminator-value>

<attributes/>

</entity>

<entity class="generic_db_adapter.nt">

<discriminator-value>nt</discriminator-value>

<attributes>

<basic name="nt_servicepack">

<column updatable="false" insertable="false" name="specific_type_value"/>

</basic>

</attributes>

</entity>

다중ORM파일

다중매핑파일이지원됩니다.각매핑파일이름은orm.xml로끝나야합니다.모든매핑파일은어

댑터의META-INF폴더아래에배치되어있습니다.

이름지정규칙

l 각엔터티에서클래스속성은 generic_db_adapter의접두사가포함된이름속성과일치해야합니다.

l 기본키열은 idX형식의이름을사용해야합니다.여기서X는테이블의기본키번호에따라1, 2,

...입니다.

l 특성이름은클래스특성이름과일치해야하며대/소문자도같아야합니다.

l 관계이름은 end1Type_linkType_end2Type형식입니다.

l Java에서예약어이기도한CMDB CIT는gdba_라는접두사를포함해야합니다.예를들어

CMDB CIT goto의경우ORM엔터티의이름은gdba_goto여야합니다.

테이블이름대신인라인 SQL 문사용

엔터티를데이터베이스테이블대신인라인 select절에매핑할수있습니다.이매핑은데이터베이

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 107/306 페이지

Page 108: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

스에서보기를정의하고엔터티를이보기에매핑하는것과같습니다.예:

    <entity class="generic_db_adapter.node">        <table name="(select d.id as id1, d.name as name , d.os as host_osfromDevice d)" />

이예에서노드특성은 id, name 및os가아니라columns id1, name 및host_os에매핑되어야합

니다.

다음제한이적용됩니다.

l 인라인SQL문은Hibernate를 JPA 공급자로사용하는경우에만사용할수있습니다.

l 인라인SQL select절은반드시둥근괄호안에포함해야합니다.

l <schema>요소는orm.xml 파일에표시되지않아야합니다.Microsoft SQL Server 2005의경

우이는 <schema>dbo</schema>를사용하여전체적으로테이블이름을정의하지않고모든테이블이름에 dbo.라는접두사를추가해야함을의미합니다.

orm.xml 스키마

다음표에는orm.xml 파일의공통요소가설명되어있습니다.전체스키마는

http://java.sun.com/xml/ns/persistence/orm_1_0.xsd에서볼수있습니다.이목록은완벽하지

않지만일반데이터베이스어댑터용표준Java Persistence API의특정동작이대부분설명되어있

습니다.

요소이름및경로 설명 특성

entity-mappings 엔터티매핑문서의루트요소입

니다.이요소는GDBA 샘플파

일에주어진요소와같아야합니

다.

description (entity-

mappings)

엔터티매핑문서에대한자유로

운텍스트설명입니다(선택사

항).

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 108/306 페이지

Page 109: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

package (entity-

mappings)

매핑클래스를포함할Java패키

지의이름입니다.항상

generic_db_adapter텍스트를포함해야합니다.

1. 이름: name

설명: 이엔터티를매핑할

UCMDB CI 유형의이름입니다.

CMDB의링크에매핑된엔터티

인경우이엔터티의이름은<end_1>_<link_name>_<end_2>형식이어야합니다.예를들어 node_composition_cpu는노드와CPU간의composition 링크에매핑할엔터

티를정의합니다.CI 유형의이름

이패키지접두사가없는Java클

래스의이름과같으면이필드를

생략할수있습니다.

필수여부: 선택적

유형: 문자열

2. 이름: class

설명: 이DB엔터티에대해만들

Java클래스의정규화된이름입

니다. Java클래스의패키지이름

은 package요소에주어진이름과같아야합니다.클래스이름으

로Java예약어(예:인터페이스

또는스위치)는사용할수없습니

다.대신 gdba_라는접두사를이름에추가합니다(따라서인터페

이스는generic_db_adapter.gdba_interface가됨).

필수여부: 필수

유형: 문자열

table

(entity-mappings >

entity)

이요소는DB엔터티의기본테

이블을정의합니다.한번만표시

될수있습니다.필수항목입니

다.

이름: name

설명: 기본테이블의이름입니다.테

이블이름에테이블이속하는스키마

가포함되어있지않으면통합포인트

를만드는데사용된사용자의스키마

에서만테이블을검색합니다.이는유

효한SELECT문일수도있습니다.

SELECT 문인경우에는괄호로캡슐

화해야합니다.

필수여부: 필수

유형: 문자열

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 109/306 페이지

Page 110: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

secondary-table

(entity-mappings >

entity)

이요소는DB엔터티의보조테

이블을정의하는데사용할수있

습니다.이테이블은기본테이블

에일대일관계로연결해야합니

다.보조테이블을둘이상정의

할수있으며,선택사항입니다.

이름: name

설명: 보조테이블의이름입니다.테

이블이름에테이블이속하는스키마

가포함되어있지않으면통합포인트

를만드는데사용된사용자의스키마

에서만테이블을검색합니다.이는유

효한SELECT문일수도있습니다.

SELECT 문인경우에는괄호로캡슐

화해야합니다.

필수여부: 필수

유형: 문자열

primary-key-join-

column

(entity-mappings >

entity >

secondary-table )

이름이같은필드를사용하여보

조테이블과기본테이블을연결

하지않으면이요소는기본테이

블의기본키필드에연결해야하

는보조테이블의기본키필드

이름을정의합니다.

이름: name

설명: 보조테이블의기본키필드이

름입니다.이요소가없으면기본키

필드이름이기본테이블의기본키필

드이름과같다고간주합니다.

필수여부: 선택적

유형: 문자열

inheritance

(entity-mappings >

entity)

현재엔터티가DB엔터티패밀

리의상위엔터티인경우이요소

를사용하여해당상위엔터티로

표시하며,선택사항입니다.

이름: strategy

설명: DB에서상속을구현하는방법

을정의합니다.

필수여부: 필수

유형: 다음값중하나입니다.

l SINGLE_TABLE:이엔터티와모

든하위엔터티가같은테이블에있

습니다.

l JOINED:하위엔터티가조인된테

이블에있습니다.

l TABLE_PER_CLASS:각엔터티가

완전히별도의테이블에정의되어

있습니다.

discriminator-

column

(entity-mappings >

entity)

상속이SINGLE_TABLE유형인

경우이요소를사용하여각행의

엔터티유형을확인하는데사용

되는필드의이름을정의합니다.

이름: name

설명: 판별자열의이름입니다.

필수여부: 필수

유형: 문자열

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 110/306 페이지

Page 111: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

discriminator-value

(entity-mappings >

entity)

이요소는상속트리의특정엔터

티유형을정의합니다.이이름은

이특정엔터티유형의값그룹에

대해discriminator.properties

파일에정의된이름과같아야합

니다.

attributes

(entity-mappings >

entity)

엔터티에대한모든특성매핑의

루트요소입니다.

id

(entity-mappings >

entity attributes)

이요소는엔터티의키필드를정

의합니다.하나이상의 id필드를

정의해야합니다. id요소가둘이

상있으면해당필드가엔터티에

대한복합키를만듭니다.링크가

아닌CI 엔터티에대한복합키는

피해야합니다.

이름: name

설명: idX유형의문자열입니다.여기

서X는1부터9까지의숫자입니다.첫

번째 id는 id1,두번째는 id2 등으로

표시합니다.UCMDB의키특성이름

은아닙니다.

필수여부: 필수

유형: 문자열

basic

(entity-mappings >

entity attributes)

이요소는테이블의기본키에는

포함되지않는테이블의필드와

UCMDB특성간매핑을정의합

니다.

이름: name

설명: 이필드를매핑할UCMDB특성

의이름입니다.이특성은현재엔터티

를매핑할UCMDB CI 유형에있어야

합니다.

필수여부: 필수

유형: 문자열

column

(entity-mappings >

entity > attributes

>id

-또는-

(entity-mappings >

entity > attributes >

basic)

기본매핑또는 id필드에대한테

이블의열이름을정의합니다.

1. 이름: name

설명: 필드의이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: table

설명: 필드가속하는테이블의이

름입니다.이테이블이름은엔터

티에대해정의된기본테이블이

거나보조테이블중하나여야합

니다.이특성이생략되면해당필

드가기본테이블에속하는것으

로간주됩니다.

필수여부: 선택적

유형: 문자열

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 111/306 페이지

Page 112: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

one-to-one

(entity-mappings >

entity > attributes)

값이다른테이블에있는열을정

의하고,두테이블을일대일관계

를사용하여연결합니다.이요소

는링크엔터티매핑에대해서만

지원되고다른CI 유형에대해서

는지원되지않습니다.이요소는

테이블과UCMDB링크간의매

핑을정의하는유일한방법입니

다.

1. 이름: name

설명: 이필드가나타내는양끝중

하나입니다.

필수여부: 필수

유형:end1또는 end2

2. 이름: target-entity

설명: 끝이참조할엔터티의이름

입니다.

필수여부: 필수

유형: 엔터티매핑문서에정의된

엔터티이름중하나입니다.

join-column

(entity-mappings >

entity attributes >

one-to-one)

상위일대일요소에정의된대

상-엔터티와현재엔터티를조인

하는방법을정의합니다.

1. 이름: name

설명: 현재테이블에서일대일조

인을수행하는데사용할필드의

이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: name

설명: 조인을수행할기준이되는

조인트엔터티의필드이름입니

다.이특성을생략하면조인트테

이블에이름특성에서정의된필

드와이름이같은열이있는것으

로간주합니다.

필수여부: 선택적

유형: 문자열

orm.xml 파일만들기의예

여기에제시된예에서는orm.xml 파일을만드는방법을보여줍니다.이예에서는원격데이터베이

스의SQL테이블이UCMDB의CI 유형에매핑됩니다.

원격데이터베이스에서다음과같은형식의테이블에서노드로Hosts 테이블을채우고, IP주소로

IP_Addresses테이블을채운후,다음과같이노드와 IP주소간에링크를만듭니다.

Hosts 테이블

host_name host_id

Test1 1

Test2 2

Test3 3

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 112/306 페이지

Page 113: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

IP_Addresses테이블

ip_address ip_id

10.1.1.1 1

10.2.2.2 2

10.3.3.2 3

10.4.4.4 4

Host_IP_Link 테이블(노드와 IP 주소사이의링크)

host_id ip_id

1 1

2 2

2 3

3 4

Hosts 테이블의기본키는host_id필드이며 IP_Addresses Table 테이블의기본키는 ip_id필드

입니다.Host_IP_Link 테이블에서host_id와 ip_id는Hosts Table 및 IP_Addresses Table의외래

키입니다.

위의테이블에따라다음단계를수행하여orm.xml 파일을만듭니다.이예에서사용되는엔터티는

node, ip_address및node_containment_ip_address입니다.

1. 다음과같이Hosts 테이블에서host_id를매핑하여node 엔터티를만듭니다.

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">

<description>test_integration</description>

<package>generic_db_adapter</package>

<entity class="generic_db_adapter.node">

<table name="Hosts"/>

<attributes>

<id name="id1">

<column updatable="false" insertable="false" name="host_id"/>

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 113/306 페이지

Page 114: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<generated-value strategy="TABLE"/>

</id>

<basic name="name">

<column updatable="false" insertable="false" name="host_name"/>

</basic>

</attributes>

</entity>

엔터티class는UCMDB에이미있는CI 유형이어야합니다.테이블name은 ID와호스트정보

를모두포함하는데이터베이스내의테이블입니다. ID 특성은특정호스트를식별하는데필요

하며나중에매핑에사용됩니다.이예에서이엔터티의name 특성에는Hosts 테이블의host_

name 열내용을채웁니다.

2. 다음엔터티에서는인터페이스테이블에서 IP주소를매핑합니다.

<entity name="ip_address" class="generic_db_adapter.ip_address">

<table name="IP_Addresses"/>

<attributes>

<id name="id1">

<column insertable="false" updatable="false" name="ip_id"/>

<generated-value strategy="TABLE"/>

</id>

<basic name="name">

<column updatable="false" insertable="false" name="ip_address"/>

</basic>

</attributes>

</entity>

3. 다음으로는매핑테이블을사용하고 ip_id필드를참조하여노드와 IP주소사이의링크를만듭

니다(원하는경우host_id및 ip_id필드모두를참조가능).

<entity name="node_containment_ip_address"

class="generic_db_adapter.node_containment_ip_address">

<table name="Host_IP_Link"/>

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 114/306 페이지

Page 115: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<attributes>

<id name="id1">

<column updatable="false" insertable="false" name="ip_id"/>

<generated-value strategy="TABLE"/>

</id>

<many-to-one target-entity="node" name="end1">

<join-column name="host_id"/>

</many-to-one>

<one-to-one target-entity="ip_address" name="end2">

<join-column name="ip_id"/>

</one-to-one>

</attributes>

</entity>

컨테이너의엔터티이름형식은[end1 CIT]_[link CIT]_[end2 CIT]와같습니다.따라서이

예에서는링크CI 유형이containment이므로컨테이너의엔터티이름은node_

containment_ip_address이고엔터티클래스는generic_db_adapter.node_containment_

ip_address입니다.해당 ID는이코드블록에필요하며이예에서는인터페이스의단일 ID를

사용하지만양쪽열에서는 id1 및 id2 참조를사용할수있습니다.해당코드는다음과같습니

다.

<id name=”id1”>

<column updatable=”false” insertable=”false” name=”ip_id”/>

<generated-value strategy=”TABLE”/>

</id>

<id name=”id2”>

<column updatable=”false” insertable=”false” name=”host_id”/>

<generated-value strategy=”TABLE”/>

</id>

이링크의양쪽끝은 '다대일'및 '일대일'이며,이는각 IP주소가1노드에링크되지만한노드

가여러 IP주소에링크될수있음을의미합니다.포함되는열은Links테이블에서가져오며

Hosts 테이블과 Interfaces테이블을참조합니다.

각원격제품버전에대해특정 orm.xml 구성

어댑터가지정된원격제품버전에대해특정orm.xml을사용하도록특정orm.xml 파일을구성할

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 115/306 페이지

Page 116: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

수있습니다.예를들어원격데이터저장소에두가지제품버전x및y가있는경우각버전에대해

다른엔터티매핑이있을수있습니다.

원격제품버전별로특정orm.xml 파일을구성하려면다음을수행합니다.

1. adapter.xml 파일에version 매개변수를추가하고가능한버전값을valid-values로지정합

니다.

2. 어댑터패키지의META-INF폴더아래에VersionOrm 폴더를만듭니다.

3. VersionOrm 폴더에서각특정버전에대한orm.xml 파일을만듭니다.파일이름에는버전접

두사가포함되어야합니다.예를들어버전이x인경우파일이름은x_orm.xml이어야합니다.

참고: 원격제품버전에대해특정orm.xml 파일을만드는지여부에관계없이모든원격제품

버전에대해META-INF폴더의orm.xml 파일이로드됩니다.이파일에는모든버전에대해동

일한방식으로매핑되는엔터티가포함될수있습니다.

reconciliation_types.txt 파일

UCMDB 10.00 버전부터 reconciliation_types.txt 파일은더이상관련이없습니다.임의의CIT를

재조정에사용할수있습니다.연합엔진은자동으로매핑을실행합니다.

reconciliation_rules.txt 파일(이전버전과의호환용)

어댑터에서DBMappingEngine을구성한경우조정을수행하려면이파일을사용하여조정규칙을

구성합니다.DBMappingEngine을사용하지않는경우일반UCMDB조정메커니즘이사용되므로

이파일을구성할필요가없습니다.

파일의각행은규칙을나타냅니다.예:

multinode[node] expression[^node.name OR ip_address.name] end1_type[node]end2_type[ip_address] link_type[containment]

다중노드에는다중노드이름(TQL쿼리에서연합데이터베이스CIT에연결된CMDB CIT)이입력

됩니다.

이식에는두개의다중노드(CMDB의다중노드와데이터베이스원본의다중노드)가동일한지여

부를결정하는논리가포함됩니다.

식은 OR또는 AND로구성됩니다.

식부분에서특성이름과관련된규칙은 [className].[attributeName]입니다.예를들어 ip_address클래스의 attributeName은작성된 ip_address.name입니다.

순서일치의경우(첫번째 OR하위식은다중노드가서로다른답을반환하고,두번째OR하위식은비교하지않는경우)식 대신순서 식을사용합니다.

비교할때대/소문자를무시하려면제어기호(^)를사용하십시오.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 116/306 페이지

Page 117: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

end1_type, end2_type및 link_type매개변수는조정TQL쿼리에두개의노드가포함된경우에만사용되고다중노드하나만포함된경우에는사용되지않습니다.이예에서조정TQL쿼리는

end1_type > (link_type) > end2_type입니다.

관련레이아웃은식에서가져오므로추가할필요가없습니다.

조정규칙유형

조정규칙은OR및AND조건형태를사용합니다. 서로다른여러노드에대해이러한규칙을정의할

수있습니다(예: node의 이름AND/ORip_address의 이름으로노드식별).

다음옵션은일치하는항목을찾습니다.

l 순서일치. 조정식은왼쪽에서오른쪽으로읽습니다.두개의 OR하위식에값이있고해당값이서로같은경우두하위식이같은것으로간주됩니다.두개의 OR하위식에값이있고해당값이서로다른경우두하위식이다른것으로간주됩니다.결정된바가없는경우에는다음 OR하위식이같은지테스트합니다.

node의이름OR ip_address의이름.CMDB과데이터원본에모두이름이포함되어있고이이

름이서로같으면노드가같은것으로간주됩니다.둘모두에이름이있지만같지않은경우에는

ip_address의이름을테스트하지않고노드가다른것으로간주됩니다.CMDB또는데이터원본에 node의 이름이없는경우 ip_address의 이름을확인합니다.

l 정규식일치.OR하위식중하나가같은경우CMDB과데이터원본이같은것으로간주됩니다.

node의이름OR ip_address의이름.node의 이름이일치하지않으면 ip_address의 이름이같은지확인합니다.

클래스모델에서조정엔터티가관계를포함한여러CIT(예: node)로모델링되는복합조정의경우모델링된모든CIT의모든관련특성이상위집합노드의매핑에포함됩니다.

참고: 따라서데이터원본의모든조정특성이같은기본키를공유하는테이블에있어야한다는

제한이있습니다.

다른제한은조정TQL쿼리에둘이하의노드만포함해야한다는것입니다.예를들어 node >ticket TQL쿼리에는CMDB의노드하나와데이터원본의티켓하나가있습니다.

결과를조정하려면node 및/또는 ip_address에서이름이검색되어야합니다.

CMDB의이름이 *.m.com형식이면CMDB에서연합데이터베이스로또는그반대로변환기를사용하여이러한값을변환할수있습니다.

데이터베이스티켓테이블의 node_id열을사용하여엔터티간에연결합니다(노드테이블에서정의된연관을만들수도있음).

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 117/306 페이지

Page 118: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

참고: 위의세테이블은CMDB데이터베이스가아니라연합RDBMS원본의테이블이어야합

니다.

transformations.txt 파일

이파일에는모든변환기정의가포함되어있습니다.

각줄에새정의가포함된형식입니다.

transformations.txt 파일템플릿

entity[[CMDB_class_name]] attribute[[CMDB_attribute_name]] to_DB_class[com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.GenericEnumTransformer(generic-enum-transformer-example.xml)]from_DB_class[com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.GenericEnumTransformer(generic-enum-transformer-example.xml)]

entity. orm.xml파일에표시되는엔터티이름입니다.

attribute. orm.xml파일에표시되는특성이름입니다.

to_DB_class. 인터페이스

com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.FcmdbDalTransformerTo

ExternalDB를구현하는클래스의정규화된이름입니다.괄호안의요소가이클래스생성자에지정

됩니다.예를들어각노드이름에 .com이라는접미사를추가하려는경우이변환기를사용하여

CMDB값을데이터베이스값으로변환합니다.

from_DB_class. com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.

FcmdbDalTransformerFromExternalDB인터페이스를구현하는클래스의정규화된이름입니다.

괄호안의요소가이클래스생성자에지정됩니다.예를들어각노드이름에 .com이라는접미사를

추가하려는경우이변환기를사용하여데이터베이스값을CMDB값으로변환합니다.

자세한내용은"기본변환기(122페이지)"를참조하십시오.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 118/306 페이지

Page 119: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

discriminator.properties 파일

이파일은지원되는각CI 유형(orm.xml에서판별자값으로도사용됨)을판별자열의가능한해당

값목록(쉼표로구분된목록)또는판별자열의가능한값과일치시키는조건에매핑합니다.

조건을사용할경우 like(condition)구문을사용합니다.여기서 condition은다음과같은와일드카드를포함할수있는문자열입니다.

l %(백분율기호) -모든길이(길이가0인문자열포함)의문자열을일치시킬수있습니다.

l _(밑줄) -단일문자를일치시킬수있습니다.

예를들어, like(%unix%)는unix, linux, unix-aix 등과일치합니다. Like 조건은단일열에만적용됩니다.

'all-other'를표시하여다른판별자에속하지않는값에단일판별자값을매핑할수도있습니다.

만들려는어댑터에서판별자기능을사용할경우discriminator.properties 파일에서모든판별자

값을정의해야합니다.

판별자매핑의예:

예를들어,어댑터가CI 유형 node, nt및 unix를지원하고데이터베이스에 type이라는열이있는단일테이블 t_nodes가포함되어있습니다.유형이10001인경우행은노드를나타내고,유형이10004인경우unix 시스템을나타내는식입니다. discriminator.properties 파일의형태는다음과

같습니다.

node=10001, 10005nt=10002,10003unix=2%mainframe=all-other

orm.xml 파일에는다음코드가포함되어있습니다.

    <entity class="generic_db_adapter.node" >        <table name="t_nodes" />        ...        <inheritance strategy="SINGLE_TABLE" />        <discriminator-value>node</discriminator-value>        <discriminator-column name="type" />        ...    </entity>    <entity class="generic_db_adapter.nt" name="nt">        <discriminator-value>nt        </discriminator-value>        <attributes>    </entity>    <entity class="generic_db_adapter.unix" name="unix">        <discriminator-value>unix</discriminator-value>        <attributes>    </entity>

discriminator_column 특성은다음과같이계산됩니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 119/306 페이지

Page 120: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 특정항목에대해 type에 10002또는 10003이포함되어있으면이항목이nt CIT에매핑됩니다.

l 특정항목에대해 type에 10001또는 10005가포함되어있으면이항목이node CIT에매핑됩니다.

l 특정항목에대해 type이 2로시작되는경우이항목이unix CIT에매핑됩니다.

l type 열의기타모든값은mainframe CIT에매핑됩니다.

참고: node CIT도nt및 unix의상위항목입니다.

replication_config.txt 파일

이파일은쉼표로구분된CI 목록과,해당속성조건이복제플러그인을통해지원되는관계유형을

포함합니다.자세한내용은"플러그인(127페이지)"을참조하십시오.

fixed_values.txt 파일

이파일을사용하면특정CIT의특정특성에대해고정값을구성할수있습니다.이방식으로데이터

베이스에저장되지않는고정값을이러한각각의특성에할당할수있습니다.

이파일은다음형식의항목을0개이상포함해야합니다.

entity[<entityName>] attribute[<attributeName>] value[<value>]

예:

entity[ip_address] attribute[ip_domain] value[DefaultDomain]

이파일은상수목록도지원합니다.상수목록을정의하려면다음구문을사용합니다.

entity[<entityName>] attribute[<attributeName>] value[{<Val1>, <Val2>, <Val3>,... }]

Persistence.xml 파일

이파일은기본Hibernate 설정을다시정의하고기본이아닌데이터베이스유형(기본데이터베이

스유형은Oracle Server, Microsoft SQL Server, MySQL)에대한지원을추가하는데사용됩니다.

새데이터베이스유형을지원해야할경우연결풀공급자(기본값: c3p0) 및사용할데이터베이스용JDBC 드라이버를제공(*.jar파일을어댑터폴더에배치)해야합니다.

변경할수있는모든Hibernate 값을보려면org.hibernate.cfg.Environment클래스를확인하십

시오(자세한내용은http://www.hibernate.org참조).

persistence.xml 파일의예:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 120/306 페이지

Page 121: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

"http://java.sun.com/xml/ns/persistence    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"version="1.0">    <!-- Don't change this value -->    <persistence-unit name="GenericDBAdapter">        <properties>            <!-- Don't change this value -->            <property name="hibernate.archive.autodetection" value="class,

hbm" />            <!--The driver class name"/-->            <property name="hibernate.connection.driver_class"value="com.mercury.

jdbc.MercOracleDriver" />            <!--The connection url"/-->            <property name="hibernate.connection.url"value="jdbc:mercury:oracle:

//artist:1521;sid=cmdb2" />            <!--DB login credentials"/-->            <property name="hibernate.connection.username" value="CMDB" />            <property name="hibernate.connection.password" value="CMDB" />            <!--connection pool properties"/-->            <property name="hibernate.c3p0.min_size" value="5" />            <property name="hibernate.c3p0.max_size" value="20" />            <property name="hibernate.c3p0.timeout" value="300" />            <property name="hibernate.c3p0.max_statements" value="50" />            <property name="hibernate.c3p0.idle_test_period" value="3000" />            <!--The dialect to use-->            <property name="hibernate.dialect" value="org.hibernate.dialect.

OracleDialect" />        </properties>    </persistence-unit></persistence>

NT 인증을사용하여데이터베이스에연결

NT인증이필요한MSSQL Server에연결할수있습니다.이렇게하려면도메인의구문을분석할수

있는드라이버(즉, jTDS JDBC 드라이버)가필요합니다.

인증은현재실행중인프로세스NT자격증명을사용하지않고제공된매개변수(도메인,사용자이

름,비밀번호)에따라수행됩니다.

1. persistence.xml에서다음과같이속성을편집합니다.

<!--The driver class name"/-->

<property name="hibernate.connection.driver_class"

value="net.sourceforge.jtds.jdbc.Driver"/>

<property name="hibernate.connection.url" value="jdbc:jtds:sqlserver://[host name]:

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 121/306 페이지

Page 122: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

[port];DatabaseName=[database name];domain=[the domain]"/>

<!--DB login credentials"/-->

<property name="hibernate.connection.username" value="[username]"/>

<property name="hibernate.connection.password" value="[password]"/>

2. JDBC 드라이버파일을<프로브설치폴더>\lib\아래에배치합니다.

3.프로브를다시시작합니다.

기본변환기

다음변환기를사용하여연합쿼리및복제작업을데이터베이스데이터로변환하거나그반대로변

환할수있습니다.

이섹션에는다음항목이포함됩니다.

l "기본변환기(122페이지)"

l "SuffixTransformer변환기(125페이지)"

l "PrefixTransformer변환기(125페이지)"

l "BytesToStringTransformer변환기(126페이지)"

l "StringDelimitedListTransformer변환기(126페이지)"

l "사용자지정변환기(126페이지)"

enum-transformer 변환기

이변환기는입력매개변수로주어진XML파일을사용합니다.

XML파일은하드코드된CMDB값과데이터베이스값(열거형)을매핑합니다.해당값중하나가없

으면같은값또는null을반환하거나예외를발생시키도록선택할수있습니다.

변환기는대/소문자를구분하거나대/소문자를구분하지않는메서드를사용하여두문자열을비교

합니다.기본동작은대/소문자를구분합니다.대/소문자를구분하지않도록정의하려면enum-

transformer요소에 case-sensitive="false"를사용합니다.

각엔터티특성에하나의XML매핑파일을사용합니다.

참고: 이변환기는 transformations.txt파일의 to_DB_class필드와 from_DB_class필드에모두사용할수있습니다.

입력파일XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:element name="enum-transformer">

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 122/306 페이지

Page 123: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<xs:complexType>

<xs:sequence>

<xs:element ref="value" minOccurs="0" maxOccurs="unbounded"/>

</xs:sequence>

<xs:attribute name="db-type" use="required">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:enumeration value="integer"/>

<xs:enumeration value="long"/>

<xs:enumeration value="float"/>

<xs:enumeration value="double"/>

<xs:enumeration value="boolean"/>

<xs:enumeration value="string"/>

<xs:enumeration value="date"/>

<xs:enumeration value="xml"/>

<xs:enumeration value="bytes"/>

</xs:restriction>

</xs:simpleType>

</xs:attribute>

<xs:attribute name="cmdb-type" use="required">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:enumeration value="integer"/>

<xs:enumeration value="long"/>

<xs:enumeration value="float"/>

<xs:enumeration value="double"/>

<xs:enumeration value="boolean"/>

<xs:enumeration value="string"/>

<xs:enumeration value="date"/>

<xs:enumeration value="xml"/>

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 123/306 페이지

Page 124: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<xs:enumeration value="bytes"/>

</xs:restriction>

</xs:simpleType>

</xs:attribute>

<xs:attribute name="non-existing-value-action" use="required">

<xs:simpleType>

<xs:restriction base="xs:string">

<xs:enumeration value="return-null"/>

<xs:enumeration value="return-original"/>

<xs:enumeration value="throw-exception"/>

</xs:restriction>

</xs:simpleType>

</xs:attribute>

<xs:attribute name="case-sensitive" use="optional">

<xs:simpleType>

<xs:restriction base="xs:boolean">

</xs:restriction>

</xs:simpleType>

</xs:attribute>

</xs:complexType>

</xs:element>

<xs:element name="value">

<xs:complexType>

<xs:attribute name="cmdb-value" type="xs:string" use="required"/>

<xs:attribute name="external-db-value" type="xs:string" use="required"/>

<xs:attribute name="is-cmdb-value-null" type="xs:boolean" use="optional"/>

<xs:attribute name="is-db-value-null" type="xs:boolean" use="optional"/>

</xs:complexType>

</xs:element>

</xs:schema>

'sys' 값을 'System' 값으로변환하는작업의예:

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 124/306 페이지

Page 125: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이예에서CMDB의 sys값은연합데이터베이스의 System값으로변환되고연합데이터베이스의System값은CMDB의 sys값으로변환됩니다.

값이XML파일에없으면(예: demo문자열)변환기가받은입력값과같은값을반환합니다.

<enum-transformer CMDB-type="string" DB-type="string" non-existing-value-action="return-original" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../META-CONF/generic-enum-transformer.xsd">    <value CMDB-value="sys" external-DB-value="System" /></enum-transformer>

외부또는CMDB값을Null 값으로변환하는예:

이예에서는원격데이터베이스의NNN값을CMDB데이터베이스에서null 값으로변환합니다.

<value cmdb-value="null" is-cmdb-value-null="true" external-db-value="NNN"/>

이예에서는CMDB의OOO값을원격데이터베이스의null 값으로변환합니다.

<value cmdb-value="OOO" external-db-value="null" is-db-value-null="true"/>

SuffixTransformer 변환기

이변환기는CMDB또는연합데이터베이스원본값에서접미사를추가하거나제거하는데사용됩

니다.

두가지구현이있습니다.

l com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.AdapterToCmdb

AddSuffixTransformer.연합데이터베이스값에서CMDB값으로변환할때접미사(입력을통

해지정)를추가하고CMDB값에서연합데이터베이스값으로변환할때접미사를제거합니다.

l com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.AdapterToCmdb

RemoveSuffixTransformer.연합데이터베이스값에서CMDB값으로변환할때접미사(입력

을통해지정)를제거하고CMDB값에서연합데이터베이스값으로변환할때접미사를추가합

니다.

PrefixTransformer 변환기

이변환기는CMDB또는연합데이터베이스값에서접두사를추가하거나제거하는데사용됩니다.

두가지구현이있습니다.

l com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.AdapterToCmdb

AddPrefixTransformer.연합데이터베이스값에서CMDB값으로변환할때접두사(입력을통

해지정)를추가하고CMDB값에서연합데이터베이스값으로변환할때접두사를제거합니다.

l com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.AdapterToCmdb

RemovePrefixTransformer.연합데이터베이스값에서CMDB값으로변환할때접두사(입력

을통해지정)를제거하고CMDB값에서연합데이터베이스값으로변환할때접두사를추가합

니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 125/306 페이지

Page 126: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

BytesToStringTransformer 변환기

이변환기는CMDB의바이트배열을연합데이터베이스원본의문자열표시로변환하는데사용됩

니다.

변환기는다음과같습니다.

com.me-

rcury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.CmdbToAdapterBytes

ToStringTransformer.

StringDelimitedListTransformer 변환기

이변환기는CMDB에서단일문자열목록을정수/문자열목록으로변환하는데사용됩니다.

변환기는com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.

StringDelimitedListTransformer입니다.

사용자지정변환기

사용자지정변환기를처음부터직접작성할수있습니다.이경우필요에맞는변환기를원하는대

로만들수있습니다.

사용자지정변환기를작성하는방법에는다음두가지가있습니다.

1. 컴파일된Java변환기작성

a. Java IDE(예: Eclipse, Intellij 또는Netbeans)에서Java프로젝트를만듭니다.

b. 클래스경로에 federation-api.jar및 db-interfaces.jar을추가합니다.

c. db-interfaces.jar에서다음인터페이스를구현하는Java클래스를만듭니다.

o FcmdbDalTransformerFromExternalDB

o FcmdbDalTransformerValuesToExternalDB

o FcmdbDalTransformerInit

d. 프로젝트를컴파일하고 jar파일을만듭니다.

e. jar파일을어댑터의패키지(adapterCode\<어댑터 ID>아래)에배치합니다.

f. 패키지를배포합니다.

g. transformations.txt 파일에새변환기클래스이름을추가합니다.

2. Groovy (스크립트기반)변환기작성

원본GDBA 패키지에서예제GroovyExampleTransformer.groovy를찾을수있습니다.

a. 어댑터의패키지(adapterCode\<어댑터 ID>아래)에Groovy 파일을만듭니다.어댑터관

리메뉴를사용하여직접이렇게할수있습니다.

b. db-interfaces.jar에서다음인터페이스를구현하는Groovy 클래스를만듭니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 126/306 페이지

Page 127: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

o FcmdbDalTransformerFromExternalDB

o FcmdbDalTransformerValuesToExternalDB

o FcmdbDalTransformerInit

c. transformations.txt 파일에새변환기Groovy 클래스이름을추가합니다.

참고: Groovy는 Java를확장하는스크립팅언어입니다.일반Java코드는유효한Groovy

코드이기도합니다.

플러그인

일반데이터베이스어댑터는다음플러그인을지원합니다.

l 전체토폴로지동기화용플러그인(선택사항)

l 토폴로지의변경내용동기화용플러그인(선택사항).변경내용동기화용플러그인을구현하지

않을경우차등동기화를수행할수있지만이동기화는사실상전체동기화가아닙니다.

l 레이아웃동기화용플러그인(선택사항)

l 동기화용으로지원되는쿼리를검색하는플러그인(선택사항).이플러그인을정의하지않는경

우모든TQL이름이반환됩니다.

l TQL정의및TQL결과를변경하는내부플러그인(선택사항)

l 레이아웃요청및CI 결과를변경하는내부플러그인(선택사항)

l 레이아웃요청및관계결과를변경하는내부플러그인(선택사항)

l ID 다시밀어넣기의수행을변경하는내부플러그인(선택사항)

플러그인구현및배포에대한자세한내용은"플러그인구현(87페이지)"을참조하십시오.

구성의예

이섹션에서는구성의예를제공합니다.

이섹션에는다음항목이포함됩니다.

l "사용사례(128페이지)"

l "단일노드조정(128페이지)"

l "두노드조정(130페이지)"

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 127/306 페이지

Page 128: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "두개이상의열이포함된기본키사용(133페이지)"

l "변환사용(135페이지)"

사용사례

TQL쿼리는다음과같습니다.

node > (composition) > card

여기서각항목은다음과같습니다.

l node: CMDB엔터티

l card:연합데이터베이스원본엔터티

l composition:두엔터티사이의관계

이예는 ED데이터베이스에대해실행됩니다. ED node는 Device테이블에저장되고 card는hwCards테이블에저장됩니다.다음에이어지는예에서도 card는항상같은방식으로매핑됩니다.

단일노드조정

이예에서조정은 name속성에대해실행됩니다.

간단정의

조정은 node별로수행되고CMDB-class라는특수태그로강조표시됩니다.

<?xml version="1.0" encoding="UTF-8"?><generic-DB-adapter-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../META-CONF/simplifiedConfiguration.xsd">    <CMDB-class CMDB-class-name="node" default-table-name="Device">        <primary-key column-name="Device_ID"/>        <reconciliation-by-single-node>            <또는>                <attribute CMDB-attribute-name="name" column-name="Device_Name" />            </or>        </reconciliation-by-single-node>    </CMDB-class>    <class CMDB-class-name="card" default-table-name="hwCards" connected-CMDB-class-name="node" link-class-name="composition">        <foreign-primary-key column-name="Device_ID" CMDB-class-primary-key-column="Device_ID        <primary-key column-name="hwCards_Seq" />        <attribute CMDB-attribute-name="card_class" column-name="hwCardClass"/>        <attribute CMDB-attribute-name="card_vendor" column-

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 128/306 페이지

Page 129: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

name="hwCardVendor" />        <attribute CMDB-attribute-name="card_name" column-name="hwCardName"/>    </class></generic-DB-adapter-config>

고급정의

orm.xml 파일

관계매핑을추가하는작업을살펴보십시오.자세한내용은"orm.xml 파일(103페이지)"의정의섹

션을참조하십시오.

orm.xml 파일의예:

<?xml version="1.0" encoding="UTF-8"?>

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"

xmlns:xsi="http://

www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/

persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" version="1.0">

<description>Generic DB adapter orm</description>

<package>generic_db_adapter</package>

<entity class="generic_db_adapter.node" >

<table name="Device"/>

<attributes>

<id name="id1">

<column name="Device_ID"

   insertable="false"

   updatable="false"/>

<generated-value strategy="TABLE"/>

</id>

<basic name="name">

<column name="Device_Name"/>

</basic>

</attributes>

</entity>

<entity class="generic_db_adapter.card" >

<table name="hwCards"/>

<attributes>

<id name="id1">

<column name="hwCards_Seq" insertable="false"

    updatable="false"/>

<generated-value strategy="TABLE"/>

</id>

<basic name="card_class">

<column name="hwCardClass" insertable="false"

    updatable="false"/>

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 129/306 페이지

Page 130: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

</basic>

<basic name="card_vendor">

<column name="hwCardVendor" insertable="false"

   updatable="false"/>

</basic>

<basic name="card_name">

<column name="hwCardName" insertable="false"

   updatable="false"/>

</basic>

</attributes>

</entity>

<entity class="generic_db_adapter.node_composition_card" >

<table name="hwCards"/>

<attributes>

<id name="id1">

<column name="hwCards_Seq" insertable="false"

   updatable="false"/>

<generated-value strategy="TABLE"/>

</id>

<many-to-one name="end1" target-entity="node">

<join-column name="Device_ID" insertable="false"

   updatable="false"/>

</many-to-one>

<one-to-one name="end2" target-entity="card"

> <join-column name="hwCards_Seq"

referenced-column-name="hwCards_Seq" insertable=

"false" updatable="false"/>

</one-to-one>

</attributes>

</entity>

</entity-mappings>

reconciliation_rules.txt 파일

자세한내용은"reconciliation_rules.txt 파일(이전버전과의호환용)(116페이지)"을참조하십시

오.

multinode[node] expression[node.name]

transformation.txt 파일

이예에서는값을변환할필요가없으므로이파일은계속비어있습니다.

두노드조정

이예에서조정은서로다른변형을가지고있는 node및 ip_address의 name속성에따라계산됩니다.

조정TQL쿼리는node > (containment) > ip_address입니다.

간단정의

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 130/306 페이지

Page 131: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

node또는 ip_address의 name에따라조정됩니다.

<?xml version="1.0" encoding="UTF-8"?><generic-DB-adapter-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../META-CONF/simplifiedConfiguration.xsd">    <CMDB-class CMDB-class-name="node" default-table-name="Device">        <primary-key column-name="Device_ID"/>        <reconciliation-by-two-nodes connected-node-CMDB-class-name="ip_address" CMDB-link-type="containment">            <또는>                <attribute CMDB-attribute-name="name" column-name="Device_Name" />                <connected-node-attribute CMDB-attribute-name="name" column-name="Device_PreferredIPAddress" />            </or>        </reconciliation-by-two-nodes>    </CMDB-class>    <class CMDB-class-name="card" default-table-name="hwCards" connected-CMDB-class-name="node" link-class-name="containment">        <foreign-primary-key column-name="Device_ID" CMDB-class-primary-key-column="Device_ID" />        <primary-key column-name="hwCards_Seq" />        <attribute CMDB-attribute-name="card_class" column-name="hwCardClass"/>        <attribute CMDB-attribute-name="card_vendor" column-name="hwCardVendor" />        <attribute CMDB-attribute-name="card_name" column-name="hwCardName"/>    </class></generic-DB-adapter-config>

node및 ip_address의 name에따라조정됩니다.

<?xml version="1.0" encoding="UTF-8"?><generic-DB-adapter-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../META-CONF/simplifiedConfiguration.xsd">    <CMDB-class CMDB-class-name="node" default-table-name="Device">        <primary-key column-name="Device_ID"/>        <reconciliation-by-two-nodes connected-node-CMDB-class-name="ip_address" CMDB-link-type="containment">            <and>                <attribute CMDB-attribute-name="name" column-name="Device_Name" />                <connected-node-attribute CMDB-attribute-name="name" column-name="Device_PreferredIPAddress" />

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 131/306 페이지

Page 132: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

            </and>        </reconciliation-by-two-nodes>    </CMDB-class>    <class CMDB-class-name="card" default-table-name="hwCards" connected-CMDB-class-name="node" link-class-name="containment">        <foreign-primary-key column-name="Device_ID" CMDB-class-primary-key-column="Device_ID" />        <primary-key column-name="hwCards_Seq" />        <attribute CMDB-attribute-name="card_class" column-name="hwCardClass"/>        <attribute CMDB-attribute-name="card_vendor" column-name="hwCardVendor" />        <attribute CMDB-attribute-name="card_name" column-name="hwCardName"/>    </class></generic-DB-adapter-config>

ip_address의 name에따라조정됩니다.

<?xml version="1.0" encoding="UTF-8"?><generic-DB-adapter-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../META-CONF/simplifiedConfiguration.xsd">    <CMDB-class CMDB-class-name="node" default-table-name="Device">        <primary-key column-name="Device_ID"/>        <reconciliation-by-two-nodes connected-node-CMDB-class-name="ip_address" CMDB-link-type="containment">            <또는>                <connected-node-attribute CMDB-attribute-name="name" column-name="Device_PreferredIPAddress" />            </or>        </reconciliation-by-two-nodes>    </CMDB-class>    <class CMDB-class-name="card" default-table-name="hwCards" connected-CMDB-class-name="node" link-class-name="containment">        <foreign-primary-key column-name="Device_ID" CMDB-class-primary-key-column="Device_ID" />        <primary-key column-name="hwCards_Seq" />        <attribute CMDB-attribute-name="card_class" column-name="hwCardClass"/>        <attribute CMDB-attribute-name="card_vendor" column-name="hwCardVendor" />        <attribute CMDB-attribute-name="card_name" column-name="hwCardName"/>    </class></generic-DB-adapter-config>

고급정의

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 132/306 페이지

Page 133: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

orm.xml 파일

이파일에조정식이정의되어있지않으므로모든조정식에같은버전을사용해야합니다.

reconciliation_rules.txt 파일

자세한내용은"reconciliation_rules.txt 파일(이전버전과의호환용)(116페이지)"을참조하십시

오.

multinode[node] expression[ip_address.name OR node.name] end1_type[node]end2_type[ip_address] link_type[containment]

multinode[node] expression[ip_address.name AND node.name] end1_type[node]end2_type[ip_address] link_type[containment]

multinode[node] expression[ip_address.name] end1_type[node] end2_type[ip_address] link_type[containment]

transformation.txt 파일

이예에서는값을변환할필요가없으므로이파일은계속비어있습니다.

두개이상의열이포함된기본키사용

기본키가두개이상의열로구성된경우XML정의에다음코드가추가됩니다.

간단정의

기본키태그가두개이상있고각열에하나의태그가있습니다.

    <class CMDB-class-name="card" default-table-name="hwCards" connected-CMDB-class-name="node" link-class-name="containment">        <foreign-primary-key column-name="Device_ID" CMDB-class-primary-key-column="Device_ID" />        <primary-key column-name="Device_ID"/>        <primary-key column-name="hwBusesSupported_Seq" />        <primary-key column-name="hwCards_Seq" />        <attribute CMDB-attribute-name="card_class" column-name="hwCardClass"/>        <attribute CMDB-attribute-name="card_vendor" column-name="hwCardVendor" />        <attribute CMDB-attribute-name="card_name" column-name="hwCardName"/>    </class>

고급정의

orm.xml 파일

기본키열에매핑되는새 id엔터티가추가됩니다.이 id엔터티를사용하는엔터티는특수태그를추가해야합니다.

그러한기본키에외래키(join-column 태그)를사용하는경우외래키의각열을기본키의열에매

핑해야합니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 133/306 페이지

Page 134: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

자세한내용은"orm.xml 파일(103페이지)"을참조하십시오.

orm.xml 파일의예:

<entity class="generic_db_adapter.card" >

        <table name="hwCards"/>

        <attributes>

            <id name="id1">

                <column name="Device_ID" insertable="false" updatable="false"/>

                <generated-value strategy="TABLE"/>

            </id>

            <id name="id2">

                <column name="hwBusesSupported_Seq" insertable="false"

updatable="false"/>

                <generated-value strategy="TABLE"/>

            </id>

            <id name="id3">

                <column name="hwCards_Seq" insertable="false" updatable="false"/>

                <generated-value strategy="TABLE"/>

            </id>

<entity class="generic_db_adapter.node_containment_card" >

        <table name="hwCards"/>

        <attributes>

            <id name="id1">

                <column name="Device_ID" insertable="false" updatable="false"/>

                <generated-value strategy="TABLE"/>

            </id>

            <id name="id2">

                <column name="hwBusesSupported_Seq" insertable="false"

updatable="false"/>

                <generated-value strategy="TABLE"/>

            </id>

            <id name="id3">

                <column name="hwCards_Seq" insertable="false" updatable="false"/>

                <generated-value strategy="TABLE"/>

            </id>

            <many-to-one name="end1" target-entity="node">

                <join-column name="Device_ID" insertable="false" updatable="false"/>

            </many-to-one>

            <one-to-one name="end2" target-entity="card">

                <join-column name="Device_ID" referenced-column-name="Device_ID"

insertable="false" updatable="false"/>

                <join-column name="hwBusesSupported_Seq" referenced-column-

name="hwBusesSupported_Seq" insertable="false" updatable="false"/>

                <join-column name="hwCards_Seq" referenced-column-name="hwCards_

Seq" insertable="false" updatable="false"/>

            </one-to-one>

        </attributes>

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 134/306 페이지

Page 135: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

    </entity>

</entity-mappings>

변환사용

다음예에서는일반enum 변환기가 name열의 1, 2, 3값에서각각 a, b, c값으로변환됩니다.

매핑파일은 generic-enum-transformer-example.xml입니다.

<enum-transformer CMDB-type="string" DB-type="string" non-existing-value-action="return-original" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="../META-CONF/generic-enum-transformer.xsd">    <value CMDB-value="1" external-DB-value="a" />    <value CMDB-value="2" external-DB-value="b" />    <value CMDB-value="3" external-DB-value="c" /></enum-transformer>

간단정의

    <CMDB-class CMDB-class-name="node" default-table-name="Device">        <primary-key column-name="Device_ID"/>        <reconciliation-by-two-nodes connected-node-CMDB-class-name="ip_address"          CMDB-link-type="containment">            <또는>                <attribute CMDB-attribute-name="name" column-name="Device_Name"                 from-CMDB-converter="com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.                 transform.impl.GenericEnumTransformer(generic-enum-transformer-example.                 xml)" to-CMDB-converter="com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.                 transform.impl.GenericEnumTransformer(generic-enum-transformer-example.                 xml)" />                <connected-node-attribute CMDB-attribute-name="name"                 column-name="Device_PreferredIPAddress" />            </or>        </reconciliation-by-two-nodes>    </CMDB-class>

고급정의

transformation.txt 파일에만변경내용이있습니다.

transformation.txt 파일

특성이름및엔터티이름이 orm.xml파일의해당이름과같아야합니다.

entity[node] attribute[name]to_DB_class[com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.GenericEnumTransformer(generic-enum-transformer-example.xml)] from_DB_class

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 135/306 페이지

Page 136: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

[com.mercury.topaz.fcmdb.adapters.dbAdapter.dal.transform.impl.GenericEnumTransformer(generic-enum-transformer-example.xml)]

어댑터로그파일

계산흐름및어댑터수명주기를이해하고디버그정보를보려면다음로그파일을참조하면됩니

다.

이섹션에는다음항목이포함됩니다.

l "로그수준(136페이지)"

l "로그위치(136페이지)"

로그수준

각로그에대해로그수준을구성할수있습니다.

텍스트편집기에서C:\hp\UCMDB\UCMDBServer\conf\log\

fcmdb.gdba.properties

파일을엽니다.

기본로그수준은ERROR입니다.

#loglevel can be any of DEBUG INFO WARN ERROR FATALloglevel=ERROR

l 모든로그파일의로그수준을올리려면 loglevel=ERROR를 loglevel=DEBUG또는

loglevel=INFO로변경하십시오.

l 특정파일의로그수준을변경하려면특정 log4j범주줄도적절히변경하십시오.예를들어

fcmdb.gdba.dal.sql.log의로그수준을 INFO로변경하려면다음항목을

log4j.category.fcmdb.gdba.dal.SQL=${loglevel},fcmdb.gdba.dal.SQL.appender

다음과같이변경합니다.

log4j.category.fcmdb.gdba.dal.SQL=INFO,fcmdb.gdba.dal.SQL.appender

로그위치

로그파일은C:\hp\UCMDB\UCMDBServer\runtime\log디렉터리에있습니다.

l Fcmdb.gdba.log

어댑터수명주기로그입니다.어댑터가시작한시간또는중지한시간및이어댑터에서지원하

는CIT에대한세부정보를제공합니다.

초기화오류(어댑터로드/언로드)를참조하십시오.

l fcmdb.log

예외를참조하십시오.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 136/306 페이지

Page 137: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l cmdb.log

예외를참조하십시오.

l Fcmdb.gdba.mapping.engine.log

매핑엔진로그입니다.매핑엔진에서사용하는조정TQL쿼리및연결단계에서비교되는조정

토폴로지에대한세부정보를제공합니다.

데이터베이스에관련CI가있는데도TQL쿼리가결과를반환하지않거나예기치못한결과를제

공하는경우이로그를참조하십시오(조정확인).

l Fcmdb.gdba.TQL.log

TQL로그입니다. TQL쿼리및그결과에대한세부정보를제공합니다.

TQL쿼리가결과를반환하지않는경우그리고매핑엔진로그에연합데이터원본에결과가없

다고표시될경우이로그를참조하십시오.

l Fcmdb.gdba.dal.log

DAL수명주기로그입니다.CIT 생성및데이터베이스연결정보에대한세부정보를제공합니

다.

데이터베이스에연결할수없거나,쿼리에서지원하지않는CIT 또는특성이있을때는이로그를

참조하십시오.

l Fcmdb.gdba.dal.command.log

DAL작업로그입니다.호출한내부DAL작업에대한세부정보를제공합니다.이로그는

cmdb.dal.command.log와유사합니다.

l Fcmdb.gdba.dal.SQL.log

DAL SQL쿼리로그입니다.호출한JPAQL(개체지향SQL쿼리)및그결과에대한세부정보를

제공합니다.

데이터베이스에연결할수없거나,쿼리에서지원하지않는CIT 또는특성이있을때는이로그를

참조하십시오.

l Fcmdb.gdba.hibrnate.log

Hibernate 로그입니다.실행한SQL쿼리,각 JPAQL을SQL로구문분석한내용,쿼리의결과,

Hibernate 캐싱과관련된데이터등에대한세부정보를제공합니다.Hibernate에대한자세한

내용은"Hibernate를 JPA 공급자로사용(68페이지)"을참조하십시오.

외부참조

JavaBeans 3.0 사양에대한자세한내용은

http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html을참조하십시오.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 137/306 페이지

Page 138: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

문제해결및제한사항

이섹션에서는일반데이터베이스어댑터에대한문제해결및제한사항을설명합니다.

일반제한

어댑터패키지를업데이트할때템플릿파일을편집하려면Microsoft Corporation의메모장(모든

버전)이아니라Notepad++, UltraEdit 또는기타타사텍스트편집기를사용합니다.메모장에서는

특수기호를사용할수없어준비한패키지를배포하지못하게됩니다.

JPA제한

l 모든테이블에기본키열이있어야합니다.

l CMDB클래스특성이름은JavaBeans이름지정규칙(예:이름은소문자로시작해야함)을따라

야합니다.

l 클래스모델에서하나의관계로연결된두CI는데이터베이스에직접연관을가지고있어야합니

다.예를들어 node가 ticket에연결된경우이둘을연결하는외래키나연결테이블이있어야합니다.

l 같은CIT에매핑된여러테이블은같은기본키테이블을공유해야합니다.

기능제한

l CMDB와연합CIT 사이에수동관계를만들수없습니다.가상관계를정의할수있으려면특수

관계논리를정의해야합니다.이논리는연합클래스의속성에기반할수있습니다.

l 연합CIT는영향규칙의트리거CIT가될수없습니다.그러나영향분석TQL쿼리에는포함될수

있습니다.

l 연합CIT를엔리치먼트TQL에포함할수는있지만엔리치먼트가수행되는노드로는사용할수

없습니다.연합CIT는추가하거나,업데이트하거나,삭제할수없습니다.

l 조건에서클래스한정자를사용할수없습니다.

l 하위그래프는지원되지않습니다.

l 복합관계는지원되지않습니다.

l 외부CI CMDBid는기본키특성이아니라기본키로구성됩니다.

l 바이트 유형의열은Microsoft SQL Server에서기본키로사용할수없습니다.

l 연합노드에정의된특성조건의이름이orm.xml 파일에매핑되어있지않으면TQL쿼리가계산

되지않습니다.

개발자참조안내서

4장:일반데이터베이스어댑터개발

HPUniversal CMDB (10.10) 138/306 페이지

Page 139: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

5장: Java 어댑터개발

이장의내용:

연합프레임워크개요 139

연합프레임워크와의어댑터및매핑상호작용 144

통합TQL쿼리에대한연합프레임워크 144

연합프레임워크,서버,어댑터및매핑엔진간의상호작용 146

채우기에대한연합프레임워크흐름 155

어댑터인터페이스 156

어댑터리소스디버그 157

새외부데이터원본에대해어댑터추가 158

샘플어댑터만들기 166

XML구성태그및속성 167

DataAdapterEnvironment인터페이스 168

연합프레임워크개요

참고:

l 관계라는용어는링크라는용어와같습니다.

l CI라는용어는개체라는용어와같습니다.

l 그래프는노드와링크의컬렉션입니다.

연합프레임워크기능은API를사용하여연합원본에서정보를검색합니다.연합프레임워크의주요

기능은다음세가지입니다.

l 실시간연합.모든쿼리가원래데이터저장소전체에서실행되고결과가CMDB에서즉석으로

작성됩니다.

l 채우기. 외부데이터원본에서CMDB로데이터(토폴로지데이터및CI 속성)를채웁니다.

l 데이터밀어넣기. 로컬CMDB에서원격데이터원본으로데이터(토폴로지데이터및CI 속성)를

밀어넣습니다.

모든수행유형에는각데이터저장소에대한어댑터가필요합니다.그래야데이터저장소의특정기

능을제공하고필요한데이터를검색및/또는업데이트할수있습니다.데이터저장소에대한모든

요청은해당어댑터를통해이루어집니다.

이섹션에는다음항목도포함됩니다.

HPUniversal CMDB (10.10) 139/306 페이지

Page 140: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "실시간연합(140페이지)"

l "데이터밀어넣기(141페이지)"

l "채우기(142페이지)"

실시간연합

통합TQL쿼리를사용하면데이터를복제하지않고도외부데이터저장소에서데이터를검색할수

있습니다.

통합TQL쿼리는외부데이터저장소를나타내는어댑터를사용하여다른외부데이터저장소의CI

와UCMDB CI 간에적절한외부관계를만듭니다.

실시간연합흐름의예:

1. 연합프레임워크는통합TQL쿼리를몇개의하위그래프로나눕니다.여기서하위그래프

의모든노드는동일한데이터저장소를참조합니다.각하위그래프는가상관계에따라다

른하위그래프에연결됩니다.그러나하위그래프자체에는가상관계가포함되지않습니

다.

2. 통합TQL쿼리가하위그래프로나눠지면연합프레임워크에서각하위그래프의토폴로지

를계산하고적합한노드간에가상관계를만들어적합한하위그래프두개를연결합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 140/306 페이지

Page 141: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

3. 통합TQL토폴로지를계산한후연합프레임워크에서토폴로지결과에대한레이아웃을검

색합니다.

데이터밀어넣기

현재로컬CMDB의데이터를원격서비스나대상데이터저장소에동기화하려면데이터밀어넣기

흐름을사용합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 141/306 페이지

Page 142: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

데이터밀어넣기에서데이터저장소는원본(로컬CMDB)과대상이라는두개의범주로구분됩니다.

데이터는원본데이터저장소에서검색되고대상데이터저장소로업데이트됩니다.데이터밀어넣

기프로세스는쿼리이름을기준으로진행됩니다.즉,원본(로컬CMDB)데이터저장소와대상데이

터저장소간에데이터를동기화한후로컬CMDB에서TQL쿼리이름을기준으로데이터를검색합

니다.

데이터밀어넣기프로세스흐름은다음단계로이루어집니다.

1. 원본데이터저장소에서서명이있는토폴로지결과를검색합니다.

2. 새결과를이전결과와비교합니다.

3. 변경된결과에대해서만CI 및관계의전체레이아웃(모든CI 속성)을검색합니다.

4. 받은CI 및관계의전체레이아웃을사용하여대상데이터저장소를업데이트합니다.쿼리가단

독쿼리인경우원본데이터저장소에서CI 또는관계를삭제하면복제프로세스에서대상데이

터저장소의CI 또는관계도제거합니다.

CMDB에는두개의숨겨진데이터원본(hiddenRMIDataSource 및

hiddenChangesDataSource)이있는데,이러한원본은데이터밀어넣기흐름에서항상 `원본' 데

이터원본입니다.데이터밀어넣기흐름에대해새어댑터를구현하려면 '대상' 어댑터만구현하면

됩니다.

채우기

CMDB를외부원본의데이터로채우려면채우기흐름을사용합니다.

이흐름은항상 ‘원본’데이터원본하나를사용하여데이터를검색하고검색된데이터를디스커버리

작업흐름과비슷한프로세스로프로브에밀어넣습니다.

채우기흐름을위한새어댑터를구현하려면원본어댑터만구현하면됩니다.Data Flow Probe가대

상역할을하기때문입니다.

채우기흐름의어댑터는프로브에서실행됩니다.디버깅및로깅은CMDB가아니라프로브에서실

행해야합니다.

채우기흐름은쿼리이름을기준으로진행됩니다.즉,원본데이터저장소와Data Flow Probe 간에

데이터를동기화한후원본데이터저장소에서쿼리이름을기준으로데이터를검색합니다.예를들

어UCMDB에서쿼리이름은TQL쿼리의이름입니다.그러나다른데이터저장소에서는쿼리이름

이데이터를반환하는코드이름일수있습니다.어댑터는쿼리이름을올바르게처리하도록설계되

어있습니다.

각작업은배타적작업으로정의할수있습니다.즉,작업결과의CI 및관계가로컬CMDB에서고유

하며다른쿼리가이들을대상으로가져올수없음을의미합니다.원본데이터저장소의어댑터는특

정쿼리를지원하며이데이터저장소에서데이터를검색할수있습니다.대상데이터저장소의어댑

터를사용하면이데이터저장소에서검색된데이터를업데이트할수있습니다.

SourceDataAdapter 흐름

l 원본데이터저장소에서서명이있는토폴로지결과를검색합니다.

l 새결과를이전결과와비교합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 142/306 페이지

Page 143: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 변경된결과에대해서만CI 및관계의전체레이아웃(모든CI 속성)을검색합니다.

l 받은CI 및관계의전체레이아웃을사용하여대상데이터저장소를업데이트합니다.쿼리가단

독쿼리인경우원본데이터저장소에서CI 또는관계를삭제하면복제프로세스에서대상데이터

저장소의CI 또는관계도제거합니다.

SourceChangesDataAdapter 흐름

l 주어진마지막날짜이후에발생한토폴로지결과를검색합니다.

l 변경된결과에대해서만CI 및관계의전체레이아웃(모든CI 속성)을검색합니다.

l 받은CI 및관계의전체레이아웃을사용하여대상데이터저장소를업데이트합니다.쿼리가단

독쿼리인경우원본데이터저장소에서CI 또는관계를삭제하면복제프로세스에서대상데이터

저장소의CI 또는관계도제거합니다.

PopulateDataAdapter 흐름

l 요청된레이아웃결과가있는전체토폴로지를검색합니다.

l 토폴로지청크메커니즘을사용하여청크의데이터를검색합니다.

l 이전실행에서이미가져온모든데이터를프로브에서필터링합니다.

l 받은CI 및관계의레이아웃을사용하여대상데이터저장소를업데이트합니다.쿼리가단독쿼

리인경우원본데이터저장소에서CI 또는관계를삭제하면복제프로세스에서대상데이터저장

소의CI 또는관계도제거합니다.

PopulateChangesDataAdapter 흐름

l 마지막실행이후에변경되었고요청된레이아웃결과가있는토폴로지를검색합니다.

l 토폴로지청크메커니즘을사용하여청크의데이터를검색합니다.

l 이전실행(이흐름포함)에서이미가져온데이터를프로브에서필터링합니다.

l 받은CI 및관계의레이아웃을사용하여대상데이터저장소를업데이트합니다.쿼리가단독쿼

리인경우원본데이터저장소에서CI 또는관계를삭제하면복제프로세스에서대상데이터저장

소의CI 또는관계도제거합니다.

인스턴스기반채우기흐름

어댑터가"XML구성태그및속성(167페이지)"에설명된<instance-based-data>태그를통해인

스턴스기반흐름을지원하도록정의되어있는경우채우기엔진은자동으로인스턴스내에서제거

된CI를찾은다음UCMDB에서제거합니다(특정채우기작업에대해삭제가허용되는경우).각인

스턴스에는TQL정의에서Root이름으로표시된루트CI가있어야합니다.루트CI가전달될때마

다전체인스턴스(루트CI에연결된모든CI)를마지막으로UCMDB로보냈을때와비교하여이전에

루트에연결되어있었지만지금은연결되어있지않은CI를UCMDB에서삭제합니다.어댑터가인

스턴스기반흐름을올바르게지원하려면전체인스턴스의CI 또는특성에변경내용이있을경우전

체인스턴스를UCMDB로다시보내야합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 143/306 페이지

Page 144: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

연합프레임워크와의어댑터및매핑상호작용

어댑터는UCMDB의항목으로,외부데이터(UCMDB에저장되지않은데이터)를나타냅니다.연합

흐름에서는외부데이터원본과의모든상호작용이어댑터를통해수행됩니다.연합프레임워크상

호작용흐름및어댑터인터페이스는복제를수행할때와통합TQL쿼리를수행할때서로다릅니

다.

이섹션에는다음항목도포함됩니다.

l "어댑터수명주기(144페이지)"

l "어댑터assist 메서드(144페이지)"

어댑터수명주기

각외부데이터저장소마다하나의어댑터인스턴스가만들어집니다.어댑터의수명주기는이어댑

터에적용되는첫번째수행(예: TQL 계산 또는데이터 검색/업데이트)으로시작됩니다. start메서드가호출되면어댑터가환경정보(예:데이터저장소구성,로거등)를받습니다.구성에서데이

터저장소가제거되면어댑터수명주기가종료되고shutdown 메서드가호출됩니다.이는어댑터

가상태기반이며필요한경우외부데이터저장소에대한연결을포함할수있음을의미합니다.

어댑터 assist 메서드

어댑터에는외부데이터저장소구성을추가할수있는 assist메서드가몇가지있습니다.이러한메서드는어댑터수명주기에포함되지않으며호출할때마다새어댑터를만듭니다.

l 첫번째메서드는주어진구성의외부데이터저장소에대한연결을테스트합니다.

testConnection은어댑터유형에따라UCMDB서버또는Data Flow Probe에서실행할수있습

니다.

l 두번째메서드는원본어댑터에만관련이있으며복제를위해지원되는쿼리를반환합니다.이

메서드는프로브에서만실행됩니다.

l 세번째메서드는연합흐름과채우기흐름에만관련이있으며외부데이터저장소에서지원되는

외부클래스를반환합니다.이메서드는UCMDB서버에서실행됩니다.

이모든메서드는통합구성을만들거나볼때사용됩니다.

통합 TQL 쿼리에대한연합프레임워크

이섹션에는다음항목이포함됩니다.

l "정의및용어(145페이지)"

l "매핑엔진(145페이지)"

l "연합어댑터(145페이지)"

연합프레임워크,UCMDB,어댑터,매핑엔진간의상호작용을보여주는다이어그램은"연합프레

임워크,서버,어댑터및매핑엔진간의상호작용(146페이지)"을참조하십시오.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 144/306 페이지

Page 145: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

정의및용어

조정데이터.CMDB및외부데이터저장소에서받은지정된유형의CI를일치시키는규칙입니다.

조정규칙에는다음세가지유형이있습니다.

l ID 조정. 이규칙은외부데이터저장소에조정개체의CMDB ID가포함된경우에만사용할수있

습니다.

l 속성조정. 이규칙은조정CI 유형의속성으로일치를수행할수있는경우에만사용됩니다.

l 토폴로지조정. 이규칙은조정CI에서일치를수행하는데추가CIT(조정CIT 외에도포함)의속

성이필요한경우에사용됩니다.예를들어 ip_address CIT에속하는 name속성으로노드유형의조정을수행할수있습니다.

조정개체.이개체는받은조정데이터에따라어댑터에서만들어집니다.이개체는외부CI를참조

해야하며매핑엔진에서외부CI와CMDB CI 사이를연결하는데사용됩니다.

조정CI 유형. 조정개체를나타내는CI의유형입니다.이러한CI는CMDB와외부데이터저장소두

곳에모두저장해야합니다.

매핑엔진. 서로다른데이터저장소에서받았으나서로간에가상관계를갖고있는CI 사이의관계

를식별하는구성요소입니다.식별작업은CMDB조정개체와외부CI 조정개체를조정하는방식

으로수행됩니다.

매핑엔진

연합프레임워크는매핑엔진을사용하여통합TQL쿼리를계산합니다.매핑엔진은서로다른데이

터저장소에서받았으나가상관계로연결되어있는CI 사이를연결합니다.매핑엔진은가상관계에

도조정데이터를제공합니다.가상관계의한끝은CMDB를참조해야합니다.이끝이조정 유형입니다.두하위그래프를계산하려는경우가상관계는어느쪽끝노드에서나시작할수있습니다.

연합어댑터

연합어댑터는외부데이터저장소에서외부CI 데이터와외부 CI에속한조정개체등두가지종류

의데이터를가져옵니다.

l 외부CI 데이터.CMDB에없는외부데이터입니다.이데이터는외부데이터저장소의대상데이

터입니다.

l 조정개체데이터. 연합프레임워크에서CMDB CI와외부데이터를연결하는데사용되는보조

데이터입니다.각조정개체는외부CI를참조해야합니다.조정개체의유형은데이터가검색되

는가상관계한끝의유형(또는하위유형)입니다.조정개체는받은어댑터를조정데이터에맞춰

야합니다.조정개체는 IdReconciliationObject, PropertyReconciliationObject,TopologyReconciliationObject등세가지유형중하나일수있습니다.

DataAdapter기반인터페이스(DataAdapter, PopulateDataAdapter,

PopulateChangesDataAdapter)에서는쿼리정의의일부로조정을요청합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 145/306 페이지

Page 146: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

연합프레임워크, 서버, 어댑터및매핑엔진간의상호작용

다음다이어그램은연합프레임워크,UCMDB,어댑터,매핑엔진간의상호작용을나타냅니다.예

제다이어그램에서통합TQL쿼리에는가상관계가하나뿐이므로UCMDB과외부데이터저장소하

나만이통합TQL쿼리에관여됩니다.

이섹션에는다음항목이포함됩니다.

l "서버끝에서계산시작(146페이지)"

l "외부어댑터끝에서계산시작(149페이지)"

l "통합TQL쿼리에대한연합프레임워크흐름의예(150페이지)"

첫번째다이어그램에서는UCMDB에서계산이시작되고두번째다이어그램에서는외부어댑터에

서계산이시작됩니다.다이어그램의각단계에는어댑터나매핑엔진인터페이스의적절한메서드

호출에대한참조가포함되어있습니다.

서버끝에서계산시작

다음시퀀스다이어그램은연합프레임워크,UCMDB,어댑터,매핑엔진간의상호작용을나타냅니

다.예제다이어그램에서통합TQL쿼리에는가상관계가하나뿐이므로UCMDB과외부데이터저

장소하나만이통합TQL쿼리에관여됩니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 146/306 페이지

Page 147: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

다음은이그림에표시된번호에대한설명입니다.

번호 설명

1 연합프레임워크가통합TQL계산에대한호출을받습니다.

2 연합프레임워크는어댑터를분석하고,가상관계를찾고,원래TQL을두하위어댑

터로나눕니다.그중하나는UCMDB용이고다른하나는외부데이터저장소용입니

다.

3 연합프레임워크가UCMDB에서하위TQL의토폴로지를요청합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 147/306 페이지

Page 148: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

번호 설명

4 연합프레임워크는토폴로지결과를받은후에현재가상관계에적절한매핑엔진을

호출하고조정데이터를요청합니다.이단계에서는 reconciliationObject매개변수가비어있습니다.즉,이호출에서는조정데이터에추가되는조건이없습니다.

반환되는조정데이터는UCMDB의조정CI를외부데이터저장소와일치시키는데

필요한데이터를정의합니다.조정데이터는다음유형중하나일수있습니다.

l IdReconciliationData. CI는 ID에따라조정됩니다.

l PropertyReconciliationData. CI는CI 중하나의속성에따라조정됩니다.

l TopologyReconciliationData. CI는토폴로지에따라조정됩니다.예를들어노

드CI를조정하려면 IP의 IP주소도필요합니다.

5 연합프레임워크가"3(147페이지)"단계에UCMDB에서받은가상관계끝의CI에

대한조정데이터를요청합니다.

6 연합프레임워크가조정데이터를검색하기위해매핑엔진을호출합니다.이상태에

서는"3(147페이지)"단계와는반대로매핑엔진이"5(148페이지)"단계의조정개체

를매개변수로받습니다.매핑엔진은받은조정개체를조정데이터에대한조건으

로변환합니다.

7 연합프레임워크가외부데이터저장소에서하위TQL의토폴로지를요청합니다.외

부어댑터는"6(148페이지)"단계의조정데이터를매개변수로받습니다.

8 연합프레임워크는받은결과간을연결하기위해매핑엔진을호출합니다.

firstResult매개변수는"5(148페이지)"단계에UCMDB에서받은외부토폴로지결과이고 secondResult매개변수는"7(148페이지)"단계에외부어댑터에서받은외부토폴로지결과입니다.매핑엔진은첫번째데이터저장소(이경우에는

UCMDB)의외부CI ID를두번째(외부)데이터저장소의외부CI ID에매핑한맵을

반환합니다.

9 각매핑에대해연합프레임워크는가상관계를만듭니다.

10 토폴로지단계에서만통합TQL쿼리결과를계산한후에,연합프레임워크는해당하

는데이터저장소에서결과CI 및관계에대한원래TQL레이아웃을검색합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 148/306 페이지

Page 149: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

외부어댑터끝에서계산시작

다음은이그림에표시된번호에대한설명입니다.

번호 설명

1 연합프레임워크가통합TQL계산에대한호출을받습니다.

2 연합프레임워크는어댑터를분석하고,가상관계를찾고,원래TQL을두하위어댑

터로나눕니다.그중하나는UCMDB용이고다른하나는외부데이터저장소용입니

다.

3 연합프레임워크가외부어댑터에서하위TQL의토폴로지를요청합니다.조정데이

터는요청에포함되지않으므로반환된 ExternalTopologyResult에조정개체가포함되지않아야합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 149/306 페이지

Page 150: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

번호 설명

4 연합프레임워크는토폴로지결과를받은후에현재가상관계에적절한매핑엔진을

호출하고조정데이터를요청합니다.이상태에서는 reconciliationObjects매개변수가비어있습니다.즉,이호출에서는조정데이터에추가되는조건이없습니다.

반환되는조정데이터는UCMDB의조정CI를외부데이터저장소와일치시키는데

필요한데이터를정의합니다.조정데이터는다음세가지유형중하나일수있습니

다.

l IdReconciliationData. CI는 ID에따라조정됩니다.

l PropertyReconciliationData. CI는CI 중하나의속성에따라조정됩니다.

l TopologyReconciliationData. CI는토폴로지에따라조정됩니다.예를들어노

드CI를조정하려면 IP의 IP주소도필요합니다.

5 연합프레임워크가 3단계에외부데이터저장소에서받은CI에대한조정개체를요

청합니다.연합프레임워크가외부어댑터에서

getTopologyWithReconciliationData() 메서드를호출합니다.여기서 요청된토폴

로지는 3단계에받은CI가4단계의 ID 조건및조정데이터로포함된단일노드토폴

로지입니다.

6 연합프레임워크가조정데이터를검색하기위해매핑엔진을호출합니다.이상태에

서는 3단계와는반대로매핑엔진이 5단계의조정개체를매개변수로받습니다.매

핑엔진은받은조정개체를조정데이터에대한조건으로변환합니다.

7 연합프레임워크가UCMDB에서 6단계의조정데이터가포함된하위TQL의토폴로

지를요청합니다.

8 연합프레임워크는받은결과간을연결하기위해매핑엔진을호출합니다.

firstResult매개변수는 5단계에외부어댑터에서받은외부토폴로지결과이고secondResult매개변수는 7단계에UCMDB에서받은외부토폴로지결과입니다.매핑엔진은첫번째데이터저장소(이경우에서는외부데이터저장소)의외부CI

ID를두번째데이터저장소(UCMDB)의외부CI ID에매핑한맵을반환합니다.

9 각매핑에대해연합프레임워크는가상관계를만듭니다.

10 토폴로지단계에서만통합TQL쿼리결과를계산한후에,연합프레임워크는해당하

는데이터저장소에서결과CI 및관계에대한원래TQL레이아웃을검색합니다.

통합 TQL 쿼리에대한연합프레임워크흐름의예

이예에서는특정노드에열려있는모든인시던트를보는방법을설명합니다.ServiceCenter데이

터저장소는외부데이터저장소입니다.노드인스턴스는UCMDB에저장되고인시던트인스턴스는

ServiceCenter에저장됩니다.인시던트인스턴스를적절한노드에연결하려면호스트와 IP의 node및 ip_address속성이필요합니다.이러한속성은UCMDB의ServiceCenter에서노드를식별하는조정속성입니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 150/306 페이지

Page 151: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

참고: 특성연합을위해어댑터의getTopology 메서드가호출됩니다.조정데이터는사용자

TQL(이예에서는CI 요소)에서사용됩니다.

1. 어댑터를분석한후연합프레임워크는노드와인시던트의가상관계를인식하고통합TQL쿼리를두개의하위그래프로나눕니다.

2. 연합프레임워크는UCMDB하위그래프를실행하여토폴로지를요청하고다음결과를받습니

다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 151/306 페이지

Page 152: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

3. 연합프레임워크는적절한매핑엔진에서첫번째데이터저장소(UCMDB)에대한조정데이터

를요청합니다.이조정데이터에는두데이터저장소로부터받은데이터를연결하는데필요한

정보가포함되어있습니다.이예에서조정데이터는다음과같습니다.

4. 연합프레임워크는이전결과에서받은노드및 ID 조건(H1, H2, H3의 node)이포함된단일노드토폴로지쿼리를만들고,UCMDB에서필요한조정데이터로이쿼리를실행합니다.결과에

는각CI의 ID 조건및적절한조정개체와관련된노드CI가포함됩니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 152/306 페이지

Page 153: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

5. ServiceCenter의조정데이터는UCMDB로부터받은조정개체에서파생된 node및 ip에대한조건을포함해야합니다.

6. 연합프레임워크는조정데이터가포함된ServiceCenter하위그래프를실행하여토폴로지및

적절한조정개체를요청하고다음결과를받습니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 153/306 페이지

Page 154: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

7. 매핑엔진에서연결을완료하고가상관계를만든후의결과는다음과같습니다.

8. 연합프레임워크가UCMDB및ServiceCenter에서받은인스턴스의원래TQL레이아웃을요

청합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 154/306 페이지

Page 155: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

채우기에대한연합프레임워크흐름

이섹션에는다음항목이포함됩니다.

l "정의및용어(155페이지)"

l "흐름다이어그램(155페이지)"

정의및용어

서명. CI에서속성의상태를표시합니다.CI에서속성값을변경한경우CI 서명도변경해야합니다.

CI 서명은모든CI 속성을검색하여비교하지않고도C변경여부를감지하는데도움이됩니다.CI

와CI 서명은모두해당하는어댑터에서제공합니다.CI 속성이변경되면어댑터에서CI 서명을변

경해야합니다.

흐름다이어그램

다음시퀀스다이어그램은채우기흐름에서연합프레임워크와원본및대상어댑터간의상호작용

을나타냅니다.

1. 연합프레임워크가원본어댑터에서쿼리결과의토폴로지를받습니다.어댑터는이름을기준

으로쿼리를인식하고외부데이터저장소에서쿼리를실행합니다.토폴로지결과에는각CI의

ID 및서명과결과의관계가포함됩니다. ID는외부데이터저장소에서CI를고유하게정의하는

논리적 ID입니다.CI 또는관계가수정되면서명을수정해야합니다.

2. 연합프레임워크는서명을사용하여새로받은토폴로지쿼리결과와저장된결과를비교하고

어떤CI가변경되었는지확인합니다.

3. 연합프레임워크에서변경된CI와관계를찾은다음변경된CI와관계의 ID가있는원본어댑터

를매개변수로호출하여전체레이아웃을검색합니다.

4. 연합프레임워크가업데이트를대상어댑터로보냅니다.대상어댑터가외부데이터원본을받

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 155/306 페이지

Page 156: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

은데이터로업데이트합니다.

5. 업데이트후에연합프레임워크에서마지막쿼리결과를저장합니다.

어댑터인터페이스

이섹션에는다음항목이포함됩니다.

l "정의및용어(156페이지)"

l "통합TQL쿼리관련어댑터인터페이스(156페이지)"

정의및용어

외부관계. 동일한어댑터에서지원하는두외부CI 유형간의관계입니다.

통합 TQL 쿼리관련어댑터인터페이스

다음과같이각어댑터에해당하는어댑터인터페이스를사용하십시오.

l 단일 노드토폴로지인터페이스는어댑터가외부관계를지원하지않는경우,즉어댑터가둘이

상의외부CI가포함된요청을받지않도록되어있는경우에사용됩니다.작업을완료하는데필

요한조정데이터는복합쿼리로설명할수있습니다(아래의

SingleNodeFederationTopologyReconciliationAdapter참조).

모든SingleNode 인터페이스는워크플로를단순화하기위해만들어졌으므로,좀더광범위한쿼

리를사용해야할경우에는FederationTopologyAdapter 인터페이스를사용하십시오.

l FederationTopologyAdapter 인터페이스는복잡한연합쿼리를지원하는어댑터를정의하는

데사용됩니다.이러한어댑터에서조정요청은QueryDefinition 매개변수의일부입니다.

연합엔진은연합된데이터를적절한로컬CI에연결하기위해조정데이터를사용합니다.조정

데이터를둘이상의요청에가져올수있습니다(결과에따라재귀적으로계산됨).이경우어댑터

는조정데이터만포함된요청을받습니다.

SingleNode 인터페이스

다음인터페이스는다른유형의조정데이터를포함합니다.

l SingleNodeFederationIdReconciliationAdapter. 어댑터가단일노드TQL을지원하고데이터

저장소간의조정이 ID를기준으로계산되는경우에사용합니다.

l SingleNodeFederationPropertyReconciliationAdapter. 어댑터가단일노드TQL을지원하고

데이터저장소간의조정이 한개CI의속성을기준으로수행되는경우에사용합니다.

l SingleNodeFederationTopologyReconciliationAdapter. 어댑터가단일노드TQL을지원하

고데이터저장소간의조정이토폴로지를기준으로수행되는경우에사용합니다.어댑터는쿼리

요소가비어있고조정토폴로지만요청되는경우를지원해야합니다.

데이터어댑터인터페이스

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 156/306 페이지

Page 157: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l FederationTopologyAdapter. 복잡한통합TQL쿼리를지원하려면이어댑터를사용합니다.

대부분의복잡한쿼리를사용할수있습니다.어댑터는쿼리정의가조정데이터만설명하는경우

를지원해야합니다.

l PopulateDataAdapter. 복잡한통합TQL쿼리및채우기흐름을지원하려면이어댑터를사용

합니다.채우기흐름에서이어댑터는전체데이터집합을검색하고프로브를통해마지막작업

실행이후에변경된내용을필터링할수있습니다.

l PopulateChangesDataAdapter. 복잡한통합TQL쿼리및채우기흐름을지원하려면이어댑

터를사용합니다.채우기흐름에서이어댑터는마지막작업실행이후에변경된내용만검색할

수있습니다.

참고: 대용량데이터집합을반환하는어댑터를개발하는경우,ChunkGetter인터페이스를구

현하여청크를허용하는것이중요합니다.자세한내용은특정어댑터에대한Java문서를참조

하십시오.

리소스보고인터페이스

다음인터페이스를통해어댑터는어댑터의동작을사용자지정하도록구성할수있는리소스를보

고할수있습니다.이경우통합스튜디오에서직접이러한리소스를편집할수있습니다.이러한인

터페이스는위의일반어댑터인터페이스외에추가로사용해야합니다.

l PopulationQueriesResourcesLocator. 각특정채우기쿼리에대해편집할수있는리소스를

정의합니다.

l PushQueriesResourceLocator. 각데이터밀어넣기쿼리에대해편집할수있는리소스를정

의합니다.

l GeneralResourcesLocator. 이어댑터에서편집할수있는일반리소스를정의합니다.

기타인터페이스

l SortResultDataAdapter. 외부데이터저장소에서결과CI를정렬할수있는경우에사용합니

다.

l FunctionalLayoutDataAdapter. 외부데이터저장소에서기능레이아웃을계산할수있는경우

에사용합니다.

동기화관련어댑터인터페이스

l SourceDataAdapter. 채우기흐름에서원본어댑터에사용합니다.

l TargetDataAdapter. 데이터밀어넣기흐름에서대상어댑터에사용합니다.

어댑터리소스디버그

이작업에서는디버깅및개발을목적으로JMX콘솔을사용하여어댑터상태리소스(UCMDB데이

터베이스또는프로브데이터베이스에저장된DataAdapterEnvironment인터페이스의리소스조

작메서드를사용하여만든모든리소스)를만들고,보고,삭제하는방법에대해설명합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 157/306 페이지

Page 158: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

1. 웹브라우저를시작하고서버주소를다음과같이입력합니다.

n UCMDB서버: http://localhost:8080/jmx-console

n 프로브: http://localhost:1977

사용자이름과비밀번호를입력하여로그인해야할수도있습니다.

2. JMXMBEAN보기페이지를열려면다음중하나를클릭합니다.

n UCMDB서버:

UCMDB:service=FCMDB Adapter State Resource Services

n 프로브: type=AdapterStateResources

3. 사용할작업에값을입력하고 Invoke를클릭합니다.

새외부데이터원본에대해어댑터추가

이작업에서는새외부데이터원본을지원할수있도록어댑터를정의하는방법을설명합니다.

이작업에는다음단계가포함됩니다.

l "선행조건(158페이지)"

l "가상관계에유효한관계정의(159페이지)"

l "어댑터구성정의(159페이지)"

l "지원되는클래스정의(163페이지)"

l "어댑터구현(164페이지)"

l "조정규칙정의또는매핑엔진구현(165페이지)"

l "구현에필요한Jar을클래스경로에추가(165페이지)"

l "어댑터배포(165페이지)"

l "어댑터업데이트(166페이지)"

1. 선행조건

UCMDB데이터모델의CI 및관계에대한모델지원어댑터클래스가필요합니다.어댑터개발

자는다음사항을준비해야합니다.

n UCMDB CI 유형의계층구조에대한지식을갖추어외부CIT와UCMDB CIT의관련성이해

n UCMDB클래스모델에서외부CIT 모델링

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 158/306 페이지

Page 159: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

n 새로운CI 유형및이들의관계에대한정의추가

n 어댑터내부클래스간의유효한관계를위해UCMDB클래스모델에서유효한관계정의

CIT는UCMDB클래스모델트리의어떤수준에나배치할수있습니다.

모델링은연합유형(실시간또는복제)에관계없이동일해야합니다.UCMDB클래스모델에새

CIT 정의를추가하는방법에대한자세한내용은HPUniversal CMDB모델링안내서에서"CI선택기사용"을참조하십시오.

어댑터가CIT에대한연합특성을지원할수있도록하려면이CIT에대한조정규칙및지원되

는특성이있는지원되는클래스에이CIT를추가하십시오.

2. 가상관계에유효한관계정의

참고: 이섹션은연합에만관련이있습니다.

로컬CMDB CIT에연결된연합CIT를검색하려면CMDB의두CIT 사이에올바른링크정의가

있어야합니다.

a. 이러한링크가포함된올바른링크XML파일이아직없는경우새로만듭니다.

b. \validlinks 폴더에서어댑터패키지에링크XML파일을추가합니다.자세한내용은HPUniversal CMDB관리안내서에서"패키지관리자"를참조하십시오.

유효한관계정의의예:

다음예에서 node유형의인스턴스와 myclass1유형의인스턴스간의 Containment유형의관계는유효한관계정의입니다.

<Valid-Links>    <Valid-Link>        <Class-Ref class-name="containment">        <End1 class-name="node">        <End2 class-name="myclass1">        <Valid-Link-Qualifiers>    </Valid-Link></Valid-Links>

3. 어댑터구성정의

a. 어댑터관리로이동합니다.

b. 새리소스만들기 버튼을클릭하고새어댑터를선택합니다.

c. 새어댑터대화상자에서통합및Java 어댑터를선택합니다.

d. 만든어댑터를마우스오른쪽버튼으로클릭하고바로가기메뉴에서어댑터원본편집을선

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 159/306 페이지

Page 160: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

택합니다.

e. 다음XML태그를편집합니다.

<pattern xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="newAdapterIdName"xsi:noNamespaceSchemaLocation="../../Patterns.xsd"description="Adapter Description" schemaVersion="9.0"displayName="New Adapter Display Name">

<deletable>true</deletable>

<discoveredClasses>

<discoveredClass>link</discoveredClass>

<discoveredClass>object</discoveredClass>

</discoveredClasses>

<taskInfoclass-Name="com.hp.ucmdb.discovery.probe.services.dynamic.core.AdapterService">

<paramsclass-Name="com.hp.ucmdb.discovery.probe.services.dynamic.core.AdapterServiceParams" enableAging="true"

enableDebugging="false" enableRecording="false" autoDeleteOnErrors="success" recordResult="false"maxThreads="1" patternType="java_adapter"maxThreadRuntime="25200000">

<className>com.yourCompany.adapter.MyAdapter.MyAdapterClass</className>

</params>

<destinationInfoclass-Name="com.hp.ucmd-b.discovery.probe.tasks.BaseDestinationData">

<!-- check -->

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 160/306 페이지

Page 161: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<destinationData name="adapterId"description="">${ADAPTER.adapter_id}</destinationData>

<destinationData name="attributeValues"description="">${SOURCE.attribute_values}</destinationData>

<destinationData name="credentialsId"description="">${SOURCE.credentials_id}</destinationData>

<destinationData name="destinationId"description="">${SOURCE.destination_id}</destinationData>

</destinationInfo>

<resultMechanism isEnabled="true">

<autoDeleteCITs isEnabled="true">

<CIT>link</CIT>

<CIT>object</CIT>

</autoDeleteCITs>

</resultMechanism>

</taskInfo>

<adapterInfo>

<adapter-capabilities>

<support-federated-query>

<!--<supported-classes/> <!—see the section about supportedclasses-->

<topology>

<pattern-topology /> <!—or <one-node-topology> -->

</topology>

</support-federated-query>

<!--<support-replicatioin-data>

<source>

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 161/306 페이지

Page 162: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<changes-source/>

</source>

<target/>

</adapter-capabilities>

<default-mapping-engine/>

<queries />

<removedAttributes />

<full-population-days-interval>-1</full-population-days-interval>

</adapterInfo>

<inputClass>destination_config</inputClass>

<protocols />

<parameters>

<!--The description attribute may be written in simple textor HTML.-->

<!--The host attribute is treated as a special case by UCMDB-->

<!--and will automatically select the probe name (ifpossible)-->

<!--according to this attribute’s value.-->

<parameter name="credentialsId" description="Special type ofproperty, handled by UCMDB for credentials menu"type="integer" display-name="Credentials ID" mandatory="true"order-index="12" />

<parameter name="host" description="The host name or IPaddress of the remote machine" type="string" display-name="Hostname/IP" mandatory="false" order-index="10" />

<parameter name="port" description="The remote machine'sconnection port" type="integer" display-name="Port"mandatory="false" order-index="11" />

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 162/306 페이지

Page 163: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

</parameters>

<parameter name="myatt" description="is my att true?"type="string" display-name="My Att" mandatory="false" order-index="15" valid-values=”True;False”/>True</parameters>

<collectDiscoveredByInfo>true</collectDiscoveredByInfo>

<integration isEnabled="true">

<category >My Category</category>

</integration>

<overrideDomain>${SOURCE.probe_name}</overrideDomain>

<inputTQL>

<resource:XmlResourceWrapperxmlns:resource="http://www.hp.com/ucmdb/1-0-0/ResourceDefinition" xmlns:ns4="http://www.hp.com/ucmdb/1-0-0/ViewDefinition" xmlns:tql="http://www.hp.com/ucmdb/1-0-0/TopologyQueryLanguage">

<resource xsi:type="tql:Query" group-id="2" priority="low"is-live="true" owner="Input TQL" name="Input TQL">

<tql:node class="adapter_config" id="-11" name="ADAPTER" />

<tql:node class="destination_config" id="-10" name="SOURCE"/>

<tql:link to="ADAPTER" from="SOURCE" class="fcmdb_conf_aggregation" id="-12" name="fcmdb_conf_aggregation" />

</resource>

</resource:XmlResourceWrapper>

</inputTQL>

<permissions />

</pattern>

XML태그에대한자세한내용은"XML구성태그및속성(167페이지)"을참조하십시오.

4. 지원되는클래스정의

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 163/306 페이지

Page 164: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

getSupportedClasses() 메서드를구현하거나패턴XML파일을사용하여지원되는클래스나어댑터코드를정의합니다.

<supported-classes>    <supported-class name="HistoryChange" is-derived="false" is-reconciliation-supported="false" federation-not-supported="false" is-id-reconciliation-supported="false">    <supported-conditions>        <attribute-operators attribute-name="change_create_time">            <operator>GREATER</operator>            <operator>LESS</operator>            <operator>GREATER_OR_EQUAL</operator>            <operator>LESS_OR_EQUAL</operator>            <operator>CHANGED_DURING</operator>        </attribute-operators>    </supported-conditions> </supported-class>

name CI 유형의이름입니다.

is-derived 이정의에상속되는모든하위항목을포함할지여부를

지정합니다.

is-reconciliation-supported 이클래스를조정에사용할지여부를지정합니다.

is-id-reconciliation-supported 이클래스를 ID 조정에사용할지여부를지정합니다.

federation-not-supported 연합을위해이CIT를허용하지않을지(특정CIT,예를

들어연합을위해서만정의된CIT 차단)여부를지정합

니다.

<supported-conditions> 각특성에대해지원되는조건을지정합니다.

5. 어댑터구현

정의된기능에따라올바른어댑터구현클래스를선택합니다.어댑터구현클래스는정의된기

능에따라적합한인터페이스를구현합니다.

어댑터가getTopologyWithReconciliationData를구현하고어댑터기능에시작점으로사용

할수있는기능이포함된경우어댑터는또한조건없이(유형만)조정데이터를포함한요청토

폴로지를지원해야합니다.이경우어댑터는검색된결과의전체조정데이터를반환해야합니

다.

global_id에따라어댑터조정지원을정의할수있습니다.이경우global_id는어댑터에서지

원되는클래스의조정특성일부로정의해야합니다. global_id에따라어댑터조정지원이정의

된경우getTopologyWithReconciliationData()는조정개체속성의일부로global_id를반환

해야합니다.UCMDB는CIT의통합결과조정에식별규칙대신global_id를사용합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 164/306 페이지

Page 165: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

DataAdapterEnvironment인터페이스는연합API의일부입니다.이인터페이스는데이터어

댑터의환경을나타냅니다.여기에는어댑터가작동하는데필요한환경API가포함되어있습니

다.DataAdapterEnvironment인터페이스에대한자세한내용은"DataAdapterEnvironment

인터페이스(168페이지)"를참조하십시오.

6. 조정규칙정의또는매핑엔진구현

어댑터가통합TQL쿼리를지원하는경우매핑엔진을정의하는두가지옵션이있습니다.

n CMDB의매핑에대한내부조정규칙을사용하는기본매핑엔진을사용합니다.이엔진을

사용하려면<default-mapping-engine> XML태그를비워두십시오.

n 매핑엔진인터페이스를구현하고나머지어댑터코드가있는JAR을배치하여직접매핑엔

진을작성합니다.이렇게하려면XML태그<default-mapping-

engine>com.yourcompany.map.MyMappingEngine</default-mapping-engine>을

사용합니다.

7. 구현에필요한 Jar을클래스경로에추가

클래스를구현하려면코드편집기클래스경로에federation_api.jar 파일을추가합니다.

8. 어댑터배포

어댑터패키지를배포합니다.일반적으로패키지를배포하는방법에대한자세한내용은HPUniversal CMDB관리안내서에서"패키지관리자"를참조하십시오.

패키지에는다음엔터티가포함되어야합니다.

n 새CIT 정의(선택사항):

n 어댑터가UCMDB에아직없는새CI 유형을지원하는경우에만사용됩니다.

n 새CIT 정의는패키지의 class폴더에있습니다.

n 새데이터유형정의(선택사항):

n 새CIT에새데이터유형이필요한경우에만사용됩니다.

n 새데이터유형정의는패키지의 typedef폴더에있습니다.

n 새유효한관계정의(선택사항):

n 어댑터가통합TQL을지원하는경우에만사용됩니다.

n 새유효한관계정의는패키지의 validlinks폴더에있습니다.

n 패턴구성XML파일은패키지의 discoveryPatterns폴더에있어야합니다.

n 설명자. 패키지정의를정의합니다.

n 패키지의컴파일된클래스(보통 jar파일)을adapterCode\<adapter id>폴더아래에배치

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 165/306 페이지

Page 166: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

합니다.

참고: adapter id폴더이름은어댑터구성의값과같은값을갖습니다.

n 직접구성파일을만드는경우에는패키지의파일을adapterCode\<adapter id>폴더아

래에배치해야합니다.

9. 어댑터업데이트

어댑터의파일중바이너리가아닌파일은어댑터관리모듈에서변경할수있습니다.어댑터관

리모듈에서구성파일을변경하면어댑터가새구성으로다시로드됩니다.

패키지의파일(바이너리파일및바이너리가아닌파일모두)을편집한다음패키지관리자를

사용하여패키지를재배포하는방법으로업데이트할수도있습니다.자세한내용은HPUniversal CMDB관리안내서에서"패키지를배포하는방법"을참조하십시오.

샘플어댑터만들기

이예는샘플어댑터를만드는방법을보여줍니다.이작업에는다음단계가포함됩니다.

l "어댑터논리선택(166페이지)"

l "프로젝트로드(166페이지)"

1. 어댑터논리선택

어댑터를구현할때구현의조건논리(속성조건, ID 조건,조정조건및링크조건)를처리하는

방법을선택해야합니다.

a. 전체데이터를어댑터메모리로가져와필요한CI 인스턴스를선택하거나필터링할수있도

록합니다.

b. 모든조건을데이터원본언어로변환하여데이터를필터링하거나선택할수있도록합니

다.예:

o 조건을SQL쿼리로변환합니다.

o 조건을Java API 필터개체로변환합니다.

c. 원격서비스에서일부데이터를필터링하고어댑터에서나머지데이터를선택하고필터링

합니다.

MyAdapter예에서는a옵션의논리가사용됩니다.

2. 프로젝트로드

C:\hp\UCMDB\UCMDBServer\tools\

adapter-dev-kit\SampleAdapters 폴더에서파일을복사한후추가정보파일의지침을따

릅니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 166/306 페이지

Page 167: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

참고: 대용량데이터집합이있는어댑터를사용하는경우연합성능을향상시키기위해캐

싱및인덱싱을사용해야할수도있습니다.

온라인Javadoc 문서는다음위치에서볼수있습니다.

C:\hp\UCMDB\UCMDBServer\deploy\ucmdb-

docs\docs\eng\APIs\DBAdapterFramework_JavaAPI\index.html

XML 구성태그및속성

id="newAdapterIdName" 어댑터의실제이름을정의합니다.로그및

폴더조회에사용됩니다.

displayName="New Adapter Display Name" 어댑터의표시이름을UI에표시되는대로

정의합니다.

<className>...</className> Java클래스를구현하는어댑터의인터페이

스를정의합니다.

<category >My Category</category> 어댑터의범주를정의합니다.

<parameters> 새통합포인트를설정할때UI에사용할수

있는구성의속성을정의합니다.

name 속성의이름(주로코드에서사용)입니다.

description 속성의표시힌트입니다.

type 문자열또는정수(부울에대한문자열이있

는유효한값사용)입니다.

display-name UI의속성이름입니다.

mandatory 이구성속성이사용자에대해필수인지여

부를지정합니다.

order-index 속성의순서지정(작은값이위로)

valid-values 가능한유효값이 `;' 문자로구분된목록(예:

valid-values="Oracle;SQLServer;MySQL"

또는valid-values="True;False")입니다.

<adapterInfo> 어댑터의정적설정및기능의정의를포함

합니다.

<support-federated-query> 이어댑터를연합가능한어댑터로정의합니

다.

<start-point-adapter> 이어댑터가TQL쿼리계산의시작점인지

여부를지정합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 167/306 페이지

Page 168: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<one-node-topology> 쿼리를하나의연합쿼리노드로연합할수

있습니다.

<pattern-topology> 복잡한쿼리를연합할수있습니다.

<support-replicatioin-data> 데이터밀어넣기흐름및채우기흐름을실

행하는기능을정의합니다.

<source> 이어댑터를채우기흐름에사용할수있습

니다.

<push-back-ids> CI의글로벌 ID를테이블의global_id열에

다시밀어넣습니다(orm.xml에서정의해야

함). FcmdbPluginPushBackIds 플러그인

을구현하면이동작을다시정의할수있습

니다.

<changes-source> 이어댑터를변경내용채우기흐름에사용

할수있습니다.

<instance-based-data> 이태그는어댑터가인스턴스기반채우기

흐름을지원할것을정의합니다.

<target> 이어댑터를데이터밀어넣기흐름에사용할

수있습니다.

<default-mapping-engine> 어댑터의매핑엔진을정의할수있습니다.

기본적으로어댑터는기본매핑엔진을사용

합니다.다른매핑엔진을사용하려면매핑

엔진의구현클래스이름을입력합니다().

<removedAttributes> 결과에서특정특성을제거합니다.

<full-population-days-

interval>

차등작업대신전체채우기작업을실행할

때('x'일마다)를지정합니다.변경내용흐름

과함께에이징메커니즘을사용합니다.

<adapter-settings> 어댑터의설정목록입니다.

<list.attributes.for.set> 이전값을다시정의하는특성을결정합니다

(있는경우).

DataAdapterEnvironment 인터페이스

OutputStream openResourceForWriting(StringresourceName) throws FileNotFoundException;

이메서드는쓰기위해지정된이름의리소스를엽니다.이메서드는통합을위한영구데이터를저

장하는데사용됩니다. Java메서드를사용하여파일을로드하려고하는대신이메서드를사용해야

합니다.사용자는스트림에쓰기를마쳤을때스트림이닫혔는지확인해야합니다. close()/flush()

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 168/306 페이지

Page 169: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

는리소스를저장합니다.이메서드는런타임리소스를만들지만어댑터패키지에함께제공된파일

은덮어쓸수없습니다.

매개변수

l resourceName: 검색할리소스의이름입니다.이이름은동일한어댑터의모든통합에서고유

해야합니다.

반환값

쓰려는스트림을반환합니다.

예외

l 이메서드는리소스유형이파일이고파일이없는경우,리소스가일반파일이아닌디렉터리인

경우또는일부다른이유로인해읽으려는리소스를열수없는경우FileNotFoundException을발생시킵니다.

l 이메서드는보안관리자가있고해당checkRead메서드가파일에대한액세스를거부하는경우SecurityException을발생시킵니다.

InputStream openResourceForReading(StringresourceName) throws FileNotFoundException;

이메서드는읽기위해지정된이름의리소스를엽니다.이메서드는통합을위한영구데이터를읽

는데사용됩니다. Java메서드를사용하여파일을로드하려고하는대신이메서드를사용해야합니

다.사용자는스트림읽기를마쳤을때스트림이닫혔는지확인해야합니다.이메서드는먼저어댑

터패키지에함께제공된파일을로드하려고시도합니다.이파일을찾을수없으면

DataAdapterEnvironment.openResourceForWriting(String)에서런타임에만든리소스를로드하려고합니다.런타임리소스는프로브및서버의JMX를사용하여볼수있습니다.

매개변수

l resourceName: 검색할리소스의이름입니다.이이름은동일한어댑터의모든통합에서고유

해야합니다.

반환값

읽을스트림을반환합니다.

예외

l 이메서드는리소스유형이파일이고파일이없는경우,리소스가일반파일이아닌디렉터리인

경우또는일부다른이유로인해읽으려는리소스를열수없는경우FileNotFoundException을발생시킵니다.

l 이메서드는보안관리자가있고해당checkRead메서드가파일에대한읽기권한을거부하는경우SecurityException을발생시킵니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 169/306 페이지

Page 170: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

Properties openResourceAsProperties(StringpropertiesFile) throws IOException;

이메서드는지정된이름의리소스를연다음속성구조로로드합니다.이메서드는통합을위한영구데이터를읽는데사용됩니다. Java메서드를사용하여 .properties 파일을로드하려고하는대

신이메서드를사용해야합니다.이메서드는먼저어댑터패키지에함께제공된파일을로드하려고

시도합니다.이파일을찾을수없으면DataAdapterEnvironment.openResourceForWriting(String)에서런타임에만든리소스를로드하려고합니다.런타임리소스는프로브및서버의JMX를사용하여볼수있습니다.

매개변수

l propertiesFile: 검색할리소스의이름입니다.이이름은동일한어댑터의모든통합에서고유해

야합니다.

반환값

속성에표시된파일컨텐츠를반환합니다.

예외

l 이메서드는리소스유형이파일이고파일이없는경우,리소스가일반파일이아닌디렉터리인

경우또는일부다른이유로인해읽으려는리소스를열수없는경우FileNotFoundException을발생시킵니다.

l 이메서드는보안관리자가있고해당checkRead메서드가파일에대한읽기권한을거부하는경우SecurityException을발생시킵니다.

l 이메서드는속성파일을Properties 개체로변환하지못한경우 IOException을발생시킵니다.

String openResourceAsString(String resourceName)throws IOException;

이메서드는지정된이름의리소스를연다음문자열로로드합니다.이메서드는통합을위한영구

데이터를읽는데사용됩니다. Java메서드를사용하여파일을로드하려고하는대신이메서드를사

용해야합니다.

이메서드는먼저어댑터패키지에함께제공된파일을로드하려고시도합니다.이파일을찾을수

없으면DataAdapterEnvironment.openResourceForWriting(String)에서런타임에만든리소스를로드하려고합니다.런타임리소스는프로브및서버의JMX를사용하여볼수있습니다.

매개변수

l resourceName: 검색할리소스의이름입니다.이이름은동일한어댑터의모든통합에서고유

해야합니다.

반환값

문자열형식으로표시된파일컨텐츠를반환합니다.

예외

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 170/306 페이지

Page 171: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 이메서드는리소스유형이파일이고파일이없는경우,리소스가일반파일이아닌디렉터리인

경우또는일부다른이유로인해읽으려는리소스를열수없는경우FileNotFoundException을발생시킵니다.

l 이메서드는보안관리자가있고해당checkRead메서드가파일에대한읽기권한을거부하는경우SecurityException을발생시킵니다.

l 이메서드는 I/O오류가발생하는경우 IOException을발생시킵니다.

public void saveResourceFromString(StringrelativeFileName, String value) throws IOException;

이메서드는문자열을받은다음리소스로저장합니다.이메서드는통합을위한영구데이터를저장

하는데사용됩니다. Java메서드를사용하여파일을저장하려고하는대신이메서드를사용해야합

니다.이메서드는문자열을스트림으로변환하고이스트림을리소스에저장합니다.이메서드는런

타임리소스를만들지만어댑터패키지에함께제공된파일은덮어쓸수없습니다.런타임리소스는

프로브및서버의JMX를사용하여볼수있습니다.

매개변수

l relativeFileName: 검색할리소스의이름입니다.이이름은동일한어댑터의모든통합에서고유

해야합니다.

l value: 리소스로저장할문자열입니다.

예외

이메서드는 I/O오류가발생하는경우 IOException을발생시킵니다.

boolean resourceExists(String resourceName);

이메서드는지정된리소스이름이있는지확인합니다.이메서드는어댑터패키지에함께제공된파

일을찾은다음DataAdapterEnvironment.openResourceForWriting(String)에서런타임에만든리소스를찾습니다.

매개변수

l resourceName: 검색할리소스의이름입니다.이이름은동일한어댑터의모든통합에서고유

해야합니다.

반환값

resourceName이있는경우True를반환합니다.

boolean deleteResource(String resourceName);

이메서드는영구데이터에서지정된리소스를삭제합니다.이메서드는런타임리소스를삭제하지

만어댑터패키지에함께제공된파일은삭제할수없습니다.런타임리소스는프로브및서버의

JMX를사용하여볼수있습니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 171/306 페이지

Page 172: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수

l resourceName: 삭제할리소스의이름입니다.이이름은동일한어댑터의모든통합에서고유

해야합니다.

반환값

리소스를삭제한경우True를반환합니다.

Collection<문자열> listResourcesInPath(String path);

이메서드는지정된리소스경로에있는리소스목록을검색합니다.이메서드는어댑터패키지에함

께제공된파일을찾은다음DataAdapterEnvironment.openResourceForWriting(String)에서런타임에만든리소스를찾습니다.런타임리소스는프로브및서버의JMX를사용하여볼수있습니

다.

매개변수

l path: 리소스경로입니다(예: "META-INF/myfiles/").

반환값

경로에있는리소스목록을반환합니다.

DataAdapterLogger getLogger();

어댑터가사용할로거를검색합니다.이로거는어댑터의이벤트를기록하는데사용됩니다.

반환값

DataAdapter가사용하는로거를반환합니다.

DestinationConfig getDestinationConfig();

이메서드는통합의대상구성을검색합니다.이구성에는통합을위한모든연결및실행중인설정

이포함됩니다.

반환값

어댑터의DestinationConfig를반환합니다.

int getChunkSize();

이메서드는이통합에대해요청된채우기청크크기를검색합니다.

반환값

채우기청크크기를반환합니다.

int getPushChunkSize();

이메서드는이통합에대해요청된밀어넣기청크크기를검색합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 172/306 페이지

Page 173: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

반환값

밀어넣기청크크기를반환합니다.

ClassModel getLocalClassModel();

이메서드는로컬UCMDB의클래스모델에대한정보를쿼리하기위한클래스모델을검색합니다.

이메서드는업데이트된ClassModel을가져옵니다.ClassModel 개체가반환된후에는클래스모

델변경내용에대해업데이트되지않습니다.업데이트된클래스모델을검색하려면이메서드를다

시사용하여검색합니다.

반환값

UCMDB의클래스모델을반환합니다.

CustomerInformation getLocalCustomerInformation();

이메서드는어댑터를실행중인고객에대한고객정보를검색합니다.

반환값

어댑터를실행중인고객에대한고객정보를반환합니다.

Object getSettingValue(String name);

이메서드는특정어댑터설정을검색합니다.

매개변수

name: 설정의이름입니다.

반환값

개체설정값을반환합니다.

Map<문자열,개체> getAllSettings();

이메서드는모든어댑터설정을검색합니다.

반환값

어댑터설정을반환합니다.

boolean isMTEnabled();

이메서드는서버환경에서MT(다중테넌트)를지원하는지여부를확인합니다.

반환값

서버환경에서MT를지원하는경우 true를반환하고그렇지않으면false를반환합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 173/306 페이지

Page 174: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

String getUcmdbServerHostName();

이메서드는로컬UCMDB서버호스트이름을반환합니다.

반환값

로컬UCMDB서버호스트이름을반환합니다.

개발자참조안내서

5장: Java어댑터개발

HPUniversal CMDB (10.10) 174/306 페이지

Page 175: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

6장: 밀어넣기어댑터개발

이장의내용:

밀어넣기어댑터개발및배포 175

어댑터패키지빌드 176

매핑만들기 179

Jython 스크립트작성 183

차등동기화지원 187

일반XML밀어넣기어댑터SQL쿼리 188

일반웹서비스밀어넣기어댑터 189

매핑파일참조 207

매핑파일스키마 209

매핑결과스키마 221

사용자지정 225

밀어넣기어댑터개발및배포

일반밀어넣기어댑터는UCMDB데이터를외부데이터저장소(데이터베이스및타사응용프로그

램)로밀어넣는통합을빠르게개발할수있는공통플랫폼을제공합니다.일반밀어넣기어댑터는

데이터를밀어넣는데사용되는프로토콜에따라분류됩니다.일반XML밀어넣기어댑터를사용하

는XML을통한밀어넣기에대한자세한내용은"일반XML밀어넣기어댑터SQL쿼리(188페이지)"

를참조하십시오.일반웹서비스밀어넣기어댑터를사용하는웹서비스를통한밀어넣기에대한자

세한내용은"일반웹서비스밀어넣기어댑터(189페이지)"를참조하십시오.

일반밀어넣기어댑터를기반으로하는사용자지정통합을개발하려면다음사항이필요합니다.

l 적절한일반밀어넣기어댑터템플릿파일에서새어댑터패키지작성.자세한내용은"어댑터패

키지빌드(176페이지)"를참조하십시오.

l UCMDB CI 링크유형과외부데이터항목간매핑.매핑은XML로저장되고각외부데이터저장

소로사용자지정됩니다.자세한내용은"매핑만들기(179페이지)"를참조하십시오.

l 데이터항목을외부데이터저장소로밀어넣는Jython 스크립트.자세한내용은"Jython 스크립

트작성(183페이지)"을참조하십시오.

l 추가어댑터별단계(예: XML밀어넣기어댑터의경우쓰려는파일의경로선택,웹서비스밀어넣

기어댑터의경우데이터수신기만들기)

HPUniversal CMDB (10.10) 175/306 페이지

Page 176: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

어댑터패키지빌드

MDR별밀어넣기어댑터를새로만들려면일반어댑터의사본을만든다음편집하여특정밀어넣기

대상에대한어댑터가되도록사용자지정해야합니다.

일반어댑터패키지는다음두위치중한곳에있습니다.

l 일반XML밀어넣기어댑터: hp\UCMDB\UCMDBServer\content\adapters\push-

adapter.zip

l 일반웹서비스어댑터: hp\UCMDB\UCMDBServer\content\adapters\web-service-

push-adapter.zip

일반밀어넣기어댑터에서새밀어넣기어댑터를만들려면다음을수행합니다.

1. 작업폴더에선택한패키지zip파일의압축을풉니다.

2. 이름바꾸기및교체단계를준비하기위해다음디렉터리를검토합니다.

n adapterCode:C:\hp\UCMDB\UCMDBServer\runtime\fcmdb\CodeBase 디렉

터리에배포된디렉터리가포함되어있습니다.여기에배포된Jar파일은프로브를자동으로

다시시작하지않으며프로브의CLASSPATH에자동으로표시되지않습니다.

n discoveryConfigFiles: 어댑터의매핑정의가포함되어있으며올바른Jython 스크립트

(push.properties)를가리킵니다.

n discoveryPatterns: UCMDB서버에배포된어댑터의XML정의가포함되어있습니다.

n discoveryScripts: 타사데이터저장소에대한연결을설정하고데이터를밀어넣는데사용

할어댑터의Jython 스크립트가포함되어있습니다.

n discoveryResources: 웹서비스의Java통합클래스가포함된UCMDBDataReceiver.jar

이포함되어있습니다.

참고: 이패키지를배포하면프로브가다시시작되어이 .jar이프로브의CLASSPATH에포

함됩니다.패키지배포이외의작업은필요하지않습니다.

3. 압축을푼어댑터디렉터리구조내에서다음변경을수행합니다.

a. discoveryConfigFiles\<푸시_어댑터_이름>: "PushAdapter" 또는 "XMLtoWebService"

디렉터리이름을새밀어넣기어댑터의이름(예: "myPushAdapter")으로바꿉니다.

b. discoveryConfigFiles\<푸시_어댑터_이름>\push.properties:push.properties 파일

에서다음을수행합니다.

o jythonScript.name의이름을새밀어넣기어댑터에서사용할Jython 스크립트의이름

(예: pushToMyService.py)으로업데이트합니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 176/306 페이지

Page 177: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

o 매핑파일의이름을새밀어넣기어댑터에서사용할이름(예:myPushAdapter_

mappings)으로업데이트합니다. .xml 확장자는자동으로입력되므로추가하지마십시

오.

c. discoveryPatterns\<푸시어댑터이름>.xml: 이파일의이름을새어댑터의정의XML파

일이름(예:my_push_adapter.xml)으로바꿉니다.

d. discoveryPatterns\<푸시_어댑터>.xml: 이파일을다음과같이업데이트합니다.

o XML요소<pattern>의경우: id및description 특성을적절히설정합니다.예:

<pattern id="PushAdapter"xsi:noNamespaceSchemaLocation="../../Patterns.xsd"description="Discovery Pattern Description" schemaVersion="9.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

다음과같이변경합니다.

<pattern id="MyPushAdapter" displayLabel="My Push Adapter"xsi:noNamespaceSchemaLocation="../../Patterns.xsd"description="Discovery Pattern Description" schemaVersion="9.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

o XML요소<parameters>의경우:어댑터의필요에따라하위요소를업데이트합니다.

기본적으로밀어넣기어댑터를정의하는데는다음하위요소가사용됩니다.이러한값

은어댑터를구성한후에통합스튜디오에서통합포인트를정의할때할당됩니다.매개

변수목록을업데이트하여필수연결특성을매개변수목록에반영합니다. probeName

특성은제거하지마십시오.

o host: 웹서비스를호스팅하는서버이름입니다.

o port: 수신대기UCMDB데이터수신기서비스의포트입니다.

o Web Service Push Adapter: uri -데이터수신기의서비스끝점주소를구성하는

URL의나머지부분입니다.

o probeName: 밀어넣기작업이실행되는Data Flow Probe를정의합니다.

o XML요소<integration>의경우:하위요소<category>의값을Generic 이외의다른

값으로업데이트합니다.기본적으로일반범주에속한통합어댑터는통합스튜디오에

표시되지않습니다.타사데이터저장소와통합하려는경우이값을"Third Party"로설정

합니다.HPBTO제품과통합하려는경우에는이값을"HPBTO Products"로설정합니

다.

e. adapterCode\PushAdapter: 이폴더의이름을이전단계에서사용된어댑터 ID로바꿉

니다(예: adapterCode\MyPushAdapter).

f. discoveryScripts\<Jython_밀어넣기_스크립트>.py:push.properties

jythonScript.name 속성에정의된것과동일한이름의파일을만듭니다. discoveryScript

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 177/306 페이지

Page 178: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

파일에는CI 및외부Oracle 데이터베이스의링크를삽입하는스크립트가있습니다.

discoveryScripts\pushScript.py를작성한스크립트로바꿉니다.자세한내용은

"Jython 스크립트작성(183페이지)"을참조하십시오.스크립트의이름을바꾸면

adapterCode\<어댑터 ID>\push.properties의 jythonScript.name 속성이이에따라

업데이트됩니다.

o XML밀어넣기어댑터: pushScript.py

o 웹서비스밀어넣기어댑터:XMLtoWebService.py

g. tql\<통합_TQL>: 일반패키지와마찬가지로통합TQL의TQL XML정의를이디렉터리에

배치합니다.어댑터패키지를배포하면이폴더의모든TQL이배포됩니다.

h. discoveryConfigFiles\<밀어넣기_어댑터_이름>\mappings: 통합에서사용할TQL에

대해XML매핑파일을만듭니다.밀어넣기어댑터는매핑파일의변환을통합TQL의결과

에적용한다음Ad-hoc 작업의세매개변수(addResult, updateResult 및 deleteResult)

에있는데이터를Data Flow Probe로보냅니다.

i. adapterCode\<어댑터 ID>\mappings:mappings.xml 파일을준비한매핑파일로바

꿉니다.자세한내용은"매핑만들기(179페이지)"를참조하십시오.

XML밀어넣기어댑터:이매핑예는sql_queries 파일의ORACLE에생성된테이블의예에

해당합니다.

각TQL메서드에매핑파일을사용하려면해당TQL의이름을각XML파일에할당한후그

뒤에 .xml을추가합니다.이경우현재TQL이름에대한특정매핑파일이없으면기본적으

로mappings.xml 파일이사용됩니다. adapterCode\<어댑터 ID>\push.properties에

서mappingFile.default 속성을변경하여기본매핑파일의이름을수정할수있습니다.

4. 위내용을모두변경한후에위3단계에지정된폴더및파일을선택하여 .zip파일을만듭니다

(예:my_Push_Adapter.zip).

5. 패키지관리자(관리>패키지관리자로이동)를통해새로만든 .zip파일을UCMDB서버에배

포합니다.

6. 데이터흐름관리>통합스튜디오에서통합포인트를만들고통합포인트가사용하는통합

TQL을정의합니다.자동데이터밀어넣기에대한일정을설정합니다.

문제해결

새밀어넣기어댑터를작성하는절차에는완전하고올바른이름바꾸기및교체작업이필요합니다.

오류가있는경우어댑터에영향을미칠수있습니다.패키지의압축을푼다음UCMDB패키지로사

용할수있도록올바르게다시압축해야합니다.기본패키지를예제로참조하십시오.일반적인오류

에는다음이포함됩니다.

l ZIP파일의패키지디렉터리위에다른디렉터리포함.

해결방법:discoveryResources, adapterCode 등의패키지디렉터리와동일한디렉터리에패

키지를ZIP으로압축합니다.ZIP파일에서이디렉터리위에다른디렉터리수준을포함하지마

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 178/306 페이지

Page 179: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

십시오.

l 디렉터리,파일또는파일의문자열이름바꾸기생략.

해결방법: 이섹션에나와있는지침을매우주의하여따르십시오.

l 디렉터리,파일또는파일의문자열이름바꾸기맞춤법오류.

해결방법: 이름바꾸기절차를시작한후에중간에이름지정규칙을변경하지마십시오.이름을

변경해야할경우거꾸로되돌아가서이름을수정하려하면오류가발생할위험이높으므로이대

신처음부터다시시작하십시오.또한문자열을수동으로바꾸는대신찾기및바꾸기를사용하면

오류위험을줄일수있습니다.

l 특히discoveryResources및 adapterCode 디렉터리에서다른어댑터와동일한파일이름을

갖는어댑터배포.

해결방법: 매핑파일이동일한UCMDB환경에서다른어댑터와동일한이름을사용하지못하도

록하는,알려진문제가있는UCMDB버전을사용중일수있습니다.중복된이름을갖는패키지

를배포하려고할경우패키지배포에실패합니다.이러한파일이서로다른디렉터리에있는경

우에도이문제가발생할수있습니다.또한이문제는패키지내에서중복되는지또는이전에배

포된다른패키지와중복되는지여부에관계없이발생할수있습니다.

이제방금배포한새어댑터를사용하여통합스튜디오에서새밀어넣기어댑터작업을만들수있습

니다.

밀어넣기어댑터의 TQL 모범사례

1. TQL및보기트리에폴더구조를만든다음새TQL과보기를모두유지합니다.이름지정규칙

을사용합니다.

2. TQL이작지않은경우먼저가장유사한TQL을복사합니다.

3. 한번에한항목씩변경합니다.각내용을변경한후에는저장하고테스트한후미리보기를수

행합니다.결과가요구사항을준수할때까지반복합니다.

매핑만들기

원시TQL결과데이터는UCMDB클래스모델스키마형식으로되어있습니다.소비자는다른데이

터모델을사용할수도있습니다.밀어넣기어댑터는데이터를사용하기에더적합한형식으로변환

하는매핑메커니즘을제공합니다.매핑은직접,명명형식변환에서상위/하위집계및참조기능에

이르는직접및복합변환을모두수행합니다.

매핑사양에대해서는"매핑파일참조(207페이지)"섹션에나와있습니다.참조를사용하여매핑파

일을만드십시오.

참고: 어댑터속성파일은매핑파일의이름을참조합니다.어댑터구성파일에서어댑터는어댑

터의이름을사용하여폴더구조를구현합니다.패키지관리자에필요한고유성을유지하기위

해어댑터를구현할때는이폴더의이름을바꿉니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 179/306 페이지

Page 180: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매핑파일작성

매핑파일을작성하려면다음을수행합니다.

1. 기본매핑파일로시작합니다.

2. 어댑터를배포하고한번실행합니다.

3. 결과를검토합니다.

4. 변경해야할사항을식별합니다.

5. 이전단계에서식별한사항을변경합니다.다음목록은변경순서를안내합니다.

a. 위쪽의변형되지않은섹션부터시작합니다.각내용을변경한후에어댑터가실행되는지

확인합니다.

b. 원본CI 섹션을TQL결과의UCMDB이름으로변경합니다.

c. 먼저키를매핑합니다.

d. 그런다음직접매핑을모두추가합니다.

e. 복잡한매핑을추가합니다.

f. 링크매핑을추가합니다.

매핑된데이터가사용하기에적합해질때까지2-5단계를반복합니다.새밀어넣기어댑터를만들

적절한일반어댑터패키지를선택합니다.

매핑파일은모든유형의밀어넣기어댑터에대해동일한방식으로작동합니다.일반XML밀어넣기

어댑터는매핑된결과를파일에씁니다.일반웹서비스밀어넣기어댑터는XML결과를데이터수신

기로보냅니다.자세한내용은"일반웹서비스밀어넣기어댑터(189페이지)"를참조하십시오.

매핑파일준비

참고: mappings.xml 파일을만들지않고매핑없이CMDB에있는모든CI 및관계를검색할수

있습니다.그러면해당특성과함께모든CI 및관계가반환됩니다.

매핑파일을준비하는방법은다음두가지입니다.

l 하나의전역매핑파일을준비할수있습니다.

모든매핑이mappings.xml이라는하나의파일에배치됩니다.

l 각밀어넣기쿼리에대해별도의파일을준비할수있습니다.

각매핑파일은<쿼리이름>.xml이라고합니다.

자세한내용은"매핑파일스키마(209페이지)"를참조하십시오.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 180/306 페이지

Page 181: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이작업에는다음단계가포함됩니다.

l "mappings.xml 파일만들기(181페이지)"

l "CI 매핑(181페이지)"

l "링크매핑(182페이지)"

1. mappings.xml 파일만들기

매핑파일구조는다음과같이만들어집니다(기존파일을템플릿으로사용).

<?xml version="1.0" encoding="UTF-8"?><integration>    <info>        <source name="UCMDB" versions="9.x" vendor="HP" >        <!-- for example: -->        <target name="Oracle" versions="11g" vendor="Oracle" >    </info>    <targetcis>        <!--- CI Mappings --->    </targetcis>    <targetrelations>        <!--- Link Mappings --->    </ targetrelations></integration>

2. CI 매핑

다음두가지방법으로CMDB CI 유형을매핑합니다.

n 해당유형의CI와상속된모든유형이동일한방법으로매핑되도록CI 유형을매핑합니다.

<source_ci_type_tree name="node" mode="update_else_insert">    <apioutputseq>1</apioutputseq>    <target_ci_type name="host">        <targetprimarykey>            <pkey>name</pkey>        </targetprimarykey        <target_attribute name=" name" datatype="STRING">            <map type="direct" source_attribute="name" >        </target_attribute>        <!-- more target attributes --->    </target_ci_type></source_ci_type_tree>

n 해당유형의CI만처리되도록CI 유형을매핑합니다.다음두가지방법중하나를사용하여

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 181/306 페이지

Page 182: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

상속된유형도매핑해야상속된유형의CI가처리됩니다.

<source_ci_type name="node" mode="update_else_insert">    <apioutputseq>1</apioutputseq>    <target_ci_type name="host">        <targetprimarykey>            <pkey>name</pkey>        </targetprimarykey        <target_attribute name=" name" datatype="STRING">            <map type="direct" source_attribute="name" >        </target_attribute>        <!-- more target attributes --->    </target_ci_type></source_ci_type>

직접매핑된CI 유형(source_ci_type_tree를사용하여매핑되는상위중하나)은상위맵을해

당source_ci_type_tree 또는source_ci_type에표시하여다시정의할수도있습니다.

가능한경우source_ci_type_tree를사용하는것이좋습니다.그렇지않으면매핑파일에나타

나지않는CI 유형의결과CI가 Jython 스크립트에전송되지않습니다.

3. 링크매핑

다음두가지방법으로링크를매핑합니다.

n 해당유형의링크와상속된모든링크가동일한방법으로매핑되도록링크를매핑합니다.

<source_link_type_tree name="dependency" target_link_type="dependency"mode="update_else_insert" source_ci_type_end1="webservice" source_ci_type_end2="sap_gateway">    <target_ci_type_end1 name="webservice" >    <target_ci_type_end2 name="sap_gateway" >        <target_attribute name="name" datatype="STRING">            <map type="direct" source_attribute="name" >        </target_attribute></source_link_type_tree>

n 해당유형의링크만처리되도록링크를매핑합니다.다음두가지방법중하나를사용하여

상속된유형도매핑해야상속된유형의링크가처리됩니다.

<link source_link_type="dependency" target_link_type="dependency"mode="update_else_insert" source_ci_type_end1="webservice" source_ci_type_end2="sap_gateway">        <target_ci_type_end1 name="webservice" >        <target_ci_type_end2 name="sap_gateway" >

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 182/306 페이지

Page 183: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

        <target_attribute name="name" datatype="STRING">            <map type="direct" source_attribute="name" >    </target_attribute></link>

Jython 스크립트작성

매핑스크립트는일반Jython 스크립트이므로Jython 스크립트의규칙을따라야합니다.자세한내

용은"Jython 어댑터개발(35페이지)"을참조하십시오.

이스크립트는DiscoveryMain 함수를포함해야합니다.이함수는성공시빈OSHVResult 또는

DataPushResults 인스턴스를반환할수있습니다.

오류를보고하려면스크립트에서다음과같이예외를발생시켜야합니다.

raise Exception('Failed to insert to remote UCMDB using TopologyUpdateService.See log of the remote UCMDB')

DiscoveryMain 함수에서는외부응용프로그램에서밀어넣거나삭제할데이터항목을다음과같

은방법으로가져올수있습니다.

# get add/update/delete result objects (in XML format) from the FrameworkaddResult = Framework.getTriggerCIData('addResult')updateResult = Framework.getTriggerCIData('updateResult')deleteResult = Framework.getTriggerCIData('deleteResult')

외부응용프로그램에대한클라이언트개체는다음과같은방법으로가져올수있습니다.

oracleClient = Framework.createClient()

이클라이언트개체는어댑터가프레임워크를통해전달한자격증명 ID,호스트이름및포트번호

를자동으로사용합니다.

어댑터에대해정의한연결매개변수를사용해야하는경우(자세한내용은"어댑터패키지빌드

(176페이지)"의discoveryPatterns\push_adapter.xml 파일편집단계참조)다음코드를사용

하십시오.

propValue = str(Framework.getDestinationAttribute('<Connection Property Name'))

예:

serverName = Framework.getDestinationAttribute('ip_address')

이섹션에는다음내용도포함됩니다.

l "매핑결과사용(183페이지)"

l "스크립트에서연결테스트처리(186페이지)"

매핑결과사용

일반밀어넣기어댑터는대상시스템에서추가하거나,업데이트하거나,삭제할데이터를나타내는

XML문자열을만듭니다. Jython 스크립트는이XML을분석한다음대상에대한작업을추가하거

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 183/306 페이지

Page 184: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

나,업데이트하거나,삭제합니다.

Jython 스크립트가받는추가작업의XML에서개체및링크의 mamId특성은항상유형,특성또는기타정보가원격시스템의스키마로변경되기이전의원래개체또는링크의UCMDB식별자입니

다.

업데이트또는제거작업의XML에서각개체또는링크의 mamId특성에는이전동기화에서Jython스크립트가반환한같은 ExternalId의문자열표시가포함됩니다.

XML에서CI의 id특성에는외부 ID로 cmdbId가포함되거나또는CI가스크립트로전송될때CI에ExternalId가있는경우해당CI의 ExternalId가포함됩니다.링크의 end1Id및 end2Id필드는각링크끝에대해외부 id로 cmdbId또는링크끝에있는CI가스크립트로전송될때CI에 ExternalId가있는경우해당링크끝의 ExternalId가포함됩니다.

Jython 스크립트에서CI가처리될때,스크립트의반환값은CI의CMDB ID와지정된 id(스크립트

의각CI에지정된 id) 간의매핑입니다.CI를처음으로밀어넣는경우해당CI의XML에있는 id가

CMDB id입니다.CI를처음으로밀어넣는경우가아니면,해당CI id는처음으로밀어넣을때스크

립트의해당CI에지정된 id와같습니다.

다음과같이CI XML스크립트에서 id를검색합니다.

1. XML의CI 요소의 id속성에서 ID를검색합니다.예: id =objectElement.getAttributeValue('id')

2. XML에서 id를검색한후특성(string)에서 id를복원합니다.예: objectId =CmdbObjectID.Factory.restoreObjectID(id)

3. 이전단계에서받은 objectId가CMDB id인지확인합니다.스크립트에의해지정된새 id가objectId에있는지확인하여이작업을수행합니다.지정된새 id가있는경우반환된 id는CMDB id가아닙니다.예:

newId = objectId.getPropertyValue(<스크립트에 지정된 id 특성의 이름>)

newId가null이면XML로반환된 id가CMDB id입니다.

4. id가CMDB id일경우(즉, newId가null) 다음을수행합니다(id가CMDB id가아닐경우5단계로이동).

a. 새 id가포함된해당CI의속성을만듭니다.예: propArray =[TypesFactory.createProperty('<스크립트에 지정된 id 특성의 이름>', '<새id>')]

b. 해당CI의 externalId를만듭니다.예:cmdbId = extI.getPropertyValue('internal_id')className = extI.getType()externalId = ExternalIdFactory.createExternalCiId(className, propArray)

c. CMDB id를새로만든 externalId에매핑합니다. (다음단계에서는해당매핑을어댑터에반환합니다.)예: objectMappings.put(cmdbId, externalId)

d. 모든CI 및링크가매핑되면다음을수행합니다.

updateResult = DataPushResultsFactory.createDataPushResults

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 184/306 페이지

Page 185: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

(objectMappings, linkMappings);return updateResult

5. id가새 id일경우(즉, newId가null이아님), externalId는 newId입니다.

다음과같이각CI 및링크에대한밀어넣기상태를보고할수도있습니다.

1. updateStatus = ReplicationActionDataFactory.createUpdateStatus();

여기서 updateStatus는CI 및링크의상태가포함된 UpdateStatus클래스의인스턴스입니다.

2. reportCIStatus또는 reportRelationStatus메서드를호출하여 updateStatus에상태를추가합니다.

예:

status = ReplicationActionDataFactory.createStatus(Severity.FAILURE,'Failed', ERROR_CODE_CI, errorParams,Action.ADD);

updateStatus.reportCIStatus(externalId, status);

여기서 ERROR_CODE_CI는어댑터properties.errors 파일에나타나는오류메시지수이고(properties.errors 파일에대한자세한내용은"오류작성규칙(61페이지)"참조),

errorParams에는메시지에전달할매개변수가포함됩니다.자세한내용은ReplicationActionDataFactory javadoc를참조하십시오.

3. 다음과같이상태를포함한밀어넣기결과를만듭니다.

updateResult = DataPushResultsFactory.createDataPushResults(objectMappings,linkMappings, updateStatus);

return updateResult

XML결과의예

<root>

<data>

<objects>

<Object mode="update_else_insert" name="UCMDB_UNIX" operation="add"mamId="0c82f591bc3a584121b0b85efd90b174"id="HiddenRmiDataSource%0Aunix%0A1%0Ainternal_id%3DSTRING%3D0c82f591bc3a584121b0b85efd90b174%0A">

<field name="NAME" key="false" datatype="char" length="255">UNIX5</field>

<field name="DATA_NOTE" key="false" datatype="char" length="255"></field>

</Object>

</objects>

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 185/306 페이지

Page 186: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<links>

<link targetRelationshipClass="TALK" targetParent="unix" targetChild="unix" operation="add" mode="update_else_insert"mamId="265e985c6ec51a8543f461b30fa58f81"id="end1id%5BHiddenRmiDataSource%0Aunix%0A1%0Ainternal_id%3DSTRING%3D41372a1cbcaba27b214b84a2ec9eb535%0A%5D%0Aend2id%5BHiddenRmiDataSource%0Aunix%0A1%0Ainternal_id%3DSTRING%3D0c82f591bc3a584121b0b85efd90b174%0A%5D%0AHiddenRmiDataSource%0Atalk%0A1%0Ainternal_id%3DSTRING%3D265e985c6ec51a8543f461b30fa58f81%0A">

<field name="DiscoveryID1">41372a1cbcaba27b214b84a2ec9eb535</field>

<field name="DiscoveryID2">0c82f591bc3a584121b0b85efd90b174</field>

<field name="end1Id">HiddenRmiDataSource%0Aunix%0A1%0Ainternal_id%3DSTRING%3D41372a1cbcaba27b214b84a2ec9eb535%0A</field>

<field name="end2Id">HiddenRmiDataSource%0Aunix%0A1%0Ainternal_id%3DSTRING%3D0c82f591bc3a584121b0b85efd90b174%0A</field>

<field name="NAME" key="false" datatype="char" length="255">TALK4</field>

<field name="DATA_NOTE" key="false" datatype="char" length="255"></field>

</link>

</links>

</data>

</root>

참고: datatype="BYTE"의경우반환된결과값은 new String([the byte arrayattribute])으로생성된문자열입니다. byte[] object는 <받은 문자열>.getBytes()를사용하여재구성할수있습니다.서버와프로브간에기본로캘이다른경우서버의기본로캘에

따라다시만들기가수행됩니다.

스크립트에서연결테스트처리

Jython 스크립트를호출하여외부응용프로그램과의연결을테스트할수있습니다.이경우

testConnection대상특성은 true입니다.이특성은다음과같은방법으로프레임워크에서가져올수있습니다.

testConnection = Framework.getTriggerCIData('testConnection')

연결테스트모드에서실행하는경우외부응용프로그램과의연결을설정할수없으면스크립트에

서예외를발생시켜야합니다.그렇지않고연결에성공하면DiscoveryMain 함수가빈

OSHVResult를반환해야합니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 186/306 페이지

Page 187: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

차등동기화지원

밀어넣기어댑터에서차등동기화를지원하려면DiscoveryMain 함수가DataPushResults 인터페

이스를구현하는개체를반환해야합니다.이인터페이스에는Jython 스크립트가XML에서받는 ID

와Jython 스크립트가원격컴퓨터에서만드는 ID 간의매핑이포함됩니다.후자의 ID는ExternalId

유형입니다.

CMDB에있는CI의 ID를매개변수로수신하는ExternalIdUtil.restoreExternal 명령은CMDB에

있는CI의 ID에서외부 ID를복원합니다.예를들어,이명령을사용하여차등동기화를수행하는동

안양쪽끝중하나가벌크에포함되지않는(이미동기화되어서)상황에서링크를수신할수있습니

다.

밀어넣기어댑터의기반이되는Jython 스크립트의DiscoveryMain 메서드가빈

ObjectStateHolderVector 인스턴스를반환하면이어댑터에서차등동기화를지원하지않게됩니

다.즉,차등동기화작업을실행할때도사실상전체동기화가수행됩니다.따라서동기화할때마다

CMDB에모든데이터가추가되므로원격시스템에서데이터를업데이트하거나제거할수없습니

다.

중요: 버전9.00 또는9.01에서만든기존어댑터에서차등동기화를구현하는경우버전 9.02

이상에서push-adapter.zip 파일을사용하여어댑터패키지를다시만들어야합니다.자세한

내용은"어댑터패키지빌드(176페이지)"를참조하십시오.

이작업을수행하면밀어넣기어댑터에서차등동기화를수행할수있습니다.

Jython 스크립트가두개의Java맵이포함된DataPushResults 개체를반환합니다.포함된Java

맵하나는개체 ID 매핑에대한맵(키와값이ExternalCiId 유형의개체)이고또하나는링크 ID에대

한맵(키와값이ExternalRelationId유형의개체)입니다.

l Jython 스크립트에다음from 문을추가합니다.

from com.hp.ucmdb.federationspi.data.query.types import ExternalIdFactory

from com.hp.ucmdb.adapters.push import DataPushResults

from com.hp.ucmdb.adapters.push import DataPushResultsFactory

from com.mercury.topaz.cmdb.server.fcmdb.spi.data.query.types import ExternalIdUtil

l DataPushResultsFactory 기본클래스를사용하여DiscoveryMain 함수에서

DataPushResults 개체를가져옵니다.

# Create the UpdateResult object

updateResult = DataPushResultsFactory.createDataPushResults(objectMappings,

linkMappings);

l 다음명령을사용하여DataPushResults 개체에대한Java맵을만듭니다.

# Prepare the maps to store the mappings if IDs

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 187/306 페이지

Page 188: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

objectMappings = HashMap()

linkMappings = HashMap()

l ExternalIdFactory 클래스를사용하여다음ExternalId ID를만듭니다.

n CMDB에서가져온개체또는링크(예:추가작업의모든CI를CMDB에서가져옴)의

ExternalId:

externaCIlId = ExternalIdFactory.createExternalCmdbCiId(ciType, ciIDAsString)

externalRelationId = ExternalIdFactory.createExternalCmdbRelationId(linkType,

end1ExternalCIId,

end2ExternalCIId, linkIDAsString)

n CMDB에서가져오지않은개체또는링크(예:모든업데이트및제거작업에이러한개체포

함)의ExternalId:

myIDField = TypesFactory.createProperty("systemID", "1")

myExternalId = ExternalIdFactory.createExternalCiId(type,myIDField)

참고: Jython 스크립트가기존정보및개체또는링크 ID 변경내용을업데이트한경우

이전외부 ID와새외부 ID 간의매핑을반환해야합니다.

l ExternalIdFactory 클래스의 restoreCmdbCiIDString또는 restoreCmdbRelationIDString

메서드를사용하여UCMDB에서가져온개체또는링크의외부 ID에서UCMDB ID 문자열을검

색합니다.

l ExternalIdUtil 클래스의 restoreExternalCiId 및 restoreExternalRelationId메서드를사용하

여업데이트또는제거작업XML의mamId특성값에서ExternalId 개체를복원합니다.

참고: ExternalId 개체는사실상속성의배열입니다.즉, ExternalId 개체를사용하여원격

시스템에서데이터를식별하는데필요할수있는정보를저장할수있음을의미합니다.

일반 XML밀어넣기어댑터 SQL쿼리

어댑터패키지에서adapterCode > PushAdapter > sqlTablesCreation에있는sql_queries 파일

에는어댑터를테스트하기위해Oracle의새스키마에서테이블을만드는데필요한쿼리가포함되

어있습니다.이러한테이블은adapterCode\<adapter ID>\mappings\mappings.xml 파일에

해당합니다.

참고: sql_queries 파일은어댑터에필요하지않으며예제일뿐입니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 188/306 페이지

Page 189: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

일반웹서비스밀어넣기어댑터

일반웹서비스밀어넣기어댑터는쿼리데이터가포함된SOAP메시지를웹서비스데이터수신기

로밀어넣는(UCMDB에서시작)기능을제공합니다.매핑된결과는표준SOAP메시지형태로

HTTPPOST프로토콜을통해데이터수신기로전송됩니다.데이터수신기는밀어넣기어댑터에서

생성된SOAP메시지를인식해야합니다.적절한데이터수신기를쉽게개발할수있도록이밀어넣

기어댑터에는WSDL이제공됩니다.

SOAP메시지응답XML의사용자지정처리는Jython 스크립트에서가능합니다.

들어오는매핑된데이터의형식을이해하기위해데이터수신기개발자는매핑파일의개발자와의

사소통해야합니다. .xsd는현재이버전의웹서비스밀어넣기어댑터에제공되지않으므로원래

TQL과적용된매핑이결합된들어오는데이터를어느정도반영하여데이터를처리해야합니다.

아래다이어그램에는데이터를클라이언트로밀어넣는웹서비스밀어넣기어댑터기능이나와있

습니다.녹색으로표시된항목은특정밀어넣기대상에대해어댑터를구현하기위해클라이언트가

사용자지정하거나제공하는것입니다.파란색으로표시된항목은기본구성요소입니다.

다음은ESB(Enterprise Service Bus)를사용하여MDR별밀어넣기어댑터에대해일반웹서비스

밀어넣기어댑터를구현하는예입니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 189/306 페이지

Page 190: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

WSDL

WSDL은웹서비스를통해UCMDB밀어넣기어댑터와통신할수있는데이터수신기를만드는클

라이언트개발자에게제공됩니다.UCMDBDataReceiver.wsdl은UCDMB에서데이터수신기로

데이터를전달하는데사용되는SOAP메시지에대해설명합니다.다음은WSDL의설계다이어그램

입니다.

데이터수신기(실제로서버또는SOAP용어로는"서비스끝점")는UCMDB가밀어넣는데이터집

합에해당하는세가지메서드,즉addData, deleteData 및 updateData를구현해야합니다.HTTP

헤더에는보내려는데이터의유형을나타내는올바른SoapAction 키워드가포함되어있습니다.데

이터수신기는비즈니스논리를구현하고데이터를처리하는역할을담당합니다.

기본WSDL URL은다음과같습니다.

l http://localhost:8080/UCMDBDataReceiver/services/UCMDBDataReceiver?wsdl

데이터수신기에서구현한URL은다음과유사할수있습니다.

l http://te-

stWSPAserver:4444/MyCo.IT.SvcMgt.ws.us:provider/UCMDBDataReceiver?wsdl

웹서비스의URL은끝에있는"?wsdl"을뺀WSDL URL과동일합니다.

아래에는WSDL의원본이나와있습니다.

<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions targetNamespace="http://ucmdb.hp.com"xmlns:apachesoap="http://xml.apache.org/xml-soap"xmlns:impl="http://ucmdb.hp.com" xmlns:intf="http://ucmdb.hp.com"xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!--WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48PDT)-->

<wsdl:types>

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 190/306 페이지

Page 191: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<schema elementFormDefault="qualified"targetNamespace="http://ucmdb.hp.com"xmlns="http://www.w3.org/2001/XMLSchema">

<element name="addData">

<complexType>

<sequence>

<element name="xmlAdded" type="xsd:string"/>

</sequence>

</complexType>

</element>

<element name="addDataResponse">

<complexType/>

</element>

<element name="deleteData">

<complexType>

<sequence>

<element name="xmlDeleted" type="xsd:string"/>

</sequence>

</complexType>

</element>

<element name="deleteDataResponse">

<complexType/>

</element>

<element name="updateData">

<complexType>

<sequence>

<element name="xmlUpdate" type="xsd:string"/>

</sequence>

</complexType>

</element>

<element name="updateDataResponse">

<complexType/>

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 191/306 페이지

Page 192: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

</element>

</schema>

</wsdl:types>

<wsdl:message name="addDataRequest">

<wsdl:part element="impl:addData" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:message name="deleteDataResponse">

<wsdl:part element="impl:deleteDataResponse" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:message name="updateDataResponse">

<wsdl:part element="impl:updateDataResponse" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:message name="deleteDataRequest">

<wsdl:part element="impl:deleteData" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:message name="addDataResponse">

<wsdl:part element="impl:addDataResponse" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:message name="updateDataRequest">

<wsdl:part element="impl:updateData" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:portType name="UCMDBDataReceiver">

<wsdl:operation name="addData">

<wsdlsoap:operation soapAction="addDataRequest"/>

<wsdl:input message="impl:addDataRequest" name="addDataRequest">

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 192/306 페이지

Page 193: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

</wsdl:input>

<wsdl:output message="impl:addDataResponse"name="addDataResponse">

</wsdl:output>

</wsdl:operation>

<wsdl:operation name="deleteData">

<wsdlsoap:operation soapAction="deleteDataRequest"/>

<wsdl:input message="impl:deleteDataRequest"name="deleteDataRequest">

</wsdl:input>

<wsdl:output message="impl:deleteDataResponse"name="deleteDataResponse">

</wsdl:output>

</wsdl:operation>

<wsdl:operation name="updateData">

<wsdlsoap:operation soapAction="updateDataRequest"/>

<wsdl:input message="impl:updateDataRequest"name="updateDataRequest">

</wsdl:input>

<wsdl:output message="impl:updateDataResponse"name="updateDataResponse">

</wsdl:output>

</wsdl:operation>

</wsdl:portType>

<wsdl:binding name="UCMDBDataReceiverSoapBinding"type="impl:UCMDBDataReceiver">

<wsdlsoap:binding style="document"transport="http://schemas.xmlsoap.org/soap/http" />

<wsdl:operation name="addData">

<wsdl:input name="addDataRequest">

<wsdlsoap:body use="literal" />

</wsdl:input>

<wsdl:output name="addDataResponse">

<wsdlsoap:body use="literal" />

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 193/306 페이지

Page 194: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

</wsdl:output>

</wsdl:operation>

<wsdl:operation name="deleteData">

<wsdl:input name="deleteDataRequest">

<wsdlsoap:body use="literal" />

</wsdl:input>

<wsdl:output name="deleteDataResponse">

<wsdlsoap:body use="literal" />

</wsdl:output>

</wsdl:operation>

<wsdl:operation name="updateData">

<wsdl:input name="updateDataRequest">

<wsdlsoap:body use="literal" />

</wsdl:input>

<wsdl:output name="updateDataResponse">

<wsdlsoap:body use="literal" />

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:service name="UCMDBDataReceiverService">

<wsdl:port binding="impl:UCMDBDataReceiverSoapBinding"name="UCMDBDataReceiver">

<wsdlsoap:addresslocation="http://localhost:8080/UCMDBDataReceiver/services/UCMDBDataReceiver"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

응답처리

데이터수신기는addDataResponse, deleteDataResponse 또는updateDataResponse 구조로

문자열을반환해야합니다.어댑터는처리되지않은응답데이터를프로브의probeMgr-

adaptersDebug.log로전달합니다.수신기는문자열데이터를반환할수있으며응답은SOAP준

수XML로래핑됩니다. Jython 스크립트에서SOAPMessage 및관련Java클래스를사용하여응답

메시지의구문을분석할수있습니다.다음은데이터수신기에서보내는응답메시지의예입니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 194/306 페이지

Page 195: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<2012-03-16 15:47:38,080> [INFO ] [Thread-110] - XMLtoWebService.py:addDatareceived response:

<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">

<intf:addDataResponse xmlns:intf="http://ucmdb.hp.com">

<xml>&lt;result&gt;&lt;status&gt;error&lt;/status&gt;&lt;message&gt;Error publishing config item changes&lt;/message&gt;&lt;/result&gt;</xml>

</intf:addDataResponse>

</soapenv:Body>

위에표시된메시지는<Error publishing config item changes>라는오류메시지이지만,컨텐츠

는데이터수신기가응답하도록설계된어느것이든될수있습니다.여기서응답은오류메시지이

며,이것은단순히의도된것으로설계자는밀어넣기어댑터가성공또는실패를나타내는것을응답

으로예상한다고설명합니다.컨텐츠는성공적으로추가된모든CI의조정 ID 또는특정CI의경우

오류메시지일수있습니다.GWSPA의사용자지정에는응답메시지의구문분석및일부CI 다시보

내기,기타로깅수행등의작업이포함될수있습니다.

WSDL 테스트

SOAPUI Eclipse 플러그인은개발중에웹서비스레이어를테스트하는데사용됩니다.SOAPUI를

사용하면웹서비스를사용자지정하는데도움이될수있습니다.SOAPUI는SOAP메시지작성,보

내기및받기를테스트할수있는 IDE(통합개발환경)를제공합니다.SOAPUI 퍼스펙티브에서

190-194페이지의WSDL은다음과같은샘플메시지를생성했습니다.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:ucm="http://ucmdb.hp.com">

<soapenv:Header/>

<soapenv:Body>

<ucm:addData>

<ucm:xmlAdded>?</ucm:xmlAdded>

</ucm:addData>

</soapenv:Body>

</soapenv:Envelope>

위xmlAdded요소의 "?"는웹서비스밀어넣기어댑터통합에서제공한데이터의위치입니다.

결과관찰

밀어넣기어댑터가디버그이외의모드에서정상적으로작동할경우데이터는최종결과가기록될

때까지파일에기록되지않습니다. (중간TQL결과와매핑된데이터결과는일반적으로로그파일에

표시되지않습니다.)그러나아래표시된대로DiscoveryMain 섹션에서 logger.debug문의주석

처리를제거("#"문자제거)하여프로브의디버그파일에결과를쓸수있습니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 195/306 페이지

Page 196: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

logger문이다른이전줄및다음줄과동일한열에서시작하도록하십시오. Jython은들여쓰기에

민감하므로모든줄의들여쓰기가올바르지않으면스크립트가실패합니다.

여기서프로브의디버그로그파일probeMgr-adaptersDebug.log는다음과같은출력내용을표

시합니다.

<2011-12-07 14:02:23,019> [INFO ] [Thread-273] - XMLtoWebService.py started

<2011-12-07 14:02:23,019> [DEBUG] [Thread-273] - ESB Push parameters:

<2011-12-07 14:02:23,019> [DEBUG] [Thread-273] - Wshost=harpy.trtc.com

<2011-12-07 14:02:23,019> [DEBUG] [Thread-273] - WShostport=5555

<2011-12-07 14:02:23,019> [DEBUG] [Thread-273] -WSuri=ws/DtITServiceManagement.esla.v1.ws.provider:UMDBDataReceiver

<2011-12-07 14:02:23,019> [INFO ] [Thread-273] - URL ishttp://harpy.trtc.com:5555/ws/DtITServiceManagement.esla.v1.ws.provider:UMDBDataReceiver

<2011-12-07 14:02:23,035> [DEBUG] [Thread-273] - Connected tohttp://harpy.trtc.com:5555/ws/DtITServiceManagement.esla.v1.ws.provider:UMDBDataReceiver

<2011-12-07 14:02:23,035> [ERROR] [Thread-273] - sending results

<2011-12-07 14:02:23,035> [DEBUG] [Thread-273] - <?xml version="1.0"encoding="UTF-8"?>

<root>

<data>

<objects>

<Object mode="" name="u_imp_ip_switch" operation="add"mamId="9e8c2f6bdfe4b7d0864c79e70833902c">

<field name="Correlation ID" key="true" datatype="char"length="">9e8c2f6bdfe4b7d0864c79e70833902c</field>

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 196/306 페이지

Page 197: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<field name="name" key="false" datatype="char"length="">nma_09sw</field>

<field name="location" key="false" datatype="char"length="" />

<field name="u_chassis_vendor_type" key="false"datatype="char" length="">ciscoCat2960-24TT</field>

<field name="serial_number" key="false" datatype="char"length="" />

<field name="ram" key="false" datatype="char" length="" />

<field name="os_version" key="false" datatype="char"length="" />

</Object>

Jython스크립트수정

XMLtoWebService.py

웹서비스밀어넣기어댑터가사용하는Jython 스크립트는XML밀어넣기어댑터와매우비슷합니

다.이스크립트는어댑터에포함된UCMDBDataReceiver.jar을사용합니다.이스크립트는

SendDataToReceiver() 메서드를구현합니다.SendDataToReceiver()는다음세가지매개변수

를사용합니다.

1. 수행(add, update 또는delete)

2. 데이터수신기의URL

3. 데이터

예를들어add블록은SendDataToReceiver("add", URL, addResult)와같습니다.

모든웹서비스와SOAP레이어가래핑됩니다.URL은UCMDB데이터수신기의서비스끝점주소입

니다.이URL은 "?wsdl" 접미사를통해wsdl을가져오는데사용되는URL과동일합니다.

아래에는Jython 스크립트의원본이나와있습니다.웹서비스통합래퍼줄은녹색으로강조표시

되어있습니다.

####################################

# script: XMLtoWebService.py

####################################

# This jython script accepts TQL data results (adds, updates, and deletes)from the Integration adapter.

# and sends it to a web service. The web service is called UCMDBDataReceiver.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 197/306 페이지

Page 198: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

# A web service client of this name must be addressable at the URL providedby the parameters.

# The SendDataToReceiver.jar exposes the SendDataToReceiver function, as wellas the service locator.

# examples of the service locator are in the testconnection section.

# regular expressions

import re

# logging

import logger

# web service interface

from com.hp.ucmdb import SendDataToReceiver

from com.hp.ucmdb.SendDataToReceiver import locateService

from com.hp.ucmdb.SendDataToReceiver import SendData

##############################################

######## VARIABLES ##########

##############################################

SCRIPT_NAME = "XMLtoWebService.py"

logger.info(SCRIPT_NAME+" started")

def cleanUp(str):

# replace mode=""

str = re.sub("mode=\"\w+\"\s+", "", str)

# replace mamId with id

str = re.sub("\smamId=\"", " id=\"", str)

# replace empty attributes

str = re.sub("[\n|\s|\r]*<field name=\"\w+\" datatype=\"\w+\" />", "",str)

# replace targetRelationshipClass with name

str = re.sub("\stargetRelationshipClass=\"", " name=\"", str)

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 198/306 페이지

Page 199: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

# replace Object with object with name

str = re.sub("<Object mode=\"", "<object mode=\"", str)

str = re.sub("<Object operation=\"", "<object operation=\"", str)

str = re.sub("<Object name=\"", "<object name=\"", str)

str = re.sub("</Object>", "</object>", str)

# replace field to attribute

str = re.sub("<field name=\"", "<attribute name=\"", str)

str = re.sub("</field>", "</attribute>", str)

#logger.debug("String = %s" % str)

#logger.debug("cleaned up")

return str

def isEmpty(xml, type = ""):

objectsEmpty = 0

linksEmpty = 0

m = re.findall("<objects />", xml)

if m:

#logger.warn("\t[%s] No objects found" % type)

objectsEmpty = 1

m = re.findall("<links />", xml)

if m:

#logger.warn("\t[%s] No links found" % type)

linksEmpty = 1

if objectsEmpty and linksEmpty:

return 1

return 0

##############################################

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 199/306 페이지

Page 200: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

######## MAIN ##########

##############################################

def DiscoveryMain(Framework):

#fix this for web service export

errMsg = "UCMDBDataReceiver Service not found."

testConnection = Framework.getTriggerCIData("testConnection")

# Get Web Service Push variables

WShostName = Framework.getTriggerCIData("Host Name")

WShostport = Framework.getTriggerCIData("Protocol Port")

WSuri = Framework.getTriggerCIData("URI")

logger.info(SCRIPT_NAME+":ESB Push parameters:")

logger.info("Host Name="+WShostName)

logger.info("Protocol Port="+WShostport)

logger.info("URI="+WSuri)

URL = "http://"+WShostName+":"+WShostport+"/"+WSuri

logger.info("URL="+URL)

if testConnection == 'true':

# locate the service

test_receiver = SendDataToReceiver()

locator = test_receiver.locateService(URL)

#locator = locateService(URL)

if(locator):

logger.info(SCRIPT_NAME+":Test connection was successful")

return

else:

raise Exception, errMsg

return

# do same thing here if not just a test connection -

receiver = SendDataToReceiver()

locator = receiver.locateService(URL)

if(locator):

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 200/306 페이지

Page 201: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

logger.info(SCRIPT_NAME+":Connected to "+URL)

else:

logger.error(SCRIPT_NAME+":no locator")

raise Exception, errMsg

return

# get add/update/delete result objects from the Framework

addResult = Framework.getTriggerCIData('addResult')

updateResult = Framework.getTriggerCIData('updateResult')

deleteResult = Framework.getTriggerCIData('deleteResult')

logger.debug(deleteResult)

# get referenced data - unused in this adapter implementation

#addRefResult = Framework.getTriggerCIData('referencedAddResult')

#updateRefResult = Framework.getTriggerCIData('referencedUpdateResult')

#deleteRefResult = Framework.getTriggerCIData('referencedDeleteResult')

# uncomment out the logger statements to see the data

empty = isEmpty(addResult, "addResult")

if not empty:

addResult = cleanUp(addResult)

# send to ESB web service

logger.info(SCRIPT_NAME+":sending addData Result")

rcvr = SendDataToReceiver()

resp = rcvr.SendData("add", URL, addResult)

logger.info(SCRIPT_NAME+":addData received response:"+resp)

#logger.debug(addResult)

empty = isEmpty(updateResult, "updateResult")

if not empty:

updateResult = cleanUp(updateResult)

# send to ESB web service

#logger.debug(updateResult)

logger.info(SCRIPT_NAME+":sending updateData Result")

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 201/306 페이지

Page 202: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

rcvr = SendDataToReceiver()

resp = rcvr.SendData("update", URL, updateResult)

logger.info(SCRIPT_NAME+":received response:"+resp)

empty = isEmpty(deleteResult, "deleteResult")

if not empty:

deleteResult = cleanUp(deleteResult)

# send to ESB web service

#logger.debug(deleteResult)

logger.info(SCRIPT_NAME+":sending deleteData Result")

rcvr = SendDataToReceiver()

resp = rcvr.SendData("delete", URL, deleteResult)

logger.info(SCRIPT_NAME+":received response:"+resp)

logger.info(SCRIPT_NAME+" ended")

응답메시지처리사용자지정

데이터수신기는응답또는원하는상태가포함된문자열을반환해야합니다.웹서비스밀어넣기어

댑터는기본적으로응답을프로브의정보수준로그로전달합니다.응답메시지는반환된응답문자

열이포함된SOAP형식의XML입니다.수신기는그룹화되었거나개별오류또는성공메시지등의

모든데이터를반환할수있습니다.추가처리가필요한경우어댑터의Jython 스크립트를통해응

답을처리할수있습니다. Java프로그래밍은필요하지않습니다.

다음을사용하여보낸반환응답메시지의예는그아래에나와있습니다.

// stub example for building your own UCMDBDataData Receiver

public class UCMDBDataReceiver {

public String addData (String xmlAdd){

System.out.println(xmlAdd); // do something with the data

// send back a response message based on what you did

String tr = new String("a test response from addData!");

return tr;

}

즉,아래와같습니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 202/306 페이지

Page 203: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">

<addDataResponse xmlns="http://ucmdb.hp.com">

<addDataReturn>a test response from addData!</addDataReturn>

</addDataResponse>

</soapenv:Body>

데이터수신기수정

Java클라이언트는UCMDBDataReceiver.jar에포함된클래스를구현하고Jython과동일한방식

으로웹서비스를호출할수있습니다.또한래핑되지않은메서드를호출할수도있습니다.

UCMDBDataReceiver.jar 클래스에대해서는Javadoc가있습니다.아래원본코드는이러한필수

메서드를사용하여데이터를SOAP메시지로래핑한후HTTP를통해수신기로보내는방법을보여

줍니다.

이프로세스는UCMDBDataReceiverServiceLocator 개체를만든다음

UCMDBDataReceiverEndPointAddress를데이터수신기의URL에할당하는단계로진행됩니다.

데이터를보내기위해로케이터의getUCMDBDataReceiver 메서드가호출되어

UCMDBDataReceiver 개체를만듭니다.UCMDBDataReceiver 개체는실제로추가/변경/삭제

데이터를보내는메서드를구현합니다.각요청유형을처리하기위한세가지동일한코드블록이

있습니다.

SendDataToReceiver 클래스의원본코드는아래에나열되어있습니다.강조표시된개체와

메서드는필수적으로사용해야할요소입니다.

/**

* Test SendData for the UCMDB Data Receiver for the UCMDB Web Service PushAdapter

*/

package com.hp.ucmdb;

import com.hp.ucmdb.SendDataToReceiver;

/**

* TestSendData can be used to verify the SOAP classes are working.

* TestSendData creates a SendDataToReceiver class and invokes its SendDatamethod.

* a response String is returned.

* The test URL is typically appended with "?wsdl" to get the WSDL of theservice.

*/

public class TestSendData {

/**

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 203/306 페이지

Page 204: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

* @param args - test SOAP message.

* optional arguments [0] a test string [1] a service endpoint URL of aData Receiver.

* the default URL is sent the incoming argument as a test message.

* the default URL is"http://localhost:8080/UCMDBDataReceiver/services/UCMDBDataReceiver".

* If any errors are encountered, TestClient will attempt to throwexceptions.

*/

public static void main(String[] args) {

// use test message if supplied, otherwise supply a default teststring

String teststring = new String("Test SOAP message fromUCMDBDataReceiver TestSendData.");

if(args.length > 0) {

teststring = args[0];

}

// use test URL if supplied, otherwise supply the default URL

String URL = new String("");

if(args.length > 1) {

URL = args[1];

}

// return response

String response = new String("");

// perform the tests

try {

if(URL.equals("")) {

UCMDBDataReceiverServiceLocator locator = newUCMDBDataReceiverServiceLocator();

UCMDBDataReceiver receiver = locator.getUCMDBDataReceiver();

URL = locator.getUCMDBDataReceiverAddress();

System.out.println("TestClient: testedURL="+locator.getUCMDBDataReceiverAddress());

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 204/306 페이지

Page 205: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

System.out.println("TestClient:receiver="+receiver.toString());

}

SendDataToReceiver sdtr = new SendDataToReceiver();

// this sends a test push and gets a response message

response = sdtr.SendData("add", URL, args[0]);

System.out.println("Response received was:"+response);

} catch(Exception e){

System.out.println("TestClient: Remote Error:");

e.printStackTrace();

}

}

}

원본코드는또한다른클래스의UCMDBDataReceiver.jar 파일에도포함되어있습니다.

l TestClient.java

l UCMDBDataReceiver.java

l UCMDBDataReceiverProxy.java

l UCMDBDataReceiverService.java

l UCMDBDataReceiverServiceLocator.java

l UCMDBDataReceiverSoapBindingStub.java

원본은Eclipse IDE에서생성된후수정되었습니다.UCMDB코드의대부분은SOAP사양및

UCMDB데이터수신기와일치하도록자동생성되었으므로이코드를수정할때는주의해야합니

다.

Javadoc

일반웹서비스밀어넣기어댑터에는전체주석처리된 javadoc가제공됩니다. javadoc는docs폴

더 javadoc에포함되어있습니다. index.html부터시작합니다.개요페이지에서는SDK의모든클

래스및메서드에대한설명서에액세스할수있습니다.

모든클래스

l SendDataToReceiver: 웹서비스래퍼의API입니다.

l TestClient: 클라이언트를테스트하여서비스끝점에대한연결을확인합니다.

l UCMDBDataReceiver: 웹서비스래퍼입니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 205/306 페이지

Page 206: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

나머지는웹서비스작성기에의해자동으로생성됩니다.

l UCMDBDataReceiverProxy

l UCMDBDataReceiverService

l UCMDBDataReceiverServiceLocator

l UCMDBDataReceiverSoapBindingStub

개요

원본코드예제를포함한SDK의기본사용법에대해서는패키지의설명서에설명되어있습니다.이

javadoc는UCMDB웹서비스밀어넣기어댑터용입니다. Jython 또는Java에서API를호출할수

있습니다.

SDK는TestClient, SendDataToReceiver 등의두가지원본샘플을제공합니다. TestClient는응

답하는로컬클라이언트에대해매우제한된테스트를제공합니다.SendDataToReceiver는데이

터를웹서비스로보내는데사용되는기본클래스입니다.

먼저이SDK(주로동봉된WSDL)를사용하여UCMDB데이터수신기를구현하여이웹서비스와통

신합니다.그런다음이SDK를사용하여UCMDB에밀어넣기어댑터를만들어UCMDB TQL결과

데이터를데이터수신기에밀어넣습니다.아래에서는Jython 및 Java구현을모두포함하여이API

의기본사용법에대해설명합니다.

SendDataToReceiver() 구현

SendDataToReceiver()는다음과같이단일메서드를사용하여모든기능을래핑합니다.

l Jython: SendDataToReceiver("add",yourURL,"Hello!")

l Java: SendDataToReceiver("add",yourURL,"Hello!");

또는아래표시된대로SendDataToReceiver 개체를만든다음(예:다른설정을조작하려는경우)

별도로SendData 메서드를호출합니다.

l Jython:

rcvr = SendDataToReceiver()

responseMsg = rcvr.SendData(“add”, yourURL, “Hello!”)

l Java:

SendDataToReceiver rcvr = new SendDataToReceiver();

String responseMsg = rcvr.SendData(“add”, yourURL, “Hello!”);

또는한번에하나씩해야할경우에는다음과같이할수있습니다.

1. 아래와같이새UCMDBDataReceiverServiceLocator() 개체x를만든다음나중에개체의끝

점주소를설정합니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 206/306 페이지

Page 207: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

n Jython:

x = UCMDBDataReceiverServiceLocator()

x.setUCMDBDataReceiverEndPointAddress(URL)

n Java :

UCMDBDataReceiverServiceLocator x = new UCMDBDataReceiverServiceLocator();

x. setUCMDBDataReceiverEndPointAddress(URL);

2. 그런후다음을사용하여UCMDBDataReceiver를만듭니다.

n Jython:y = x.getUCMDBDataReceiver()

n Java:UCMDBDataReceiver y = x.getUCMDBDataReceiver();

3. 그런후다음과같이SOAP웹서비스를통해데이터를보냅니다.

n Jython:

o y.addData(yourData)

o 또는 y.updateData(yourData)

o 또는 y.deleteData(yourData)

n Java:

o y.addData(yourData);

o 또는 y.updateData(yourData);

o 또는 y.deleteData(yourData);

4. 연결을테스트해야할수있습니다.테스트에성공할경우동일한로케이터개체를다시사용하

여데이터전송에사용할UCDMBDataReceiver를반환할수있습니다.

클래스에는소멸자가포함되어있지않으며메모리관리를수행하지않습니다.

매핑파일참조

매핑사용

변환된XML출력의각대상특성에대해매핑을만들어야합니다.매핑은데이터를가져올위치와

방법을지정합니다.데이터가UCMDB의다른해당특성에있는경우에는직접매핑이사용됩니다.

여러특성에서데이터를끌어오거나UCMDB CI의하위또는상위CI의특성에서특성을끌어오려

면다른복잡한매핑이필요할수있습니다.아래의매핑스키마는가능한모든매핑을보여줍니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 207/306 페이지

Page 208: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매핑파일은UCMDB의어떤CI/관계유형이대상데이터저장소의어떤CI/관계유형으로매핑되

는지를정의하는XML파일입니다.형식에대해서는아래에서자세히설명합니다.매핑파일은밀어

넣을CI 및관계유형을제어할뿐아니라정확히어떤특성을밀어넣을지제어합니다.

대상MDR로밀어넣을각특성에대해매핑항목이있습니다.각매핑항목은원시UCMDB밀어넣

기데이터에있는하나이상의특성으로구성될수있습니다.매핑항목은대상MDR로밀어넣을데

이터의최종구조및이름지정을완전히세부적으로제어할수있게해줍니다.

직접매핑

매핑은데이터모델을변환합니다(이경우UCMDB를밀어넣기대상MDR로변환). UCMDB특성과

대상간의관계가1:1 관계인경우이름과유형만다르기때문에변환작업이간단할수있습니다.

대부분의특성매핑은직접매핑입니다.예를들어서버이름"ServerX"는UCMDB에서길이가50이

고유형이string이며특성이름이primary_server_name인unix 유형의CI로표시될수있습니다.

대상MDR의데이터모델은최대길이가250이고유형이char[]이며특성이름이hostname인CI

유형 linux와동일한논리적엔터티를지정할수있습니다.직접매핑은이와같은모든유형의변환

작업을수행할수있습니다.

다음은직접매핑의예입니다.

<target_attribute name="dns_domain" datatype="char">

<map type="direct" source_attribute="domain_name" />

</target_attribute>

이직접매핑은UCMDB특성dns_domain을대상데이터모델의domain_name 특성에매핑합니

다.

실제데이터유형을사용해야하는경우가아니면실제데이터유형에관계없이char 데이터유형을

사용합니다.

복잡한매핑

좀더복잡한매핑을통해다음과같은변환을추가로수행할수있습니다.

l 여러CI의특성값을하나의대상CI에매핑

l 하위CI(container_f 또는포함된관계가있는CI)의특성을대상데이터저장소의상위CI에매

핑(예:대상호스트CI에서Number of CPUs값설정).또다른예로는UCMDB에있는호스트

CI의모든메모리CI의메모리크기값을더하여대상호스트CI에서Total Memory 값을설정하

는것을들수있습니다.

l 상위CI(container_f 또는포함된관계가있는CI)의특성을대상데이터저장소의CI에매핑(예:

UCMDB에있는소프트웨어CI의포함호스트에서값을가져와서설치된소프트웨어CI라는대

상특성에서Container Server 값설정)

다음은쉼표문자로구분된두개의원본특성을사용하여대상특성"os"를만드는복잡한매핑의예

입니다.

<target_attribute name="os" datatype="char">

<map type="compoundstring">

<source_attribute name="discovered_os_name" />

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 208/306 페이지

Page 209: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

<constant value="," />

<source_attribute name="host_osinstalltype" />

</map>

</target_attribute>

링크방향바꾸기

UCMDB에는원본간에구조가다른데이터가포함되어있을수있습니다.예를들어 IpAddress CI

와 Interface CI 간의관계는parent일수있으며이러한관계는HPNetwork Node Manager통합

에서발생할수있습니다.또는Universal Discovery에서일반적으로생성되는containment링크

일수있습니다.또한이러한링크의방향은서로반대방향입니다.

현재는매핑파일에서링크의방향을반대로바꿀수없습니다. _end1 및 _end2 변수를뒤바꾸면

변환된XML에서데이터의순서가바뀌거나원본데이터에링크가누락됩니다.

이문제를해결할수있는한가지가능한방법은다음과같이엔리치먼트규칙을정의하는것입니

다.

1. 엔리치먼트의TQL부분은밀어넣기어댑터에서사용하는TQL의하위집합입니다.이TQL은

특히변환된XML에서기대되는것과반대방향의링크를모두선별합니다.

2. 엔리치먼트부분은올바른방향및원하는유형의새링크를정의합니다.

3. 엔리치먼트가활성화된다음올바른링크를만듭니다.

4. 통합작업TQL은이제원본링크가아닌향상된링크를참조합니다.

5. 그런다음밀어넣기어댑터의<link>매핑에서도향상된링크를참조하고유형및방향이일관

된링크집합을생성합니다.

매핑파일스키마

요소이름및경로 설명 특성

integration 파일의매핑컨텐츠를

정의합니다.시작줄및

주석을제외하고파일

에서가장바깥쪽블록

이어야합니다.

info

(integration)

통합할데이터저장소

에대한정보를정의합

니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 209/306 페이지

Page 210: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

source

(integration > info)

원본데이터저장소에

대한정보를정의합니

다.

1. 이름: type

설명: 원본데이터저장소의이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: versions설명: 원본데이터저장소의버전입니다.

필수여부: 필수

유형: 문자열

3. 이름: vendor

설명: 원본데이터저장소의벤더입니다.

필수여부: 필수

유형: 문자열

target

(integration > info)

대상데이터저장소에

대한정보를정의합니

다.

1. 이름: type

설명: 원본데이터저장소의이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: versions

설명: 원본데이터저장소의버전입니다.

필수여부: 필수

유형: 문자열

3. 이름: vendor

설명: 원본데이터저장소의벤더입니다.

필수여부: 필수

유형: 문자열

targetcis

(integration)

모든CIT 매핑의컨테

이너요소입니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 210/306 페이지

Page 211: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

source_ci_type_tree

(integration >

targetcis)

원본CIT와원본에서

상속하는모든CI 유형

을정의합니다.

1. 이름: name

설명: 원본CIT의이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: mode

설명: 현재CI 유형에필요한업데이트유

형입니다.

필수여부: 필수

유형: 다음문자열중하나입니다.

a. insert: CI가아직없는경우에만사용

합니다.

b. update: CI가있는경우에만사용합니

다.

c. update_else_insert: CI가있는경우

업데이트하고,그렇지않으면새CI를만

듭니다.

d. ignore: 이CI 유형으로는아무작업도

수행하지않습니다.

source_ci_type

(integration >

targetcis)

원본에서상속하는CI

유형없이원본CIT를

정의합니다.

1. 이름: name

설명: 원본CIT의이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: mode

설명: 현재CI 유형에필요한업데이트유

형입니다.

필수여부: 필수

유형: 다음문자열중하나입니다.

a. insert: CI가아직없는경우에만사용

합니다.

b. update: CI가있는경우에만사용합니

다.

c. update_else_insert: CI가있는경우

업데이트하고,그렇지않으면새CI를만

듭니다.

d. ignore: 이CI 유형으로는아무작업도

수행하지않습니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 211/306 페이지

Page 212: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

target_ci_type

(integration >

targetcis >

source_ci_type

-또는-

integration >

targetcis > source_

ci_type_tree)

대상CIT를정의합니

다.

1. 이름: name

설명: 대상CI 유형이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: schema

설명: 이CI 유형을대상에저장하는데사

용할스키마의이름입니다.

필수여부: 필수아님

유형: 문자열

3. 이름: namespace

설명: 대상에서이CI 유형의네임스페이

스를나타냅니다.

필수여부: 필수아님

유형: 문자열

targetprimarykey

(integration >

targetcis > source_

ci_type)

-또는-

(integration >

targetcis > source_

ci_type_tree

-또는-

(integration >

targetrelations > link)

-또는-

(integration >

targetrelations >

source_link_type_

tree)

대상CIT 기본키특성

을식별합니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 212/306 페이지

Page 213: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

pkey

(integration >

targetcis> source_

ci_type >

targetprimarykey

-또는-

integration >

targetcis > source_

ci_type_tree >

targetprimarykey

-또는-

(integration >

targetrelations > link

> targetprimarykey)

-또는-

integration >

targetrelations >

source_link_type_

tree >

targetprimarykey)

기본키특성하나를식

별합니다.

모드가update 또는

insert_else_update인

경우에만필요합니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 213/306 페이지

Page 214: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

target_attribute

(integration >

targetcis> source_

ci_type

-또는-

integration >

targetcis >

source_ci_type_tree

-또는-

integration >

targetrelations > link

-또는-

integration >

targetrelations >

source_link_type_

tree)

대상CIT의특성을정

의합니다.

1. 이름: name

설명: 대상CIT의특성이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: datatype

설명: 대상CIT 특성의데이터유형입니

다.

필수여부: 필수

유형: 문자열

3. 이름: length

설명: 문자열/문자데이터유형의경우대

상특성의정수크기입니다.

필수여부: 필수아님

유형. 정수

4. 이름. option

설명. 값에적용할변환함수입니다.

필수여부. False

유형. 다음문자열중하나입니다.

a. uppercase – 대문자로변환

b. lowercase – 소문자로변환

이특성이비어있으면변환함수가적용

되지않습니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 214/306 페이지

Page 215: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

map

(integration >

targetcis > source_

ci_type >

target_attribute

    -또는-

integration >

targetcis >

source_ci_type_tree

>

target_attribute)

    -또는-

(integration >

targetrelations > link

>

target_attribute

    -또는-

integration >

targetrelations >

source_link_type_

tree >

target_attribute)

원본CIT의특성값을

가져오는방법을지정

합니다.

1. 이름. type

설명. 원본값과대상값사이의매핑유형

입니다.

필수여부. 필수

유형. 다음문자열중하나입니다.

a. direct – 원본특성의값에서대상특성

의값으로일대일매핑을지정합니다.

b. compoundstring – 하위요소가문자

열하나에조인되고대상특성값이설정

됩니다.

c. childattr – 하위요소가하나이상의하

위CIT의특성입니다.하위CIT는

composition 또는containment관계가

있는CIT로정의됩니다.

d. constant – 정적문자열

2. 이름. value

설명. type=constant에대한상수문자

열입니다.

필수여부. type=constant일때만필요

합니다.

유형.문자열

3. 이름. attr

설명. type=direct에대한원본특성이름

입니다.

필수여부. type=direct일때만필요합니

다.

유형.문자열

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 215/306 페이지

Page 216: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

aggregation

(integration >

targetcis >

source_ci_type >

target_attribute >

map

    -또는-

integration >

targetcis > source_

ci_type_tree >

target_attribute >

map

    -또는-

(integration >

targetrelations >

link > target_attribute

>

map

    -또는-

integration >

targetrelations >

source_link_type_

tree > target_attribute

>map)

맵의유형이childattr

일때만유효

원본CI의하위CI 특성

값을대상CI 특성에매

핑할하나의값으로결

합하는방법을지정하

며,선택사항입니다.

이름: type

설명. 집계함수의유형입니다.

필수여부: 필수

유형. 다음문자열중하나입니다.

l csv – 포함된모든값을쉼표로구분된목

록(숫자또는문자열/문자)에연결합니다.

l count – 포함된모든값의개수를숫자로

반환합니다.

l sum – 포함된모든숫자값의합계를반환

합니다.

l average – 포함된모든값의평균을숫자

로반환합니다.

l min – 포함된값의최소값을숫자/문자로

반환합니다.

l max – 포함된값의최대값을숫자/문자로

반환합니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 216/306 페이지

Page 217: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

source_child_ci_

type

(integration >

targetcis> source_

ci_type > target_

attribute >map

-또는-

integration >

targetcis > source_

ci_type_tree >

target_attribute >

map

-또는-

(integration >

targetrelations > link

> target_attribute >

map

-또는-

integration >

targetrelations >

source_link_type_

tree > target_attribute

>map)

맵의유형이childattr

일때만유효

하위특성을가져오는

연결된CI를지정합니

다.

1. 이름. name

설명. 하위CI의유형입니다.

필수여부. 필수

유형.문자열

2. 이름. source_attribute

설명. 매핑되는하위CI의특성입니다.

필수여부. 동일한경로에있는childAttr

집계유형이count가아닐경우에만필요

합니다.

유형.문자열

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 217/306 페이지

Page 218: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

validation

(integration >

targetcis >

source_ci_type >

target_attribute >

map

    -또는-

integration >

targetcis >

source_ci_type_tree

>

target_attribute >

map

    -또는-

(integration >

targetrelations > link

>

target_attribute >

map

    -또는-

integration >

targetrelations >

source_link_type_

tree >

target_attribute >

map)

맵의유형이childatt일

때만유효

특성값에기반한원본

CI의하위CI를필터링

으로제외할수있습니

다.집계하위요소와함

께사용하여대상CIT

의특성값에매핑되는

하위특성을면밀히파

악할수있으며,선택사

항입니다.

1. 이름.minlength

설명. 주어진값보다짧은문자열을제외

합니다.

필수여부: 필수아님

유형. 정수

2. 이름.maxlength

설명. 주어진값보다긴문자열을제외합

니다.

필수여부: 필수아님

유형. 정수

3. 이름.minvalue

설명. 지정된값보다작은숫자를제외합

니다.

필수여부: 필수아님

유형. 숫자

4. 이름.maxvalue

설명. 지정된값보다큰숫자를제외합니

다.

필수여부: 필수아님

유형. 숫자

targetrelations

(integration)

모든관계매핑의컨테

이너요소이며,선택사

항입니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 218/306 페이지

Page 219: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

source_link_type_

tree

(integration >

targetrelations)

원본에서상속되는유

형없이원본관계유형

을대상관계에매핑합

니다. targetrelation이

있는경우에만필수입

니다.

1. 이름: name

설명. 원본관계이름입니다.

필수여부: 필수

유형.문자열

2. 이름: target_link_type

설명. 대상관계이름입니다.

필수여부: 필수

유형.문자열

3. 이름: nameSpace

설명: 대상에만들링크의네임스페이스

입니다.

필수여부: 필수아님

유형: 문자열

4. 이름: mode

설명: 현재링크에필요한업데이트유형

입니다.

필수여부: 필수

유형: 다음문자열중하나입니다.

n insert – CI가아직없는경우에만사용

합니다.

n update – CI가있는경우에만사용합

니다.

n update_else_insert – CI가있는경우

업데이트하고,그렇지않으면새CI를

만듭니다.

n ignore – 이CI 유형으로는아무작업

도수행하지않습니다.

5. 이름: source_ci_type_end1

설명: 원본관계의End1 CI 유형입니다.

필수여부: 필수

유형: 문자열

6. 이름: source_ci_type_end2

설명: 원본관계의End2 CI 유형입니다.

필수여부: 필수

유형: 문자열

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 219/306 페이지

Page 220: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

link

(integration >

targetrelations)

원본관계를대상관계

에매핑합니다.

targetrelation이있는

경우에만필수입니다.

1. 이름: source_link_type

설명: 원본관계이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: target_link_type

설명: 대상관계이름입니다.

필수여부: 필수

유형: 문자열

3. 이름: nameSpace

설명: 대상에만들링크의네임스페이스

입니다.

필수여부: 필수아님

유형: 문자열

4. 이름: mode

설명: 현재링크에필요한업데이트유형

입니다.

필수여부: 필수

유형: 다음문자열중하나입니다.

n insert – CI가아직없는경우에만사용

합니다.

n update – CI가있는경우에만사용합니

다.

n update_else_insert – CI가있는경우

업데이트하고,그렇지않으면새CI를

만듭니다.

n ignore – 이CI 유형으로는아무작업도

수행하지않습니다.

5. 이름: source_ci_type_end1 설명: 원본

관계의End1 CI 유형입니다.

필수여부: 필수

유형: 문자열

6. 이름: source_ci_type_end2

설명: 원본관계의End2 CI 유형입니다.

필수여부: 필수

유형: 문자열

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 220/306 페이지

Page 221: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

target_ci_type_end1

(integration >

targetrelations > link

-또는-

integration >

targetrelations >

source_link_type_

tree)

대상관계의End1 CI

유형입니다.

1. 이름: name

설명: 대상관계의End1 CI 유형이름입

니다.

필수여부: 필수

유형: 문자열

2. 이름: superclass

설명: End1 CI 유형의슈퍼클래스이름

입니다.

필수여부: 필수아님

유형: 문자열

target_ci_type_end2

(integration >

targetrelations > link

-또는-

integration >

targetrelations >

source_link_type_

tree)

대상관계의End2 CI

유형입니다.

1. 이름: name

설명: 대상관계의End2 CI 유형이름입

니다.

필수여부: 필수

유형: 문자열

2. 이름: superclass

설명: End2 CI 유형의슈퍼클래스이름

입니다.

필수여부: 필수아님

유형: 문자열

매핑결과스키마

요소이름및경로 설명 특성

root 결과문서의루트입니다.

data (root) 데이터자체의루트입니다.

objects (root > data) 업데이트할개체의루트요

소입니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 221/306 페이지

Page 222: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

Object

(root > data >

objects)

한개체및이개체의모든

특성에대한업데이트작업

을설명합니다.

1. 이름: name

설명: CI 유형의이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: mode

설명: 현재CI 유형에필요한업데이

트유형입니다.

필수여부: 필수

유형: 다음문자열중하나입니다.

a. insert – CI가아직없는경우에만

사용합니다.

b. update – CI가있는경우에만사용

합니다.

c. update_else_insert – CI가있는

경우업데이트하고,그렇지않으면새

CI를만듭니다.

d. ignore – 이CI 유형으로는아무작

업도수행하지않습니다.

3. 이름: operation

설명: 이CI에대해수행할작업입니

다.

필수여부: 필수

유형: 다음문자열중하나입니다.

a. add – CI를추가해야합니다.

b. update – CI를업데이트해야합니

다.

c. delete – CI를삭제해야합니다.

값을설정하지않으면기본값인추가

가사용됩니다.

4. 이름: mamId

설명: 원본CMDB의개체 ID입니다.

필수여부: 필수

유형: 문자열

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 222/306 페이지

Page 223: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

field

(root > data >

objects> Object

-또는-

root > data > links >

link)

개체의한필드값을설명합

니다.필드의텍스트는필드

의새값이고,필드에링크

가포함된경우에는이값이

한끝의 ID입니다.각끝 ID

는개체로표시됩니다

(<objects>아래).

1. 이름: name

설명: 필드의이름입니다.

필수여부: 필수

유형: 문자열

2. 이름: key

설명: 이필드가개체의키인지여부를

지정합니다.

필수여부: 필수

유형: 부울

3. 이름: datatype

설명: 필드의유형입니다.

필수여부: 필수

유형: 문자열

4. 이름: length

설명: 문자열/문자데이터형식의경

우대상특성의정수크기입니다.

필수여부: 필수아님

유형: 정수

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 223/306 페이지

Page 224: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

links (root > data) 업데이트할링크의루트요

소입니다.

1. 이름: targetRelationshipClass

설명: 대상시스템의관계(링크)이름

입니다.

필수여부: 필수

유형: 문자열

2. 이름: targetParent

설명: 링크의첫번째끝(상위)유형입

니다.

필수여부: 필수

유형: 문자열

3. 이름: targetChild

설명: 링크의두번째끝(하위)유형입

니다.

필수여부: 필수

유형: 문자열

4. 이름: mode

설명: 현재CI 유형에필요한업데이

트유형입니다.

필수여부: 필수

유형: 다음문자열중하나입니다.

a. insert – CI가아직없는경우에만

사용합니다.

b. update – CI가있는경우에만사용

합니다.

c. update_else_insert – CI가있는

경우업데이트하고,그렇지않으면새

CI를만듭니다.

d. ignore – 이CI 유형으로는아무작

업도수행하지않습니다.

5. 이름: operation

설명: 이CI에대해수행할작업입니

다.

필수여부: 필수

유형: 다음문자열중하나입니다.

a. add – CI를추가해야합니다.

b. update – CI를업데이트해야합니

다.

c. delete – CI를삭제해야합니다.

값을설정하지않으면기본값인추가

가사용됩니다.

6. 이름: mamId

설명: 원본CMDB의개체 ID입니다.

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 224/306 페이지

Page 225: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

필수여부: 필수

유형: 문자열

사용자지정

이섹션에서는밀어넣기어댑터에대한공통된사용자지정유형의일부기본절차를설명합니다.

특성추가

1. TQL결과에특성이포함되어있는지확인합니다.

2. 매핑파일의올바른CI 매핑섹션에특성매핑을추가합니다.

3. 데이터수신기가데이터의추가특성을받도록준비되어있는지확인합니다.

특성제거

특성을제거하려면매핑파일에서특성을제거합니다.또한결과에서더이상사용되지않거나조건

부노드로사용되지않는경우TQL에서도특성을제거해야합니다.

CI 유형추가

1. TQL에CI 유형을추가합니다.

2. CI 유형과해당특성데이터가TQL결과에나타나는지확인합니다(계산및미리보기사용).

3. 매핑파일에CI 유형의매핑을추가합니다.새CI 유형을빠르게만들려면다른CI 유형의매핑

을복사합니다.

4. 복사한XML의이름및특성매핑을새CI 유형및특성에맞게수정합니다.사용가능한매핑유

형을보려면"매핑파일참조(207페이지)"를참조하십시오.

CI 유형제거

1. TQL에서CI 유형을제거합니다.

2. 매핑파일에서해당CI 유형에대한매핑섹션을제거합니다.

링크추가

1. 데이터에두개의끝CI가있는지확인합니다.

2. 추가해야할링크가실제로올바른링크인지확인합니다(CI 유형관리자에서확인).

3. 매핑xml의관계섹션에링크요소를추가합니다.

링크제거

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 225/306 페이지

Page 226: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

1. 매핑파일에서제거할링크의링크섹션을제거합니다.

2. 가능한경우TQL에서링크를제거합니다(TQL의효율성또는기능에영향을미치지않는경우).

개발자참조안내서

6장:밀어넣기어댑터개발

HPUniversal CMDB (10.10) 226/306 페이지

Page 227: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

7장: 강화된일반밀어넣기어댑터개발

이장의내용:

개요 227

매핑파일 227

Groovy Traveler 230

Groovy 스크립트작성 233

PushConnector인터페이스구현 234

어댑터패키지빌드 235

매핑파일스키마 236

개요

강화된밀어넣기어댑터는TQL쿼리결과를나타내는데이터구조입니다.강화된밀어넣기어댑터

위에작성된각어댑터는이데이터구조를처리하고필요한대상으로밀어넣습니다.

데이터구조의이름은ResultTreeNode (RTN)입니다.RTN은어댑터의매핑파일과TQL쿼리결과

에따라만들어집니다.강화된밀어넣기어댑터에사용되는쿼리는루트기반이어야합니다.즉,쿼

리에요소이름이 root인쿼리노드하나가포함되어있거나접두사가 root로시작하는관계요소가

하나이상포함되어있어야합니다.이CI 또는관계는쿼리의루트요소로사용됩니다.자세한내용

은HPUniversal CMDB데이터흐름관리안내서에서"데이터밀어넣기"를참조하십시오.

강화된밀어넣기어댑터를개발하는두가지기본단계는다음과같습니다.

1. PushConnector인터페이스구현–이인터페이스가추가,업데이트,삭제할데이터를RTN목

록으로받아대상에대한밀어넣기를수행합니다.

2. 매핑파일만들기–매핑파일이TQL결과의CI 및특성을매핑하여RTN구조만들기를결정합

니다.

매핑파일

다음예는매핑파일을만드는방법을보여줍니다.

이예에서는노드및 IP주소밀어넣기를시뮬레이션합니다.여기서는다음과같이Node Push라는

TQL쿼리를만듭니다.

HPUniversal CMDB (10.10) 227/306 페이지

Page 228: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매핑파일에는두개의대상CI 유형,즉Computer와 IP를만듭니다.Computer에는변수하나와특

성두개가있습니다. IP에는특성하나가있습니다.

다음은매핑XML파일입니다.

쿼리결과는다음과같이표시됩니다.

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 228/306 페이지

Page 229: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

다음은이매핑파일에따라작성된RTN목록입니다.

각각의루트인스턴스는매핑파일을사용하여별도로매핑됩니다.따라서이예에서

PushConnector는두RTN루트의목록을받습니다.

참고: 이전의밀어넣기어댑터는CI 유형에대한일반매핑을만들수있었습니다.새밀어넣기

어댑터매핑은TQL쿼리별로실행됩니다. x라는쿼리를사용하는밀어넣기작업을실행하는동

안,어댑터는관련매핑파일을찾습니다(특성: query-name=x).

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 229/306 페이지

Page 230: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

Groovy 스크립트언어를사용하여매핑파일의값을계산할수있습니다.자세한내용은"Groovy

Traveler(230페이지)"를참조하십시오.

Groovy Traveler

다음과같은방식으로TQL쿼리결과에액세스합니다.

l Root[attr]는Root요소의attr 특성을반환합니다.

l Root.Query_Element_Name은TQLQuery_Element_Name에이름이지정되어있으며현재

루트CI에연결된CI 인스턴스의목록을반환합니다.

l Root.Query_Element_Name[2][attr]은현재루트CI에연결된세번째Query_Element_

Name의attr 특성을반환합니다.

l Root.Query_Element_Name*.getAt(attr)는 TQL에서이름이Query_Element_Name이며현

재루트CI에연결된CI 인스턴스의attr 특성목록을반환합니다.

Groovy Traveler에서다음과같은추가특성에도액세스할수있습니다.

l cmdb_id – CI 또는관계의UCMDB ID를문자열로반환합니다.

l external_cmdb_id – CI 또는관계의외부 ID를문자열로반환합니다.

l Element_type – CI 또는관계의요소유형을문자열로반환합니다.

import 태그:

<import>

<scriptFile path="mappings.scripts.PushFunctions"/>

</import>

이것은매핑파일에서모든groovy 스크립트에대해가져오기를선언하는것을의미합니다.이예에

서PushFunctions는몇개의정적함수가포함된groovy 스크립트파일이며매핑중에액세스할수

있습니다(value=” PushFunctions.foo()”)

source_instance_type

TQL별로매핑이수행되며, query-name 값은현재매핑의관련된TQL입니다. '*'는이매핑파일이

Node Push 접두사로시작하는모든TQL쿼리와연결되어있음을의미합니다.

<source_instance_type query-name="Node Push*" root-element-name="Root">

source_instance_type 태그는매핑되는루트요소를지정합니다.

root-element-name은TQL에있는루트이름과정확하게일치해야합니다.

target_ci_type

이태그는RTN을만드는데사용됩니다.

name 특성은 target_ci_type 이름을나타냅니다(name=Computer).

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 230/306 페이지

Page 231: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

is-valid 특성은매핑하는동안계산되는Boolean 값이며현재 target_ci가올바른지여부를결정합

니다.잘못된 target_ci_type은RTN에추가되지않습니다.이예에서는UCMDB에서 root_

iscandidatefordeletion 특성이 true인 target_ci_type을만들지않으려고합니다.

target_ci_type에는매핑중에계산되는변수를사용할수있습니다.

<variable name="vSerialNo" datatype="STRING" value="Root['serial_number']"/>

변수vSerialNo는현재루트의serial_number 값을가져옵니다.

RTN의특성은 target_mapping태그를사용하여만듭니다. value 필드의groovy 스크립트실행결

과가RTN특성에할당됩니다.

<target_mapping name="SerialNo" datatype="STRING" value="vSerialNo"/>

SerialNo는 vSerialNo변수의값을할당합니다.

다음과같이 target_ci_type을다른 target_ci_type의하위항목으로정의할수있습니다.

<target_ci_type name="Portfolio">

<variable name="vSerialNo" datatype="STRING" value="Root['global_id']"/>

<target_mapping name="CMDBId" datatype="STRING" value="globalId"/>

<target_ci_type name=Asset">

<target_mapping name="SerialNo" datatype="STRING" value="vSerialNo"/>

</target_ci_type>

</target_ci_type>

Portfolio라는RTN에는Asset이라는하위RTN이생깁니다.

for-each-source-ci

이태그는루트인스턴스의특정CI를나열합니다.다음과같은필드가있습니다.

l source-cis=” ” – 대상CI가만들어지는CI의목록입니다.이목록은Groovy Traveler에서

Root.IpAddress필드로정의됩니다.

l count-index=” ” – 루프의현재반복에대한CI 인덱스가들어가는변수입니다.

l var-name=” ” – 루프의현재반복에있는CI의이름입니다.

예로든매핑파일을수정해보겠습니다.

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 231/306 페이지

Page 232: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

이매핑파일에따라작성되는RTN목록은다음과같습니다.

dynamic_mapping

이태그는RTN구조를만드는동안대상데이터저장소에서데이터매핑을만드는기능을추가합니

다.

예:UCMDB에서Node.name에관련된 id열과name 열이있는Computer라는테이블이포함된

데이터베이스가대상인경우를가정해보겠습니다.두열은모두고유합니다.데이터베이스에는

Computer테이블의parentID에대한참조키가있는 IP라는테이블도있습니다. ‘dynamic_

mapping’은 name과 id를<name,id>로저장하는맵을만들수있습니다.Adapter는이맵을기반

으로 ID를컴퓨터에대응시키고 IP테이블의parentID 특성에올바른값을밀어넣을수있습니다.

RTN을만드는동안이맵을사용하여parentID 특성에값을할당할수있습니다.

매핑은map_property에따라결정됩니다. dynamic_mapping은각청크에대해한번씩실행됩니

다.

<dynamic_mapping name="IdByName " keys-unique="true">

name 특성은맵의이름을나타냅니다. keys-unique 특성은키가고유한지여부를나타냅니다(각

키는값또는값집합에매핑).

이예에사용된맵은이름이 IdByName이고고유한키가있습니다.스크립트에서맵에액세스하려

면다음명령을실행합니다.

DynamicMapHolder.getMap(‘IdByName’)

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 232/306 페이지

Page 233: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

그러면해당맵에대한참조가반환됩니다.

map_property 태그는매핑을기반으로하는속성을만듭니다.

예:

<map_property property-name="SQLQuery" datatype="STRING"

property-value="SELECT name, id FROM Computer"/>

이예에서속성이름은SQLQuery이고값은맵을만드는SQL문입니다.PushConnector인터페이

스에대한 retrieveUniqueMapping및 retrieveNonUniqueMapping메서드구현은반환된맵의

실제구현을결정합니다.

글로벌변수

다음과같은글로벌변수에서매핑파일의Groovy 스크립트에액세스할수있습니다.

l Topology – 유형: Topology.현재청크의토폴로지인스턴스입니다.

l QueryDefinition -유형:QueryDefinition.현재TQL의쿼리정의인스턴스입니다.

l OutputCI – 유형: ResultTreeNode.현재트리매핑에있는루트요소의RTN입니다.

l ClassModel – 유형:ClassModel.클래스모델의인스턴스입니다.

l CustomerInformation – 유형:CustomerInformation.작업을실행하는고객에대한정보입니

다.

l Logger – 유형:DataAdapterLogger.이로거는어댑터에서UCMDB로깅프레임워크에대한로

그를쓰는데사용할수있습니다.

Groovy 스크립트작성

이섹션에서는PushFunctions.groovy 파일을만듭니다.이파일에는루트인스턴스를매핑하는

동안사용되는정적함수가포함됩니다.

package mappings.scripts

public class PushFunctions {

public static boolean isVirtual(def nodeRole){return isListContainsOne(def list, "MY_VM", "MY_SIMULATOR");

}

public static String getDescription(boolean isVirtual){if(isVirtual){

return "This is a VM";

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 233/306 페이지

Page 234: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

}else{

return "This is physical machine";}

}

private static boolean isListContainsOne(def list, ...stringList){//returns true if the list contains one of the values.

}}

PushConnector 인터페이스구현

구현은다음과같은기본단계를지원해야합니다.

public class PushExampleAdapter implements PushAdapterConnector

{

public UpdateResult pushTreeNodes(PushConnectorInput input) throwsDataAccessException{ 

// 1. build an UpdateResult instance - the UpdateResult is used to returnmappings between the sent ids to the actual ids that entered the data store.// Also has an update status which allows to pass the status of data that wasactually pushed, detailed status reports on failed IDs, and actions actuallyperformed on successful ids.// 2. handle the data:// a. handle data to add. Can be retrieved by:input.getResultTreeNodes.getDataToAdd();// b. handle data to update.// c. handle data to delete.// 3. Return the Update result.

}

public void start(PushDataAdapterEnvironment env) throws DataAccessException{// this method is called when the integration point created,

or when the adapter is reloaded//(i.e after changing one of the mapping files// and pressing ‘save’).

}

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 234/306 페이지

Page 235: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

public void testConnection(PushDataAdapterEnvironment env) throwsDataAccessException {

// this method is called when pressing the 'testconnection' button in the

//creation of the integration point.// For example if we push data to RDBMS this method

can create a connection//to the database and will run a dummy SQL statement.// If it fails it writes an error message to the log

and throws an exception.}

Map<Object, Object> retrieveUniqueMapping(MappingQuery mappingQuery){//This method will create the map according to the given mappingQuery. Itwill be called in the// mapping stage of the adapter execution, before the ‘UpdateResultpushTreeNodes’ method.// This method is called when the ‘keys-unique’ attribute of the ‘dynamic_mapping’ tag is true.}

Map<Object, Set<Object>> retrieveNonUniqueMapping(MappingQuery mappingQuery){ // This method is called when the ‘keys-unique’ attribute of the ‘dynamic_mapping’ tag is false.// In this case a key can be mapped to several values.}}

어댑터패키지빌드

어댑터패키지에다음폴더가포함되어있는지확인합니다.

l adapterCode. 이폴더아래에PushExampleAdapter.java에서만들어진 .jar파일을포함하는

PushExampleAdapter라는폴더를만듭니다.여기에는이전에만든매핑파일인

computerIPMapping.xml을넣을수있는mappings라는폴더도포함됩니다.

PushFunctions.groovy 파일을포함하는scripts라는폴더도포함해야합니다.

l discoveryConfigFiles. UpdateResult 사용에관한오류를보고하는데사용되는오류코드등

의구성파일을포함합니다.이예에서는폴더가비어있습니다.

l discoveryPatterns.push_example_adapter.xml을포함합니다.

l tql. 예에서만든TQL쿼리를포함합니다. TQL폴더는선택사항이지만패키지를배포할때자동

으로만들어집니다.

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 235/306 페이지

Page 236: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매핑파일스키마

요소이름및경로 설명 특성

integration 파일의매핑컨텐츠를정의합

니다.시작줄및주석을제외

하고파일에서가장바깥쪽블

록이어야합니다.

info (integration) 통합할데이터저장소에대한

정보를정의합니다.

source (info) 원본제품 이름: name

설명: 제품의이름입니다.

필수여부: 필수

유형: 문자열

이름: vendor

설명: 제품의벤더입니다.

필수여부: 필수

유형: 문자열

이름: versions

설명: 제품의버전입니다.

필수여부: 필수

유형: 10진수

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 236/306 페이지

Page 237: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

target (info) 대상제품 이름: name

설명: 제품의이름입니다.

필수여부: 필수

유형: 문자열

이름: vendor

설명: 제품의벤더입니다.

필수여부: 필수

유형: 문자열

이름: versions

설명: 제품의버전입니다.

필수여부: 필수

유형: 10진수

Import (integration) 가져온스크립트파일의컨테

이너요소입니다.

scriptFile

(integration>import)

가져올Groovy 스크립트파일

을정의합니다.

이름: path

설명: 스크립트파일의경로입니다.

필수여부: 필수

유형: 문자열

Targetcis (integration) 대상CI 유형의컨테이너요소

입니다.

Source_instance_type

(integration > targetcis)

원본CI 인스턴스유형을정의

합니다. TQL에정의된루트

요소여야합니다.

이름: query-name

설명: 관련TQL의이름입니다.

필수여부: 필수

유형: 문자열

이름: name

설명: TQL에정의된루트요소입니

다.

필수여부: 필수

유형: 문자열

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 237/306 페이지

Page 238: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

dynamic_mapping

(integration > targetcis >

source_instance_type)

청크당한번만드는맵을정

의합니다.

이름: name

설명: 맵의이름입니다.

필수여부: 필수

유형: 문자열

이름: keys-unique

설명: 키가고유한지여부를표시합

니다.

필수여부: 필수

유형: 부울

target_ci_type

(integration > targetcis >

source_instance_type)

-또는- (integration >

targetcis > source_

instance_type> for-

each-source-ci)

RTN에추가할대상CI 유형을

정의합니다.

이름: name

설명: 대상CI 유형의이름입니다.

필수여부: 필수

유형: 문자열

이름: is-valid

설명: 주어진스크립트에따라현재

대상CI가올바른지확인합니다.

필수여부: 필수아님

유형: 문자열(groovy 스크립트)

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 238/306 페이지

Page 239: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

Variable (target_ci_type) 대상CI 유형에대한변수를

정의합니다.

이름: name

설명: 변수의이름입니다.

필수여부: 필수

유형: 문자열

이름: datatype

설명: 변수의데이터유형입니다.

필수여부: 필수

유형: type-enum(INTEGER,

LONG, FLOAT, DOUBLE, STRING,

BYTES, XML, BOOLEAN, DATE,

INTEGER_LIST, STRING_LIST 중

하나일수있습니다.)

이름: value

설명: 변수에할당할값입니다.

필수여부: 필수

유형: groovy 스크립트

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 239/306 페이지

Page 240: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

target_mapping (target_

ci_type)

대상CI 유형의특성을정의합

니다.

이름: name

설명: 특성의이름입니다.

필수여부: 필수

유형: 문자열

이름: datatype

설명: 변수의데이터유형입니다.

필수여부: 필수

유형: type-enum(INTEGER,

LONG, FLOAT, DOUBLE, STRING,

BYTES, XML, BOOLEAN, DATE,

INTEGER_LIST, STRING_LIST 중

하나일수있습니다.)

이름: value

설명: 변수에할당할값입니다.

필수여부: 필수

유형: groovy 스크립트

이름: ignore-on-null

설명: 대상매핑값이null이고이특

성이TRUE이면특성을무시합니다.

필수여부: 필수아님

유형: 부울(groovy 스크립트)

before-mapping

(target_ci_type)

대상CI 유형을매핑하기전에

실행하는Groovy 스크립트입

니다.

after-mapping (target_

ci_type)

대상CI 유형을매핑한후에

실행하는Groovy 스크립트입

니다.

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 240/306 페이지

Page 241: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

요소이름및경로 설명 특성

for-each-source-ci

(target_ci_type)

루트인스턴스의특정CI 반복

을정의합니다.

이름: count-index

설명: 현재반복되는CI의인덱스입

니다.

필수여부: 필수

유형: 문자열

이름: var-name

설명: 현재반복되는CI를참조하는

변수입니다.

필수여부: 필수아님

유형: 문자열

이름: source-cis

설명: 반복할쿼리의CI 이름입니다.

필수여부: 필수

유형: 문자열(groovy 스크립트)

개발자참조안내서

7장:강화된일반밀어넣기어댑터개발

HPUniversal CMDB (10.10) 241/306 페이지

Page 242: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

HPUniversal CMDB (10.10) 242/306 페이지

API 사용

Page 243: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

8장: API 소개

이장의내용:

API 개요 243

API 개요

HPUniversal CMDB에포함된API는다음과같습니다.

l UCMDB Java API. 타사또는사용자지정도구에서Java API를사용하여데이터및계산을추

출하는방법및UCMDB(Universal Configuration Management database)에데이터를쓰는방

법을설명합니다.자세한내용은"HPUniversal CMDB API(244페이지)"를참조하십시오.

l UCMDB웹서비스API. 구성항목정의및UCMDB에대한토폴로지관계를작성하고TQL및

Ad hoc 쿼리로정보를쿼리할수있습니다.자세한내용은"HPUniversal CMDB웹서비스API

(252페이지)"를참조하십시오.

l 데이터흐름관리Java API. 데이터흐름관리의프로브,작업,트리거및자격증명을관리할수

있습니다.자세한내용은"데이터흐름관리Java API(285페이지)"를참조하십시오.

l 데이터흐름관리웹서비스API. 데이터흐름관리의프로브,작업,트리거및자격증명을관리

할수있습니다.자세한내용은"데이터흐름관리웹서비스API(287페이지)"를참조하십시오.

참고: 전체API 문서를보려면온라인문서에액세스하는것이좋습니다.PDF버전에는html

형식으로생성되는API 문서의링크가없습니다.

HPUniversal CMDB (10.10) 243/306 페이지

Page 244: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

9장: HP Universal CMDB API

이장의내용:

규칙 244

HPUniversal CMDB API 사용 244

응용프로그램의일반구조 245

클래스경로에API Jar파일저장 247

통합사용자만들기 248

UCMDB API 사용사례 250

예 251

규칙

이장에서는다음규칙을사용합니다.

l UCMDB는Universal 구성관리데이터베이스자체를참조합니다.HPUniversal CMDB는해당

응용프로그램을참조합니다.

l UCMDB요소및메서드인수는인터페이스에지정된경우에만의미가있습니다.

사용가능한API에관한전체문서는HPUCMDB API Reference를참조하십시오.

이러한파일은다음폴더에있습니다.

\\<UCMDB루트디렉터리>\hp\UCMDB\UCMDBServer\deploymdb-

docs\docs\eng\APIs\UCMDB_JavaAPI\index.html

HP Universal CMDB API 사용

참고: 이장은온라인문서라이브러리에서볼수있는API Javadoc와함께사용하십시오.

HPUniversal CMDB API는응용프로그램을Universal CMDB(CMDB)와통합하는데사용됩니다.

API는다음을수행할수있는메서드를제공합니다.

l CMDB에서CI 및관계추가,제거,업데이트

l 클래스모델에대한정보검색

l UCMDB기록내역에서정보검색

l 가상시나리오실행

l 구성항목및관계에대한정보검색

HPUniversal CMDB (10.10) 244/306 페이지

Page 245: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

구성항목및관계에대한정보를검색하는메서드는일반적으로TQL(토폴로지쿼리언어)을사용합

니다.자세한내용은HPUniversal CMDB모델링안내서에서"토폴로지쿼리언어"를참조하십시오.

HPUniversal CMDB API의사용자는다음사항을잘알고있어야합니다.

l Java프로그래밍언어

l HPUniversal CMDB

이섹션에는다음항목이포함됩니다.

l "API의사용(245페이지)"

l "사용권한(245페이지)"

API의사용

API는여러비즈니스요구사항을만족하는데사용됩니다.예를들어사용가능한CI(구성항목)에

대한정보를받기위해타사시스템에서클래스모델을쿼리할수있습니다.기타사용사례는

"UCMDB API 사용사례(250페이지)"를참조하십시오.

사용권한

관리자는API에연결하는데필요한로그인자격증명을제공합니다.API 클라이언트에는CMDB에

서정의된통합사용자의사용자이름과비밀번호가필요합니다.이러한사용자는CMDB의실제사

용자가아니라CMDB에연결하는응용프로그램을나타냅니다.

또한사용자가로그인하기위해서는SDK에액세스일반수행권한이있어야합니다.

주의: API 인증권한이있는일반사용자도API 클라이언트를사용할수있습니다.하지만이옵

션은권장되지않습니다.

자세한내용은"통합사용자만들기(248페이지)"를참조하십시오.

응용프로그램의일반구조

정적팩터리는UcmdbServiceFactory 하나뿐입니다.이팩터리는응용프로그램의진입점입니다.

UcmdbServiceFactory는getServiceProvider메서드를노출합니다.이러한메서드는

UcmdbServiceProvider 인터페이스의인스턴스를반환합니다.

클라이언트가인터페이스메서드를사용하여다른개체를만듭니다.예를들어새쿼리정의를만들

기위해클라이언트는다음작업을수행합니다.

1. 주CMDB서비스개체에서쿼리서비스를가져옵니다.

2. 서비스개체에서쿼리팩터리개체를가져옵니다.

3. 팩터리에서새쿼리정의를가져옵니다.

UcmdbServiceProvider provider =

개발자참조안내서

9장:HPUniversal CMDB API

HPUniversal CMDB (10.10) 245/306 페이지

Page 246: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

   UcmdbServiceFactory.getServiceProvider(HOST_NAME, PORT);UcmdbService ucmdbService =   provider.connect(provider.createCredentials(USERNAME,   PASSWORD), provider.createClientContext("Test"));TopologyQueryService queryService = ucmdbService.getTopologyQueryService();TopologyQueryFactory factory = queryService.getFactory();QueryDefinition queryDefinition = factory.createQueryDefinition("TestQuery");queryDefinition.addNode("Node").ofType("host");Topology topology = queryService.executeQuery(queryDefinition);System.out.println("There are " + topology.getAllCIs().size() + " hostsin uCMDB");

UcmdbService에서사용가능한서비스는다음과같습니다.

서비스메서드 사용

getAuthorizationModelService 인증작업(사용자및사용자그룹만들기,사용자

및그룹에역할할당등)수행

getClassModelService CI 및관계유형에대한정보

getConfigurationService 인프라설정관리,서버구성용

getDataStoreMgmtService 연합할CI 및특성을비롯한데이터저장소정보쿼

getDDMConfigurationService 데이터흐름관리시스템구성

getDDMManagementService 데이터흐름관리시스템의진행,결과및오류를분

석하고보기

getDDMZoneService 관리영역가져오기및내보내기(해당활동포함)

getHistoryService 모니터링된CI의기록내역에대한정보(변경,제거

등)

getImpactAnalysisService 영향분석시나리오(상관관계라고도함)실행

getLicensingService 시스템에설치된라이센스에대한정보쿼리

getMultipleCMDBService 글로벌 ID 및UCMDB ID 간전환

getMultiTenancyService 테넌트만들기,읽기,업데이트및삭제

getPersistencyService 이진데이터를키-값쌍으로지속시킴

개발자참조안내서

9장:HPUniversal CMDB API

HPUniversal CMDB (10.10) 246/306 페이지

Page 247: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

서비스메서드 사용

getQueryManagementService 쿼리에대한액세스관리-기존쿼리를저장,삭제

및나열.쿼리유효성검사및쿼리종속관계디스

커버리도제공

getReconciliationService 식별및병합기능제공

getResourceBundleManagementService 리소스태깅("번들링"서비스).태그가지정된모든

리소스에서명시적인새태그생성및태그삭제가

getResourceManagementService 시스템에TQL쿼리,보기,사용자등의리소스패키

지배포

getSecurityService 자격증명이유효한지여부확인

getServerService 시스템에대한일반정보쿼리

getSnapshotService 스냅샷관리를위한서비스제공(가져오기,저장,

비교등)

getSoftwareSignatureService 데이터흐름관리시스템에의해디스커버리할소

프트웨어항목정의

getStateService 상태관리를위한서비스제공(목록,추가,제거등)

getSystemHealthService 시스템상태서비스제공(기본시스템성능표시기,

용량및가용성메트릭)

getTopologyQueryService IT 유니버스에대한정보가져오기

getTopologyUpdateService IT 유니버스에서정보변경

getUcmdbVersion UCMDB와컨텐츠팩버전및빌드정보쿼리

getViewArchiveService 보기결과아카이브서비스.현재보기결과를저장

하고이전에저장한결과검색가능

getViewService 보기실행서비스(정의실행,저장된보기실행)및

관리서비스(기존보기저장,삭제및나열).보기

유효성검사및종속관계디스커버리도제공

클라이언트가HTTP(S)를통해서버와통신합니다.

클래스경로에 API Jar 파일저장

이API 집합을사용하려면ucmdb-api.jar 파일이필요합니다.웹브라우저에

http://<localhost>:8080을입력하고(여기서 localhost는UCMDB가설치된시스템) APIClient Download링크를클릭하여파일을다운로드할수있습니다.

응용프로그램을컴파일하거나실행하기전에 .jar 파일을클래스경로에저장합니다.

개발자참조안내서

9장:HPUniversal CMDB API

HPUniversal CMDB (10.10) 247/306 페이지

Page 248: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

참고: UCMDB Java API Jar을사용하려면JRE버전6이상이설치되어있어야합니다.

통합사용자만들기

다른제품과UCMDB간의통합을위한전용사용자를만들수있습니다.이사용자를통해UCMDB

클라이언트SDK를사용하여,서버SDK에인증되고API를실행하는제품을사용할수있습니다.이

API 집합을사용하여작성한응용프로그램은통합사용자자격증명으로로그온해야합니다.

주의: 또한일반UCMDB사용자(예: admin)에연결할수도있습니다.하지만이옵션은권장되

지않습니다.UCMDB사용자와연결하려면API 인증권한을부여해야합니다.

통합사용자를만들려면다음을수행합니다.

1. 웹브라우저를시작하고서버주소를다음과같이입력합니다.

http://localhost:8080/jmx-console

사용자이름과비밀번호를입력하여로그인해야할수도있습니다.

2. UCMDB에서service=Authorization Services를클릭합니다.

3. createUser 작업을찾습니다.이메서드는다음매개변수를수락합니다.

n customerID.고객 ID입니다.

n username.통합사용자의이름입니다.

n userDisplayName.통합사용자의표시이름입니다.

n userLoginName.통합사용자의로그인이름입니다.

n password.통합사용자의비밀번호입니다.

4. Invoke를클릭합니다.

5. 단일테넌트환경에서setRolesForUser 메서드를찾고다음매개변수를입력합니다.

n userName.통합사용자의이름입니다.

n roles. SuperAdmin.

Invoke를클릭합니다.

6. 다중테넌트환경에서grantRolesToUserForAllTenants 메서드를찾고다음매개변수를입

력하여모든테넌트와연결되는역할을할당합니다.

개발자참조안내서

9장:HPUniversal CMDB API

HPUniversal CMDB (10.10) 248/306 페이지

Page 249: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

n userName.통합사용자의이름입니다.

n roles. SuperAdmin.

Invoke를클릭합니다.

또는특정테넌트와연결된역할을할당하려면같은userName 및 roles매개변수값을사용하

여grantRolesToUserForTenants 메서드를호출합니다. tenantNames매개변수에필수테

넌트를입력합니다.

7. 추가사용자를만들거나JMX콘솔을닫습니다.

8. UCMDB에관리자로로그온합니다.

9. 관리탭에서패키지관리자를실행합니다.

10. 사용자지정패키지만들기아이콘을클릭합니다.

11. 새패키지의이름을입력하고다음을클릭합니다.

12. 리소스선택탭에서설정아래에있는사용자를클릭합니다.

13. JMX콘솔을사용하여만든사용자를하나이상선택합니다.

14. 다음을클릭한다음마침을클릭합니다.패키지관리자의패키지이름목록에새패키지가나타

납니다.

15. API 응용프로그램을실행할사용자에게패키지를배포합니다.

자세한내용은HPUniversal CMDB관리안내서에서"패키지를배포하는방법"섹션을참조하십시오.

참고:

통합사용자는고객별입니다.고객간에교차사용할수있는보다강력한통합사용자를만

들려면systemUser를사용할때 isSuperIntegrationUser 플래그를 true로설정합니다.

systemUser 메서드를사용합니다(removeUser, resetPassword, UserAuthenticate

등).

기본시스템사용자는두가지입니다.설치후 resetPassword메서드를사용하여각사용

자의비밀번호를변경하는것이좋습니다.

n sysadmin/sysadmin

n UISysadmin/UISysadmin(이사용자도SuperIntegrationUser입니다.)

resetPassword를사용하여UISysadmin 비밀번호를변경하는경우다음을수행해야합

니다.

개발자참조안내서

9장:HPUniversal CMDB API

HPUniversal CMDB (10.10) 249/306 페이지

Page 250: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

i. JMX콘솔에서UCMDB-UI:name=UCMDB Integration 서비스를찾습니다.

ii. 통합사용자의사용자이름과새비밀번호로setCMDBSuperIntegrationUser를

실행합니다.

UCMDB API 사용사례

이섹션에나열된사용사례에서는다음두가지시스템을사용하는것으로가정합니다.

l HPUniversal CMDB서버

l 구성항목저장소를포함하는타사시스템

이섹션에는다음항목이포함됩니다.

l " CMDB채우기(250페이지)"

l " CMDB쿼리 (250페이지)"

l "클래스모델쿼리(251페이지)"

l "변경영향분석(251페이지)"

CMDB 채우기

사용사례:

l 타사자산관리가자산관리에서만사용할수있는정보로CMDB를업데이트합니다.

l 여러타사시스템에서CMDB를채워변경내용을추적하고영향분석을수행할수있는중앙

CMDB를만듭니다.

l 타사시스템에서UCMDB쿼리기능을활용하기위해타사비즈니스논리에따라구성항목및관

계를만듭니다.

CMDB 쿼리

사용사례:

l 타사시스템에서SAPTQL의결과를검색하여SAP시스템을나타내는구성항목및관계를가져

옵니다.

l 타사시스템에서지난5시간동안추가되었거나변경된Oracle 서버목록을가져옵니다.

l 타사시스템에서호스트이름에 lab이라는하위문자열이포함된서버목록을가져옵니다.

l 타사시스템에서주어진CI의인접항목을가져와서이주어진CI와관련된요소를찾습니다.

개발자참조안내서

9장:HPUniversal CMDB API

HPUniversal CMDB (10.10) 250/306 페이지

Page 251: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

클래스모델쿼리

사용사례:

l 타사시스템을통해사용자가CMDB에서검색할데이터집합을지정할수있습니다.클래스모

델을기반으로사용자인터페이스를작성하면사용자에게가능한속성을표시하고필수데이터

를입력하라는프롬프트를표시할수있습니다.그러면사용자가검색할정보를선택할수있습니

다.

l 사용자가UCMDB사용자인터페이스에액세스할수없을때타사시스템에서클래스모델을탐

색합니다.

변경영향분석

사용사례:

l 타사시스템에서지정된호스트에대한변경에의해영향을받을수있는비즈니스서비스목록을

출력합니다.

다음코드샘플을참조하십시오.

l Create a Connection

l Create and Execute an Ad Hoc Query

l Create and Execute a View

l Add and Delete Data

l Execute an Impact Analysis

l Query the Class Model

l Query aHistory Sample

이러한파일은다음디렉터리에있습니다.

\\<UCMDB루트디렉터리>\hp\UCMDB\UCMDBServer\deploy\ucmdb-

docs\docs\eng\APIs\JavaSDK_Samples\

개발자참조안내서

9장:HPUniversal CMDB API

HPUniversal CMDB (10.10) 251/306 페이지

Page 252: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

10장: HP Universal CMDB 웹서비스 API

이장의내용:

규칙 252

HPUniversal CMDB웹서비스API 개요 253

웹서비스호출 255

CMDB쿼리 256

UCMDB업데이트 259

UCMDB클래스모델쿼리 260

영향분석에대한쿼리 262

UCMDB일반매개변수 262

UCMDB출력매개변수 265

UCMDB쿼리메서드 266

UCMDB업데이트메서드 277

UCMDB영향분석메서드 279

실제상태웹서비스API 281

UCMDB웹서비스API 사용사례 283

예 284

규칙

이장에서는다음규칙을사용합니다.

l UCMDB는Universal 구성관리데이터베이스자체를참조합니다.HPUniversal CMDB는해당

응용프로그램을참조합니다.

l UCMDB요소및메서드인수는스키마에지정된경우에만의미가있습니다.메서드에대한인수

나요소는대문자로표시되지않습니다.예를들어 relation은메서드에전달된관계 유형의요소입니다.

요청및응답구조에관한전체문서는HPUCMDBWeb Service API Reference를참조하십시오.

이러한파일은다음폴더에있습니다.

<UCMDB루트디렉터리>\UCMDBServer\deploy\ucmdb-

docs\docs\eng\APIs\CMDB_Schema\webframe.html

HPUniversal CMDB (10.10) 252/306 페이지

Page 253: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

HP Universal CMDB웹서비스 API 개요

참고: 이장은온라인문서라이브러리에서볼수있는UCMDB스키마문서와함께사용하십시

오.

HPUniversal CMDB웹서비스API는응용프로그램을HP Universal CMDB(UCMDB)와통합하는

데사용됩니다.API는다음을수행할수있는메서드를제공합니다.

l CMDB에서CI 및관계추가,제거,업데이트

l 클래스모델에대한정보검색

l 영향분석검색

l 구성항목및관계에대한정보검색

l 자격증명관리:보기,추가,업데이트,제거

l 작업관리:상태보기,활성화,비활성화

l 프로브범위관리:보기,추가,업데이트

l 트리거관리:트리거CI 추가또는제거,트리거TQL추가,제거또는사용하지않도록설정

l 도메인및프로브에서일반데이터보기

구성항목및관계에대한정보를검색하는메서드는일반적으로TQL(토폴로지쿼리언어)을사용합

니다.자세한내용은HPUniversal CMDB모델링안내서에서"토폴로지쿼리언어"를참조하십시오.

HPUniversal CMDB웹서비스API의사용자는다음사항을잘알고있어야합니다.

l SOAP사양

l 개체지향프로그래밍언어(예:C++, C#또는Java)

l HPUniversal CMDB

l 데이터흐름관리

이섹션에는다음항목이포함됩니다.

l "API의사용(253페이지)"

l "사용권한(254페이지)"

API의사용

UCMDB웹서비스API는여러비즈니스요구사항을만족하는데사용됩니다.예:

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 253/306 페이지

Page 254: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 사용가능한CI(구성항목)에대한정보를받기위해타사시스템에서클래스모델을쿼리할수있

습니다.

l 타사자산관리도구가해당도구에만사용할수있는정보로CMDB를업데이트할수있습니다.

이를통해해당데이터를HP응용프로그램에서수집한데이터와통합합니다.

l 여러타사시스템에서CMDB를채워변경내용을추적하고영향분석을수행할수있는중앙

CMDB를만들수있습니다.

l 타사시스템에서해당비즈니스논리에따라엔터티및관계를만든다음CMDB에이데이터를

기록하여CMDB쿼리기능을활용할수있습니다.

l Release Control(CCM)시스템과같은여타시스템은변경내용분석을위해영향분석메서드

를사용할수있습니다.

사용권한

웹서비스의WSDL파일에액세스하려면

http://localhost:8080/axis2/services/UcmdbService?wsdl을방문하십시오.WSDL파일을보

려면서버관리자의사용자자격증명을제공해야합니다.

사용자가로그인하려면레거시API 실행일반수행권한이있어야합니다.

다음표에는각웹서비스API 명령에대해필요한추가권한이표시되어있습니다.

웹서비스API 명령 필요한권한

addCIsAndRelations

deleteCIsAndRelations

updateCIsAndRelations

일반수행:데이터업데이트

executeTopologyQueryByName(AdHoc)

executeTopologyQueryByNameWithParameters

(AdHoc) executeTopologyQueryWithParameters

(AdHoc)

일반수행:정의별로쿼리실행

각쿼리에대해:보기권한

getTopologyQueryExistingResultByName

getTopologyQueryResultCountByName

releaseChunks

pullTopologyMapChunks

getCINeighbours

getFilteredCIsByType

getCIsById

getCIsByType

getRelationsById

일반수행:CI 보기

각쿼리에대해:보기권한

getQueryNameOfView 일반수행:CI 보기

각보기에대해:보기권한

getChangedCIs 일반수행:기록내역보기,CI 보기

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 254/306 페이지

Page 255: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

웹서비스API 명령 필요한권한

calculateImpact

getImpactPath

getImpactRulesByGroupName

getImpactRulesByNamePrefix

일반수행:영향분석실행

getAllClassesHierarchy

getClassAncestors

getCmdbClassDefinition

없음

참고: UCMDB에서루트컨텍스트가변경된경우다음단계에따라웹서비스API에대한액세

스를사용하도록설정합니다.

1. \UCMDB\UCMDBServer\deploy\axis2\WEB-INF\web.xml 구성파일을열고

다음단락을찾습니다.

<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>

그뒤에다음줄을추가합니다.

<init-param><param-name>axis2.find.context</param-name><param-value>false</param-value></init-param>

2. \UCMDB\UCMDBServer\deploy\axis2\WEB-INF\conf\axis2.xml 구성파일

을열고다음줄을찾습니다.

<parameter name="enableSwA" locked="false">false</parameter>

그뒤에다음줄을추가합니다.

<parameter name="contextRoot" locked="false">test1/setup1/axis2</parameter>

여기서 test1/setup1은루트컨텍스트입니다.

(루트컨텍스트를제거하려면경로에추가된텍스트를제거합니다.)

3. UCMDB 서버를다시시작합니다.

웹서비스호출

HPUniversal CMDB웹서비스API의표준SOAP프로그래밍기술을사용하여서버쪽메서드를호

출할수있습니다.명령문을구문분석할수없거나메서드를호출하는데문제가있는경우API 메서

드는 SoapFault예외를발생시킵니다. SoapFault예외가발생하면UCMDB에서하나이상의오류메시지,오류코드및예외메시지필드를채웁니다.오류가없으면호출결과가반환됩니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 255/306 페이지

Page 256: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

SOAP프로그래머가다음위치에서WSDL에액세스할수있습니다.

http://<서버>[:port]/axis2/services/UcmdbService?wsdl

포트는표준설치가아닐경우에만지정해야합니다.올바른포트번호는시스템관리자에게문의하

십시오.

서비스를호출할수있는URL은다음과같습니다.

http://<서버>[:port]/axis2/services/UcmdbService

CMDB에연결하는예는"UCMDB웹서비스API 사용사례(283페이지)"를참조하십시오.

CMDB쿼리

"UCMDB쿼리메서드(266페이지)"에설명된API를사용하여CMDB를쿼리합니다.쿼리및반환되

는CMDB요소는항상실제UCMDB ID를포함합니다.쿼리메서드를사용하는예는Query

Example를참조하십시오.

이섹션에는다음항목이포함됩니다.

l "적시응답계산(256페이지)"

l "대량응답처리(256페이지)"

l "반환할속성지정(257페이지)"

l "구체속성(257페이지)"

l "파생속성(258페이지)"

l "이름지정속성(258페이지)"

l "기타속성사양요소(258페이지)"

적시응답계산

모든쿼리메서드에대해UCMDB서버는요청을받으면쿼리메서드가요청한값을계산하고최신

데이터를기반으로한결과를반환합니다. TQL쿼리가활성상태이고이전에계산된결과가있는경

우에도결과는항상요청을받았을때계산됩니다.그러므로실행중인쿼리가클라이언트응용프로

그램에반환된결과와동일한쿼리가사용자인터페이스에표시되는결과가다를수있습니다.

팁: 응용프로그램에서주어진쿼리결과를두번이상사용하는경우결과데이터를사용할때

마다데이터가크게변경되지않을것같으면반복적으로쿼리를실행하는대신클라이언트응

용프로그램에데이터를저장함으로써성능을향상시킬수있습니다.

대량응답처리

쿼리에대한응답에는항상쿼리메서드에서요청한데이터의구조가포함됩니다.실제데이터가전

송되지않더라도마찬가지입니다.데이터가컬렉션또는맵인여러메서드의경우 chunksKey및numberOfChunks로구성된 ChunkInfo구조도응답에포함됩니다. numberOfChunks필드는검색해야할데이터가포함된청크수를나타냅니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 256/306 페이지

Page 257: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

데이터의최대전송크기는시스템관리자가설정합니다.쿼리로부터반환되는데이터가최대크기

보다큰경우첫번째응답의데이터구조에의미있는정보가포함되지않고 numberOfChunks필드의값이 2이상이됩니다.데이터가최대크기보다크지않은경우에는 numberOfChunks필드가0이고데이터가첫번째응답에전송됩니다.그러므로응답을처리할때는가장먼저 numberOfChunks값을확인하십시오. 1보다크면전송에서데이터를무시하고데이터의청크를요청합니다.그렇지않으면응답에데이터를사용합니다.

청크분할데이터를처리하는방법에대한자세한내용은HPUCMDB모듈쿼리메서드항목의

"pullTopologyMapChunks(275페이지)"및 "releaseChunks(276페이지)"의스키마문서를참조

하십시오.

반환할속성지정

CI 및관계는일반적으로여러개의속성을갖습니다.이러한항목의컬렉션또는그래프를반환하는

일부메서드에는쿼리와일치하는각항목과함께반환할속성값을지정하는입력매개변수를사용

할수있습니다.CMDB는빈속성을반환하지않습니다.그러므로쿼리에대한응답에포함되는속

성이쿼리에서요청한속성보다적을수도있습니다.

이섹션에서는반환할속성을지정하는데사용되는설정유형을설명합니다.

속성은다음두가지방식으로참조할수있습니다.

l 이름별

l 미리정의된속성규칙의이름사용.CMDB에서미리정의된속성규칙을사용하여실제속성이

름목록을만듭니다.

응용프로그램이이름별로속성을참조하면 PropertiesList요소를전달합니다.

팁: 가능한경우규칙기반설정을사용하기보다 PropertiesList를사용하여관심있는속성이름을지정하십시오.미리정의된속성규칙을사용하면대개필요한수보다많은속성이반환

되어성능이저하됩니다.

미리정의된속성에는한정자속성과단순속성이라는두가지유형이있습니다.

l 한정자속성. 이속성은클라이언트응용프로그램에서 QualifierProperties요소(속성에적용할수있는한정자목록)를전달해야하는경우에사용합니다.CMDB은클라이언트응용프로그

램에서전달한한정자목록을하나이상의한정자를적용할속성목록으로변환합니다.이러한속

성값은 CI또는 Relation요소와함께반환됩니다.

l 단순속성. 단순규칙기반속성을사용하려는경우클라이언트응용프로그램에서

SimplePredefinedProperty또는 SimpleTypedPredefinedProperty요소를전달합니다.이러한요소에는CMDB에서반환할속성목록을생성할때적용되는규칙이름이포함되어있습니

다. SimplePredefinedProperty또는 SimpleTypedPredefinedProperty요소에지정할수있는규칙은 CONCRETE, DERIVED및 NAMING입니다.

구체속성

구체속성은지정된CIT에정의된속성집합입니다.파생클래스의인스턴스에대해서는해당파생

클래스에의해추가된속성이반환되지않습니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 257/306 페이지

Page 258: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

메서드가반환하는인스턴스의컬렉션은메서드호출에지정된CIT의인스턴스와해당CIT에서상

속하는CIT의인스턴스로구성될수있습니다.파생CIT는지정된CIT의속성을상속합니다.뿐만

아니라파생CIT는속성을추가하여상위CIT를확장합니다.

구체속성의예:

CIT T1에 P1및 P2속성이있습니다.CIT T11은 T1에서상속하여 P21및 P22속성으로 T1을확장합니다.

T1유형의CI 컬렉션에는 T1및 T11의인스턴스가포함됩니다.이컬렉션에포함된모든인스턴스의구체속성은 P1및 P2입니다.

파생속성

파생속성은지정된CIT에대해정의된속성집합이고,각파생CIT의경우파생CIT에의해추가된

속성입니다.

파생속성의예:

구체속성의예를계속사용하자면, T1인스턴스의파생속성은 P1및 P2입니다. T11인스턴스의파생속성은 P1, P2, P21및 P22입니다.

이름지정속성

이름지정속성은 display_label및 data_name입니다.

기타속성사양요소

l PredefinedProperties

PredefinedProperties에는기타가능한각규칙에대한 QualifierProperties요소와SimplePredefinedProperty요소를포함할수있습니다. PredefinedProperties집합에는몇몇목록유형을포함하지않아도됩니다.

l PredefinedTypedProperties

PredefinedTypedProperties는서로다른속성집합을각CIT에적용하는데사용됩니다.PredefinedTypedProperties에는기타적용가능한각규칙에대한 QualifierProperties요소와 SimpleTypedPredefinedProperty요소를포함할수있습니다.PredefinedTypedProperties는각CIT에개별적으로적용되기때문에파생속성은관련이없습니다. PredefinedProperties집합에는몇몇적용가능한목록유형을포함하지않아도됩니다.

l CustomProperties

CustomProperties 에는기본 PropertiesList및규칙기반속성목록을조합하여포함할수있습니다.속성필터는모든목록에서반환되는모든속성의합집합입니다.

l CustomTypedProperties

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 258/306 페이지

Page 259: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

CustomTypedProperties에는기본 PropertiesList및적용가능한규칙기반속성목록을조합하여포함할수있습니다.속성필터는모든목록에서반환되는모든속성의합집합입니다.

l TypedProperties

TypedProperties는서로다른속성집합을각CIT에전달하는데사용됩니다.TypedProperties는모든유형의유형이름과속성집합으로구성된쌍의컬렉션입니다.각속성집합은해당유형에만적용됩니다.

UCMDB업데이트

업데이트API를사용하여CMDB를업데이트합니다.API 메서드에대한자세한내용은"UCMDB업

데이트메서드(277페이지)"를참조하십시오.

이작업에는다음단계가포함됩니다.

l "UCMDB업데이트매개변수(259페이지)"

l "업데이트메서드를포함하는 ID 유형사용(259페이지)"

UCMDB 업데이트매개변수

이항목에서는서비스의업데이트메서드에서만사용되는매개변수를설명합니다.

l CIsAndRelationsUpdates

CIsAndRelationsUpdates유형은 CIsForUpdate, relationsForUpdate,referencedRelations, referencedCIs로구성됩니다. CIsAndRelationsUpdates인스턴스는세요소를모두포함하지않아도됩니다.

CIsForUpdate는CI 컬렉션이고, relationsForUpdate는 Relations컬렉션입니다.컬렉션의CI및 relation요소에는 props요소가있습니다.CI 또는관계를만들때CI 유형정의에필수특성이나키 특성이있는속성의경우값을채워야합니다.이러한컬렉션의항목은메서드를통해업데이트되거나생성됩니다.

referencedCIs및 referencedRelations는CMDB에이미정의된CI의컬렉션입니다.컬렉션의요소는모든키속성과연결된임시 ID로식별됩니다.이러한항목은업데이트를위해CI 및관

계의 ID를확인하는데사용되며,메서드를통해업데이트되거나생성되지않습니다.

이러한컬렉션의각 CI및 relation요소에는속성컬렉션이있습니다.새항목은이러한컬렉션에서속성값으로생성됩니다.

업데이트메서드를포함하는 ID 유형사용

다음은 ID CIT 그리고CI와관계에대한설명입니다. ID가실제CMDB ID가아닌경우유형및키특

성이필요합니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 259/306 페이지

Page 260: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 구성항목삭제또는업데이트

항목을삭제하거나업데이트할메서드를호출할때클라이언트에서임시 ID나빈 ID를사용할수

도있습니다.이경우,CI를식별하는CI 유형및 "키특성"을설정해야합니다.

l 관계삭제또는업데이트

관계를삭제하거나업데이트할때관계 ID는빈 ID,임시 ID,실제 ID 중하나입니다.

CI의 ID가임시 ID인경우 referencedCIs컬렉션으로CI를전달해야하며해당키특성을지정해야합니다.자세한내용은"CIsAndRelationsUpdates(259페이지)"에서 referencedCIs를참

조하십시오.

l CMDB에새구성항목삽입

빈 ID 또는임시 ID를사용하여새CI를삽입할수있습니다.그러나 ID가빈 ID인경우에는

clientID가없기때문에서버에서 createIDsMap구조의실제CMDB ID를반환할수없습니다.자세한내용은"addCIsAndRelations(277페이지)"및 "UCMDB쿼리메서드(266페이지)"를참

조하십시오.

l CMDB에새관계삽입

관계 ID는임시 ID 또는빈 ID 중하나입니다.그러나관계는새관계이지만관계의양끝에있는

구성항목이CMDB에이미정의된경우에는기존의CI를실제CMDB ID로식별하거나

referencedCIs컬렉션에서지정해야합니다.

UCMDB클래스모델쿼리

클래스모델메서드는CIT 및관계에대한정보를반환합니다.클래스모델은CI 유형관리자를사용

하여구성됩니다.자세한내용은HPUniversal CMDB모델링안내서에서"CI 유형관리자"를참조하십시오.

이섹션에서는CIT 및관계에대한정보를반환하는다음메서드에대한정보를제공합니다.

l "getClassAncestors(260페이지)"

l "getAllClassesHierarchy(261페이지)"

l "getCmdbClassDefinition(261페이지)"

getClassAncestors

getClassAncestors메서드는주어진CIT와이CIT의루트간경로(루트포함)를검색합니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 260/306 페이지

Page 261: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"를참조하십시오.

className 유형이름입니다.자세한내용은"유형이름(264페이지)"을참조하십시

오.

출력

매개변수 설명

classHierarchy 클래스이름과상위클래스이름의쌍으로이루어진컬렉션입니다.

comments 내부전용입니다.

getAllClassesHierarchy

getAllClassesHierarchy메서드는전체클래스모델트리를검색합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

출력

매개변수 설명

classesHierarchy 클래스이름과상위클래스이름의쌍으로이루어진컬렉션입니다.

comments 내부전용입니다.

getCmdbClassDefinition

getCmdbClassDefinition메서드는지정된클래스에대한정보를검색합니다.

getCmdbClassDefinition을사용하여키특성을검색하는경우상위클래스도기본클래스까지쿼리해야합니다. getCmdbClassDefinition은 className으로지정한클래스정의에 ID_ATTRIBUTE가설정된특성만키특성으로식별합니다.상속된키특성은지정된클래스의키특성으로인식되지

않습니다.그러므로지정된클래스의모든키특성목록은해당클래스및모든상위클래스(루트포

함)에있는모든키의합집합입니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 261/306 페이지

Page 262: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

className 유형이름입니다.자세한내용은"UCMDB일반매개변수(262페이지)"

을참조하십시오.

출력

매개변수 설명

cmdbClass name, classType, displayLabel, description, parentName,한정자및특성으로구성된클래스정의입니다.

comments 내부전용입니다.

영향분석에대한쿼리

영향분석메서드의 Identifier는서비스의응답데이터를가리킵니다.현재응답에대해고유하고10분동안사용하지않으면서버의메모리캐시에서제거됩니다.

영향분석메서드를사용하는예는 Impact Analysis Example를참조하십시오.

UCMDB일반매개변수

이섹션에서는서비스의메서드에가장많이사용되는매개변수를설명합니다.

이섹션에는다음항목이포함됩니다.

l "CmdbContext(262페이지)"

l "ID(263페이지)"

l "키특성(263페이지)"

l "ID 유형(263페이지)"

l "CIProperties(263페이지)"

l "유형이름(264페이지)"

l "CI(구성항목)(264페이지)"

l "관계(264페이지)"

CmdbContext

모든UCMDB웹서비스API 서비스를호출하려면 CmdbContext인수가필요합니다. CmdbContext는서비스를호출하는응용프로그램을식별하는 callerApplication문자열입니다. CmdbContext

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 262/306 페이지

Page 263: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

는로깅및문제해결에사용됩니다.

ID

모든 CI및관계에는 ID필드가있습니다.이필드는대/소문자를구분하는 ID 문자열과 ID가임시ID인지여부를나타내는 temp플래그(선택사항)로구성됩니다.

키특성

일부컨텍스트에서 CI또는 Relation을식별하기위해CMDB ID 대신키특성을사용할수있습니다.키특성은클래스정의에 ID_ATTRIBUTE가설정된특성입니다.

사용자인터페이스의구성항목유형특성목록에서키특성옆에는키아이콘이있습니다.자세한

내용은HPUniversal CMDB모델링안내서에서"특성추가/편집대화상자"를참조하십시오.API

클라이언트응용프로그램에서키특성을식별하는방법에대한자세한내용은"UCMDB클래스모

델쿼리(260페이지)"항목의 "getCmdbClassDefinition(261페이지)"

ID 유형

ID요소에는실제 ID 또는임시 ID가포함될수있습니다.

실제 ID는데이터베이스의항목을식별하는문자열로,CMDB에서할당합니다.임시 ID는현재요청

에서고유한임의의문자열일수있습니다.

임시 ID는클라이언트에서할당할수있으며클라이언트에서저장한대로CI의 ID를나타내는경우

가많습니다.반드시CMDB에이미만들어져있는엔터티를나타낼필요는없습니다.클라이언트에

서임시 ID를전달한경우CMDB에서CI 키속성을사용하여기존데이터구성항목을식별할수있

으면해당CI는실제 ID를사용하여식별된것처럼컨텍스트에적합한CI로사용됩니다.

CIProperties

CIProperties요소는여러개의컬렉션으로구성되며,각컬렉션에는컬렉션이름이나타내는유형의속성을지정하는이름-값요소의시퀀스가포함됩니다.필수컬렉션은없으므로 CIProperties요소에는어떤조합의컬렉션이나포함할수있습니다.

CIProperties는 CI및관계 요소에사용됩니다.자세한내용은"CI(구성항목)(264페이지)"및 "관계(264페이지)"를참조하십시오.

속성컬렉션은다음과같습니다.

l dateProps - DateProp요소의컬렉션

l doubleProps - DoubleProp요소의컬렉션

l floatProps - FloatProp요소의컬렉션

l intListProps - intListProp요소의컬렉션

l intProps - IntProp요소의컬렉션

l strProps - StrProp요소의컬렉션

l strListProps - StrListProp요소의컬렉션

l longProps - LongProp요소의컬렉션

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 263/306 페이지

Page 264: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l bytesProps - BytesProp요소의컬렉션

l xmlProps - XmlProp요소의컬렉션

유형이름

유형이름은구성항목유형또는관계유형의클래스이름입니다.유형이름은코드에서클래스를

참조하는데사용됩니다.표시이름과혼동하지마십시오.표시이름은클래스를설명하는사용자인

터페이스에표시되지만코드에서는의미가없습니다.

CI(구성항목)

CI요소는 ID, type,및 props컬렉션으로구성됩니다.

"UCMDB업데이트메서드"를사용하여 CI를업데이트하면실제CMDB ID나클라이언트에서할당한임시 ID를 ID요소에포함할수있습니다.임시 ID를사용하는경우 temp플래그를 true로설정합니다.항목을삭제하면빈 ID가될수있습니다. "UCMDB쿼리메서드"가실제 ID를입력매개변수로사용하여쿼리결과에실제 ID를반환합니다.

유형은CI 유형관리자에정의된유형이름일수있습니다.자세한내용은HPUniversal CMDB모델링안내서에서"CI 유형관리자"를참조하십시오.

props요소는CIProperties 컬렉션입니다.자세한내용은"UCMDB일반매개변수(262페이지)"를참조하십시오.

관계

관계는두구성항목을연결하는엔터티입니다.관계 요소는 ID, type,연결되는두항목의식별자(end1ID및 end2ID)그리고 props컬렉션으로구성됩니다.

"UCMDB업데이트메서드"를사용하여 Relation을업데이트하면 Relation의 ID 값이실제CMDB ID나임시 ID가될수있습니다.항목을삭제하면빈 ID가될수있습니다. "UCMDB쿼리메서드"가실제 ID를입력매개변수로사용하여쿼리결과에실제 ID를반환합니다.

관계유형은UCMDB클래스의 Type Name입니다.이클래스에서관계가인스턴스화됩니다.유형은CMDB에정의된관계유형중하나일수있습니다.클래스또는유형에대한자세한내용은

"UCMDB클래스모델쿼리(260페이지)"를참조하십시오.

자세한내용은HPUniversal CMDB모델링안내서에서"CI 유형관리자"를참조하십시오.

관계의양끝 ID는현재관계의 ID를만드는데사용되기때문에빈 ID가아니어야합니다.그러나양

끝 ID 모두에클라이언트에서할당한임시 ID를사용할수는있습니다.

props요소는CIProperties 컬렉션입니다.자세한내용은"CIProperties(263페이지)"를참조하십시오.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 264/306 페이지

Page 265: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

UCMDB출력매개변수

이섹션에서는서비스의메서드에가장많이사용되는출력매개변수를설명합니다.자세한내용은

online schema documentation을참조하십시오.

이섹션에는다음항목이포함됩니다.

l "CI(265페이지)"

l "ShallowRelation(265페이지)"

l "Topology(265페이지)"

l "CINode(265페이지)"

l "RelationNode(265페이지)"

l "TopologyMap(265페이지)"

l "ChunkInfo(266페이지)"

CI

CI는CI 요소의컬렉션입니다.

ShallowRelation

ShallowRelation은두개의구성항목을연결하는엔터티로, ID,유형,연결되는두항목의식별자(end1ID및 end2ID)로구성됩니다.관계유형은CMDB클래스의 Type Name입니다.이클래스에서관계가인스턴스화됩니다.유형은CMDB에정의된관계유형중하나일수있습니다.

Topology

Topology는 CI요소및관계의그래프입니다. Topology는 CIs컬렉션및하나이상의 Relation요소가포함된 Relations컬렉션으로구성됩니다.

CINode

CINode는 CI컬렉션과 label로구성됩니다. CINode의 label은쿼리에사용되는TQL의노드에정의된레이블입니다.

RelationNode

RelationNode는 Relation컬렉션집합과 label로구성됩니다. RelationNode의 label은쿼리에사용되는TQL의노드에정의된레이블입니다.

TopologyMap

TopologyMap은TQL쿼리와일치하는쿼리계산의출력입니다. TopologyMap의 labels는쿼리에사용되는TQL에정의된노드레이블입니다.

TopologyMap의데이터는다음형식으로반환됩니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 265/306 페이지

Page 266: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l CINodes.하나이상의 CINode입니다("CINode(265페이지)"참조).

l relationNodes.하나이상의 RelationNode입니다("RelationNode(265페이지)"참조).

이러한두구조의 labels에따라구성항목및관계목록의순서가지정됩니다.

ChunkInfo

쿼리가대량의데이터를반환하면서버는데이터를청크라는세그먼트로분할하여저장합니다.클

라이언트에서청크로분할된데이터를검색하는데사용하는정보는쿼리에서반환한 ChunkInfo구조에있습니다. ChunkInfo는검색되어야하는 numberOfChunks와 chunksKey로구성됩니다.chunksKey는이특정쿼리를호출하는데필요한서버데이터의고유한식별자입니다.

자세한내용은"대량응답처리(256페이지)"의스키마문서를참조하십시오.

UCMDB쿼리메서드

이섹션에서는다음메서드에대한정보를제공합니다.

l "executeTopologyQueryByNameWithParameters(266페이지)"

l "executeTopologyQueryWithParameters (267페이지)"

l "getChangedCIs(268페이지)"

l "getCINeighbours(268페이지)"

l "getCIsByID(269페이지)"

l "getCIsByType(270페이지)"

l "getFilteredCIsByType (270페이지)"

l "getQueryNameOfView(273페이지)"

l "getTopologyQueryExistingResultByName(274페이지)"

l "getTopologyQueryResultCountByName(274페이지)"

l "pullTopologyMapChunks(275페이지)"

l "releaseChunks(276페이지)"

executeTopologyQueryByNameWithParameters

executeTopologyQueryByNameWithParameters메서드는매개변수화된지정된쿼리와일치하는topologyMap요소를검색합니다.

쿼리매개변수의값은 parameterizedNodes인수로전달됩니다.지정된TQL에는각 CINode및각relationNode에대해정의된고유한레이블이있어야합니다.그렇지않을경우메서드호출에실패합니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 266/306 페이지

Page 267: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하

십시오.

queryName CMDB에서맵을가져오는데사용할매개변수화된TQL의이름입니

다.

parameterizedNodeList 쿼리결과에포함되기위해각노드가충족해야하는조건입니다.

queryTypedProperties 특정구성항목유형의항목에대해검색할속성집합컬렉션입니다.

출력

매개변수 설명

topologyMap 자세한내용은"TopologyMap(265페이지)"의스키마문서를참조하

십시오.

chunkInfo 자세한내용은"ChunkInfo(266페이지)"및 "대량응답처리(256페이

지)"의스키마문서를참조하십시오.

executeTopologyQueryWithParameters

executeTopologyQueryWithParameters메서드는매개변수화된쿼리와일치하는 topologyMap요소를검색합니다.

쿼리는 queryXML인수로전달됩니다.쿼리매개변수의값은 parameterizedNodeList인수로전달됩니다. TQL에는각 CINode및각 relationNode에대해정의된고유한레이블이있어야합니다.

Ad hoc 쿼리를전달하기위해서는CMDB에정의된쿼리에액세스하지않고

executeTopologyQueryWithParameters메서드를사용합니다.쿼리를정의하는데필요한UCMDB사용자인터페이스에대한액세스권한이없는경우나데이터베이스에쿼리를저장하지않

으려는경우이메서드를사용할수있습니다.

내보낸TQL을이메서드의입력으로사용하려면다음을수행합니다.

1. 웹브라우저를시작하고다음주소를입력합니다.

http://localhost:8080/jmx-console

사용자이름과비밀번호를입력하여로그인해야할수도있습니다.

2. UCMDB:service=TQL Services를클릭합니다.

3. exportTql 작업을찾습니다.

n customerId매개변수상자에1(기본값)을입력합니다.

n patternName 매개변수상자에유효한TQL이름을입력합니다.

4. Invoke를클릭합니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 267/306 페이지

Page 268: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하

십시오.

queryXML 리소스태그없이TQL을나타내는XML문자열입니다.

parameterizedNodeList 쿼리결과에포함되기위해각노드가충족해야하는조건입니다.

출력

매개변수 설명

topologyMap 자세한내용은"TopologyMap(265페이지)"의스키마문서를참조하

십시오.

chunkInfo 자세한내용은"ChunkInfo(266페이지)"및 "대량응답처리(256페이

지)"를참조하십시오.

getChangedCIs

getChangedCIs메서드는지정된CI와관련된모든CI에대한변경데이터를반환합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하

십시오.

ids 관련CI에서변경내용을확인한루트CI의 ID 목록입니다.이컬렉션

에서는실제CMDB ID만유효합니다.

fromDate CI가변경되었는지확인할기간의시작날짜입니다.

toDate CI가변경되었는지확인할기간의끝날짜입니다.

출력

매개변수 설명

getChangedCIsResponseList 0개이상의 ChangedDataInfo요소컬렉션입니다.

getCINeighbours

getCINeighbours메서드는지정된 CI의바로인접한CI를반환합니다.

예를들어쿼리가CI A에바로인접해있고CI A에CI C를사용하는CI B가포함된경우,CI B는반환되지만CI C는반환되지않습니다.즉,지정된유형의인접CI만반환됩니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 268/306 페이지

Page 269: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하

십시오.

ID 인접한CI를검색할CI의 ID입니다.이 ID는실제CMDB ID여야합니

다.

neighbourType 검색할인접CI의CIT 이름입니다.지정된유형및해당유형에서파생

된유형의인접유형이반환됩니다.자세한내용은"유형이름(264페

이지)"을참조하십시오.

CIProperties 각구성항목에대해반환될데이터로서,사용자인터페이스의쿼리레

이아웃이라고합니다.자세한내용은"TypedProperties(259페이지)"

의스키마문서를참조하십시오.

relationProperties 각관계에대해반환될데이터로서,사용자인터페이스의쿼리레이아

웃이라고합니다.자세한내용은"TypedProperties(259페이지)"의

스키마문서를참조하십시오.

출력

매개변수 설명

topology 자세한내용은"Topology(265페이지)"의스키마문서를참조하십시

오.

comments 내부전용입니다.

getCIsByID

getCIsByID메서드는구성항목의CMDB ID로구성항목을검색합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하

십시오.

CIsTypedProperties 유형이지정된속성컬렉션입니다.자세한내용은"기타속성사양요

소(258페이지)"의스키마문서를참조하십시오.

IDs 이컬렉션에서는실제CMDB ID만유효합니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 269/306 페이지

Page 270: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

출력

매개변수 설명

CI CI 요소의컬렉션입니다.

chunkInfo 자세한내용은"ChunkInfo(266페이지)"및 "대량응답처리(256페이지)

"의스키마문서를참조하십시오.

getCIsByType

getCIsByType메서드는지정된유형및지정된유형에서상속하는모든유형의구성항목컬렉션을반환합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하

십시오.

type 클래스이름입니다.자세한내용은"유형이름(264페이지)"을참조하

십시오.

properties 각구성항목에대해반환할데이터입니다.자세한내용은

"CustomProperties(258페이지)"의스키마문서를참조하십시오.

출력

매개변수 설명

CI CI 요소의컬렉션입니다.

chunkInfo 자세한내용은"ChunkInfo(266페이지)"및 "대량응답처리(256페이지)"

를참조하십시오.

getFilteredCIsByType

getFilteredCIsByType메서드는이메서드에사용된조건을충족하는지정된유형의CI를검색합니다.조건은다음항목으로구성됩니다.

l 속성이름을포함하는이름필드

l 비교연산자를포함하는연산자필드

l 값또는값목록을포함하는값필드(선택사항)

이러한항목은함께부울식을만듭니다.<item>.property.value [operator] <condition>.value

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 270/306 페이지

Page 271: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

예를들어조건이름이 root_actualdeletionperiod이면조건값은 40이고연산자는 ==이므로,부울문은다음과같습니다.

<item>.root_actualdeletionperiod.value = = 40

이쿼리는다른조건이없다고간주하고 root_actualdeletionperiod가 40인모든항목을반환합니다.

conditionsLogicalOperator인수가 AND인경우에는쿼리가 conditions컬렉션에서모든조건을충족하는항목을반환합니다. conditionsLogicalOperator인수가 OR인경우에는쿼리가conditions컬렉션에서조건중하나이상을충족하는항목을반환합니다.

다음표에는비교연산자가나열되어있습니다.

연산자 조건/설명유형

ChangedDuring 날짜

범위확인입니다.조건값은시간단위로지정됩니다.날짜속성값이메서

드를호출한시간에서조건값을더하거나뺀범위에있는경우조건이충족

됩니다.

예를들어조건값이 24인경우날짜속성값이어제의현재시간과내일의현재시간사이에있으면조건이충족됩니다.

참고: ChangedDuring이름은이전버전과의호환을위해그대로유지됩니다.이전버전에서는연산자가시간속성만들기및수정에만사용

되었습니다.

== 문자열및숫자

EqualIgnoreCase 문자열

> 숫자

GreaterEqual 숫자

In 문자열,숫자및목록

조건값은목록입니다.속성값이목록의값중하나인경우조건이충족됩

니다.

InList 목록

조건값및속성값이목록입니다.

조건목록의모든값이항목의속성목록에도나타나면조건이충족됩니다.

속성값이조건에지정된수보다많을수있으며,이경우조건충족여부에

는영향을주지않습니다.

IsNull 문자열,숫자및목록

항목의속성에값이없습니다. IsNull연산자를사용하면조건값이무시되고어떤경우에는nil이될수있습니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 271/306 페이지

Page 272: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

연산자 조건/설명유형

< 숫자

LessEqual 숫자

Like 문자열

조건값이속성값의하위문자열값입니다.조건값은백분율기호(%)와함께괄호안에포함되어야합니다.예를들어 %Bi%의경우 Bismark및 Bayof Biscay는일치하는조건이지만 biscuit은일치하는조건이아닙니다.

LikeIgnoreCase 문자열

LikeIgnoreCase연산자는 Like연산자를사용할때와마찬가지로사용합니다.그러나일치하는문자열을찾을때대/소문자는구분하지않습니다.

따라서 %Bi%는 biscuit과일치합니다.

NotEqual 문자열및숫자

UnchangedDuring 날짜

범위확인입니다.조건값은시간단위로지정됩니다.날짜속성값이메서

드를호출한시간에서조건값을더하거나뺀범위에있는경우조건이충족

되지않습니다.해당범위밖에있는경우에는조건이충족됩니다.

예를들어조건값이 24인경우날짜속성값이어제의현재시간이전이거나내일의현재시간이후이면조건이충족됩니다.

참고: UnchangedDuring이름은이전버전과의호환을위해그대로유지됩니다.이전버전에서는연산자가시간속성만들기및수정에만사

용되었습니다.

조건을설정하는작업의예:

FloatCondition fc = new FloatCondition();FloatProp fp = new FloatProp();fp.setName("attr_name");fp.setValue(11f);fc.setCondition(fp);fc.setFloatOperator(FloatCondition.FloatOperator.EQUAL);

상속한속성을쿼리하는작업의예:

대상CI는 name과 size라는두개의특성이있는 sample입니다. sampleII는 level과 grade라는두개의특성이있는CI를확장합니다.이예에서는 sample에서상속된 sampleII의속성을이름별로지정하여쿼리하도록설정합니다.

GetFilteredCIsByType request = new GetFilteredCIsByType()request.setCmdbContext(cmdbContext)

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 272/306 페이지

Page 273: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

request.setType("sampleII");CustomProperties customProperties = new CustomProperties();PropertiesList propertiesList = new PropertiesList();propertiesList.setPropertyNames(Arrays.asList("name","size"));customProperties.setPropertiesList(propertiesList);request.setProperties(customProperties);

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참

조하십시오.

type 클래스이름입니다.자세한내용은"유형이름(264페이지)"을참

조하십시오.유형은CI 유형관리자를사용하여정의한유형중하

나일수있습니다.자세한내용은HPUniversal CMDB모델링안내서에서CI Type Manager를참조하십시오.

properties 각CI에대해반환될데이터로서,사용자인터페이스의쿼리레이

아웃이라고합니다.자세한내용은"CustomProperties(258페이

지)"의스키마문서를참조하십시오.

conditions 이름-값쌍의컬렉션및서로를연결하는연산자입니다.예: host_hostname like QA.

conditionsLogicalOperator l AND. 모든조건을충족해야합니다.

l OR.조건중하나이상을충족해야합니다.

출력

매개변수 설명

CI CI 요소컬렉션입니다.

chunkInfo 자세한내용은"ChunkInfo(266페이지)"및 "대량응답처리(256페이지)"

를참조하십시오.

getQueryNameOfView

getQueryNameOfView메서드는지정된보기의기반이되는TQL의이름을검색합니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 273/306 페이지

Page 274: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

viewName CMDB에있는클래스모델의하위집합인보기의이름입니다.

출력

매개변수 설명

queryName CMDB에서보기의기반이되는TQL의이름입니다.

getTopologyQueryExistingResultByName

getTopologyQueryExistingResultByName메서드는지정된TQL의최근실행결과를검색합니다.이메서드를호출해도TQL은실행되지않습니다.이전실행에서결과가없었다면아무것도반환되

지않습니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하

십시오.

queryName TQL의이름입니다.

queryTypedProperties 특정구성항목유형의항목에대해검색할속성집합컬렉션입니다.

출력

매개변수 설명

topologyMap 자세한내용은"TopologyMap(265페이지)"을참조하십시오.

chunkInfo 자세한내용은"ChunkInfo(266페이지)"및 "대량응답처리(256페이

지)"를참조하십시오.

getTopologyQueryResultCountByName

getTopologyQueryResultCountByName메서드는지정된쿼리와일치하는각노드의인스턴스수를검색합니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 274/306 페이지

Page 275: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

queryName TQL의이름입니다.

countInvisible true인경우쿼리에서숨김으로정의된CI가출력에포함됩니다.

출력

매개변수 설명

getTopologyQueryResultCountByNameResponse 쿼리와일치하는인스턴스개수입니다.

pullTopologyMapChunks

pullTopologyMapChunks메서드는메서드에대한응답이포함된청크중하나를검색합니다.

각청크에는응답의일부인 topologyMap요소가포함됩니다.첫번째청크번호가 1로지정되므로검색루프카운터가1부터<응답개체>.getChunkInfo().getNumberOfChunks()까지반복됩니다.

자세한내용은"ChunkInfo(266페이지)"및 "CMDB쿼리(256페이지)"를참조하십시오.

클라이언트응용프로그램에서부분맵을처리할수있어야합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하

십시오.

ChunkRequest 검색할청크수및쿼리메서드에의해반환되는 ChunkInfo입니다.

queryTypedProperties 특정CI 유형의항목에대해검색할속성집합컬렉션입니다.

출력

매개변수 설명

topologyMap 자세한내용은"TopologyMap(265페이지)"의스키마문서를참조하

십시오.

comments 내부전용입니다.

청크처리의예:

GetCIsByType request =     new GetCIsByType(cmdbContext, typeName, customProperties);

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 275/306 페이지

Page 276: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

GetCIsByTypeResponse response =     ucmdbService.getCIsByType(request);ChunkRequest chunkRequest = new ChunkRequest();chunkRequest.setChunkInfo(response.getChunkInfo());for(int j=1; j<=response.getChunkInfo().getNumberOfChunks(); j++){    chunkRequest.setChunkNumber(j);    PullTopologyMapChunks req =new PullTopologyMapChunks(cmdbContext,chunkRequest);    PullTopologyMapChunksResponse res =        ucmdbService.pullTopologyMapChunks(req);        for(int m=0 ;            m < res.getTopologyMap().getCINodes().sizeCINodeList() ;            m++) {             CIs cis =            res.getTopologyMap().getCINodes().getCINode(m).getCIs();            for(int i=0 ; i < cis.sizeCIList() ; i++) {                // your code to process the CIs            }        }}

GetCIsByType request =     new GetCIsByType(cmdbContext, typeName, customProperties);GetCIsByTypeResponse response =     ucmdbService.getCIsByType(request);ChunkRequest chunkRequest = new ChunkRequest();chunkRequest.setChunkInfo(response.getChunkInfo());for(int j=1 ; j <= response.getChunkInfo().getNumberOfChunks() ; j++) {    chunkRequest.setChunkNumber(j);    PullTopologyMapChunks req = new PullTopologyMapChunks(cmdbContext,chunkRequest);    PullTopologyMapChunksResponse res =        ucmdbService.pullTopologyMapChunks(req);        for(int m=0 ;            m < res.getTopologyMap().getCINodes().getCINodes().size();            m++) {             CIs cis =            res.getTopologyMap().getCINodes().getCINodes().get(m).getCIs();            for(int i=0 ; i < cis.getCIs().size(); i++) {                // your code to process the CIs            }        }}

releaseChunks

releaseChunks메서드는쿼리에서검색한데이터가포함된청크의메모리를비웁니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 276/306 페이지

Page 277: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

팁: 10분후에서버에서데이터를제거합니다.데이터를읽는즉시제거하기위해이메서드를

호출하면서버리소스가확보됩니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

chunksKey 서버에서청크로분할된데이터의식별자입니다.키는 ChunkInfo의요소입니다.

UCMDB업데이트메서드

이섹션에서는다음메서드에대한정보를제공합니다.

l "addCIsAndRelations(277페이지)"

l "addCustomer(278페이지)"

l "deleteCIsAndRelations(278페이지)"

l "removeCustomer(279페이지)"

l "updateCIsAndRelations(279페이지)"

addCIsAndRelations

addCIsAndRelations메서드는CI 및관계를추가하거나업데이트합니다.

CMDB에CI 또는관계가없는경우CI 또는관계가추가되고 CIsAndRelationsUpdates인수의컨텐츠에따라해당속성이설정됩니다.

CMDB에CI 또는관계가있는경우 updateExisting이 true이면CI 또는관계가새데이터로업데이트됩니다.

updateExisting이false이면 CIsAndRelationsUpdates가기존구성항목이나관계를참조할수없습니다. updateExisting이false인경우기존항목을참조하려고하면예외가발생합니다.

updateExisting이 true이면 ignoreValidation의값에관계없이CI의유효성이검사되지않고추가또는업데이트작업이수행됩니다.

updateExisiting이false이고 ignoreValidation이 true이면CI의유효성이검사되지않고추가작업이수행됩니다.

updateExisiting이false이고 ignoreValidation이false이면추가작업전에CI의유효성이검사됩니다.

관계의유효성은검사되지않습니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 277/306 페이지

Page 278: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

CreatedIDsMap은클라이언트의임시 ID를그에해당하는실제CMDB ID와연결하는ClientIDToCmdbID유형의맵또는사전입니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조

하십시오.

updateExisting CMDB에이미있는항목을업데이트하려면 true로설정합니다.항

목이이미있는경우예외를발생시키려면false로설정합니다.

CIsAndRelationsUpdates 업데이트하거나만들항목입니다.자세한내용은

"CIsAndRelationsUpdates(259페이지)"를참조하십시오.

ignoreValidation true이면CMDB업데이트전에확인이수행되지않습니다.

dataStore 변경한사람정보입니다.

출력

매개변수 설명

createdIDsMapList CMDB ID에매핑된클라이언트 ID 목록‎‎입니다.자세한내용은위의설

명을참조하십시오.

comments 내부전용입니다.

addCustomer

addCustomer메서드는고객을추가합니다.

입력

매개변수 설명

CustomerID 고객의숫자 ID입니다.

deleteCIsAndRelations

deleteCIsAndRelations메서드는CMDB에서지정된구성항목및관계를제거합니다.

CI가삭제될때CI가하나이상의관계 항목의한끝이면해당관계 항목도삭제됩니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조

하십시오.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 278/306 페이지

Page 279: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

CIsAndRelationsUpdates 삭제할항목입니다.자세한내용은"CIsAndRelationsUpdates

(259페이지)"를참조하십시오.

dataStore 변경한사람정보입니다.

removeCustomer

removeCustomer메서드는고객기록을삭제합니다.

입력

매개변수 설명

CustomerID 고객의숫자 ID입니다.

updateCIsAndRelations

updateCIsAndRelations메서드는지정된CI 및관계를업데이트합니다.

업데이트시 CIsAndRelationsUpdates인수의속성값을사용합니다.CMDB에CI 또는관계가없는경우예외가발생합니다.

CreatedIDsMap은클라이언트의임시 ID를그에해당하는실제CMDB ID와연결하는ClientIDToCmdbID유형의맵또는사전입니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조

하십시오.

CIsAndRelationsUpdates 업데이트할항목입니다.자세한내용은"CIsAndRelationsUpdates

(259페이지)"를참조하십시오.

ignoreValidation true이면CMDB업데이트전에확인이수행되지않습니다.

dataStore 변경한사람정보입니다.

출력

매개변수 설명

createdIDsMapList CMDB ID에매핑된클라이언트 ID 목록‎‎입니다.자세한내용은

"addCIsAndRelations(277페이지)"를참조하십시오.

UCMDB영향분석메서드

이섹션에서는다음메서드에대한정보를제공합니다.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 279/306 페이지

Page 280: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "calculateImpact(280페이지)"

l "getImpactPath(280페이지)"

l "getImpactRulesByNamePrefix(281페이지)"

calculateImpact

calculateImpact메서드는CMDB에정의된규칙에따라주어진CI의영향을받는CI를계산합니다.

그리고규칙의이벤트트리거로인한결과를보여줍니다. calculateImpact의 identifier출력은"getImpactPath(280페이지)"에대한입력으로사용됩니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

impactCategory 시뮬레이션중인규칙을트리거하는이벤트유형입니다.

IDs ID 요소의컬렉션입니다.

impactRulesNames ImpactRuleName요소의컬렉션입니다.

severity 트리거이벤트의심각도입니다.

출력

매개변수 설명

impactTopology 자세한내용은"Topology(265페이지)"의스키마문서를참조하십시오.

identifier 서버응답에대한키입니다.

getImpactPath

getImpactPath메서드는영향받는CI와이CI에영향을주는CI 사이의경로를나타내는토폴로지그래프를검색합니다.

"calculateImpact(280페이지)"의 identifier출력은 getImpactPath의 identifier입력인수로사용됩니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 280/306 페이지

Page 281: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

identifier calculateImpact가반환한서버응답에대한키입니다.

relation impactTopology요소의calculateImpact가반환한"ShallowRelation"중하나를기반으로한관계입니다.

출력

매개변수 설명

impactPathTopology CI컬렉션및 ImpactRelations컬렉션입니다.

comments 내부전용입니다.

ImpactRelations요소는 ID, type, end1ID, end2ID, rule, action으로구성됩니다.

getImpactRulesByNamePrefix

getImpactRulesByNamePrefix메서드는접두사필터를사용하여규칙을검색합니다.

이메서드는접두사를사용하여이름을지정한영향규칙에적용됩니다.이름의접두사는규칙이적

용되는컨텍스트를나타냅니다(예: SAP_myrule, ORA_myrule등).이메서드는모든영향규칙이름에서 ruleNamePrefixFilter인수로지정된접두사로시작하는이름을필터링합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

ruleNamePrefixFilter 일치시킬규칙이름의첫문자를포함하는문자열입니다.

출력

매개변수 설명

impactRules impactRules는0개이상의 impactRule로구성됩니다.변경으로인한영향을지정하는 impactRule은 ruleName, description, queryName및 isActive로구성됩니다.

실제상태웹서비스 API

실제상태웹서비스API는기본적으로Service Manager에서특정CMDB ID 또는글로벌 ID와특

정고객 ID에대한실제상태정보를검색하는데사용됩니다.API는통합/SM쿼리폴더아래에서일

치하는폴더를찾고,CMDB ID 또는글로벌 ID를조건으로사용하여TQL를실행하며,쿼리의출력

을반환합니다.

웹서비스URL: http://[machine_name]:8080/axis2/services/ucmdbSMService

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 281/306 페이지

Page 282: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

웹서비스스키마: http://[machine_

name]:8080/axis2/services/ucmdbSMService?xsd=xsd0

흐름

API 메서드가호출되면이메서드는통합/SM쿼리폴더에서적절한쿼리를찾으려고합니다.이메

서드는이름이Root인QueryElement를검색하여요청한CMDBID/GlobalID 유형을이후의폴더

에있는쿼리중하나와일치시키며,일치하는항목이없을경우요청한CMDBID/GlobalID와같은

유형의QueryNode를사용하려고합니다.적절한Query 및QueryNode를찾은경우

CMDBID/GlobalID를QueryNode의조건으로넣어Query를실행합니다.그러면API의호출자에

결과가반환됩니다.

변환을사용하여결과조작

결과XML에추가변환을적용해야하는경우가있습니다(예:모든디스크의크기를요약하고이요

약을CI에추가적인특성으로추가하는경우). TQL결과에서변환을추가하려면다음과같이[tql_

name].xslt라는리소스를어댑터구성에배치합니다.어댑터관리>ServiceDeskAdapter7-1 >

구성파일> [tql_name].xslt

실제상태웹서비스 API의로그

UCMDB의로그구성은UCMDBServer/Conf/log의여러*.properties 파일에있습니다.

SM실제상태흐름의로그를보려면다음을수행합니다.

1. cmdb_soaapi.properties 파일을열고다음과같이로그수준을DEBUG로변경합니다.

loglevel=DEBUG

2. fcmdb.properties 파일을열고다음과같이로그수준을DEBUG로변경합니다.

loglevel=DEBUG

3. 서버가변경사항을검색하도록1분정도기다립니다.

4. SM에서실제상태를실행합니다.

5. UCMDBServer/Runtime/log에서다음로그파일을봅니다.

n cmdb.soaapi.log

n fcmdb.log

루트컨텍스트를변경한후에복제된CI의실제상태활성화

UCMDB액세스에사용되는루트컨텍스트를변경한경우에는다음과같이구성을변경하여복제된

CI의실제상태를활성화해야합니다.

1. UCMDBServer\deploy\axis2\WEB-INF에서web.xml 파일을엽니다.

2. 다음servlet init 매개변수를AxisServlet에추가합니다(줄28 뒤에다음네줄붙여넣기).

<init-param>

<param-name>axis2.find.context</param-name>

<param-value>false</param-value>

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 282/306 페이지

Page 283: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

</init-param>

이설정을사용하면Axis2가컨텍스트루트를계산하지않고axis2.xml에서명시적으로찾도

록합니다.

3. UCMDBServer\deploy\axis2\WEB-INF\conf에서axis2.xml 파일을엽니다.

4. 줄 58에서contextRoot매개변수의주석을제거하고다음과같이편집합니다.

<parameter name="contextRoot" locked="false">test/axis2</parameter>

(test는 cmdb.xml의새루트컨텍스트).

참고: test/axis2 시작부분에는슬래시가없습니다.

UCMDB웹서비스 API 사용사례

다음의사용사례에서는두가지시스템을가정합니다.

l HPUniversal CMDB서버

l 구성항목저장소를포함하는타사시스템

이섹션에는다음항목이포함됩니다.

l "CMDB채우기(283페이지)"

l "CMDB쿼리(283페이지)"

l "클래스모델쿼리(284페이지)"

l "변경영향분석(284페이지)"

CMDB 채우기

사용사례:

l 타사자산관리가자산관리에서만사용할수있는정보로CMDB를업데이트합니다.

l 여러타사시스템에서CMDB를채워변경내용을추적하고영향분석을수행할수있는중앙

CMDB를만듭니다.

l 타사시스템에서CMDB쿼리기능을활용하기위해타사비즈니스논리에따라구성항목및관

계를만듭니다.

CMDB 쿼리

사용사례:

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 283/306 페이지

Page 284: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l 타사시스템에서SAPTQL의결과를가져와SAP시스템을나타내는구성항목및관계를가져옵

니다.

l 타사시스템에서지난5시간동안추가되었거나변경된Oracle 서버목록을가져옵니다.

l 타사시스템에서호스트이름에 lab이라는하위문자열이포함된서버목록을가져옵니다.

l 타사시스템에서주어진CI의인접항목을가져와서이주어진CI와관련된요소를찾습니다.

클래스모델쿼리

사용사례:

l 타사시스템을통해사용자가CMDB에서검색할데이터집합을지정할수있습니다.클래스모

델을기반으로사용자인터페이스를작성하면사용자에게가능한속성을표시하고필수데이터

를입력하라는프롬프트를표시할수있습니다.그러면사용자가검색할정보를선택할수있습니

다.

l 사용자가UCMDB사용자인터페이스에액세스할수없을때타사시스템에서클래스모델을탐

색합니다.

변경영향분석

사용사례:

타사시스템에서지정된호스트에대한변경에의해영향을받을수있는비즈니스서비스목록을출

력합니다.

다음코드샘플을참조하십시오.

l The Example Base Class

l Query Example

l Update Example

l Class Model Example

l Impact Analysis Example

이러한파일은다음디렉터리에있습니다.

\\<UCMDB루트디렉터리>\hp\UCMDB\UCMDBServer\deploy\ucmdb-

docs\docs\eng\APIs\WebServiceAPI_Samples\

개발자참조안내서

10장:HPUniversal CMDB웹서비스API

HPUniversal CMDB (10.10) 284/306 페이지

Page 285: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

11장: 데이터흐름관리 Java API

이장의내용:

데이터흐름관리Java API 사용 285

데이터흐름관리 Java API 사용

참고: 이장은온라인문서라이브러리에서볼수있는DFM API Javadoc와함께사용하십시

오.

이장에서는타사또는사용자지정도구에서HP 데이터흐름관리Java API를사용하여데이터흐

름을관리하는방법을설명합니다.이API는다음을수행할수있는메서드를제공합니다.

l 자격증명관리보기,추가,업데이트,제거

l 작업관리상태보기,활성화,비활성화

l 프로브범위관리보기,추가,업데이트

l 트리거관리트리거CI 추가또는제거,트리거TQL추가,제거또는사용하지않도록설정

l 일반데이터보기도메인및프로브의데이터

다음서비스는디스커버리서비스패키지에서사용할수있습니다.

l DDMConfigurationService. Data Flow Probe,클러스터, IP범위및자격증명을구성하기위

한서비스입니다.Universal Discovery 서버는XML파일로또는Data Flow Probe를통해구성

할수있습니다.

l DDMManagementService. Universal Discovery 실행의진행률,결과및오류를분석하고보

기위한서비스입니다.

l DDMSoftwareSignatureService. Data Flow Probe 구성요소에의해디스커버리될소프트웨

어항목을정의하기위한서비스입니다.이러한정의는시스템전체에적용됩니다.Data Flow

Probe 구성요소가두개이상정의되는경우그러한정의는모든구성요소에적용됩니다.

l DDMZoneService. 영역기반디스커버리를관리하기위한서비스입니다.

이러한서비스외에도, Jython 어댑터를만드는데사용되는데이터흐름관리API가있습니다.자세

한내용은"Jython 어댑터개발(35페이지)"을참조하십시오.

사용권한

관리자는API에연결하는데필요한로그인자격증명을제공합니다.API 클라이언트에는CMDB에

서정의된통합사용자의사용자이름과비밀번호가필요합니다.이러한사용자는CMDB의실제사

용자가아니라CMDB에연결하는응용프로그램을나타냅니다.

또한사용자가로그인하기위해서는SDK에액세스일반수행권한이있어야합니다.

HPUniversal CMDB (10.10) 285/306 페이지

Page 286: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

주의: API 인증권한이있는일반사용자도API 클라이언트를사용할수있습니다.하지만이옵

션은권장되지않습니다.

자세한내용은"통합사용자만들기(248페이지)"를참조하십시오.

개발자참조안내서

11장:데이터흐름관리Java API

HPUniversal CMDB (10.10) 286/306 페이지

Page 287: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

12장: 데이터흐름관리웹서비스 API

이장의내용:

데이터흐름관리웹서비스API 개요 287

규칙 288

웹서비스호출 288

데이터흐름관리메서드및데이터구조 288

코드샘플 299

자격증명추가작업의예 302

데이터흐름관리웹서비스 API 개요

이장에서는타사또는사용자지정도구에서HP 데이터흐름관리웹서비스API를사용하여데이터

흐름을관리하는방법을설명합니다.

HP 데이터흐름관리웹서비스API는응용프로그램을HPUniversal CMDB와통합하는데사용됩

니다.API는다음을수행할수있는메서드를제공합니다.

l 자격증명관리보기,추가,업데이트,제거

l 작업관리상태보기,활성화,비활성화

l 프로브범위관리보기,추가,업데이트

l 트리거관리트리거CI 추가또는제거,트리거TQL추가,제거또는사용하지않도록설정

l 일반데이터보기도메인및프로브의데이터

HP 데이터흐름관리웹서비스사용자는다음사항을잘알고있어야합니다.

l SOAP사양

l 개체지향프로그래밍언어(예:C++, C#또는Java)

l HPUniversal CMDB

l 데이터흐름관리

사용자가로그인하려면레거시API 실행일반수행권한이있어야합니다.

사용가능한작업에관한전체문서는HP Universal Discovery 스키마참조를참조하십시오.이러한파일은다음폴더에있습니다.

<UCMDB루트디렉터리>\UCMDBServer\deploy\ucmdb-

docs\docs\eng\APIs\DDM_Schema\webframe.html

HPUniversal CMDB (10.10) 287/306 페이지

Page 288: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

규칙

이장에서는다음규칙을사용합니다.

l 이스타일 Element는메서드가반환했거나메서드에전달된구조를포함하여항목이데이터베이스의엔터티또는스키마에정의된요소임을나타냅니다.일반텍스트는해당항목이일반컨텍스

트로설명됨을나타냅니다.

l 데이터흐름관리요소및메서드인수는스키마에지정된경우에만의미가있습니다.이는일반

적으로클래스이름또는클래스인스턴스의일반참조가대문자로표시됨을의미합니다.메서드

에대한인수나요소는대문자로표시되지않습니다.예를들어 credential은메서드에전달된Credential유형의요소입니다.

웹서비스호출

HP 데이터흐름관리웹서비스API를통해표준SOAP프로그래밍기술을사용하여서버측메서드

를호출할수있습니다.명령문을구문분석할수없거나메서드를호출하는데문제가있는경우API

메서드는 SoapFault예외를발생시킵니다. SoapFault예외가발생하면해당서비스에서하나이상의오류메시지,오류코드및예외메시지필드를채웁니다.오류가없으면호출결과가반환됩니다.

서비스를호출하려면다음을사용합니다.

l 프로토콜: 서비스 구성에 따라 http 또는 https

l URL: <UCMDB 서버>:8080/axis2/services/DiscoveryService

l 기본 비밀번호: "admin"

l 기본 사용자 이름: "admin"

SOAP프로그래머가다음위치에서WSDL에액세스할수있습니다.

l axis2/services/DiscoveryService?wsdl

데이터흐름관리메서드및데이터구조

이섹션에서는데이터흐름관리웹서비스API 메서드및데이터구조를나열하고각사용방법에대

해간단히요약하여설명합니다.각작업의요청및응답에관한전체문서는HP UniversalDiscovery 스키마참조를참조하십시오.

이섹션에는다음항목이포함됩니다.

l "데이터구조(289페이지)"

l "디스커버리작업메서드관리(289페이지)"

l "트리거메서드관리(291페이지)"

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 288/306 페이지

Page 289: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

l "도메인및프로브데이터메서드(293페이지)"

l "자격증명데이터메서드(295페이지)"

l "데이터새로고침메서드(297페이지)"

데이터구조

데이터흐름관리웹서비스API에사용되는몇가지데이터구조가있습니다.

CIProperties

CIProperties는여러컬렉션중하나의컬렉션입니다.각컬렉션에는다른데이터유형의속성이포함되어있습니다.예를들어 dateProps컬렉션, strListProps컬렉션, xmlProps컬렉션등이있습니다.

각유형컬렉션에는지정된유형의개별속성이포함되어있습니다.이러한속성요소의이름은컨테

이너와동일하지만단수형입니다.예를들어, dateProps에 dateProp요소가포함됩니다.각속성은이름-값쌍입니다.

HP Universal Discovery 스키마참조에서CIProperties를참조하십시오.

IPList

IP요소목록으로서각요소에 IPv4 또는 IPv6 주소가포함됩니다.

HP Universal Discovery 스키마참조에서 IPList를참조하십시오.

IPRange

IPRange에는두개의요소,즉 Start와 End가있습니다.각요소에는 IPv4 또는 IPv6 주소인Address요소가포함되어있습니다.

HP Universal Discovery 스키마참조에서 IPRange를참조하십시오.

Scope

두개의 IPRanges입니다. Exclude는작업에서제외할 IPRanges의컬렉션입니다. Include는작업에포함할 IPRanges의컬렉션입니다.

HP Universal Discovery 스키마참조에서Scope를참조하십시오.

디스커버리작업메서드관리

activateJob

지정된작업을활성화합니다.

"코드샘플(299페이지)"을참조하십시오.

입력

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 289/306 페이지

Page 290: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

JobName 작업이름입니다.

deactivateJob

지정된작업을비활성화합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

JobName 작업이름입니다.

dispatchAdHocJob

프로브Ad hoc에대한작업을발송합니다.작업은활성상태여야하고지정된트리거CI를포함해

야합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

JobName 작업이름입니다.

CIID 트리거CI의 ID입니다.

ProbeName 프로브의이름입니다.

Timeout 밀리초단위

getDiscoveryJobsNames

작업이름의목록을반환합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

출력

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 290/306 페이지

Page 291: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

strList 작업이름의목록입니다.

isJobActive

작업이활성상태인지여부를확인합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

JobName 확인할작업의이름입니다.

출력

매개변수 설명

JobState 작업이활성상태일경우 true입니다.

트리거메서드관리

addTriggerCI

지정된작업에새트리거CI를추가합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

JobName 작업이름입니다.

CIID 트리거CI의 ID입니다.

addTriggerTQL

지정된작업에새트리거TQL을추가합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

JobName 작업이름입니다.

TqlName 추가할TQL의이름입니다.

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 291/306 페이지

Page 292: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

disableTriggerTQL

TQL이작업을트리거하지않도록하지만작업을트리거하는쿼리목록에서영구적으로제거하지는

않습니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

JobName 작업이름입니다.

removeTriggerCI

작업을트리거하는CI 목록에서지정된CI를제거합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

JobName 작업이름입니다.

CIID 트리거CI의 ID입니다.

removeTriggerTQL

작업을트리거하는쿼리목록에서지정된TQL을제거합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

JobName 확인할작업이름의컬렉션입니다.

CIID 제거할TQL의 ID입니다.

setTriggerTQLProbesLimit

작업에서TQL이활성상태인프로브를지정된목록으로제한합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 292/306 페이지

Page 293: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

JobName 작업이름입니다.

tqlName TQL이름입니다.

probesLimit TQL이활성상태인프로브의목록입니다.

도메인및프로브데이터메서드

getDomainType

도메인유형을반환합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

domainName 도메인의이름입니다.

출력

매개변수 설명

domainType 도메인유형입니다.

getDomainsNames

현재도메인의이름을반환합니다.

"코드샘플(299페이지)"을참조하십시오.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

출력

매개변수 설명

domainNames 도메인이름의목록입니다.

getProbeIPs

지정된프로브의 IP주소를반환합니다.

입력

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 293/306 페이지

Page 294: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

domainName 확인할도메인입니다.

probeName 해당도메인에사용된프로브의이름입니다.

출력

매개변수 설명

probeIPs 프로브에있는주소의"IPList"입니다.

getProbesNames

지정된도메인에서프로브의이름을반환합니다.

"코드샘플(299페이지)"을참조하십시오.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

domainName 확인할도메인입니다.

출력

매개변수 설명

probesName 도메인에있는프로브의목록입니다.

getProbeScope

지정된프로브의범위정의를반환합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

domainName 확인할도메인입니다.

probeName 프로브의이름입니다.

출력

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 294/306 페이지

Page 295: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

probeScope 프로브의"Scope"입니다.

isProbeConnected

지정된프로브가연결되었지여부를확인합니다.

"코드샘플(299페이지)"을참조하십시오.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

domainName 확인할도메인입니다.

probeName 확인할프로브입니다.

출력

매개변수 설명

isConnected 프로브가연결된경우 true입니다.

updateProbeScope

기존범위를다시정의하는,지정된프로브의범위를설정합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

domainName 도메인입니다.

probeName 업데이트할프로브입니다.

newScope 프로브에설정할"Scope"입니다.

자격증명데이터메서드

addCredentialsEntry

지정된도메인의지정된프로토콜에자격증명항목을추가합니다.

"코드샘플(299페이지)"을참조하십시오.

입력

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 295/306 페이지

Page 296: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참

조하십시오.

domainName 업데이트할도메인입니다.

protocolName 프로토콜의이름입니다.

credentialsEntryParameters 새자격증명의"CIProperties" 컬렉션입니다.

출력

매개변수 설명

credentialsEntryID 새자격증명항목의CI ID입니다.

getCredentialsEntriesIDs

지정된프로토콜에대해정의된자격증명의 ID를반환합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

domainName 자격증명을가져올도메인입니다.

protocolName 해당도메인에사용된프로토콜의이름입니다.

출력

매개변수 설명

credentialsEntryIDs 도메인에있는프로토콜의자격증명 ID 목록입니다.

getCredentialsEntry

지정된프로토콜에대해정의된자격증명을반환합니다.암호화된특성이빈상태로반환됩니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

domainName 자격증명을가져올도메인입니다.

protocolName 해당도메인에사용된프로토콜의이름입니다.

credentialsEntryID 가져올자격증명 ID입니다.

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 296/306 페이지

Page 297: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

출력

매개변수 설명

credentialsEntryParameters 자격증명의"CIProperties" 컬렉션입니다.

removeCredentialsEntry

지정된자격증명을프로토콜에서제거합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십

시오.

domainName 도메인입니다.

protocolName 해당도메인에사용된프로토콜의이름입니다.

credentialsEntryID 제거할자격증명의 ID입니다.

updateCredentialsEntry

지정된자격증명항목의속성에대한새값을설정합니다.

기존속성이제거되며이러한속성이설정됩니다.이호출에값이설정되지않은모든속성이정의되

지않은상태로남아있습니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참

조하십시오.

domainName 자격증명을업데이트할도메인입니다.

protocolName 해당도메인에사용된프로토콜의이름입니다.

credentialsEntryID 업데이트할자격증명의 ID입니다.

credentialsEntryParameters 자격증명의속성으로설정할"CIProperties" 컬렉션입니다.

데이터새로고침메서드

rediscoverCIs

지정된CI 개체를디스커버리한트리거를찾아해당트리거를다시실행합니다. rediscoverCIs는

비동기적으로실행됩니다. checkDiscoveryProgress를호출하여다시디스커버리가완료된시기

를확인합니다.

입력

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 297/306 페이지

Page 298: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

CmdbIDs 다시디스커버리할개체의 ID 컬렉션입니다.

출력

매개변수 설명

isSucceed CI의재디스커버리에성공하는경우 true입니다.

checkDiscoveryProgress

지정된 ID에대한최근 rediscoverCIs 호출의진행률을반환합니다.응답은0에서1사이의값입니

다.응답이1이면 rediscoverCIs 호출이완료된것입니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

CmdbIDs 재디스커버리호출에서추적할개체의 ID 컬렉션입니다.

출력

매개변수 설명

progress 완료된작업의진행률은1이고완료되지않은작업의진행률은1미만의소

수입니다.

rediscoverViewCIs

지정된보기를채울데이터를만든트리거를찾아해당트리거를다시실행합니다.

rediscoverViewCIs는비동기적으로실행됩니다. checkViewDiscoveryProgress를호출하여다

시디스커버리가완료된시기를확인합니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

viewName 확인할보기입니다.

출력

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 298/306 페이지

Page 299: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

매개변수 설명

isSucceed CI의재디스커버리에성공하는경우 true입니다.

checkViewDiscoveryProgress

지정된보기에대한최근 rediscoverViewCIs 호출의진행률을반환합니다.응답값은0-1입니다.

응답이1이면 rediscoverCIs 호출이완료된것입니다.

입력

매개변수 설명

cmdbContext 자세한내용은"CmdbContext(262페이지)"의스키마문서를참조하십시

오.

viewName 확인할보기의컬렉션입니다.

출력

매개변수 설명

progress 완료된작업의진행률은1이고완료되지않은작업의진행률은1미만의소

수입니다.

코드샘플

import java.net.URL;import org.apache.axis2.transport.http.HTTPConstants;import org.apache.axis2.transport.http.HttpTransportProperties;import com.hp.ucmdb.generated.params.discovery.*;import com.hp.ucmdb.generated.services.*;import com.hp.ucmdb.generated.types.*;public class test {    static final String HOST_NAME = "<my_hostname>";    static final int PORT = 8080;    private static final String PROTOCOL = "http";    private static final String FILE = "/axis2/services/DiscoveryService";

    private static final String PASSWORD = "<my_password>";    private static final String USERNAME = "<my_username>";

    private static CmdbContext cmdbContext = new CmdbContext("ws tests");

    public static void main(String[] args) throws Exception {        // Get the stub object        DiscoveryService discoveryService = getDiscoveryService();

        // Activate Job

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 299/306 페이지

Page 300: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

        discoveryService.activateJob(new ActivateJobRequest(            "Range IPs by ICMP", cmdbContext));

        // Get domain & probes info        getProbesInfo(discoveryService);        // Add credentilas entry for ntcmd protcol        addNTCMDCredentialsEntry();    }

    public static void addNTCMDCredentialsEntry() throws Exception {        DiscoveryService discoveryService = getDiscoveryService();

        // Get domain name        StrList domains =            discoveryService.getDomainsNames(                new GetDomainsNamesRequest(cmdbContext)).                getDomainNames();        if (domains.sizeStrValueList() == 0) {            System.out.println("No domains were found, can't createcredentials");            return;        }        String domainName = domains.getStrValue(0);        // Create propeties with one byte param        CIProperties newCredsProperties = new CIProperties();

        // Add password property - this is of type bytes        newCredsProperties.setBytesProps(new BytesProps());        setPasswordProperty(newCredsProperties);

        // Add user & domain properties - these are of type string        newCredsProperties.setStrProps(new StrProps());        setStringProperties("protocol_username", "test user",newCredsProperties);        setStringProperties("ntadminprotocol_ntdomain",            "test doamin", newCredsProperties);

        // Add new credentials entry        discoveryService.addCredentialsEntry(            new AddCredentialsEntryRequest(domainName,            "ntadminprotocol", newCredsProperties, cmdbContext));        System.out.println("new credentials craeted for domain: " + domainName +" in ntcmd protocol");    }

    private static void setPasswordProperty(CIProperties newCredsProperties) {        BytesProp bProp = new BytesProp();        bProp.setName("protocol_password");

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 300/306 페이지

Page 301: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

        bProp.setValue(new byte[] {101,103,102,104});        newCredsProperties.getBytesProps().addBytesProp(bProp);    }

    private static void setStringProperties(String propertyName, String value,CIProperties newCredsProperties) {        StrProp strProp = new StrProp();        strProp.setName(propertyName);        strProp.setValue(value);        newCredsProperties.getStrProps().addStrProp(strProp);    }

    private static void getProbesInfo(DiscoveryService discoveryService) throwsException {        GetDomainsNamesResponse result = discoveryService.getDomainsNames(newGetDomainsNamesRequest(cmdbContext ));        // Go over all the domains        if (result.getDomainNames().sizeStrValueList() > 0) {            String domainName =            result.getDomainNames().getStrValue(0);            GetProbesNamesResponse probesResult =                discoveryService.getProbesNames(                    new GetProbesNamesRequest(domainName, cmdbContext));            // Go over all the probes            for (int i=0; i<probesResult.getProbesNames().sizeStrValueList();i++) {                String probeName = probesResult.getProbesNames().getStrValue(i);                // Check if connected                IsProbeConnectedResponce connectedRequest =                    discoveryService.isProbeConnected(                        new IsProbeConnectedRequest(                        domainName, probeName, cmdbContext));                Boolean isConnected = connectedRequest.getIsConnected();                // Do something ...                System.out.println("probe " + probeName + " isconnect=" +isConnected);            }        }    }

    private static DiscoveryService getDiscoveryService() throws Exception {        DiscoveryService discoveryService = null;        try {            // Create service            URL url = new URL(PROTOCOL,HOST_NAME,PORT, FILE);            DiscoveryServiceStub serviceStub =                new DiscoveryServiceStub(url.toString());

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 301/306 페이지

Page 302: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

            // Authenticate info            HttpTransportProperties.Authenticator auth =                new HttpTransportProperties.Authenticator();            auth.setUsername(USERNAME);            auth.setPassword(PASSWORD);            serviceStub._getServiceClient().getOptions().setProperty(                HTTPConstants.AUTHENTICATE,auth);

            discoveryService = serviceStub;        } catch (Exception e) {            throw new Exception("cannot create a connection to service ", e);        }        return discoveryService;    }}

자격증명추가작업의예

import java.net.URL;import org.apache.axis2.transport.http.HTTPConstants;import org.apache.axis2.transport.http.HttpTransportProperties;import com.hp.ucmdb.generated.params.discovery.*;import com.hp.ucmdb.generated.services.DiscoveryService;import com.hp.ucmdb.generated.services.DiscoveryServiceStub;import com.hp.ucmdb.generated.types.BytesProp;import com.hp.ucmdb.generated.types.BytesProps;import com.hp.ucmdb.generated.types.CIProperties;import com.hp.ucmdb.generated.types.CmdbContext;import com.hp.ucmdb.generated.types.StrList;import com.hp.ucmdb.generated.types.StrProp;import com.hp.ucmdb.generated.types.StrProps;

public class test {    static final String HOST_NAME = "hostname";    static final int PORT = 8080;    private static final String PROTOCOL = "http";    private static final String FILE = "/axis2/services/DiscoveryService";

    private static final String PASSWORD = "admin";    private static final String USERNAME = "admin";

    private static CmdbContext cmdbContext = new CmdbContext("ws tests");

    public static void main(String[] args) throws Exception {        // Get the stub object        DiscoveryService discoveryService = getDiscoveryService();

        // Activate Job        discoveryService.activateJob(new ActivateJobRequest("Range IPs by ICMP",

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 302/306 페이지

Page 303: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

cmdbContext));

        // Get domain & probes info        getProbesInfo(discoveryService);        // Add credentilas entry for ntcmd protcol        addNTCMDCredentialsEntry();    }

    public static void addNTCMDCredentialsEntry() throws Exception {        DiscoveryService discoveryService = getDiscoveryService();

        // Get domain name        StrList domains =            discoveryService.getDomainsNames(new GetDomainsNamesRequest(cmdbContext)).getDomainNames();        if (domains.sizeStrValueList() == 0) {            System.out.println("No domains were found, can't createcredentials");            return;        }        String domainName = domains.getStrValue(0);        // Create propeties with one byte param        CIProperties newCredsProperties = new CIProperties();

        // Add password property - this is of type bytes        newCredsProperties.setBytesProps(new BytesProps());        setPasswordProperty(newCredsProperties);

        // Add user & domain properties - these are of type string        newCredsProperties.setStrProps(new StrProps());        setStringProperties("protocol_username", "test user",newCredsProperties);        setStringProperties("ntadminprotocol_ntdomain", "test doamin",newCredsProperties);

        // Add new credentials entry        discoveryService.addCredentialsEntry(new AddCredentialsEntryRequest(domainName, "ntadminprotocol", newCredsProperties, cmdbContext));        System.out.println("new credentials craeted for domain: " + domainName +" in ntcmd protocol");    }

    private static void setPasswordProperty(CIProperties newCredsProperties) {        BytesProp bProp = new BytesProp();        bProp.setName("protocol_password");        bProp.setValue(new byte[] {101,103,102,104});        newCredsProperties.getBytesProps().addBytesProp(bProp);    }

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 303/306 페이지

Page 304: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

    private static void setStringProperties(String propertyName, String value,CIProperties newCredsProperties) {        StrProp strProp = new StrProp();        strProp.setName(propertyName);        strProp.setValue(value);        newCredsProperties.getStrProps().addStrProp(strProp);    }

    private static void getProbesInfo(DiscoveryService discoveryService) throwsException {        GetDomainsNamesResponse result = discoveryService.getDomainsNames(newGetDomainsNamesRequest(cmdbContext ));        // Go over all the domains        if (result.getDomainNames().sizeStrValueList() > 0) {            String domainName = result.getDomainNames().getStrValue(0);            GetProbesNamesResponse probesResult =                discoveryService.getProbesNames(new GetProbesNamesRequest(domainName, cmdbContext));            // Go over all the probes            for (int i=0; i<probesResult.getProbesNames().sizeStrValueList();i++) {                String probeName = probesResult.getProbesNames().getStrValue(i);                // Check if connected                IsProbeConnectedResponce connectedRequest =                    discoveryService.isProbeConnected(newIsProbeConnectedRequest(domainName, probeName, cmdbContext));                Boolean isConnected = connectedRequest.getIsConnected();                // Do something ...                System.out.println("probe " + probeName + " isconnect=" +isConnected);            }        }    }

    private static DiscoveryService getDiscoveryService() throws Exception {        DiscoveryService discoveryService = null;        try {            // Create service            URL url = new URL(PROTOCOL,HOST_NAME,PORT, FILE);            DiscoveryServiceStub serviceStub = new DiscoveryServiceStub(url.toString());

            // Authenticate info            HttpTransportProperties.Authenticator auth = newHttpTransportProperties.Authenticator();            auth.setUsername(USERNAME);            auth.setPassword(PASSWORD);            serviceStub._getServiceClient().getOptions().setProperty(HTTPConstants.AUTHENTICATE,auth);

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 304/306 페이지

Page 305: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

            discoveryService = serviceStub;        } catch (Exception e) {            throw new Exception("cannot create a connection to service ", e);        }        return discoveryService;    }} // End class

개발자참조안내서

12장:데이터흐름관리웹서비스API

HPUniversal CMDB (10.10) 305/306 페이지

Page 306: HP Universal CMDB Developer Reference Guide 컨텐츠만들기 11 통합컨텐츠개발 19 디스커버리컨텐츠개발 21 디스커버리어댑터구현 23 1단계:어댑터만들기

피드백을보내주십시오!이문서에대한의견이있으면,전자메일을통해문서팀에보낼수있습니다.이시스템에전자메일

클라이언트가구성되어있을경우,위의링크를클릭하면제목줄에다음정보가포함된전자메일

창이열립니다.

피드백: 개발자참조안내서(Universal CMDB10.10)

귀하의피드백을전자메일에추가하고보내기를클릭하십시오.

사용가능한전자메일클라이언트가없으면,위의정보를웹메일클라이언트의새메시지에복사한

다음[email protected]에귀하의피드백을보내십시오.

HPUniversal CMDB (10.10) 306/306 페이지