`
budairenqin
  • 浏览: 201777 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SCA(Tuscany) implementation.spring 源码分析

阅读更多
项目要求集成SCA(Tuscany),还要结合Spring使用(把Spring容器管理的ServiceBean公开为SCA服务),问题是SCA有自己独立的容器,直接访问Spring容器内部的Beans比较困难,因为它们不在同一容器内。所以简单研究了下代码,改一下Tuscany源码,直接访问Spring容器中的Beans,这样的话 事务包装 也可以直接通过Spring解决了

图:


修改的源码片段:
org.apache.tuscany.sca.implementation.spring.runtime.context
...
public SpringContextTie(SpringImplementationStub implementation, List<URL> resource, boolean annotationSupport, String versionSupported) throws Exception {
...
        // edit by fengjc
//        springContext = createApplicationContext(scaParentContext, resource);
        springContext = (AbstractApplicationContext) org.springframework.web.context.ContextLoader.getCtx();
        // end
    }


或许改源码不是好的解决方式,但是项目需求就这样,没办法,暂时找不到更好的解决办法
另外,在Tuscany中取得ApplicationContext的代码:
org.springframework.web.context.ContextLoader.getCtx();

也是修改了Spring的ContextLoader.java的代码
getCtx()返回ApplicationContext的引用,罪过,这块不是我改的,我实在觉得改源码不好

补充:修改org.apache.tuscany.sca.implementation.spring.invocation.SpringInvoker
中的如下代码可以生成class文件(只适合JDK Proxy的情况),使用反编译软件查看Spring生成的代理类
    // Lazy-load the method to avoid timing problems with the Spring Context
    private void setupMethod() throws SpringInvocationException{
        try {
            bean = springContext.getBean(beanElement.getId());
            // add by fengjc for test
            {
                byte[] proxyClassFile = sun.misc.ProxyGenerator.generateProxyClass(
                        bean.getClass().getName(),
                        bean.getClass().getInterfaces());
                
                System.out.println(bean.getClass().getName());
                try {
                    FileOutputStream fos = new FileOutputStream(new File(bean.getClass().getName() + ".class"));
                    fos.write(proxyClassFile, 0, proxyClassFile.length);
                    fos.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // end
            Class<?> beanClass = bean.getClass();

如果Spring是使用CGLIB生成的代理类,请参考CGLIB源码,net.sf.cglib.core.AbstractClassGenerator类中的如下代码:
byte[] b = strategy.generate(this);
  
  • 大小: 103.9 KB
分享到:
评论

相关推荐

    apache-tuscany-sca-1.6.zip

    Apache Tuscany SCA(Service Component Architecture)是一个开源项目,由Apache软件基金会维护,它提供了一个框架和中间件,用于构建、部署和管理分布式应用程序。SCA是一种标准,旨在简化服务导向架构(SOA)的...

    Apache tuscany SCA实例

    Apache Tuscany是Apache软件基金会的一个开源项目,它实现了Service Component Architecture(SCA,服务组件架构),这是一种用于构建和集成分布式应用程序的规范。这个实例可能是关于如何使用Apache Tuscany来开发...

    Tuscany SCA与Spring、Hibernate整合实例-简洁方法

    在这个实例中,我们将探讨如何将Tuscany SCA与两大主流框架——**Spring**和**Hibernate**进行整合,以实现更加简洁高效的应用开发。 **Spring框架**是Java领域最知名的依赖注入(DI)和面向切面编程(AOP)框架之...

    SCA_Spring.rar_SCA_SOA_SOA JAVA _java soa

    在本资料“SCA_Spring.rar”中,我们将探讨如何利用Spring框架来实现SCA规范。 **SCA与SOA的关系** SCA是SOA(Service-Oriented Architecture,面向服务架构)的一个实现规范。SOA是一种设计原则,它提倡以服务为...

    是tuscany与spring,axis整合所有的jar包,已解决冲突问题。

    根据提供的文件信息,本文将详细解析Tuscany与Spring、Axis整合的相关知识点,以及如何解决在整合过程中可能遇到的jar包冲突问题。 ### Tuscany简介 Tuscany项目是Apache软件基金会的一个顶级项目,专注于提供一个...

    SCA_PowerAllocation.m SCA算法matlab代码

    利用连续凸逼近(SCA)优化D2D对和CU用户的功率,使得D2D对的速率和最大,同时满足CU的速率要求

    sca.rar_SCA_tuscany

    `sca.doc`文件可能是Apache Tuscany SCA的用户指南,其中可能包含以下内容: 1. SCA的基本概念和原理介绍。 2. 如何创建和配置SCA组件,包括定义接口、服务和引用。 3. 使用Tuscany开发工具创建和管理SCA项目的方法...

    2020年fortify SCA最新rules.zip

    Fortify SCA的工作原理主要基于静态分析技术,它不需要执行代码就能对源代码进行深度检查,识别出潜在的不安全编程实践、漏洞和反模式。这与动态分析(运行时分析)相比,具有更快、更全面的优点,因为动态分析可能...

    soa sca服务构件架构spring构件实现方案

    ### SOA SCA服务构件架构Spring构件实现方案 #### 一、引言 随着企业级应用的日益复杂,传统的单体应用已经难以满足快速变化的业务需求。面向服务的架构(SOA)作为一种灵活的服务组织方式,通过将复杂的业务功能...

    Addison.Wesley.Understanding.SCA.Service.Component.Architecture.Jun.2009.rar

    此外,书中还可能涵盖了SCA的工具支持,如Apache Tuscany、Oracle SOA Suite等,以及如何与其他企业服务总线(ESB)和SOA框架集成。SCA的标准化特性使其具有跨平台和跨厂商的互操作性,这在大型企业系统集成中尤其...

    基于Tuscany SCA的分布式SCA应用的设计与实现.pdf

    Tuscany SCA(Service Component Architecture)是由Apache软件基金会所提供的一个开源框架,用于实现服务组件架构。它支持SCA规范,能够简化服务的部署、管理和交互。Tuscany SCA框架可以帮助开发者快速构建和部署...

    2020年fortify SCA最新rules.7z

    Fortify SCA(Software Composition Analysis)是一款强大的静态代码分析工具,用于在软件开发过程中发现潜在的安全漏洞和质量缺陷。2020年的“fortify SCA最新rules.7z”压缩包包含了最新的规则集,这些规则是针对...

    SCA and DEM.zip_DEM模型_sca_dem_各向异性_各向异性SCA_岩石物理

    在地质学和地球物理学领域,SCA(Statistical Continuum Approximation,统计连续体近似)和DEM(Discrete Element Method,离散元方法)是两种广泛使用的数值模拟技术,它们在岩石物理研究中占据着重要的地位。...

    apaceh -TUSCANY 源码

    Tuscany源码的分析有助于深入理解SCA的工作原理以及如何在实际开发中应用这一框架。 SCA的核心概念包括组件、服务、绑定和配置。组件是应用程序的基本单元,可以提供或消费服务。服务是组件对外提供的接口,供其他...

    变频器说明书大全系列-SCA-05.rar

    变频器说明书大全系列-SCA-05.rar是一个压缩包文件,包含了关于变频器的详细使用手册,主要文件为SCA-05.pdf。变频器是一种电力控制设备,能够改变交流电机供电频率,从而调整电机转速,广泛应用于工业自动化领域。...

    Tuscany SCA in Action

    《Tuscany SCA在行动》一书深入探讨了Service Component Architecture(SCA)与Apache Tuscany项目,这是IT领域内对服务组件架构及其实现的重要研究资料。以下是基于标题、描述、部分目录和标签生成的相关IT知识点:...

    sca103t.pdf

    根据提供的文件信息,SCA103T系列是Murata公司生产的一系列基于3D-MEMS技术的高精度双轴倾角传感器芯片。下面详细说明这个系列传感器的特点和应用。 知识点一:MEMS技术和倾角传感器 MEMS(Micro-Electro-...

    apache-tuscany-sca-1.6.2

    通过深入研究这些源码,开发者可以学习到如何定义、实现、部署和管理SCA组件,理解服务之间的交互方式,以及如何利用Tuscany的API和工具提高开发效率。这将有助于提升开发者在分布式系统设计和实现方面的专业技能。

Global site tag (gtag.js) - Google Analytics