【问题标题】:Document processing in Liferay portalLiferay 门户中的文档处理
【发布时间】:2011-02-27 22:41:31
【问题描述】:

过去 2 年我一直在使用 Liferay,但我从来不需要任何广泛的文档管理。

现在我有一个 portlet,用户可以在其中上传文档(MS office OLE2 文档、ODS 文档、PDF 等),我必须使用所有可用的元数据来保存它们。

我知道如果不使用 Liferay 我该怎么做,我可能会使用 Apache solr 和 Apache Tika(UpdateRichDocumentsExtractingRequestHandler)或在引擎盖下使用 Apache Tika 的 Apache Jackrabbit(org.apache.jackrabbit .extractor.*).

问题是,如果我查看 Liferay 的主干,有一些关键类:

Hooks (JCRHook, FileSystemHook, CMISHook, s3Hook) 直接从DLLocalServiceImpl 内部雇用

另一种选择是使用DLAppLocalServiceImpl,它使用DLRepositoryLocalServiceImpl,文件也通过 Hooks 持久化到存储库中,但是在那里完成了很多额外的工作。

  1. Liferay 中没有 jackrabbit-text-extractors 库,所以我想如果我想从 PDF、DOC、ODS 文档中提取元数据,我会很难...因为 DL 服务层没有接受其他属性

    1. 我认为我必须避免使用 DL 服务和 JCR 挂钩并直接访问 Jackrabbit...但是我会失去兼容性和迁移我的存储库等的可能性。

请问有人可以合作吗?谢谢

【问题讨论】:

    标签: java content-management-system liferay jackrabbit document-management


    【解决方案1】:

    SOLR 用于索引,Jackrabbit 用于文档存储。在代码中管理 Liferay 文档库相当容易,只需查看 DL*LocalServiceUtil 类,即DLFolderLocalServiceUtilDLFileLocalServiceUtil。默认情况下,Liferay 只是在硬盘驱动器上创建一个匹配的文件夹/文件结构(名称已更改),因此您只需要编写代码或使用 Jackrabbit 如果您想要更多,因为 Liferay 允许上传/下载和开箱即用查看通过控制面板和各种 portlet。

    我没有在 Liferay 中使用 JackRabbit,但是一旦配置好,一切都应该在幕后进行管理,您不必担心前端的问题。

    当您说“所有元数据都可用”时我不确定保留了什么,但除了重命名文件以便对其进行跟踪之外,不应该有任何其他更改。通过上传每种类型的文件并检查LIFERAY/data/document_library 目录和子目录中的条目,应该可以快速轻松地进行测试。如果使用 Jackrabbit,这又会有所不同。

    【讨论】:

    • 谢谢大卫,但恕我直言,您的回答并不能解决太多问题,因为我认为只有在 liferay 中实际使用过 jackrabbit 或 alfresco 的人才能回答。 API 在 6.x 中发生了很大变化,并且已经完成了强大的更改。甚至像 DLFileLocalServiceUtil (如您所说)这样的服务也不存在。但是 DLAppLocalServiceUtil 出现了,不清楚它是如何工作的。而且由于我没有使用过jackrabbit 或alfresco,我不太了解如何扩展它。我所说的“元数据”是指 en.wikipedia.org/wiki/Dublin_Core ,我提到的所有文档都包含的绳索。
    • 我检查了 6.0.5 CE 和 6.0.11.1 EE SP1 并且都包含(例如)com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtilin portal-service.jar 并且这个 jar 允许被 ClassLoader 的其他 portlet 引用等级制度。我不确定你看到了什么。
    • 抱歉 6.x 我指的是尚未发布的 6.1。我应该将其命名为 6.1.x。我猜它从 10 月就开始工作了。如果我没记错的话,这些类已经在 11 月从主干中消失了......只有 DLLocalServiceUtil 仍然存在
    • 如果您查看 Jira 帐户,请查看此提要 issues.liferay.com/secure/ViewProfile.jspa?name=caorongjin。并单击“显示更多”几次。文档库已经发生了巨大的变化。
    • 抱歉,我无法访问该链接(没有权限),但我在 Liferay 5.2、6CE、6EE 和 6EESP1 中使用了相同的 DL 代码,没有出现问题。
    【解决方案2】:

    这两个服务DLLocalServiceImplDLAppLocalServiceImpl 我想都非常重要。前一个如果用于直接访问存储库。请注意,通过此服务添加文件时,您需要将相应的 DlFileEntry 持久化到数据库中,然后引用 addFile(...., fileEntryId, ...)。

    后一项服务正在为您做额外的事情,主要是资产管理和工作流程。

    关于您的用例,我会避免使用文档库,因为没有元数据可以进入 JCR 存储库。实际上,只有您可以存储的元数据/自定义属性将是 Liferay 门户的 custom properties AKA Expando 功能。

    对你来说最好的方法似乎是实现你自己的 jackrabbit hook 来将数据存储到存储库中并让 Liferay 文档库使用该存储库。

    【讨论】:

      【解决方案3】:

      认为埃德加是正确的。如果您通过http://svn.liferay.com/repos/public/portal/trunk/portal-service/src/com/liferay/documentlibrary/service/DLLocalService.java(以访客身份登录且无密码)检查当前中继,您将不再找到 DLFolderLocalServiceUtil 类。我们也在使用现有的 DLFolderLocalServiceUtil 类。感谢您的提醒。我们将重构我们的代码,以便在 6.1 到来时我们仍然可以使用 DocumentLibrary 服务。

      【讨论】:

        【解决方案4】:

        您需要始终使用 DLAppServiceUtil(如 Liferay 明确指示的那样)。这是我将文件保存到 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();
            }
        }
        

        【讨论】:

        • 有没有其他方法可以处理 liferay 中的 DuplicateFileException??
        猜你喜欢
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-02
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        相关资源
        最近更新 更多