没有合适的资源?快使用搜索试试~ 我知道了~
首页Flex 与 Hibernate 的延迟加载问题
资源详情
资源评论
资源推荐
梦想成就未来 java 学习笔记 作者:李辉
解决 Flex+Hibernate 的延迟加载问题
、 基于 与 开发的, 解决简单汇总
这个问题相信尝试过 Flex+hibernate 的朋友都不幸遇到过,我在网上找了大量的解决方案
1. LCDS 的 Hibernate Adapter
2. dpHibernate+BlazeDS
3. DTO 模式
4. 外部序列化
5. Aop 拦截查询方法,隔除 lazy 属性
6. Gilead
7. GraniteDS
8. Pimento
9. 改 Blazeds 源码
前两个大家可以去看看 Flex 360 的这个视频,有很详细的描述
http://www.onflex.org/ted/2008/09/360flex-sj-2008-flex-persistence-with.php
自己也尝试过,第一种配置上太麻烦了,你的 DTO 一旦多起来将是异常噩梦,而且还是收费的,实际基本不考虑用。
第二种基本的延迟加载功能还是有的,不过就是不能和 Spring 良好集成,我是用的 Spring BlazeDS Integration 整合
的,dpHibernate 没法整进去,而且他的实现本身就有问题,查询的时候是延迟加载没错,如果你的 DTO 里有集合属性,
他直接把 Hibernate 的延迟处理以后的集合 Proxy 给你送到 BlazeDS 那边儿去,可 BlazeDS 并不认识 Hibernate 的集合
Proxy,也就是说转成的 AS 对象里没有这些 Proxy 的定义,这样一来当 BlazeDS 把这样的集合再传回到 java 端,
Hibernate 看到的集合就是一个空的 Set,这样 Hibernate 会认为你希望把这个关联集合中的数据全部删除!
至于 graniteDS 我看到一个 flexCMS 系统 Igenko 就是用的这个,支持延迟加载,不过不是 adobe 官方的,而且这个
项目的开发者好像要把它贡献给 BlazeDS 的样子,所以不敢再用。
最终结果还是 Gilead 比较合适。Gilead 允许你轻松的在 Java 虚拟机环境外的环境(例如 GWT、Flex、XML)使用
Hibernate 的 POJO,没有延迟初始化或系列化例外,只是 POJO 和域驱动的设计。但是,这种方式的缺陷就是 jar 太多。
一个完整的 Gilead 配置需要服务器端添加 8 个 jar 包,共 1.05M。
/
梦想成就未来 java 学习笔记 作者:李辉
dpHibernate 是 Flex3/BlazeDS Hibernate Adapter 用于支持从 Flex 应用程序中懒加 hibernate 对象。
基本的延迟加载功能还是有的,不过就是不能和 Spring 良好集成,我是用的 Spring BlazeDS Integration 整合的,
dphibernate 没法整进去,而且他的实现本身就有问题,查询的时候是延迟加载没错,如果你的 DTO 里有集合属性,他直
接把 Hibernate 的延迟处理以后的集合 Proxy 给你送到 BlazeDS 那边儿去,可 BlazeDS 并不认识 Hibernate 的集合
Proxy,也就是说转成的 AS 对象里没有这些 Proxy 的定义,这样一来当 BlazeDS 把这样的集合再传回到 java 端,
Hibernate 看到的集合就是一个空的 Set,这样 Hibernate 会认为你希望把这个关联集合中的数据全部删除!
【按照以下配置没有配置成功,其中提示没有 getConnect,但是文档后续的 dpHibernate 是官方的实例】
【网上没有找到相关详细的配置信息】
dpHibernate 配置:
1. 服务器端添加 dpHibernate1.0.17.jar、org.springframework.flex-1.0.1.RELEASE.jar、jackson-core-asl-1.3.0.jar
2. flex 端添加 dpHibernate1.0.1.swc
3. 修改 web.xml
<filter>
<filter-name>hibernateSessionFilter</filter-name>
<filter-class>
net.digitalprimates.persistence.hibernate.utils.filters.HibernateSessionServletFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateSessionFilter</filter-name>
<url-pattern>/messagebroker/*</url-pattern>
</filter-mapping>
4. 修改 spring 配置文件中 sessionFactory 对 hibernateProperties 的引用,添加
<!-- dpHibernate处理延迟加载问题:将Session和Transaction进行绑定 -->
<prop key="hibernate.current_session_context_class">
thread
</prop>
5. 修改 remoting-config.xml 中的<adapters>
<adapters>
<!--
<adapter-definition id="java-object"
class="flex.messaging.services.remoting.adapters.JavaAdapter"
default="true" />
-->
<!-- dpHibernate处理延迟加载问题 -->
/
梦想成就未来 java 学习笔记 作者:李辉
<adapter-definition id="hibernate-object"
class="net.digitalprimates.persistence.hibernate.HibernateAdapter"
default="true">
<properties>
<hibernate>
<sessionFactory>
<class>
net.digitalprimates.persistence.hibernate.utils.HibernateUtil
</class>
<getCurrentSessionMethod>
getCurrentSession
</getCurrentSessionMethod>
</sessionFactory>
</hibernate>
</properties>
</adapter-definition>
</adapters>
6. 在 remoting-config.xml 中配置 spring 时,修改如下
<!-- 用户管理service -->
<destination id="userServiceProxy">
<properties>
<factory>spring</factory><!-- 必须指定spring为factory -->
<source>userServiceProxy</source><!-- applicationContext.xml中配置的业务层 -->
<!-- dpHibernate处理延迟加载问题 -->
<hibernate>
<!--
//the name of the method in this class which follows the hibernate
//load(Class, id) argument signature.
-->
<loadMethod>load</loadMethod>
</hibernate>
</properties>
</destination>
7. 修改 spring 的配置文件添加:
<!-- dpHibernate处理延迟加载问题 -->
<flex:message-broker>
<flex:remoting-service
default-adapter-id="hibernate-lazy-adapter" />
</flex:message-broker>
<bean id="hibernate-lazy-adapter"
class="org.springframework.flex.core.ManageableComponentFactoryBean">
<constructor-arg
value="net.digitalprimates.persistence.hibernate.HibernateAdapter"/>
<property name="properties">
/
梦想成就未来 java 学习笔记 作者:李辉
<value>
{
"hibernate":
{
"sessionFactory":
{
"class":"net.digitalprimates.persistence.hibernate.utils.SpringSessionUtil",
"getCurrentSessionMethod":"getCurrentSession"
}
}
}
</value>
</property>
</bean>
【注意修改 spring 文件头,添加 flex 标记,这里是 spring2.5】
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:flex="http://www.springframework.org/schema/flex"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/flex
http://www.springframework.org/schema/flex/spring-flex-1.0.xsd
">
8. 在 spring 中,对 blazeds 要调用的 service 添加定义
【与 remoting-config.xml 中的 destination 是一个意思,在 remoting-config.xml 配置了,这里就不需要配置了】
<flex:remoting-destination ref="storeService"
service-adapter="hibernate-lazy-adapter" />
9. 在服务端,每个 POJO 必需要继承 digitalprimates 包中的 HibernateProxy,或者实现 IHibernateProxy 接口
import net.digitalprimates.persistence.hibernate.proxy.HibernateProxy;
public class UserObj extends HibernateProxy implements Serializable {
private static final long serialVersionUID = 2565796075536001655L;
/
梦想成就未来 java 学习笔记 作者:李辉
10. 在 flex 的 model 类必需要继承 digitalprimates 包中的 HibernateProxy,或者实现 IHibernateProxy 接口
package model.beans
{
import mx.collections.ArrayCollection;
import net.digitalprimates.persistence.hibernate.HibernateBean;
[RemoteClass(alias="net.digitalprimates.samples.sample1.beans.User")]
[Managed]
public class User extends HibernateBean
{
public var id:String;
public var firstName:String;
public var lastName:String;
public var addresses:ArrayCollection;
public var connectInfo:UserConnectInfo;
}
}
dpHibernate 官方实例:
!"#$%&
package com.cjt.utils.hibernate;
import org.hibernate.FlushMode;
' /
剩余42页未读,继续阅读
寻梦
- 粉丝: 14
- 资源: 56
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2022年中国足球球迷营销价值报告.pdf
- 房地产培训 -营销总每天在干嘛.pptx
- 黄色简约实用介绍_汇报PPT模板.pptx
- 嵌入式系统原理及应用:第三章 ARM编程简介_3.pdf
- 多媒体应用系统.pptx
- 黄灰配色简约设计精美大气商务汇报PPT模板.pptx
- 用matlab绘制差分方程Z变换-反变换-zplane-residuez-tf2zp-zp2tf-tf2sos-sos2tf-幅相频谱等等.docx
- 网络营销策略-网络营销团队的建立.docx
- 电子商务示范企业申请报告.doc
- 淡雅灰低面风背景完整框架创业商业计划书PPT模板.pptx
- 计算模型与算法技术:10-Iterative Improvement.ppt
- 计算模型与算法技术:9-Greedy Technique.ppt
- 计算模型与算法技术:6-Transform-and-Conquer.ppt
- 云服务安全风险分析研究.pdf
- 软件工程笔记(完整版).doc
- 电子商务网项目实例规划书.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0