You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by "qq405576297 (GitHub)" <gi...@apache.org> on 2018/10/31 06:35:03 UTC

[GitHub] [incubator-dubbo] qq405576297 opened issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

ORM框架如果开启延迟加载,dubbo服务无法感知远程的consumer层在合适的时机关闭连接,在hibernate中叫session,如果提前关闭连接到导致consumer层抛出 lazy exception之类的异常。
org.hibernate.LazyInitializationException: failed to lazily initialize a collection, could not initialize proxy - no Session
此时,dubbo服务层应该在合适的时机来关闭session的连接,此其一解决方式。在dubbo框架中应该如何来做呢?请指教.
关闭延迟策略,很多人应该会想到这个方案,但选择用ORM框架 应该结合其优点。而这种方案是在避开问题!
使用JPA 开启延迟策略,也会有同样的问题。
往大神指教策略,谢谢~~~

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org

[GitHub] [incubator-dubbo] kingcode100 commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "kingcode100 (GitHub)" <gi...@apache.org>.
> @ qq405576297 no session问题体现出的是业务架构分层涉及的一个典型问题,不是个例.dubbo服务框架解决问题不涉及到ORM框架,所以这个问题不属于dubbo需要解决的问题范畴。这里我给出一个工程上的最佳实践,ORM框架处理的实体是数据库DO对象,而dubbo传输的是DTO对象,你所要做的是在业务层将数据库的DO对象转换成DTO对象,由于是你自己的service,所以不存在session关闭的问题,对于DTO对象,是不存在懒加载的问题的。
> 
> 作为实验性质的解决方案,注意,这可以解决你没有会议的问题,但不被推荐,你可以自定义dubbo filter,手动操控spring的TransactionMananger,打开事务,可以“解决”你的问题。

如果在被dubbo调用的方法上已经有了事务,那么无论在Filter中怎么操作TransactionMananger都没效果(还是会有懒加载问题),至少我测试是这样的。如果是我的方式不对,希望可以给一个有测试过的,demo或关键代码。

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org

[GitHub] [incubator-dubbo] qq405576297 commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "qq405576297 (GitHub)" <gi...@apache.org>.
> 
> 
> @qq405576297 使用哪个dubbo版本? 试过dubbo2.6.3没有?



[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org

[GitHub] [incubator-dubbo] beiwei30 commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "beiwei30 (GitHub)" <gi...@apache.org>.
I believe this particular issue is irrelevant to Dubbo.

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org


[GitHub] [incubator-dubbo] qq405576297 commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "qq405576297 (GitHub)" <gi...@apache.org>.
dubbo版本2.5.3


[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org

[GitHub] [incubator-dubbo] kingcode100 commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "kingcode100 (GitHub)" <gi...@apache.org>.
> @ qq405576297 no session问题体现出的是业务架构分层涉及的一个典型问题,不是个例.dubbo服务框架解决问题不涉及到ORM框架,所以这个问题不属于dubbo需要解决的问题范畴。这里我给出一个工程上的最佳实践,ORM框架处理的实体是数据库DO对象,而dubbo传输的是DTO对象,你所要做的是在业务层将数据库的DO对象转换成DTO对象,由于是你自己的service,所以不存在session关闭的问题,对于DTO对象,是不存在懒加载的问题的。
> 
> 作为实验性质的解决方案,注意,这可以解决你没有会议的问题,但不被推荐,你可以自定义dubbo filter,手动操控spring的TransactionMananger,打开事务,可以“解决”你的问题。

如果在被dubbo调用的方法上已经有了事务,那么无论在Filter中怎么操作TransactionMananger都没效果(还是会有懒加载问题),至少我测试是这样的。如果有是我的方式不对,希望可以给一个有测试过的,dmoe或关键代码。

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org

[GitHub] [incubator-dubbo] qq405576297 commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "qq405576297 (GitHub)" <gi...@apache.org>.
up.

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for devnull@infra.apache.org

[GitHub] [incubator-dubbo] lexburner commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "lexburner (GitHub)" <gi...@apache.org>.
@qq405576297 dubbo 服务框架解决的问题不涉及到 ORM 框架,所以这个问题不属于 dubbo 需要解决的问题范畴。这里我给我工程上的最佳实践,ORM 框架处理的实体是数据库 DO 对象,而 dubbo 传输的是 DTO 对象,你所要做的是在业务层将数据库的 DO 对象转换成 DTO 对象,由于是你自己的 service,所以不存在 session 关闭的问题,对于 DTO 对象,是不存在懒加载的问题的。

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org

[GitHub] [incubator-dubbo] kingcode100 commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "kingcode100 (GitHub)" <gi...@apache.org>.
> @ qq405576297 no session问题体现出的是业务架构分层涉及的一个典型问题,不是个例.dubbo服务框架解决问题不涉及到ORM框架,所以这个问题不属于dubbo需要解决的问题范畴。这里我给出一个工程上的最佳实践,ORM框架处理的实体是数据库DO对象,而dubbo传输的是DTO对象,你所要做的是在业务层将数据库的DO对象转换成DTO对象,由于是你自己的service,所以不存在session关闭的问题,对于DTO对象,是不存在懒加载的问题的。
> 
> 作为实验性质的解决方案,注意,这可以解决你没有会议的问题,但不被推荐,你可以自定义dubbo filter,手动操控spring的TransactionMananger,打开事务,可以“解决”你的问题。

如果在被dubbo调用的方法上已经有了事务,那么无论在Filter中怎么操作TransactionMananger都没效果(还是会有懒加载问题),至少我测试是这样的。如果是我的方式不对,希望可以给一个有测试过的,dmoe或关键代码。

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org

[GitHub] [incubator-dubbo] lexburner commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "lexburner (GitHub)" <gi...@apache.org>.
@qq405576297 no session 问题体现出的是业务架构分层涉及的一个典型问题,不是个例。dubbo 服务框架解决的问题不涉及到 ORM 框架,所以这个问题不属于 dubbo 需要解决的问题范畴。这里我给出一个工程上的最佳实践,ORM 框架处理的实体是数据库 DO 对象,而 dubbo 传输的是 DTO 对象,你所要做的是在业务层将数据库的 DO 对象转换成 DTO 对象,由于是你自己的 service,所以不存在 session 关闭的问题,对于 DTO 对象,是不存在懒加载的问题的。

作为实验性质的解决方案,注意,这可以解决你 no session 的问题,但不被推荐,你可以自定义 dubbo filter,手动操控 spring 的 TransactionMananger,打开事务,可以“解决”你的问题。

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org

[GitHub] [incubator-dubbo] qq405576297 closed issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "qq405576297 (GitHub)" <gi...@apache.org>.
[ issue closed by qq405576297 ]

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org


[GitHub] [incubator-dubbo] zonghaishang commented on issue #2549: hibernate开启延迟加载,远程调用抛出failed to lazily initialize a collection, could not initialize proxy - no Session

Posted by "zonghaishang (GitHub)" <gi...@apache.org>.
@qq405576297 使用哪个dubbo版本? 试过dubbo2.6.3没有?

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2549 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org