0

我已经设置了一个使用 Hibernate 2nd 的 Web 应用程序。使用http://ehcache.org/documentation/distributed_caching_with_rmi.html中的说明对缓存和 Ehcache 进行级别缓存。

Web 应用程序使用 Automatic Peer Discovery 部署在不同网络节点中的两个不同 Tomcat 实例中。两个 Tomcat 都部署了完全相同的 WAR。

尽管 WEB-INF/lib 和 WEB-INF/classes 文件夹是相同的,而且我缓存的实体类有一个 serialVersionUID 字段,但我必须重写 Tomcat security.policy 并启用安全管理器以进行远程类加载。

分布式缓存似乎工作正常,但是,在每个同步事件上,我通过使用 ngrep 嗅探看到三到四个具有这种格式的消息

T 2011/06/14 10:00:52.304760 192.168.2.114:47000 -> 192.168.2.112:37795 [A]
Q....w....V....0...&..sr..java.util.ArrayListx.....a....I..sizepxp....w.....sr..org.hibernate.cache.CacheKey.......m...I..hashCodeL..entityModet..Lorg/hibernate/EntityMode
  ;L..entityOrRoleNamet..Ljava/lang/String;L..keyt..Ljava/io/Serializable;L..typet..Lorg/hibernate/type/Type;t.rfile:/path/to/apps_/webroot/default/webapps/ROOT/WEB-INF/clas
  ses/ file:/path/to/apps_/webroot/default/webapps/ROOT/WEB-INF/lib/activation-1.1.jar file:/path/to/apps_/webroot/default/webapps/ROOT/WEB-INF/lib/antlr-2.7.7.jar file:/mnt
  /hgfs/cool/webroot/default/webapps/ROOT/WEB-INF/lib/aopalliance-1.0.jar file:/path/to/apps_/webroot/default/webapps/ROOT/WEB-INF/lib/asm-1.5.3.jar file:/path/to/apps_/webr
  oot/default/webapps/ROOT/WEB-INF/lib/asm-attrs-1.5.3.jar file:/path/to/apps_/webroot/default/webapps/ROOT/WEB-INF/lib/aspectjweaver-1.6.8.jar file:/path/to/apps_/webroot/d
  efault/webapps/ROOT/WEB-INF/lib/backport-util-concurrent-3.0.jar file:/path/to/apps_/webroot/default/webapps/ROOT/WEB-INF/lib/cglib-2.1_3.jar file:/path/to/apps_/webroot/d
  efault/webapps/ROOT/WEB-INF/lib/commons-beanutils-1.8.0.jar file:/path/to/apps_/webroot/default/webapps/ROOT/WEB-INF/lib/commons-chain-1.2.jar file:/path/to/apps_/webroot/

这些框架更长,基本上列出了我的 WAR WEB-INF/lib 中的每个 JAR 文件。这在我的网络中浪费了大量带宽。

任何人都可以阐明我可能做错了什么吗?因为两个 Web 应用程序都可以访问相同的类,所以我真的看不出需要加载远程类,但是没有它我无法让它工作。即使两者都有相同的 JAR 和相同的序列版本字段。我尝试设置 java.rmi.codebase 属性,但我不确定我应该将其设置为什么值,因为我读过的大多数示例都与 Applets 和浏览器内 JVM 有关。

一个合理的解决方法是摆脱那些烦人的 JAR 文件列表,这些文件使缓存集群中的每条同步事件消息都膨胀。

提前致谢,

YJ

4

0 回答 0