4

J'ai beaucoup utilisé Liferay depuis 2 ans, mais je n'ai jamais eu besoin de beaucoup de gestion de documents.Traitement de documents dans le portail Liferay

Maintenant, j'ai un portlet où les utilisateurs téléchargent des documents (documents MS Office OLE2, documents ODS, PDF, etc.) et je dois les conserver avec toutes les métadonnées disponibles.

Je sais comment pourrais-je faire cela sans utiliser Liferay, je serais probablement utiliser Apache Solr avec Apache Tika (UpdateRichDocuments et ExtractingRequestHandler) ou Apache Jackrabbit qui utilisent Apache Tika sous le capot (org.apache.jackrabbit.extractor. *).

Le problème est que si je regarde le coffre de Liferay, il y a des cours clés:

Hooks (JCRHook, FileSystemHook, CMISHook, s3Hook) qui sont employés à l'intérieur DLLocalServiceImpl un peu directement

Une autre alternative est d'utiliser DLAppLocalServiceImpl qui emploie DLRepositoryLocalServiceImpl et les fichiers sont conservés dans le dépôt via Hooks, mais beaucoup de choses supplémentaires sont faites là-dedans.

  1. Il n'y a pas Jackrabbit texte-essoreuses bibliothèque Liferay, donc je suppose que si je voulais les métadonnées à extraire du PDF, des documents, des documents ODS, j'aurais des temps très durs ... parce que le service DL couche n'accepte pas de propriétés supplémentaires

    1. Je pense que je dois éviter d'utiliser des services de DL et crochet JCR et accès Jackrabbit directement ... Mais je perdre la compatibilité et la possibilité de migrer mon dépôt, etc.

Pourriez-vous s'il vous plaît collaborer avec quelqu'un s'il vous plaît? Merci

Répondre

1

ces deux services DLLocalServiceImpl et DLAppLocalServiceImpl sont et seront, je suppose, importants.L'ancien si pour un accès direct au référentiel. Notez que lorsque vous ajoutez un fichier via ce service, vous devez conserver DlFileEntry correspondant dans la base de données et faire référence à addFile (...., fileEntryId, ...).

Ce dernier service vous propose des tâches supplémentaires, principalement la gestion des ressources et le flux de travail. En ce qui concerne votre cas d'utilisation, j'éviterais d'utiliser la bibliothèque de documents, car aucune métadonnée ne peut descendre dans le référentiel JCR. En fait, seules les métadonnées/propriétés personnalisées que vous pourriez stocker seraient la fonctionnalité custom properties AKA Expando du portail Liferay.

La meilleure façon pour vous semble être d'implémenter votre propre hook jackrabbit pour stocker des données dans le dépôt et laisser la bibliothèque de documents Liferay utiliser ce référentiel.

2

SOLR pour l'indexation, Jackrabbit pour le stockage de documents. Gérer Liferay Document Library dans le code est assez facile, il suffit de regarder les classes DL * LocalServiceUtil, à savoir DLFolderLocalServiceUtil et DLFileLocalServiceUtil. Par défaut, Liferay crée simplement une structure de dossiers/fichiers sur le disque dur (avec les noms changés), donc vous n'avez besoin que d'écrire du code ou d'utiliser Jackrabbit si vous voulez plus que cela car Liferay permet le téléchargement et le visionnement. via le panneau de contrôle et divers portlets.

Je n'ai pas utilisé JackRabbit avec Liferay mais une fois configuré, tout devrait être géré sous les couvertures et vous ne devriez pas avoir à vous en soucier à l'avant.

Lorsque vous dites "avec toutes les métadonnées disponibles" Je ne suis pas sûr de ce qui est retenu, mais en plus de renommer le fichier afin qu'il puisse être suivi, il ne devrait pas y avoir d'autres changements. Il devrait être rapide et facile à tester en téléchargeant un fichier de chaque type et en vérifiant les entrées du répertoire LIFERAY/data/document_library et de ses sous-répertoires. Encore une fois ce serait différent si Jackrabbit est utilisé.

+0

Merci David, mais avec tout le respect, vos réponses ne, parce que je pense résoud pas bien qu'il ne peut répondre que par ceux qui ont effectivement utilisé jackrabbit ou alfresco dans liferay. L'API a beaucoup changé dans 6.x et des changements robustes ont été faits. Même les services comme DLFileLocalServiceUtil (comme vous le dites) n'existent pas. Mais DLAppLocalServiceUtil est apparu et il n'est pas clair comment cela fonctionne. Et comme je n'ai pas utilisé jackrabbit ou alfresco, je ne sais pas trop comment l'étendre. Par "métadonnées", je veux dire http://en.wikipedia.org/wiki/Dublin_Core, roperties que tous les documents que j'ai mentionnés contiennent. – lisak

+0

J'ai vérifié 6.0.5 CE et 6.0.11.1 EE SP1 et les deux contiennent (par exemple) 'com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil' dans portal-service.jar et ce pot est autorisé à être référencé par d'autres portlets par la hiérarchie ClassLoader. Je ne suis pas sûr de ce que tu vois. –

+1

Désolé par 6.x Je me référais à 6.1 qui n'est pas encore publié. J'aurais dû le nommer 6.1.x. Il travaille sur depuis Octobre je suppose. Ces classes ont disparu du tronc en Novembre si je me souviens bien ... seulement DLLocalServiceUtil reste – lisak

0

Pensez Edgar est correct. Si vous vérifiez le tronc actuel via http://svn.liferay.com/repos/public/portal/trunk/portal-service/src/com/liferay/documentlibrary/service/DLLocalService.java (connexion en tant qu'invité et pas de mot de passe), vous ne trouverez plus la classe DLFolderLocalServiceUtil. Nous utilisons également la classe DLFolderLocalServiceUtil existante. Merci pour l'information. Nous allons refactoriser notre code de sorte que lorsque 6.1 arrive, nous pouvons toujours utiliser les services de DocumentLibrary.

0

Vous devez toujours utiliser DLAppServiceUtil (comme Liferay l'indique spécifiquement). Voici mon code de travail qui enregistre un fichier au CMS:

public static void saveFileToCMS(ActionRequest aReq, long groupId, String fileName, File filenameWithPath) { 
    try { 
     ServiceContext serviceContext = ServiceContextFactory.getInstance(
       Group.class.getName(), aReq); 

     // prevents duplicate entries based on unique title name 
     Random rand = new Random(); 
     Integer suffix = new Integer(rand.nextInt(10000)); 

     DLAppServiceUtil.addFileEntry(groupId, 0, fileName, "application/vnd.ms-excel", 
       fileName + suffix.toString(), "description goes here", "changelogname", 
       filenameWithPath, serviceContext); 

     //log.info("Successfully added the new file"); 

    } catch (PortalException pe) { 
     log.error("Portal Exception occurred while saving file to CMS"); 
     pe.printStackTrace(); 
    } catch (SystemException e) { 
     log.error("System Exception occurred while saving file to CMS"); 
     e.printStackTrace(); 
    } 
} 
+0

Existe-t-il une autre façon de gérer DuplicateFileException dans liferay ?? –

Questions connexes