Tomcat Class Reloading&采用hybris

时间:2017-12-23 22:31:35

标签: tomcat tomcat7 hybris hotswap reloadable

Hybris开发环境中,我们正在寻找在每个类修改后减少Hybris服务器(Tomcat)重新启动,

除了可用的已知工具(JRebelHotswapAgent,...)之外,我们还尝试使用tomcat服务器的默认类/ webapp重新加载机制:reloadable="true"

extention webroot文件夹

下对类进行一些更改时,它就像一个魅力

但是在[Extention]/classes文件夹下进行更改时并非如此。

所以问题是:

是否可以让hybris服务器(tomcat)知道[Extention] / classes文件夹中的更改,并重新加载相应的webapp?知道hybris有自己的ClassLoading机制!

Environment :
Hybris 5.4
Tomcat 7.0
JDK 1.8

祝你好运

--------编辑1 -------

构建工具:

我们只使用ant命令来构建/清理...项目, IDEs(eclipse,intelliJ ...)仅用于编辑源代码。

文件夹层次结构:

 [HybrisFolder]
          |__bin
              |__platform
              |__custom
                  |__[ExtentionFolder]
                       |__classes
                       |__web
                           |__webroot
                               |__WEB-INF
                                   |__classes

尝试过的解决方案(不起作用)

在tomcat中添加[ExtentionFolder]/classes文件夹作为监视的资源:

  • 第一个选项:

在webapp上下文中将其添加为WatchedResource:

<Context reloadable="true" path="[ExtentionName]" docBase="[ExtentionFolder]/web/webroot">
  <Manager pathname="" />
  <Loader platformHome="[PlatformFolder]" className="de.hybris.tomcat.HybrisWebappLoader" deployName="default" />
  <WatchedResource>[ExtentionFolder]/classes</WatchedResource>
</Context>

==&GT;它无法正常工作

  • 第二个选项:

在webapp上下文中将其添加为ExtraResource:

<Context reloadable="true" path="[ExtentionName]" docBase="[ExtentionFolder]/web/webroot">
  <Manager pathname="" />
  <Loader platformHome="[PlatformFolder]" className="de.hybris.tomcat.HybrisWebappLoader" deployName="default" />
  <Resources className="org.apache.naming.resources.VirtualDirContext" extraResourcePaths="/WEB-INF/classes=[ExtentionFolder]/classes"/>
</Context>

==&GT;我得到一个奇怪的错误,就像它是同一个类的双重加载(第一次加载是由Hybris的 PlatformInPlaceClassLoader 完成的,第二次加载是由tomcat完成的)

Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: 
Bean named 'myBean' must be of type [x.y.z.DefaultMyBean], but was actually of type [x.y.z.DefaultMyBean]

0 个答案:

没有答案