Alfresco è una piattaforma di Enterprise Content Management Open Source. Grazie all’utilizzo di standard aperti come JSR-170, RESTful Webservice e CMIS è possibile interoperare direttamente con Alfresco e il suo content repository.
CMIS, di cui Alfresco ha annunciato il completo supporto nell’Aprile del 2012, ha definito di fatto lo standard di interoperabilità tra gli ECM.
Piattaforme di gestione documentale come Sharepoint, Nuxeo, OpenText, Documentum, IBM FileNet e appunto Alfresco, possono scambiare dati e informazioni secondo lo standard CMIS, facilitando per esempio complesse procedure di porting da un documentale a un altro. Anche applicazioni di desktop publishing come Adobe InDesign o LibreOffice supportano lo standard CMIS.
CMIS tuttavia non rappresenta l’unica soluzione di interoperabilità con Alfresco. Grazie a RAAr, ovvero a delle API Java messe a disposizione da Rivet Logic su licenza GNU GPL è possibile interagire remotamente con il content repository di Alfresco creando un livello di servizio personalizzato.
A livello applicativo per esempio è possibile implementare una propria web application basata sul framework MVC Struts di Apache, che espone all’utente finale funzionalità e servizi che rispecchiano i requisiti del proprio modello di business di gestione documentale. Il sistema si basa su un’architettura distribuita a 3 livelli. Un primo strato su cui è in esecuzione Alfresco. Un secondo livello rappresentato da RAAR (Remote Alfresco API rivet) che espone tutte le API java e i servizi di tipo RESTful necessari a interagire con i content repository. Infine lo strato relativo all’applicazione struts che espone all’utente un’interfaccia web personalizzata e che sfrutta le API messe a disposizione da RAAR per leggere e scrivere sul content repository di Alfresco.
Ecco per esempio come utilizzare l’oggetto com.rivetlogic.core.cma.api.NodeService di RAAr per creare uno space su Alfresco. L’oggetto RivetServices è utilizzato per l’accesso ai servizi di RAAr, in questo caso a NodeService e all’implementazione della sua interfaccia:
/** * Support bean used to provide access to RAAr services */ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.rivetlogic.core.cma.api.NodeService; import com.rivetlogic.core.cma.impl.NodeServiceImpl; public class RivetServices { private ConfigurableApplicationContext configurationApplicationContext = null; private static final String APPLICATION_CONTEXT = "classpath*:cma-core-context.xml"; private NodeService nodeService; public RivetServices(){ configurationApplicationContext = new ClassPathXmlApplicationContext(APPLICATION_CONTEXT); nodeService = (NodeServiceImpl) configurationApplicationContext.getBean("nodeService"); } public NodeService getNodeService() { return nodeService; } }
Questa classe utilizza RivetServices per accedere al metodo createFolder di RAAr:
import org.alfresco.service.cmr.repository.NodeRef; import com.rivetlogic.core.cma.repo.Ticket; import org.alfresco.service.namespace.QName; import com.rivetlogic.core.cma.exception.CmaRuntimeException; import com.rivetlogic.core.cma.exception.InvalidTicketException; public class ToECM { public static NodeRef createFolder( RivetServices rivetServices,Ticket ticket, String folderName, NodeRef container, Map<QName, Serializable> properties) throws InvalidTicketException, CmaRuntimeException { return rivetServices.getNodeService().createFolder(ticket, folderName, container, properties); } }