我使用的是Single Copy XPage Design,所有业务逻辑都用Java编写在WebContent \ WEB-INF中的文件中。

如果我需要对XPage或自定义控件进行更改,则可以更新模板,刷新设计,然后立即进行更改。

但是,如果我想对Java代码进行更改,似乎所有内容都已缓存,而我发现进行更改的唯一方法是重新启动http任务。

到目前为止,我已经尝试过:

  • 刷新SCXD数据库
  • 的设计
  • 替换SCXD数据库
  • 的设计
  • 清洁SCXD数据库
  • 编辑faces-config(在模板和SCXD数据库中)
  • 删除SCXD数据库中已编译Java代码的.class文件,然后重新构建
  • 向服务器发送“tell http xsp refresh”命令
  • 用新的副本
  • 替换SCXD数据库
  • 替换指向SCXD数据库
  • 的数据库的设计

    除了重新启动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";
    };
    

    08-07 19:01