CONNECTOR AMB DOCUMENTUM





 

Introducció

Propósit

El propósit del connector és proporcionar una interfície Java per accedir a Documentum. Permetent emmagatzemar i recuperar documents a més d'altres operacions relacionades com crear carpetes i associar propietats.

Context i Escenaris d'Ús

El connector documentum es troba dins els Connectors de Serveis Funcionals.

A qui va dirigit

Aquest document va dirigit als següents perfils:

  1. Programador. Per conéixer l'ús del connector.
  2. Arquitecte. Per conéixer quins són els components i la configuració del connector.

Documents i Fonts de Referència

[1] Anàlisi Funcional - Connector Serveis Funcionals - 16-Nov.doc Document d'anàlisi dels connectors de serveis funcionals.
[2] Documentum Foundation Classes (DFC) http://www.dmdeveloper.com/articles/dfc/

Descripció Detallada

Instal- lació del DFC

Previ a la utilització del servei cal instal.lar a la màquina de desenvolupament/servidor la DFC’s de la versió de Documentum que es farà servirm, per aquest connector ha de ser Documentum 7.1 :

En cas de no comptar amb aquests instal·lable, es pot sol·licitar a la bústia canigó oficina-tecnica.canigo.ctti@gencat.cat

Els passos a seguir en l’instal.lació són els següents:

Aquí indicarem el host i el port del docBroker que conté el magatzem de claus.


Com a resultat de la instalació es generarà un arxiu amb la configuració d’accés a documentum.

En el cas de Documentum 7.1, aquest es generarà per defecte a C:\Documentum\config\dfc.properties i tindrà el format següent:

dfc.data.dir=C\:/Documentum
dfc.registry.mode=windows
dfc.search.ecis.enable=false
dfc.search.ecis.host=
dfc.search.ecis.port=
dfc.tokenstorage.dir=C\:/Documentum/apptoken
dfc.tokenstorage.enable=false
dfc.docbroker.host[0]=nomHostDocumentum
dfc.docbroker.port[0]=PortHostDocumentum
dfc.globalregistry.repository=NomRepositoriClaus
dfc.globalregistry.username=usernameRepositoriClaus
dfc.globalregistry.password=passRepositoriClaus



Configuració de dependències

L'arxiu de configuració del projecte per Maven 2 (pom.xml) ha d'incloure la dependència del connector.

<dependency>
<groupId>openFrame.connectors</groupId>
<artifactId>openFrame-connectors-documentum71</artifactId>
<version>1.4.5</version>
</dependency>
Els connector té dependències amb llibreries de la versió del DFC instal·lat. Aquestes llibreries s’inclouen amb la instal·lació del DFC, per defecte a la carpeta C:\Program Files\Documentum\Shared (Windows). Caldrà afegir-les al repositori .m2 local per tal que Maven les resolgui.

Per a la versió de DFC 7.1 , serà necessari instal·lar les següents llibreries (cas que no hi figurin ja instal·lades):

mvn install:install-file -Dfile="dfc.jar" -DgroupId=dfc -DartifactId=dfc -Dversion=7.1 -Dpackaging=jar
mvn install:install-file -Dfile="certj.jar" -DgroupId=certj -DartifactId=certj -Dversion=5.2 -Dpackaging=jar
mvn install:install-file -Dfile="configservice-api.jar" -DgroupId=configservice -DartifactId=configservice-api -Dversion=7.1 -Dpackaging=jar
mvn install:install-file -Dfile="configservice-impl.jar" -DgroupId=configservice -DartifactId=configservice-impl -Dversion=7.1 -Dpackaging=jar
mvn install:install-file -Dfile="jcmFIPS.jar" -DgroupId=jcmFIPS -DartifactId=jcmFIPS -Dversion=6.1 -Dpackaging=jar
mvn install:install-file -Dfile="jcifs-krb5-1.3.1.jar" -DgroupId=jcifs-krb5 -DartifactId=jcifs-krb5 -Dversion=1.3.1 -Dpackaging=jar
mvn install:install-file -Dfile="cryptojce.jar" -DgroupId=cryptojce -DartifactId=cryptojce -Dversion=6.1 -Dpackaging=jar
mvn install:install-file -Dfile="cryptojcommon.jar" -DgroupId=cryptojcommon -DartifactId=cryptojcommon -Dversion=6.1 -Dpackaging=jar


