我正在使用IBM Domino 9.0.1 FP4开发XPage应用程序,它使用过时的JVM和Java 6.这种限制经常迫使我在Domino环境之外创建Java应用程序,并在与Domino服务器位于同一计算机上的辅助最新JVM中运行它们.这种"解决方案"有效,但远非最佳.因此我有两个问题:
A)是否可以手动更新Domino JVM?
B)如果没有,是否有更简单的解决方案将Java 7或8与当前的Domino版本一起使用?
个人提示:我知道其中一个"下一个"Domino版本应该具有Java 8功能.但是,(至少在我看来)这个版本何时发生还不清楚.我一直在等待Domino JVM的更新至少1年或2年,我已经不再相信这会很快发生......
在我的 Lucene 索引 (v7.2) 中创建文档时,我uid
向其中添加了一个包含唯一 ID/键(字符串)的字段:
doc.add(new StringField("uid",uid,Field.Store.YES))
Run Code Online (Sandbox Code Playgroud)
为了稍后检索该文档,我为给定的唯一 id 创建了一个 TermQuery 并使用 IndexSearcher 进行搜索:
searcher.search(new TermQuery(new Term("uid",uid)),1)
Run Code Online (Sandbox Code Playgroud)
作为一个Lucene“新手”,我想知道以下几点:
我应该如何改进这种方法以获得最佳查找性能? 例如,如果我将唯一 id 存储为字节数组而不是字符串,它会有所不同吗?或者是否有一些可以使用的特殊编解码器或过滤器?
通过唯一 ID 查找文档的时间复杂度是多少?由于索引至少包含每个文档的一个唯一术语,查找时间将随文档数量(O(n))线性增加,对吗?
将数据传递给自定义控件时,我总是使用compositeData对象从控件内部访问此数据.这个工作正常,除了自定义控件的beforeRenderResponse事件.以此代码为例:
<xp:this.afterPageLoad><![CDATA[#{javascript:getComponent("lbl0").setValue(typeof(compositeData));}]]></xp:this.afterPageLoad>
<xp:this.beforeRenderResponse><![CDATA[#{javascript:getComponent("lbl1").setValue(typeof(compositeData));}]]></xp:this.beforeRenderResponse>
<xp:label value="" id="lbl0"/>
<xp:label value="" id="lbl1"/>
Run Code Online (Sandbox Code Playgroud)
在afterPageLoad事件中,compositeData的typeof是"com.ibm.xsp.binding.PropertyMap".然而在beforeRenderResponse事件中,相同类型的返回"未定义".
如何在beforeRenderResponse事件中访问compositeData?
当我尝试对服务器端JavaScript(SSJS)中的前向和反向循环迭代之间的执行时间差异进行基准测试时,出现了一个(奇怪的)问题.虽然这个例子代码
var i,n=9999;
var arr=new Array(n);
for (i=0;i<n;i++) arr[i]=i; // WORKS
i=n; while (i--) arr[i]=i; // WORKS
Run Code Online (Sandbox Code Playgroud)
工作正常,以下代码
var i,n=10000; // changed n from 9999 to 10000
var arr=new Array(n);
for (i=0;i<n;i++) arr[i]=i; // WORKS
i=n; while (i--) arr[i]=i; // THROWS ArrayIndexOutOfBoundsException
Run Code Online (Sandbox Code Playgroud)
为反向迭代抛出ArrayIndexOutOfBoundsException.只要数组长度小于10000,反向while循环才能正常工作.谁能告诉我这里发生了什么?
我正在使用 JavaMail 1.5.2 读取来自 IMAP 帐户的邮件。为了减少对主机的请求数量,我预取了一些消息数据,例如发件人、日期、消息 ID 等:
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.CONTENT_INFO);
fp.add("Message-ID");
Message msgs[] = folder.getMessages();
folder.fetch(msgs,fp);
Run Code Online (Sandbox Code Playgroud)
但是,我还想预取内容的某些部分来创建邮件的预览文本,而不必加载带有所有附件的完整邮件。例如,我想预取类型为“text/plain”并且没有附件的内容的所有部分。那可能吗?
PS:我并不是在寻找类似的解决方案,fp.add(IMAPFolder.FetchProfileItem.MESSAGE)
因为这将预取带有所有附件的整个消息。
在我的XPage应用程序中,当我尝试打开到另一个只允许TLSv1和更新(没有SSLv3)的服务器的HTTPS连接时,会引发以下异常:
javax.net.ssl.SSLHandshakeException: No appropriate protocol
Run Code Online (Sandbox Code Playgroud)
设置javax.net.debug=ssl:handshake
提供以下附加信息:
SSLContextImpl: Using X509ExtendedKeyManager com.ibm.jsse2.hd
SSLContextImpl: Using X509TrustManager com.ibm.jsse2.pc
IBMJSSE2 will ignore com.ibm.jsse2.overrideDefaultProtocol since was set to a non recognized value TLSv1
Installed Providers = IBMJSSE2, IBMJCE, IBMJGSSProvider, IBMCertPath, IBMSASL, IBMXMLCRYPTO, IBMXMLEnc, Policy, IBMSPNEGO
JsseJCE: Using SecureRandom IBMSecureRandom from provider IBMJCE version 1.2
trigger seeding of SecureRandom
done seeding SecureRandom
IBMJSSE2 will enable CBC protection
IBMJSSE2 to send SCSV Cipher Suite on initial ClientHello
JsseJCE: Using SecureRandom IBMSecureRandom from provider IBMJCE version 1.2 …
Run Code Online (Sandbox Code Playgroud) 在开发XPage应用程序时,主要使用Java方法和bean而不是服务器端JavaScript(SSJS)似乎变得非常流行.SSJS当然需要更长的时间来执行,因为代码必须在运行时进行评估.但是,在使用Java时,是否有人可以提供有关QUANTITATIVE性能提升的信息?是否存在执行时间差异的基准,例如,取决于SSJS代码的长度或使用的函数?
在我的XPages应用程序中,我经常使用SSJS对象(com.ibm.jscript.std.ObjectObject)来缓存数据.如果我使用java.util.HashMaps来检查性能是否有所提高,我会对以下代码片段(SSJS)的执行时间进行基准测试:
所有三个代码片段都是相同的:它们创建并填充SSJS对象或具有不同类型数据/对象的HashMap.对于每个片段,我测量了超过1000次运行的平均执行时间,其中n(=片段中的最大循环索引)为1000000(100万).基准测试是使用java.lang.System.nanoTime在Domino 9.0.1服务器上执行的.
所述的比率的执行时间如下:
换一种说法:
我的问题如下:
我有一个包含多个IFrame的XPage("xBase"),每个IFrame在我的数据库中显示一个XPage("xIFrame").单击xBase中的按钮时,会设置sessionScope变量,并且会部分刷新显示此变量的标签(请参阅示例代码).只要没有太多的IFrame,以这种方式显示变量就可以正常工作.在下面的简短演示示例中,显示屏最多只能处理3个IFrame,但只要存在4个或更多IFrame,就不再设置sessionScope变量.
我在Notes Client 8.5.3,Firefox 13.0.1和Safari 5.1.7中测试了给定的示例 - 结果相同.部分刷新本身似乎不是问题,因为刷新显示当前时间的标签可以正常工作.谁能告诉我这是什么问题?
XPage" xBase ":
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.beforePageLoad><![CDATA[#{javascript:sessionScope.remove("testvar");}]]></xp:this.beforePageLoad>
<xp:div id="divIFrames">
<iframe src="xIFrame.xsp?para0=abc" id="iframe0" name="iframe0"></iframe>
<iframe src="xIFrame.xsp?para0=def" id="iframe1" name="iframe1"></iframe>
<iframe src="xIFrame.xsp?para0=ghi" id="iframe2" name="iframe2"></iframe>
<iframe src="xIFrame.xsp?para0=jkl" id="iframe3" name="iframe3"></iframe>
<iframe src="xIFrame.xsp?para0=mno" id="iframe4" name="iframe4"></iframe>
</xp:div>
<xp:br/>
<xp:button value="refresh iframes" id="button0">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="divIFrames"></xp:eventHandler>
</xp:button>
<xp:br/><xp:br/>
<xp:label id="label"><xp:this.value><![CDATA[#{javascript:new Date().toUTCString()+": "+sessionScope.containsKey("testvar")}]]></xp:this.value></xp:label>
<xp:br></xp:br>
<xp:button value="set sessionScope / refresh label" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="label">
<xp:this.action><![CDATA[#{javascript:sessionScope.put("testvar","STRING");}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:view>
Run Code Online (Sandbox Code Playgroud)
XPage" xIFrame "(只是一个标签显示时间和网址>简单,以确保它不会导致问题):
<?xml version="1.0" encoding="UTF-8"?> …
Run Code Online (Sandbox Code Playgroud) 我经常使用多维 HashMap,即包含 HashMap 的 HashMap。例如,在两键的基础上,我设置/获取一个存储值
hashmapMulti.get(key1).put(key2,x);
hashmapMulti.get(key1).get(key2);
Run Code Online (Sandbox Code Playgroud)
但是,我也可以使用“平面”哈希图并组合两个键来设置/获取值:
hashmapFlat.put(key1+"|"+key2,x);
hashmapFlat.get(key1+"|"+key2);
Run Code Online (Sandbox Code Playgroud)
如果我的信息正确的话, HashMap 的 put 和 get 的时间复杂度应该“或多或少”为O(1)。通过扁平化,我基本上用组合 3 个字符串的成本来交换 get(恒定时间)的成本。
哪种方式更快?
最佳选择是否取决于 HashMap 中存储的对象数量?
xpages ×7
java ×3
xpages-ssjs ×3
lotus-domino ×2
arrays ×1
fetch ×1
hashmap ×1
imap ×1
jakarta-mail ×1
jvm ×1
lucene ×1
ssl ×1