我想在N"客户"之间进行同步。数据库到1 Big" Server"数据库(存储库/备份数据库的种类)。 没问题,我有办法让他们的同步很好。
但是,它要求"服务器"将成为"客户"应用程序,具有相同的Java类,模型,实体,业务等。
我正在尝试找到此服务器数据库的解决方案,保存所有客户端的所有数据库内容,而不对我的实体进行重大更改(因为我还需要在客户端上应用)
这是我尝试的一个例子,但是没有成功如何通过EJB遥控器在JPA和序列化上实现它。
@Entity
@Table(name="crud_sync")
public class CrudSync implements Serialization{
private static final long serialVersionUID = 1L;
@Id private Long id;
private String data;
//...ommited...
}
假设我有这个CrudSync实体。
在N客户端数据库中,我将有一个包含列的表:
ID - Number - PK
Data - Varchar
etc...
在1服务器端,我希望有一个表格:
ID - Number - PK
ClientPK - Number // the ID on Client database table
ClientId - Number // the Client code (1,2,3,4.. etc..)
// UQ (ClientPK,ClientID)
Data - Varchar
etc...
甚至复合PK
ClientPK - Number - PK // the ID on Client database table
ClientId - Number - PK // the Client code (1,2,3,4.. etc..)
Data - Varchar
etc...
但我不确定如何在双方使用相同的实体实现这一目标,如果可能的话......
另一个解决方案可能为客户端和服务器创建单独的JAR / EAR。 这样做,我应该在实体/ JPA注释中改变什么? 应该将哪个类分隔到Client / Server JAR / EAR?
关于如何制作(N客户端< - > 1服务器)数据库的任何其他建议?
它必须让客户端脱机工作,因此他们需要运行自己的数据库,也必须在服务器上拥有相同的应用程序,因为它可以在服务器上创建实体并将这些实体发送给客户端(副-versa)。
我正在使用JBoss AS 7.1,JPA 2,EJB 3.1。
提前致谢。 匿名。
答案 0 :(得分:0)
关闭袖带,不确定是否可以使用相同的JPA实体来完成此操作。逻辑可能会非常复杂,您可能希望它驻留在应用程序而不是数据库中。
也就是说,您可以使用装饰器模式,以便服务器/客户端应用程序可以使用相同的核心JPA实体。然后使用特定于服务器的JPA实体来装饰核心实体并保留管理客户端和服务器应用程序之间同步所需的数据。装饰器对象只包含对核心对象的引用。然后,它需要任何数据来促进服务器和客户端之间的数据推送和拉动。
希望这有帮助