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
Java 是JPA+;EJB对于Internet上的事务来说太慢(或太重)?_Java_Jpa_Ejb_Vpn - Fatal编程技术网

Java 是JPA+;EJB对于Internet上的事务来说太慢(或太重)?

Java 是JPA+;EJB对于Internet上的事务来说太慢(或太重)?,java,jpa,ejb,vpn,Java,Jpa,Ejb,Vpn,我正在开发一个独立的java客户端应用程序,该应用程序连接到Glassfish v3应用程序,用于JPA/EJB facade样式的事务。换句话说,我的客户机应用程序不直接连接到CRUD的数据库,但它使用EJB无状态会话传输JPA对象 我有这样的场景:这个客户端应用程序将用于通过Internet与VPN连接的外部网络,客户端连接为512kbp/DSL,一个简单的查询花费了很多时间,我看到了流量图,当我在客户端应用程序中合并一个实体时,我看到了兆字节的流量(我无法相信一个采购订单实体的重量会超过1

我正在开发一个独立的java客户端应用程序,该应用程序连接到Glassfish v3应用程序,用于JPA/EJB facade样式的事务。换句话说,我的客户机应用程序不直接连接到CRUD的数据库,但它使用EJB无状态会话传输JPA对象

我有这样的场景:这个客户端应用程序将用于通过Internet与VPN连接的外部网络,客户端连接为512kbp/DSL,一个简单的查询花费了很多时间,我看到了流量图,当我在客户端应用程序中合并一个实体时,我看到了兆字节的流量(我无法相信一个采购订单实体的重量会超过1MB)

我几乎每个多对多关系都有惰性获取,但实体之间有很多多对一关系(但这是JPA的最大优势!)

我能做些什么来加快JPA/EJB服务器和远程java客户机之间的事务处理速度吗


提前谢谢。

您真正传输了多少数据?可能您发送的采购订单有一个产品,有一个型号,有一个供应商,有一组型号…等等

您可以尝试将发送到服务器的对象序列化为一个文件(使用标准的ObjectOutputStrem),并检查该文件有多大

我在看交通图,什么时候 我在客户机中合并一个实体 应用程序我看到兆字节的流量 (我简直不敢相信一次购买 订单实体的权重不能超过1 mb)

RMI-IIOP比普通的RMI要详细一点。根据我的经验,在传输大型图时,它不能很好地工作

到目前为止,我还记得(但可能在此期间情况发生了变化),当您传输延迟加载的实体时,尚未加载的部分将按原样发送(代理被序列化),这意味着您无法在客户端上访问它们,因为如果没有会话,延迟加载将不起作用。您是否渴望在将实体发送回客户端之前加载该实体

我能做点什么来加快速度吗 之间的事务处理速度 JPA/EJB服务器与远程java 客户

但问题的关键在于,您需要考虑传输数据的策略。您必须设计一种不会发送大型图形的应用程序;在设计应用程序时必须解决这一问题。然后您可以决定仍然发送JPA实体或依赖数据传输对象(DTO)


你也可以考虑使用有状态会话bean的扩展持久化上下文,这样我认为客户端上的一个实体仍然可以被加载懒惰。但是我从来没有亲自使用过它,也不知道它是否工作得好。

< P>如果我正确地理解了你的体系结构,你就有:

 Client(works with disconnected Entities)  
            ----RMI/IIOP--->
 Server(SLSB, using entitiy manager, JPA persistence) 
            ----JDBC------->
 Database
实际上,您的SLSB是用JPA对象来表达其接口,您的DTO是JPA对象。我看到两种可能的情况:

  • 您的客户只需要JPA对象中的一部分数据,而您传输的数据比实际需要的要多。例如,您可能只需要一名员工的姓名,就可以发送他的整个生活史
  • 你穿越的关系树比你想象的要多
  • 我的感觉是,你应该首先准确地确定你在客户机中得到了什么。添加一些跟踪语句来准确地查看你拥有的数据应该很容易

    可能通过调整延迟加载等,您可以控制行为

    我的期望是,您可能需要定义特定于客户端的“子集”DTO,让您的SLSB更像一个门面,只发送子集数据。这需要更多的工作,但您可以很好地控制接口中的内容

    从架构上来说,微调远程接口是一件非常合理的事情

    我能做些什么来加快JPA/EJB服务器和远程java客户机之间的事务处理速度吗

    你不能加快速度。但是,你可以转移更少的东西(只有需要的部分或更轻的物体)