Xpages 重新加载单拷贝XPage设计(SCXD)*Java*应用程序设计

Xpages 重新加载单拷贝XPage设计(SCXD)*Java*应用程序设计,xpages,Xpages,我使用的是单拷贝XPage设计,我的所有业务逻辑都以Java的形式写入WebContent\WEB-INF中的文件中 如果我需要对XPage或自定义控件进行更改,我可以更新我的模板,刷新设计,然后立即进行更改 然而,如果我想对Java代码进行更改,那么所有内容似乎都被缓存了,我找到的唯一获取更改的方法就是重新启动http任务 到目前为止,我已经尝试: 刷新SCXD数据库的设计 替换SCXD数据库的设计 清理SCXD数据库 编辑面配置(在模板和SCXD数据库中) 删除SCXD数据库中已编译Jav

我使用的是单拷贝XPage设计,我的所有业务逻辑都以Java的形式写入WebContent\WEB-INF中的文件中

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

然而,如果我想对Java代码进行更改,那么所有内容似乎都被缓存了,我找到的唯一获取更改的方法就是重新启动http任务

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

  • 刷新SCXD数据库的设计
  • 替换SCXD数据库的设计
  • 清理SCXD数据库
  • 编辑面配置(在模板和SCXD数据库中)
  • 删除SCXD数据库中已编译Java代码的.class文件并重新构建
  • 向服务器发出“告诉http xsp刷新”命令
  • 用新副本替换SCXD数据库
  • 替换指向SCXD数据库的数据库的设计
除了重新启动http任务外,似乎没有什么能让web接收Java代码更改


我遗漏了什么吗?

我们已将此问题记录为SPR#LHEY9X5EBP

我向XPages团队提出了这个问题,Maire Kehoe提供了以下信息和解决方法

这不是一个已知的问题。看起来像NSFComponentModule.refresh()中的错误, 当存在templateModule时,它永远不会发现对文件的任何更改,也不会重置类加载器

解决方法:单击按钮进行重置


Java代码:

inapp包;
导入com.ibm.domino.xsp.module.nsf.ModuleClassLoader;
公共类ResetUtil{
公共静态无效重置(){
ClassLoader appClassLoader=Thread.currentThread().getContextClassLoader();
((ModuleClassLoader)appClassLoader).resetDynamicClassLoader();
//该守则将提供:
//脚本解释器错误,第1行,第17列:调用java类“inapp.ResetUtil”上的方法“reset()”时出错
//拒绝访问(java.lang.RuntimePermission getClassLoader)
//需要编辑C:\Domino\jvm\lib\security\java.policy文件,以便:
//格兰特代码库“xspnsf://server:0/disc2.nsf/-“{//nsf名称必须是实际nsf名称的.toLowerCase。
//权限java.lang.RuntimePermission“getClassLoader”;
//};
}
}
允许该Java代码运行的权限。在C:\Domino\jvm\lib\security\java.policy中添加这样一行,更新为您的nsf名称:


这对我来说很好。我刚刚设置了一个新的SCXD nsf+一个新的启用了SCXD的nsf,在WebContent\WEB-INF路径中的一个新src文件夹中添加了一个Xpage和Java类(并在两个nsf上配置了构建路径),我在主SCXD nsf中的SCXD Java中所做的更改立即被获取。你有没有这样做过?我想这对于一个全新的Java类来说是不错的。对预先存在的方法进行的编辑会导致问题。(正常设计刷新中的8.5.3 Java代码和XPages也出现了同样的症状。)如果有人感兴趣的话,这个问题有一个解决方案。我想我可以在ConnectUsphereed上找到任何解决这个问题的人。非常好的信息!有一点需要澄清:这段代码是每个服务器运行一次、每个模板运行一次还是每个数据库运行一次?不幸的是,这不起作用(应用程序在浏览器中运行,不确定这是否是一个因素)。我无法在NSF级别修改安全权限,但已完全打开安全性以测试重置选项:grant{permission java.security.AllPermission;};但是,它仍然没有在SCXD数据库中获取Java代码中的更改。只有在HTTP重新启动后才会拾取它们。我不确定这是否与Cameron在Twitter上关于OSGi插件更新但未重新加载的评论有关。好的,我已经将此信息传递给Maire,并将Twitter上提出的其他问题转发给团队。如果还有什么可以尝试的,我会告诉你的。我们还记录了上述原始版本的SPR:SPR#LHEY9X5EBP
grant codeBase "xspnsf://server:0/disc2.nsf/-"{ // nsf name here must be .toLowerCase of actual nsf name.
    permission java.lang.RuntimePermission "getClassLoader";
};