CMIS è l’open standard definito da OASIS per l’interoperabilità tra sistemi ECM. Piattaforme di gestione documentale come Sharepoint, Alfresco, Nuxeo, OpenText, Documentum, IBM FileNet, possono scambiare dati e informazioni secondo lo standard CMIS.
Apache Chemistry, il progetto di Apache Software Foundation, fornisce un’implmentazione open source delle specifiche CMIS e mette a disposizione delle API in Java, Python, PHP, .NET e Objective-C per l’accesso a repository CMIS. In questo articolo mostro un esempio di come utilizzare le librerie java OpenCMIS di Apache Chemistry, per creare una sessione e connettersi a un repository Alfresco, l’ECM open che supporta ampiamente le specifiche CMIS. Di seguito un diagramma delle classi relativo al client openCMIS.
Creo lo skeleton del progetto con Maven e lo importo in Eclipse.
mvn archetype:generate -DgroupId=eu.giuseppeurso.samplecmissession -DartifactId=sample-cmis-session -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Aggiungo le dipendenze per openCMIS client.
<dependency> <groupId>org.apache.chemistry.opencmis</groupId> <artifactId>chemistry-opencmis-client-impl</artifactId> <version>0.10.0</version> </dependency>
Creo una classe di esempio in cui inizializzare una sessione CMIS. La SessionFactory di OpenCMIS, è responsabile della creazione della sessione. L’interfaccia dà accesso a tutte le info del repository Alfresco a mezzo del binding di tipo Restful AtomPub definito dai parametri BINDING_TYPE e ATOMPUB_URL. Nel caso in cui l’endpoint url CMIS mappa più repository è necessario impostare anche il parametro REPOSITORY_ID con l’id del repository su cui creare la sessione CMIS. In questo caso l’endpoint di Alfresco, fornisce un singolo repository, per cui è sufficiente richiamare il metodo createSession di openCMIS direttamente sull’unico elemento della lista di Repository. Una volta creata la sessione, stampo alcune informazioni.
// The default factory implementation SessionFactory sessionFactory = SessionFactoryImpl.newInstance(); Map<String, String> parameter = new HashMap<String, String>(); // ECM user credentials parameter.put(SessionParameter.USER, "admin"); parameter.put(SessionParameter.PASSWORD, "pass123"); // ECM connection settings, the following ATOMPUB_URL is for Alfresco 4.0 and 4.1 parameter.put(SessionParameter.ATOMPUB_URL, "http://server:8080/alfresco/cmisatom"); parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); // Get a list of repositories retrieved by the atompub CMIS endpoint (for Alfresco there is only one element) List<Repository> repositories = sessionFactory.getRepositories(parameter); // Create CMIS session to the repository Session session = repositories.get(0).createSession(); // Get some repository info System.out.println("Repository Name: "+session.getRepositoryInfo().getName()); System.out.println("Repository ID: "+session.getRepositoryInfo().getId()); System.out.println("CMIS Version: "+session.getRepositoryInfo().getCmisVersion());