Présentation de l’application
(tel que paramétrée pour répondre aux besoins « spécifiques » du Vice-Rectorat de la Nouvelle-Calédonie)
Interface admin : http://votreserveur:8080/alfresco
Interface utilisateur : http://votreserveur:8080/iparapheur
iParapheur est basé sur 2 modules :
– 1 noyau tournant sous une version modifiée d’Alfresco : paraphelec
– 1 application Web en HTML5 : iparapheur
Pour information, ce projet dérive d’un projet officiel datant de 2006 du ministère des finances : parapheur
Basé sur Alfresco et nécessite donc une installation vierge et fonctionnelle d’alfresco (outil de gestion documentaire).
Table of Contents
Compilation
Le module paraphelec a été compilé sous maven
Sous maven
-
- Télécharger maven depuis le site apache http://maven.apache.org/download.cgi puis décompressez le.
- Ajouter le dossier bin de maven dans votre PATH
- Récupérer les sources du projet paraphelec
- Lancez une invite de commande et positionnez vous dans le répertoire des sources de paraphelec et faites :
mvn compile
mvn eclipse:eclipse
Cette dernière commande va vous permettre de récupérer les sources pour eclipse.
Création BDD alfresco_it
Une BDD spécifique alfresco_it est nécessaire pour paraphelec.
/opt/alfresco/mysql/bin/mysql -u root -p create database alfresco_it;
grant all on alfresco_it.* to 'alfresco'@'localhost' with grant option;
flush privileges;
Gestion des dépendances
Un message d’erreur apparait fréquemment, il est malheureusement lié à un problème de licences (merci oracle) :
[ERROR] Failed to execute goal on project iparapheur-core: Could not resolve dependencies for project org.adullact.iparapheur:iparapheur-core:jar:3.4.c-SNAPSHOT: The following artifacts could not be resolved: javax.jms:jms:jar:1.1, com.sun.jdmk:jmxtools:jar:1.2.1, com.sun.jmx:jmxri:jar:1.2.1: Could not transfer artifact javax.jms:jms:jar:1.1 from/to java.net (https://maven-repository.dev.java.net/nonav/repository): No connector available to access repository java.net
Il va vous falloir soit télécharger les paquets directement et les installer soit trouver un repository proposant encore ces paquets.
mvn install:install-file -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar -Dfile=jmx/jmx-1_2_1-bin/lib/jmxtools.jar
Il faut soit intégrer les jar manquants avec mvn install soit les copier dans le bon chemin de l’arborescence :
.m2\repository (du home de l'utilisateur sur lequel on lance la compilation).
Quelques infos sur :
Génération des packages (war et amp)
mvn package
Pour le faire sans les test (unit tests, integration, etc) :
mvn package -DskipTests=true
Vous trouverez alors les paquets (war + amp) dans le sous-répertoire « target » de iparapheur-amp.
Déploiement du War
Gestion de cglib
Avant de voir comment construire et déployer le module ‘alfresco.war’, nous allons nous débarasser d’un bug extrêmement frustrant :
Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V
Cela vient de cglib-X.X.jar qui annonce des dépendances asm et fait planter hibernate (module d’accès à la base de données). Pour gérer cela, allez dans iparapheur-amp/target/parapheur.war/WEB-INF/lib/ et supprimer tous les cglib-X-X.jar :
cd iparapheur-amp/target/parapheur.war/WEB-INF/lib/
rm -rf cglib-2-2.jar
Important : laissez bien cglib-nodep-2-2.jar, c’est celui qui permet d’éviter ces erreurs de dépendances.
Déploiement AMP
Suivre les instructions disponibles sur :
N’oubliez pas, au préalable, de refaire le package en supprimant le cglib et les paquets asm (ne garder que le cglib-no-dep) :
cd lib
rm -rf asm*
rm -rf cglib-2-2.jar
Construction amp
Allez dans iparapheur-amp/target/iparapheur-amp-3.4.c-SNAPSHOT puis :
zip -r iparapheur-amp-3.4.c-SNAPSHOT.amp *
Puis :
java -jar /opt/alfresco/bin/alfresco-mmt.jar install iparapheur-amp-3.4.c-SNAPSHOT.amp alfresco.war
Cela va créer le fichier alfresco.war, copiez le dans tomcat :
cp alfresco.war /opt/alfresco/tomcat/webapps
Et c’est tout, l’application sera alors accessible sur http://@ipserveur:8080/alfresco.
Solution trouvée sur : http://community.jaspersoft.com/wiki/javalangnosuchmethoderror-orgobjectwebasmclasswriter-glassfish-and-jasperserver
Sous eclipse
Pour tout problème, suivre la doc disponible sur developpez.com Le plus simple est :
-
- Installer eclipse JEE avec le module maven
- Importer le projet Maven sous Eclipse et le compiler
- En cas d’erreur, forcez l’importation puis essayer de rafraichir le projet
A noter : le service archiva d’adullact semble indisponible de 00h à 3h du matin heure française
Alfresco
Déploiement AMP
Les détails sont disponibles sur :
MySQL
Intégré à Alfresco
JAVA_HOME
cd /usr/lib/jvm
ln -s java-7-oracle default-java
Modifier les paramètres JAVA_OPTS (dans /etc/environment par exemple) :
JAVA_OPTS="-XX:MaxPermSize=256m -XX:NewSize=256m -Xms2048m "
JAVA_OPTS="$JAVA_OPTS -Xmx3072m -Xss512K "
2048m correspond à une RAM de 2Go, modifier la en conséquence/
Pour le bundle alfresco, de même, modifier les paramètres dans /opt/alfresco/tomcat/script/ctl.sh
Installation alfresco
mkdir /opt/alfresco
apt-get install fontconfig libsm6 libice6 libxrender1 libxext6 libxinerama1 imagemagick swftools
Pour swftools, si ubuntu 12.04 :
sudo add-apt-repository ppa:guilhem-fr/swftools
sudo apt-get update
sudo apt-get install swftools
Récupération du package 64bits pour installation sous Linux :
cd /root
wget http://www2.alfresco.com/l/1234/2013-10-22/3dntj7
chmod +x 3dntj7
./3dntj7
On peut lancer une installation simple par défaut en veillant à bien utiliser MySQL.
Paramétrage CIFS
apt-get install samba smbfs
Paramétrage des transformations
Pour pouvoir activer les conversions de document (pdf vers texte, texte vers pdf, html vers pdf, etc), il va vous falloir installer Apache OpenOffice.
Pour ce faire, il suffit de le récupérer : http://sourceforge.net/projects/openofficeorg.mirror/files/4.0.1/binaries/fr/Apache_OpenOffice_4.0.1_Linux_x86-64_install-deb_fr.tar.gz/download
Puis l’installer :
tar zxvf Apache_OpenOffice_4.0.1_Linux_x86-64_install-deb_fr.tar.gz
Dans /opt/alfresco/tomcat/shared/classes/alfresco-global.properties, ajoutez :
### External executable locations ###
ooo.exe=/opt/alfresco/openoffice/program/soffice.bin
ooo.enabled=true
img.root=/opt/alfresco/common
img.dyn=${img.root}/lib
img.exe=${img.root}/bin/convert
swf.exe=/opt/alfresco/common/bin/pdf2swf
jodconverter.enabled=true
jodconverter.officeHome=/opt/alfresco/openoffice jodconverter.portNumbers=8101
Configuration du mail
Dans /opt/alfresco/tomcat/shared/classes/alfresco-global.properties, ajoutez les informations de votre serveur de courriel :
### MAIL CONFIG ###
mail.host=mail.test.fr
mail.port=25
[email protected]
mail.smtp.auth=false
mail.username=alfresco
#Bug v3.4.c le auth est obligatoire
mail.password=alfreso
#Bug v3.4.c le auth est obligatoire
mail.encoding=UTF-8
mail.debug=false
Puis dans /opt/alfresco/tomcat/shared/classes/alfresco/extension/subsystems/email/OutboundSMTP/outboundSMTP-context.xml :
${mail.host} ${mail.port} ${mail.protocol} ${mail.username} ${mail.password} ${mail.encoding} ${mail.smtp.auth} ${mail.debug} ${mail.smtps.auth} ${mail.smtps.starttls.enable}
Problème liens dans email
De base, les liens dans les emails renvoient vers la plateforme de démonstration du iParapheur. Pour modifier ce comportement, au démarrage de tomcat, ajoutez dans JAVA_OPTS :
-Dparapheur.mail.baseUrl=parapheur.test.fr:8080/alfresco
Ajoutez dans tomcat/shared/classes/iparapheur-global.properties:
parapheur.mail.baseUrl=parapheur.test.fr:8080/alfresco
Interfaçage avec LDAP
Dans /opt/alfresco/tomcat/shared/classes/alfresco-global.properties, ajoutez :
### Config LDAP
authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap1:ldap
Puis créez l’arborescence et le nouveau fichier /opt/alfresco/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/ldap-authentication.properties :
ldap.authentication.active=true
# Base DN containing users
ldap.authentication.userNameFormat=
# The URL to connect to the LDAP server
ldap.authentication.java.naming.provider.url=ldap://ldap.test.fr:389
# The authentication mechanism to use
ldap.authentication.java.naming.security.authentication=simple
ldap.synchronization.active=true
ldap.synchronization.java.naming.security.authentication=none
# The attribute name on people objects found in LDAP to use as the uid in Alfresco
ldap.synchronization.userIdAttributeName=uid
# The attribute on person objects in LDAP to map to the first name property in Alfresco
ldap.synchronization.userFirstNameAttributeName=givenName
# The attribute on person objects in LDAP to map to the last name property in Alfresco
ldap.synchronization.userLastNameAttributeName=sn
# Filter person
ldap.synchronization.personQuery=(&(objectclass\=inetOrgPerson))
ldap.synchronization.userSearchBase=ou=acad,ou=domain,o=subdomain,c=fr
# The query to select all objects that represent the groups to import.
ldap.synchronization.groupQuery=(&(objectclass\=groupOfUniqueNames))
ldap.synchronization.groupSearchBase=ou=Groups,ou=acad,ou=domain,o=subdomain,c=fr
# The attribute on person objects in LDAP to map to the email property in Alfresco
#ldap.synchronization.userEmailAttributeName=mail
# The attribute on person objects in LDAP to map to the organizational id property in Alfresco
#ldap.synchronization.userOrganizationalIdAttributeName=o
# The default home folder provider to use for people created via LDAP import
#ldap.synchronization.defaultHomeFolderProvider=userHomesHomeFolderProvider
# The attribute on LDAP group objects to map to the gid property in Alfrecso
ldap.synchronization.groupIdAttributeName=cn
# The group type in LDAP
ldap.synchronization.groupType=groupOfUniqueNames
# The person type in LDAP
ldap.synchronization.personType=inetOrgPerson
# The attribute in LDAP on group objects that defines the DN for its members
ldap.synchronization.groupMemberAttributeName=uniqueMember
Les événements de synchro (déclencheures,etc) se gère dans le fichier default-synchronization.properties
Enfin, redémarrez alfresco.
Infos trouvées sur :
http://wiki.alfresco.com/wiki/Alfresco_Authentication_Subsystems
Client Web iParapheur
Récupérez les sources git :
git clone https://adullact.net/anonscm/git/iparapheur-web/iparapheur-web.git
git tag -l
git checkout tags/v4.1.01_20131226
Puis compilez le package :
cd iparapheur-web
mvn package
Récupérez le fichier war dans iparapheur-surf-webapp/target, renommez le en iparapheur.war (ou ce que vous voulez) puis copiez le dans le répertoire webapps de tomcat.
Pour information, la version la plus fonctionnelle testée n’est pas la dernière mais la 4.0.2
Création du fichier properties
Après divers bugs et analyse, un fichier properties est nécessaire, il faut créer un fichier /opt/tomcat/shared/classes/iparapheur-global.properties contenant, par exemple :
parapheur.ihm.options.password.show=true
parapheur.ihm.options.theme.show=false
parapheur.ihm.contact.support.text=Support technique
parapheur.ihm.creerdossier.visibilite.defaut=public
parapheur.ihm.creerdossier.visibilite.valeurs=public,group,confidentiel
#parapheur.ihm.themes.directory=/var/www/themes
parapheur.ihm.themes.disponibles=default
parapheur.signature.applet.url=http://localhost:8080/alfresco
parapheur.ihm.contact.support.url=http://www.adullact-projet.coop
parapheur.ihm.options.langue.show=true
#parapheur.ihm.options.signature.show=true
Paramètres java
Ajoutez dans /opt/alfresco/tomcat/script/ctl.sh, l’option -Dparapheur.jobs.thread.pool dans JAVA_OPTS :
daemon_tomcat() {
export JAVA_OPTS="-XX:MaxPermSize=512m -Xms2048m -Xmx3072m -Dalfresco.home=/opt/alfresco -Dparapheur.jobs.thread.pool=2 -Dcom.sun.management.jmxremote"
La valeur est à adapter en fonction de vos besoins : plateforme (capacité) et type (qualification ou production)
Ghostscript
Le client Web utilise ghostscript pour afficher les dossiers et pouvoir y mettre des annotations visuellement :
apt-get install ghostscript
Il va vous falloir créer un lien libgs.so vers la bonne librairie ghostscript de votre système, par exemple :
cd /usr/lib/
ln -s libgs.so.9 libgs.so
Normalement cela devrait permettre à l’applet de fonctionner correctement.
Ajout des fonts
Dans /opt/iParapheur, il faut ajouter les fonts (facilement trouvable sur Internet) :
arial_black.ttf arial.ttf verdanab.ttf verdanai.ttf verdana.ttf
Modification des sources
Case « Signature papier » cochée par défaut. Dans /opt/alfresco/tomcat/webapps/iparapheur/javascript/nouveau-dossier.js modification de la fonction affichageSignaturePapier (à la ligne 77) :
77 function affichageSignaturePapier(masquer) {
78 if (masquer === "true") {
79 $("#signature-papier-ck").parents().eq(2).hide();
80 } else {
81 $("#signature-papier-ck").parents().eq(2).show();
82 }
83 $("#signature-papier-ck").prop("checked", true);
84 }
Possibilité ajout dossier sans document attaché Dans /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/iparapheur-mobile-webscripts-3.4.c-SNAPSHOT.jar. Fichier addDocument.post.js :
var rules = {
"dossier":{"typeOf":"string"},
Au lieu de :
var rules = {
"dossier":{"typeOf":"string", "isValid":is_valid_nodeRef()},
Divers
Présentation générique :
http://adullact-projet.coop/index.php/libriciels/iparapheur
http://adullact-projet.coop/images/stories/pdf/fiche_version_iparapheur_4.1.pdf
Démonstration :
http://demos.adullact.org/index.php?2006/09/05/25-parapheur-atolcd
Version Alfresco installée :
http://wiki.alfresco.com/wiki/Community_file_list_3.4.c
Sources informations pour iParapheur :
Sources informations pour alfresco :
http://www.jtouzi.net/installation-de-alfresco-4-mysql-ubuntu-server-1204/
Variables existantes
A mettre dans tomcat/shared/classes/iparapheur-global.properties (testé) et parapheur-config.properties (non testé, dans tomcat/shared/classes/alfresco/extension/module/parapheur/conf ?) :
parapheur.ihm.options.password.show=true
parapheur.ihm.options.theme.show=false
parapheur.ihm.contact.support.text=Support technique
parapheur.ihm.creerdossier.visibilite.defaut=public
parapheur.ihm.creerdossier.visibilite.valeurs=public,group,confidentiel
parapheur.ihm.themes.directory=/var/www/themes
parapheur.ihm.themes.disponibles=default
parapheur.signature.applet.url=http://parapheur.test.fr:8080/alfresco
parapheur.mail.baseUrl=parapheur.test.fr:8080/alfresco
parapheur.ihm.contact.support.url=http://www.adullact-projet.coop
parapheur.ihm.options.langue.show=true
parapheur.ihm.options.signature.show=true
parapheur.signature.applet.url=http://parapheur.test.fr:9090/parapheur
[email protected]
parapheur.mail.objet.prefixe=""
parapheur.mail.targetVersion=3
parapheur.archive.ttfVerda.location=/opt/iParapheur/verdanai.ttf
parapheur.archive.iccprofile.location=/opt/iParapheur/srgb.profile
Nécessaire ?
Rendre les sources maven compatibles avec Eclipse
Les fichiers pom.xml doivent être légèrement modifiés pour être compatible avec le plugin maven pour eclipse.
Dans iparapheur-amp/pom.xml
Ajoutez la dépendance groovy-eclipse-compiler pour maven :
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
groovy-eclipse-compiler
Puis modifiez le groupId org.codehaus.groovy.maven en changeant groovy-maven par groovy-eclipse-compiler ainsi que le numéro de version :
org.codehaus.groovy
groovy-eclipse-compiler
2.7.0-01
Faites de même pour iparapheur-rules/pom.xml.
Bordereau
Le bordereau sous iParapheur se trouve dans « Configuration avancée: TdT, templates, calques, métadonnées » dans « modèles (e-mails et bordereau archive)« . Vous pouvez modifier les différents modèles en utilisant la syntaxe « Freemarker Java Template engine« . Par exemple, j’ai modifié le bordereau « parapheur-signataires.ftl » comme ceci :
<!-- @page { size: 21cm 29.7cm } --> N°${dossier.properties['cm:name'][0]}${dossier.properties['cm:name'][1]}${dossier.properties['cm:name'][2]}${dossier.properties['cm:name'][3]}${dossier.properties['cm:name'][4]}${dossier.properties['cm:name'][5]}${dossier.properties['cm:name'][6]}${dossier.properties['cm:name'][7]} <#if etapes[0].signataire??>Initié par : ${etapes[0].signataire} (${dossier.properties.creator}) - Service ${etapes[0].parapheurName} Le : ${dossier.properties["cm:created"]?date?string("dd/MM/yyyy HH:mm:ss")} Reçu par la direction le : <#if etapes[1].dateValidation??>${etapes[1].dateValidation?string("dd/MM/yyyy HH:mm:ss")}<#else>Pas encore reçu Traité par la direction le : <#if etapes[1].dateValidation??>${etapes[2].dateValidation?string("dd/MM/yyyy HH:mm:ss")}<#else>Traitement non finalisé Bordereau Transmission Parapheur Objet : ${dossier.properties['cm:title']} <#if etapes[0].dateValidation??> <#else> <#if etapes[last].dateValidation??> <#else> <#if statut?has_content> Signataire Date Annotation <#if etapes[0].signataire??>${etapes[0].signataire}, <#if etapes[0].delegue?has_content> <#if etapes[0].delegueName??>${etapes[0].delegueName}, par délégation de <#if etapes[0].parapheurName??><#if etapes[0].parapheurName?contains("Direction")>Direction<#else>${etapes[0].parapheurName} <#if etapes[0].dateValidation??>${etapes[0].dateValidation?string("dd/MM/yyyy HH:mm:ss")} <#if 0==etape_rejet> <#if etapes[0].annotation?? && etapes[0].annotation?has_content> ${etapes[0].annotation?replace('\n',' ')} Adjoint au Secrétaire Général (ASG) Secrétaire Général (SG) Vice-Recteur (VR) <#if dossier.properties["{http://www.atolcd.com/alfresco/model/parapheur/1.0}typeMetier"]?contains("Retour")> <#-- Circuit retour a 1 seul etape alors que celui normal en a plusieurs, pour le bordereau retour, on veut afficher avant dernier destinataire comme destinataire final (gestion retour specifique) --> <#assign last = (etapes?size-2)/> <#else> <#assign last = (etapes?size-1)/> <#if etapes[last].signataire??>${etapes[last].signataire}, <#if etapes[last].delegue?has_content> <#if etapes[last].delegueName??>${etapes[last].delegueName}, par délégation de <#if etapes[last].parapheurName??><#if etapes[last].parapheurName?contains("Direction")>Direction<#else>${etapes[last].parapheurName} Retour le : <#if etapes[last].dateValidation??>${etapes[last].dateValidation?string("dd/MM/yyyy HH:mm:ss")} <#if 3==etape_rejet> <#if etapes[last].annotation?? && etapes[last].annotation?has_content> ${etapes[last].annotation?replace('\n',' ')} Réponse de la plate-forme : ${statut} <#if ackMIAT??>(Date: ${ackMIAT}) <#if etapes[1].annotation?? && etapes[1].annotation?has_content> Annotations de la direction à la réception : ${etapes[1].annotation?replace('\n',' ')} <#if etapes[2].annotation?? && etapes[2].annotation?has_content> Annotations de la direction au traitement : ${etapes[2].annotation?replace('\n',' ')} Observations diverses : <#if dossier.properties["{http://www.atolcd.com/alfresco/model/parapheur/1.0}typeMetier"]?? && dossier.properties["{http://www.atolcd.com/alfresco/model/parapheur/1.0}soustypeMetier"]??> Dossier de type : ${dossier.properties["{http://www.atolcd.com/alfresco/model/parapheur/1.0}typeMetier"]} // ${dossier.properties["{http://www.atolcd.com/alfresco/model/parapheur/1.0}soustypeMetier"]} Numéro complet du dossier : ${dossier.properties['cm:name']} <#if metadonnees?? && metadonnees?has_content> <#setting locale="fr_FR"><#assign mdkeys = metadonnees?keys> <#list mdkeys as key><#if key?starts_with("DATE_B_")> ${key?substring(7)} : ${metadonnees[key]?string("EEEEEEEE d MMMMM yyyy (yyyy-MM-dd)")} <#if key?starts_with("DOUBLE_")> ${key?substring(7)} : ${metadonnees[key]?string(",##0.00")} <#if key?starts_with("INTEGER_")> ${key?substring(8)} : ${metadonnees[key]?string(",##0")} <#if key?starts_with("STRING_")> ${key?substring(7)} : ${metadonnees[key]}