java - 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 文件夹中,这也无济于事。
解决方案
推荐阅读
- actions-on-google - 无法在 Google Actions Console 中选择使用语音创建帐户
- python - 处理字母和数字组合的简单方法
- python - Python 中用于语音到文本翻译的 Pyaudio 替代方案
- maven - 带有 Maven 的 JavaDoc 生成“获取链接时出错:”
- sequelize.js - 为不同的字段续集多个 $or
- dns - macOS 上的 DNS 问题
- xmllint - 修剪标签内的空格?
- perl - 使用 Perl 模块,它是另一个目录中的根目录
- python - 嵌套循环和 newaxis numpy
- c# - 多线程场景中 Guid.NewGuid() 的重复值