从RMI缓存POJO

时间:2015-08-23 16:10:21

标签: java hibernate java-ee jpa caching

我在通过RMI接收的POJO的独立应用程序中实现缓存。接下来是问题所在。假设我们有两个人在同一家公司。

class Company {
  Long id;
  List<User> users;
}

class User {
  Long id;
  Company company;
}
// + getters & setters

// CLIENT:
// get persons from server via RMI
User user1 = server.getEntity(User.class, 1);
User user2 = server.getEntity(User.class, 2);

assertEquals("Companies not the same instance!" , user1.getCompany(),user2.getCompany());

问题:在RMI中反序列化后,我们得到两个不同的公司实体实例。如果用户上的公司发生更改,则不会从其他用户看到更改,因此我们无法缓存此类对象。每个对象必须只有一个实例。

想法:每次加载实体时,检查它是否已经在缓存中。如果是,则将所有值复制到缓存实例,因此我们保留所有引用。对于加载的实体的关系,递归地执行相同的操作。 这样,我们在缓存中始终只有一个实体实例并保留其所有引用。有没有更有效的方法呢?是否有任何图书馆已经解决了这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:0)

即使你在服务器端使用缓存,RMI仍会序列化对象,所以在客户端你仍然会得到一个新的对象实例。

这种方法没有任何问题,因为无论如何detached entities应该如何工作。使用optimistic locking approach should prevent data consistency issues