2010-09-03

도큐멘텀 DFS 따라하기 - 4

기본 데이터 형식 (DFC DataModel )


DFS API 는 입력 내용이나 출력 결과를 담는데 DataModel 기반으로 구현되어 있다.


이러한 데이터 모델 클래스는 A { B { C+ }+ } 이런 식으로 정의된다.


즉 DataPackage 에는 몇개의 DataObject 가 있고, DataObject에는 ObjectIdentity, PropertySet 등등의 데이터 클래스를 지니고 있다.


A.
  DataPackage : DataObject 들의 묶음


B.
  DataObject : 도큐멘텀 오브젝트 대응


C.
  ObjectIdentity : DataObject를 지정하는 표현 (dql qualification, folder path, r_object_id 등)
   PropertySet : DataObject의 속성 들
   Content : DataObject 의 파일 및 rendition 들
   Permission : basic / extended permission 정보
   Relationship : link 등의 relation 정보
   Aspect : Aspect 정보


참고 사항.

  • DataObject 의 Type 정보를 지정하지 않으면, 기본값인 dm_document 로 간주한다
  • ObjectIdentity 의 값을 상세히 지정하지 않는 경우도 있다. DataObject를 생성하는 경우, 최소 값인 docbase 만 지정
  • Content 는 BinaryContent, DataHandlerContent, UcfContent, UrlContent, FileContent 등의 sub class로 세분화 된다

유의사항
  • DataModel 클래스는 확장하여 사용하지 말라고 되어 있다. 필요시 멤버 변수로 구현.

도큐멘텀 DFS 따라하기 - 3

DFS에서 제공하는 주요 서비스


웹서비스 (Web Services) 개념을 이해 했다면, 본격적으로 DFS 에 대해 알아보자.

  • Object Service: 저장소 오브젝트에 대한 등록, 조회, 갱신, 삭제, 복사, 이동 등의 기본 동작.
  • Version Control Service: 체크인, 체크아웃 등 버전 관련.
  • Query Service: DQL 등 쿼리 수행.
  • Schema Service: 메타데이터 (data dictionary) 조회 등.
  • Search Service: 본문 및 속성 검색.
  • Workflow Service: 워크플로우 수행 및 단계 처리.
이러한 기능을 골라서 호출. 사용 (consume)하면 된다. 이때 호출 하는 방법이 2가지가 있다.
  • local call : client가 server와 같은 WebApp으로 있는 경우, 호출은 call by reference
  • remote call : client와 server가 다른 WebApp으로 있어, 호출은 http 통신이 필요, call by value
즉 local call의 경우는 DFS Client가 DFS Server(DFC)와 함께 있어 외부 통신이 일어나지 않는다. 반면 remote call의 경우 DFS Client와 DFS Server는 다른 서버.공간에 있어 HTTP/SOAP 통신이 필요하다. 따라서 marshall/unmarshall도 필요하고 성능 저하도 발생할 것이다.

어떤 방식을 사용해야하는지 모른다면, 대부분의 경우인 remote call이라고 생각하면 된다. 또한 개발할때 참조할 java library는 local call 인지 remote call 인지에 따라 설정이 달라지게 된다.



Remote consumer dependencies
Path on SDKJARs
%DFS_SDK%/lib/java/*-remote.jar
%DFS_SDK%/lib/java/jaxws/All except jaxb-xjc.jar and jaxws-tools.jar
%DFS_SDK%/lib/java/commons/commons-lang-2.1.jar , commons-io-1.2.jar
%DFS_SDK%/lib/java/utils/aspectjrt.jar , log4j.jar , servlet.jar
%DFS_SDK%/lib/java/bof/collaboration.jar

  • Client Productivity Layer 활용하는 Remote call 기준으로 설명 하고 있음
  • local call의 경우 *-remote.jar 대신 *-service.jar, emc-dfs-rt.jar 및 lib/java/dfc.jar 를 classpath에 포함한다.

  • PL 모드로 동작하려면 추가 설정파일인 dfs-client.xml 이 classpath에 있어야한다.





<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DfsClientConfig defaultModuleName="core" registryProviderModuleName="core">
    <ModuleInfo name="core" protocol="http" host="www.emc.local" port="9086" contextRoot="services">
    </ModuleInfo>
    <ModuleInfo name="search" protocol="http" host="www.emc.local" port="9086" contextRoot="services">
    </ModuleInfo>
    <ModuleInfo name="bpm" protocol="http" host="www.emc.local" port="9086" contextRoot="services">
    </ModuleInfo>
    <ModuleInfo name="collaboration" protocol="http" host="www.emc.local" port="9086" contextRoot="services">
    </ModuleInfo>
    <ModuleInfo name="ci" protocol="http" host="www.emc.local" port="9086" contextRoot="services">
    </ModuleInfo>
</DfsClientConfig>

사실 DFS는 JAX-WS를 확장하여 추후 설명할 데이터 모델을 구현해 둔 것으로 보인다. 



  • Client Productivity Layer 없이 JAX-WS RI 표준 만으로 구현하려면, apache 프로젝트의 Axis2 기반으로, 직접 Security 및 http base64/mtom 변환 및 통신 로직을 구현하면 될 것이다.