Configuració del connector

Serà necessari incloure  al CLASSPATH del projecte el dfc.properties generat arrel la instal·lació del DFC, ja configurat amb les dades del servidor de Documentum al que connectarà.

Ubicació: /src/main/resources/dfc.properties




Utilització del Servei

La utilització del Connector es basa principalment en la configuració. L'ús directe des dels clients es permet mitjançant les interfícies definides.

Creació de fitxer de propietats

Hem de crear un fitxer de propietats (p.e. documentum.properties) amb els següents paràmetres:

documentum.user=usuari del treballamb documentum
documentum.password=password de l'usuari
documentum.docBase=docBase on connectar


Aquest fitxer de propietats l'inclourem al classpath de l'aplicació mitjançant el servei de configuració:
<beans>
<bean id="configurationService"
class="net.opentrends.openframe.services.configuration.springframework.beans.factory.config.HostPropertyPlaceholderConfigurer">
<property name="basePropertyFiles">
<list>
...
<value>classpath: Documentum/documentum.properties</value>
...
</list>
</property>
</bean>
</beans>


Creació i injecció de beans d'Spring

Caldrà crear una sèrie de beans per tal d'utilitzar el connector. Aquests els podrem crear p.e. dins \spring\openFrame-connectors-documentum.xml:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!-- DOCUMENTUM Connector -->
    <bean lazy-init="true" id="documentumBOTarget" class="net.gencat.pilot.model.bo.impl.DocumentBOImpl">
        <property name="documentumService" ref="documentumService"/>
        <property name="documentumConnector" ref="documentumConnector"/>
        <property name="documentumConfig" ref="documentumConfig"/>
    </bean>

    <bean name="documentumService"  class="net.soluziona.documentum.DocumentumServiceImpl"/>    
    <bean name="documentumConnector"  class="net.soluziona.documentum.DocumentumConnectorImpl"/>

    <bean id="documentumConfig" class="net.gencat.pilot.connectors.documentum.DocumentumConfig">
        <property name="user" value="${documentum.user}"/>
        <property name="password" value="${documentum.password}"/>
        <property name="docBase" value="${documentum.docBase}"/>
    </bean>
</beans>


On:
- documentumService: s'ocuparà d'obrir la sessió amb Documentum
- documentumConnector: es farà servir per operar amb Documentum
- documentumConfig: conté la configuració per treballar amb Documentum


La implementació de DocumentumConfig.java restaria com:

package net.gencat.ctti.canigo.connectors.domain;

public class DocumentumConfig {

private String user;
private String password;
private String docBase;

public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDocBase() {
return docBase;
}
public void setDocBase(String docBase) {
this.docBase = docBase;
}
}

A l'action-servlet.xml configurarem un bean de presentació on es faci servir documentumBOTarget :

<bean name="/pageModulDocumentum" class="net.gencat.ctti.canigo.connectors.action.DocumentumAction">
...
<property name="documentumBO" ref="documentumBOTarget"/>
...
</bean>

Inici sessió Documentum i exemple d'ús


A DocumentumAction.java invoquem els mètodes del BO. A l'exemple d'ús es consulta l'existència d'un document ja pujat prèviament. La informació sobre el document a cercar i carpeta dins Documentum on cercar arriben informades a partir d'un formulari d'entrada a una jsp:

