我使用的是Single Copy XPage Design,所有业务逻辑都用Java编写在WebContent \ WEB-INF中的文件中。
如果我需要对XPage或自定义控件进行更改,则可以更新模板,刷新设计,然后立即进行更改。
但是,如果我想对Java代码进行更改,似乎所有内容都已缓存,而我发现进行更改的唯一方法是重新启动http任务。
到目前为止,我已经尝试过:
除了重新启动http任务,似乎没有什么可以使Web来获取Java代码更改的。
有什么我想念的吗?
最佳答案
我们已将此问题记录为 SPR#LHEY9X5EBP 。
我向XPages团队发送了此问题,Maire Kehoe提供了以下信息和解决方法。
<?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>
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";
//};
}
}
grant codeBase "xspnsf://server:0/disc2.nsf/-"{ // nsf name here must be .toLowerCase of actual nsf name.
permission java.lang.RuntimePermission "getClassLoader";
};