我正在ofbiz的hot-deploy
文件夹中开发一个新组件。
关于工作流,当在.java
类中进行新的修改时,我从不同的终端运行组件的ant build
命令。
重建完成后,日志会通知我Controller
已经重新挂载了我的组件。但是,所做的更改不会反映在应用程序中。
但是,有一种情况是,类被正确地重新加载,并且应用程序行为符合修改。如果类从未被ClassLoader
加载(它从未被访问过),则修改是可见的。这让我想到,类/ jar被缓存在应用程序中的某个地方,并且没有考虑到新的更改(因此从一开始就完全否定了热部署的想法)。
这是真正的问题,还是我漏掉了什么。有没有办法禁用这种缓存?
发布于 2014-01-15 20:28:14
OFBiz确实使用了缓存类加载器,这可能就是您所遇到的(请参阅CachedClassLoader.java)。但是,根据您运行OFBiz的方式,底层类加载器可能存在其他问题。
OFBiz中的热部署目录并不是真正的热部署,它更像是对其中的组件目录的自动部署。一般来说,对于OFBiz,大多数资源更像脚本,通常最好用Groovy或简单方法脚本编写代码,然后它们会自动更新(使用默认缓存设置,使用生产缓存设置,它们需要在webtools webapp中手动清除缓存)。
根据您部署OFBiz的方式,重新加载某些已编译的类通常不起作用,因为它们在won应用程序之间共享,所以您需要重新加载won应用程序外部的类路径资源。这与热部署简单的webapps或使用隔离类加载器的WAR文件的想法非常不同。
https://stackoverflow.com/questions/21086131
复制相似问题