package net.gencat.ctti.canigo.connectors.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.gencat.ctti.canigo.connectors.bo.DocumentumBO;
import net.gencat.ctti.canigo.connectors.pojos.DocumentumPojo;
import net.gencat.ctti.canigo.services.web.struts.DispatchActionSupport;
import net.gencat.ctti.canigo.services.web.struts.SpringBindingActionForm;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class DocumentumAction extends DispatchActionSupport {

private DocumentumBO documentumBO;

public ActionForward doLogin(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
try {
documentumBO.doLogin();
} catch (Exception e) {
e.printStackTrace();
}
return mapping.findForward("successTestDoLogin");
}

public ActionForward doCercaDocument(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
SpringBindingActionForm actionForm = (SpringBindingActionForm) form;
DocumentumPojo pojo = (DocumentumPojo) actionForm.getTarget();
String idDocument;
try {
idDocument = documentumBO.cercaDocument(pojo.getNomDocument(),
pojo.getCarpeta());
} catch (Exception e) {
idDocument = "Error en intentar cercar un document a Documentum";
e.printStackTrace();
}
pojo.setResultat(idDocument);
return mapping.findForward("successTestDoCercaDocument");
}

public void setDocumentumBO(DocumentumBO documentumBO) {
this.documentumBO = documentumBO;
}

}



DocumentumBO.java:

package net.gencat.ctti.canigo.connectors.bo;

public interface DocumentumBO {

public void doLogin();
public String cercaDocument(String sNomFitxer, String nomCarpeta);

}


DocumentumBOImpl.java :

package net.gencat.ctti.canigo.connectors.bo.impl;

import java.util.HashMap;
import java.util.Vector;

import net.gencat.ctti.canigo.connectors.bo.DocumentumBO;
import net.gencat.ctti.canigo.connectors.domain.DocumentumConfig;
import net.soluziona.documentum.DocumentumConnector;
import net.soluziona.documentum.DocumentumService;
import net.soluziona.documentum.DocumentumServiceImpl;
import net.soluziona.documentum.Session;

public class DocumentumBOImpl implements DocumentumBO {

private static String DM_SEARCH_FOR_PARAM_NAME="r_object_id";
private static String DM_OBJECT_TO_SEARCH_PARAM_NAME="dm_document";
private static String DM_OBJECT_PARAM_NAME="object_name";


DocumentumConfig documentumConfig;
DocumentumConnector documentumConnector;
DocumentumService documentumService;
private Session sessio;

public void doLogin(){

documentumService = DocumentumServiceImpl.getInstance();
sessio = documentumService.login(documentumConfig.getUser(),
documentumConfig.getPassword(),
documentumConfig.getDocBase(),
documentumConnector);

}

public String cercaDocument(String sNomFitxer, String nomCarpeta){
String idDocument=null;
if (sessio == null){
  doLogin();
}

HashMap sHasMapDocuments = documentumConnector.buscarDocument(
DM_SEARCH_FOR_PARAM_NAME,
DM_OBJECT_TO_SEARCH_PARAM_NAME,
DM_OBJECT_PARAM_NAME,
sNomFitxer,
nomCarpeta,
true,
"",
sessio);
if (sHasMapDocuments != null) {
Vector vOut = (Vector) sHasMapDocuments.get(new Integer(1));
idDocument= (String) vOut.get(0);
}
return idDocument;
}



public void setDocumentumConfig(DocumentumConfig documentumConfig) {
this.documentumConfig = documentumConfig;
}

public void setDocumentumConnector(DocumentumConnector documentumConnector) {
this.documentumConnector = documentumConnector;
}

public void setDocumentumService(DocumentumService documentumService) {
this.documentumService = documentumService;
}


}



Integració amb Altres Serveis

Integració amb el Servei de Internacionalització

En els fitxers de configuració es defineixen claus que permeten especificar quins missatges retornar en cas errors. Per a poder traduir aquestes claus és necessari especificar que el connector usarà el Servei d'Internacionalització (veure Configuració).