Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 使用SOAP的惰性Hibernate JPA_Java_Hibernate_Soap_Jpa - Fatal编程技术网

Java 使用SOAP的惰性Hibernate JPA

Java 使用SOAP的惰性Hibernate JPA,java,hibernate,soap,jpa,Java,Hibernate,Soap,Jpa,我有一堆带注释的、相互关联的POJO,我想通过SOAP创建/修改/搜索它们。我制作了一个实用程序,急切地加载每个POJO的每个细节,并创建一个XML字符串,以便将整个POJO图作为搜索结果发送。尽管图形非常小(少于三个节点),但快速加载花费了很长时间(500ms/节点) 似乎瓶颈是必须对每个节点的整个图形进行处理。是否有可能只是在SOAP上进行延迟加载?还有其他选择吗?可以在SOAP上延迟加载,但这相当复杂。而且它肯定不会更快:-) 基本上,您需要为您的POJO创建代理(使用字节码插装),该代理

我有一堆带注释的、相互关联的POJO,我想通过SOAP创建/修改/搜索它们。我制作了一个实用程序,急切地加载每个POJO的每个细节,并创建一个XML字符串,以便将整个POJO图作为搜索结果发送。尽管图形非常小(少于三个节点),但快速加载花费了很长时间(500ms/节点)


似乎瓶颈是必须对每个节点的整个图形进行处理。是否有可能只是在SOAP上进行延迟加载?还有其他选择吗?

可以在SOAP上延迟加载,但这相当复杂。而且它肯定不会更快:-)

基本上,您需要为您的POJO创建代理(使用字节码插装),该代理将知道如何通过SOAP加载完整对象(或者如果您想达到该级别,则加载其单个属性)。如果这听起来像是重复Hibernate所做的事情,那是因为它是:-) 只有当客户机不太可能访问“远程懒惰”属性时,这种方法才有意义,因为客户机通常会访问这些属性,而且从一开始就急于加载这些属性非常昂贵


另一种可能的方法是向SOAP API调用添加“膨胀级别”参数,类似于SELF(仅限直接属性)/CHILDREN(仅限直接子级)/FULL(完整对象树),这将导致仅初始化适当的属性。这将获得适当膨胀对象的责任委托给客户机(客户机大概知道它需要处理什么)。

可以通过SOAP延迟加载,但这相当复杂。而且它肯定不会更快:-)

基本上,您需要为您的POJO创建代理(使用字节码插装),该代理将知道如何通过SOAP加载完整对象(或者如果您想达到该级别,则加载其单个属性)。如果这听起来像是重复Hibernate所做的事情,那是因为它是:-) 只有当客户机不太可能访问“远程懒惰”属性时,这种方法才有意义,因为客户机通常会访问这些属性,而且从一开始就急于加载这些属性非常昂贵


另一种可能的方法是向SOAP API调用添加“膨胀级别”参数,类似于SELF(仅限直接属性)/CHILDREN(仅限直接子级)/FULL(完整对象树),这将导致仅初始化适当的属性。这就将获取适当膨胀对象的责任委托给了客户机(客户机大概知道它需要处理什么)。

我正在考虑代理方法。你能告诉我一些好的参考资料,或者给出如何使用字节码插装来构建代理的示例代码吗?这听起来像是在hibernate中的某个地方,看看CGlib()或Javassist,它们都有关于动态代理创建的示例。然后,您的代理将需要维护自己的状态(每个实体或每个属性,取决于您想要什么),并在第一次访问时通过回调SOAP服务来填充丢失的数据。您必须在创建代理时向代理提供访问详细信息(URL、凭据等),或者从客户端环境获取这些信息。我正在考虑代理方法。你能告诉我一些好的参考资料,或者给出如何使用字节码插装来构建代理的示例代码吗?这听起来像是在hibernate中的某个地方,看看CGlib()或Javassist,它们都有关于动态代理创建的示例。然后,您的代理将需要维护自己的状态(每个实体或每个属性,取决于您想要什么),并在第一次访问时通过回调SOAP服务来填充丢失的数据。您必须在创建过程中向代理提供访问详细信息(URL、凭据等),或者从客户端环境获取这些信息。