我正在使用Single Copy XPage Design,我的所有业务逻辑都在WebContent\WEB-INF中的文件中写成Java.
如果我需要更改XPage或自定义控件,我可以更新我的模板,刷新设计并立即获取更改.
但是,如果我想对Java代码进行更改,那么所有内容都会被缓存,我发现获取更改的唯一方法是重新启动http任务.
到目前为止,我已经尝试过:
除了重新启动http任务之外,似乎没有什么能让Web获取Java代码更改.
有没有我错过的东西?
我们已将此问题记录为SPR# LHEY9X5EBP。
我向 XPages 团队发送了这个问题,Maire Kehoe 提供了以下信息和解决方法供尝试。
不是已知问题。看起来像 NSFComponentModule.refresh() 中的一个错误,当有 templateModule 时,它永远不会发现文件的任何更改,并且永远不会重置类加载器。
解决方法:单击按钮进行重置。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:button value="Reset App ClassLoader" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:inapp.ResetUtil.reset()}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
Run Code Online (Sandbox Code Playgroud)
Java代码:
package inapp;
import com.ibm.domino.xsp.module.nsf.ModuleClassLoader;
public class ResetUtil {
public static void reset(){
ClassLoader appClassLoader = Thread.currentThread().getContextClassLoader();
((ModuleClassLoader)appClassLoader).resetDynamicClassLoader();
// That code will give:
// Script interpreter error, line=1, col=17: Error calling method 'reset()' on java class 'inapp.ResetUtil'
// Access denied (java.lang.RuntimePermission getClassLoader)
// need to edit C:\Domino\jvm\lib\security\java.policy file to have:
// grant codeBase "xspnsf://server:0/disc2.nsf/-"{ // nsf name here must be .toLowerCase of actual nsf name.
// permission java.lang.RuntimePermission "getClassLoader";
//};
}
}
Run Code Online (Sandbox Code Playgroud)
允许 Java 代码运行的权限。在 C:\Domino\jvm\lib\security\java.policy 中添加如下行,更新为您的 nsf 名称:
grant codeBase "xspnsf://server:0/disc2.nsf/-"{ // nsf name here must be .toLowerCase of actual nsf name.
permission java.lang.RuntimePermission "getClassLoader";
};
Run Code Online (Sandbox Code Playgroud)