[英]Lazy loading problems with glassfish cluster and JPA
将EAR部署到glassfish 3.1集群时遇到问题。 设置是这样的:我的主机PC上的群集1在2个VM Apache上具有2个实例,并带有mod_jk以在2个实例之间进行负载平衡(带有粘性会话)Tapestry 4.x Web应用程序
所以问题是:
我将JPA实体存储在会话(loginData)中。 该实体具有一些延迟加载的属性。 因此,当我重定向到实例2时,我会看到一条错误消息:
Exception Description: An attempt was made to traverse a relationship using indirection that had a null Session.
This often occurs when an entity with an uninstantiated LAZY relationship is serialized and that lazy relationship is traversed after serialization.
To avoid this issue, instantiate the LAZY relationship prior to serialization.
因此,我猜测是在序列化该对象时,该对象仍未随所有属性一起膨胀。
如果我将其更改为fetch = EAGER,则一切正常。
更改为EAGER并不是真正的选择。
任何想法如何解决这个问题?
谢谢
在您的HttpSession中存储JPA实体是一个坏主意。 将您的实体生存期限制为一个HttpRequest并为自己节省很多问题。 将实体ID存储在您的会话中,并使用该ID在每次请求时获取您的实体。 可能使用JPA /休眠缓存选项来防止每次命中数据库。
根据您的情况,这意味着登录后将实体的@Id值存储在HttpSession中。 然后,当实例2尝试从HttpSession中获取实体时,它将仅获取ID并使用该ID来获取刷新请求范围内的实际实体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.