Wildfly聚类和冬眠

时间:2016-08-16 17:19:33

标签: java hibernate wildfly infinispan wildfly-10

我正在设置一个wildfly实例集群来运行我的应用程序。它使用休眠来保持其持久性。

我使用来自standalone-ha.xml的infinispan配置,jgroups我改为使用tcp ping,因为我无法在我的环境中使用多播。

会话复制工作正常,我的mod_jk负载均衡器没有使用粘性会话,集群中的两个服务器(仅测试2个)正在成功提供页面。

我遇到了休眠的间歇性问题:

2016-08-16 10:14:47,518 INFO  [stdout] (default task-8) Caused by: java.lang.NullPointerException: null

2016-08-16 10:14:47,518 INFO  [stdout] (default task-8)     at org.hibernate.collection.internal.AbstractPersistentCollection.openTemporarySessionForLoading(AbstractPersistentCollection.java:274)

2016-08-16 10:14:47,518 INFO  [stdout] (default task-8)     at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:201)

2016-08-16 10:14:47,519 INFO  [stdout] (default task-8)     at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:546)

2016-08-16 10:14:47,519 INFO  [stdout] (default task-8)     at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:133)

2016-08-16 10:14:47,519 INFO  [stdout] (default task-8)     at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:277)

我正在使用正在运行hibernate 5的wildfly 10。

有问题的课程来源: http://grepcode.com/file/repo1.maven.org/maven2/org.hibernate/hibernate-core/5.0.0.CR3/org/hibernate/collection/internal/AbstractPersistentCollection.java#AbstractPersistentCollection.openTemporarySessionForLoading%28%29

该类用于延迟加载列表(具有一对多关系)等等。

这里有一些代码:

@Table(name = "[User]")
@Entity
public class User extends CommonDomainBase
{

    @OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true, mappedBy = "user", fetch = FetchType.LAZY)
    private List<UserSearchingPreference> searchingPreferences;

    public List<UserSearchingPreference> getSearchingPreferences()
    {
        return searchingPreferences;
    }
}

从我所看到的情况来看,sessionFactoryUuid将被序列化。因此,如果用户在服务器1上加载,复制到服务器2,并且命中服务器2的另一个请求尝试调用getSearchingPreferences()与服务器1上的休眠会话相关的sessionFactoryUuid不能用于在服务器2上查找会话,因为它不存在。

是否有人能够确认我的假设是否正确并提出解决方案?

我不确定这是否是需要调整的某些hibernate配置,或者我是否应该以某种方式在复制之前分离对象。

0 个答案:

没有答案