首页 > 解决方案 > xe:restService 调用 bean 需要 28 秒

问题描述

我在 Domino 10.0 RHEL 7 中有这个 REST 服务 XPage:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex" rendered="false">
        <xe:restService id="restService" pathInfo="VCard" state="false">
                <xe:this.service>
                        <xe:customRestService contentType="application/json"
                                serviceBean="net.my.rest.VCardService">
                        </xe:customRestService>
                </xe:this.service>
        </xe:restService>
</xp:view>

然后当我调用 REST APIbeforePageLoad并且afterPageLoad事件立即触发(我通过print在事件中添加语句来检查这一点)。但是在调用 bean 之前总是需要28 秒。这是中的renderService方法VCardService

@Override
public void renderService(CustomService service, RestServiceEngine engine) throws ServiceException {
    System.out.println("VCard renderService");
    request = engine.getHttpRequest();
    response = engine.getHttpResponse();
    renderService();
}

afterPageLoad我在 XPage 中的事件发生28 秒后将这个“VCard renderService”记录到日志中。是什么导致了这种延迟?

我想到的一件事:我应该在 faces-config.xml 中将 VCardService 定义为 bean 吗?我见过的 REST API 示例没有提到这一点。

更新1:

服务 bean 不是托管 bean,因此您无需在 faces-config.xml 中指定任何内容。

https://www.wissel.net/blog/2014/10/custom-rest-service-in-xpages-using-a-service-bean.html

更新 2:

我用一个非常简单的,基本上是空的服务类进行了测试,并且没有延迟。vCard 服务使用了大约 10 个主要与 JSON 相关的 JAR,这些 JAR 存储在 NSF Code/Jars 部分。看起来每次调用 bean 时都会花费大量时间来加载这些 JAR。接下来我将尝试将 NSF 的 ODS 从 43 升级到 53,如果这没有帮助,则将 JAR 放到服务器文件夹中。

更新 3:

ODS 升级到 53 (R10) 并没有帮助。在第一次使用 API 后,缓慢消失了几个小时,这是典型的 XPage 行为。

更新 4:

从 NSF 中删除 JAR 并将它们放置到服务器 /lib/ext 文件夹中,这也无济于事。

标签: javaxpageslotus-dominoxpages-extlib

解决方案


推荐阅读