Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用EclipseLink的远程客户端JPA延迟加载策略_Jpa_Ejb 3.0_Lazy Loading_Eclipselink - Fatal编程技术网

使用EclipseLink的远程客户端JPA延迟加载策略

使用EclipseLink的远程客户端JPA延迟加载策略,jpa,ejb-3.0,lazy-loading,eclipselink,Jpa,Ejb 3.0,Lazy Loading,Eclipselink,1。问题 客户端延迟加载的已知策略和解决方案是什么? 我正在检查这些东西,但不确定这是否是我问题的解决方案,或者如何使用它 2。用例 我正在开发一个三层应用程序,其中我的表示层(Eclipse RCP)是一个通过网络的远程客户端: [ Eclipse RCP ] <-----(RMI)-----> [ [EJB 3] [JPA 2] [Mysql] ] 嗯,差不多 谢谢您的回答。不要太聪明,假装客户端在服务器上,实体管理器总是打开的。考虑客户机端的域对象,就像您考虑DTOs或JSO

1。问题

客户端延迟加载的已知策略和解决方案是什么? 我正在检查这些东西,但不确定这是否是我问题的解决方案,或者如何使用它

2。用例

我正在开发一个三层应用程序,其中我的表示层(Eclipse RCP)是一个通过网络的远程客户端:

[ Eclipse RCP ] <-----(RMI)-----> [ [EJB 3] [JPA 2] [Mysql] ]
嗯,差不多


谢谢您的回答。

不要太聪明,假装客户端在服务器上,实体管理器总是打开的。考虑客户机端的域对象,就像您考虑DTOs或JSON对象一样:包含来自服务器的一些信息并通过线化的对象。

记录从客户端调用的服务方法(facade方法),以指定哪些关联已初始化,哪些不在返回的实体中。例如,如果您在某个“列表”屏幕上,希望查看列表中某个元素的详细视图,请调用另一个服务,再次从数据库加载实体(从而获得新的结果),并可能初始化其他关联,以便显示有关该实体的更多详细信息


尝试在客户端动态初始化延迟加载的关联是行不通的:它复杂、低效,导致客户端上的图形过时且不连贯,没有考虑事务隔离。

好吧,这似乎是个好主意。这样,我的服务器-客户机通信将得到很好的定义和规划。如果我考虑基于Web服务的客户机-服务器通信,我可能会毫无疑问地想到同样的方法。但在服务器端使用JPA编织似乎非常方便,我也可以从客户端使用类似的方法。是的,但JPA只对连接的实体进行编织,实体通常会在很短的时间内保持连接:事务的持续时间。我认为waving是为了在分离模式下启用延迟加载,例如在从EJB调用返回后在servlet上下文中,但只在同一JVM中。
class CarModelClient {
  CarModel model;

  public String getColor(){
    model.getColor();
  }

  public List<Wheels> getWheels(){
    CarModelFacadeRemote carFacade = //get my remote ejb
    model.setWheels( carFacade.getWheels( model.getId() ) );
    return model.getWheels();
  }

}