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 변환 및 통신 로직을 구현하면 될 것이다.


2010-08-31

도큐멘텀 DFS 따라하기 - 2

DFS는 웹서비스다. 따라서 기본적인 활용법은 일반적인 웹서비스 호출과 다를바 없다.


웹서비스에 익숙하지 않은 사람은 이 부분에서 많이 괴로울지 모르겠다. 가능하면 웹서비스 사용에 관한 일반적인 설명 등을 참고하여 숙지하면 좋겠다.

기본적으로는 UDDI 를 통하여 인식하고, WSDL에 기술된 방법으로 WS Provider에 SOAP 통신을 하여 결과를 얻는 것이다.


WSDL에는 특정 서비스 함수가 있는지, 주고 받는 매개변수는 무엇이고, 각 매개변수는 어떻게 표현되는지 등이 정의되어 있다.



즉 WSDL을 참고하여 원하는 함수를, 매개변수가 변환된 XML를 첨부하여 HTTP방식으로 전달을 하고 결과를 받는 것이다.


DFS SDK를 이용하면, 서비스를 호출하고 신규 서비스를 만들고 등록하는 일을 편하게 할 수 있다. 일반적인 JAX-WS 방식으로도 호출이 가능하다. 다만, 인증관련한 wsse:Security 부분과 marshalling 관한 proxy 부분이 추가로 필요하다.



인증관련하여 DFC와 같은 기존 Java API는 한번 로긴하여 세션이 생성되면 이후 추가 인증과정 없이 계속 함수를 호출할 수 있다. 반면 WS는 기본적으로 stateless로 매번 HTTP 세션을 맺고 끊기 때문에 최초 인증 이후, 후속 호출에는 매번 인증을 새로하지 않고 token이라는 임시 허용증을 첨부하여 인증을 대신하는 것이다.

또한, HTTP 통신으로 바이너리 데이터를 보낼 경우 또는 기본적인 String 데이터 타입이 아닌 복합형 데이터 타입을 주고 받을 경우 XML로 변환이 필요하게된다. 이를 marshall / unmarshall이라 하고, 처리하는 것이 proxy가 된다.


서비스를 사용할 때 Documentum에서 제공하는 Client Productivity Layer을 사용하면, 인증부분이나 marshall/unmarshall 관련한 프락시를 직접 구현하지 않아도 된다.

여기서는 가능하면 PL 기반의 구현을 설명하려 한다. 아무래도 개발이 간단해지기 때문에 좀더 빠르게 이해할 수 있을 것이기 때문이다.




HTTP - Hypertext Transfer Protocol
SOAP - Simple Object Access Protocol
WSDL - Web Services Description Language
UDDI - Universal Description and Discovery Integration
PL - Productivity Layer