ImageVerifierCode 换一换
格式:DOC , 页数:4 ,大小:28KB ,
资源ID:6810399      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6810399.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(lcds spring 整合.doc)为本站会员(yjrm16270)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

lcds spring 整合.doc

1、想知道这个原理先要从事务概念说起了我们将一组有业务逻辑,原子性不可分离的操作集合称为事务,因此事务的要素就是有一个开始和结束,如果没有成功的到达结束点,那么中间做的所有操作将会被认为是一个无效的操作(取消或者回滚)。在业务逻辑中,我们常常会定义某些 service 做一些局部性操作,在业务层再将他们组合起来定义成某一个事务方法,成为一个有业务逻辑的操作,如果不采用事务控制,那么势必一个事务方法的开头和结尾必须写上,startTransaction 和 commitTransaction 这样的语句。这样也未尝不可,但是如果一个庞大的项目,对于开发人员来说,有时候没必要让其充分了解业务上的事务操

2、作,甚至在有些情况下,他根本不能掌握一些和事务类似需要被控制的状态,典型的比如持久层的访问状态。这些重复的、有规律的、无需人为或业务类来控制的、甚至是人难以掌握的,可以交给系统框架来处理。事务管理就是利用了 aop,当你注册某一个类交由事务管理器去管理时(拦截器),他会在调用你注入的方法之前切入一个 start 标记,在调用完成后切入一个 end 标记,之间的方法他可以 try 起来,这样当成功执行到 end 时,就会执行事务提交。同样的道理,这种 aop 还可以应用于任何框架设计上,比如对于操作记录的 log,权限的控制、dto、数据序列化转换、通讯控制等等上去,即在你注册的切入点就执行你定

3、义的操作(拦截器)。这就是 spring 的 ioc。刚是说的 aop 设计上的原理,底层是如何实现的每种 aop 应用都有不同,就拿 spring 来说,他是针对 class 文件字节码来操作的,实际上,你写的代码在注入之后,spring 就会根据你注入的信息,去找对应的类的字节码文件,并进行修改,重新生成新的 class 文件。这样来说就有点类似 hack 行为,但是由于这个技术很成熟,且很早被人所接受,这种 hack 行为也被证实为是一种非常独到的程序设计。原理说清楚后,再来理解你使用 jotm 就不难了,当你定义了事务工厂类之后,就可以通过spring 是委派了一个事务管理器,在你的代

4、码中这个事务管理器就是 org.objectweb.jotm.UserTransactionFactory,spring 会将该类管理事务的方法切入进你注入的类,去执行 hack 操作,将你注入的类的方法前打上 start 和 end 标记方法,当执行被注入方法成功时,最终执行该事务管理器中的事务提交方法。因此你的问题,你问是谁调用了他,实际就是你自己注入的类调用了他。那么再看你遇到的问题,根源在于,spring 和 fms 都是采用了 aop 拦截机制的,fms 的 aop 应用于我刚才说到的“远程调用和数据序列化转换”。1.远程调用:通过一个 messagebreak 监听所有的请求,当

5、remoteobject 请求某个 java 远程方法时,messagebreak 就会去直接执行 java 里的 remoteobject2.数据序列化:他将你方法返回的 java 数据对象,转换成 amf 协议里的二进制数据并 return 出来,最终输出。再来说 spring,刚刚说到,你委派了一个事务工厂去管理事务,但是,哪些 bean 需要被注入呢?空头司令可是没什么价值的。实际上,springframework 将这一系列的“增值服务”封装进自己的 bean 里去了,也就是为什么,在 spring 容器里需要 getbean 来获得一个实例,而不要自己去 new,这样,就能跟这个对

6、象去增加很多“增值服务”。在你替 spring 指派了 transactionmanager 后,还需要让 spring 给他可以管理的对象,这样才能让你的类享受增值服务。然而,你现在整合两套独立的 aop 框架,fms 的 aop 可以不用理会 spring 的 aop,独自切入,这样就导致,spring 虽然给你的 class 打上了 start 或者 end 的标记,但是这个 bean并没有从 spring 容器中产生,而是由 fms 的 messagebroker 去 new 出来的,导致不能享受“增值服务”,说白了, TrasnactionManager 必须被 spring 调用,

7、比如他给这个 manager 设置了某些参数。而 fms 得到的 bean 不是由 spring 容器里的,自然就无法享受“增值服务”了。问题找到了,但是如何解决呢?在 remote-config.xml 配置里,映射一个 java 对象是这么写的CODE:com.test.service.userService如果这样,userService 就会直接被 ro 访问,从而脱离 spring 容器。如果你要对某个 java 类实现自己定义的切入,你可以使用工厂配置,即我需要在 ro 访问前,从 spring 里去 getbean那么就可以这么改一下CODE:springFactorycom.t

8、est.service.userService这个 springFactory 是在 service-config.xml 里配置的,CODE:这样,就定义了一个 SpringFactory 类去执行在 userService 切入之前的操作,即,我们要实现从从 spring 容器中去取得 bean。该 factory 需要实现 FlexFactory 接口。实现 createFactoryInstance 方法和 lookup 方法CODE:public FactoryInstance createFactoryInstance(String id, ConfigMap properties

9、)SpringFactoryInstance instance = new SpringFactoryInstance(this, id, properties);instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId();return instance;public Object lookup(FactoryInstance inst) SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;return factoryI

10、nstance.lookup();createFactoryInstance 方法中用到了一个 SpringFactoryInstance ,他是继承自 FactoryInstance 的CODE:class SpringFactoryInstance extends FactoryInstanceSpringFactoryInstance(SpringFactory factory, String id, ConfigMap properties)super(factory, id, properties);public Object lookup()/这就是从 spring 容器中 get

11、bean 了ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext();String beanName = getSource();tryreturn appContext.getBean(beanName);catch (NoSuchBeanDefinitionException nexc)ServiceException e = new ServiceException();throw e;catch (BeansException bexc)ServiceException e = new ServiceException();throw e;这样,访问 ro 时,就会通过工厂模式去从 spring 容器中 getBean 了

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报