项目要求集成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(Service Component Architecture)是一个开源项目,由Apache软件基金会维护,它提供了一个框架和中间件,用于构建、部署和管理分布式应用程序。SCA是一种标准,旨在简化服务导向架构(SOA)的...
Apache Tuscany是Apache软件基金会的一个开源项目,它实现了Service Component Architecture(SCA,服务组件架构),这是一种用于构建和集成分布式应用程序的规范。这个实例可能是关于如何使用Apache Tuscany来开发...
在这个实例中,我们将探讨如何将Tuscany SCA与两大主流框架——**Spring**和**Hibernate**进行整合,以实现更加简洁高效的应用开发。 **Spring框架**是Java领域最知名的依赖注入(DI)和面向切面编程(AOP)框架之...
在本资料“SCA_Spring.rar”中,我们将探讨如何利用Spring框架来实现SCA规范。 **SCA与SOA的关系** SCA是SOA(Service-Oriented Architecture,面向服务架构)的一个实现规范。SOA是一种设计原则,它提倡以服务为...
根据提供的文件信息,本文将详细解析Tuscany与Spring、Axis整合的相关知识点,以及如何解决在整合过程中可能遇到的jar包冲突问题。 ### Tuscany简介 Tuscany项目是Apache软件基金会的一个顶级项目,专注于提供一个...
利用连续凸逼近(SCA)优化D2D对和CU用户的功率,使得D2D对的速率和最大,同时满足CU的速率要求
`sca.doc`文件可能是Apache Tuscany SCA的用户指南,其中可能包含以下内容: 1. SCA的基本概念和原理介绍。 2. 如何创建和配置SCA组件,包括定义接口、服务和引用。 3. 使用Tuscany开发工具创建和管理SCA项目的方法...
Fortify SCA的工作原理主要基于静态分析技术,它不需要执行代码就能对源代码进行深度检查,识别出潜在的不安全编程实践、漏洞和反模式。这与动态分析(运行时分析)相比,具有更快、更全面的优点,因为动态分析可能...
### SOA SCA服务构件架构Spring构件实现方案 #### 一、引言 随着企业级应用的日益复杂,传统的单体应用已经难以满足快速变化的业务需求。面向服务的架构(SOA)作为一种灵活的服务组织方式,通过将复杂的业务功能...
此外,书中还可能涵盖了SCA的工具支持,如Apache Tuscany、Oracle SOA Suite等,以及如何与其他企业服务总线(ESB)和SOA框架集成。SCA的标准化特性使其具有跨平台和跨厂商的互操作性,这在大型企业系统集成中尤其...
Tuscany SCA(Service Component Architecture)是由Apache软件基金会所提供的一个开源框架,用于实现服务组件架构。它支持SCA规范,能够简化服务的部署、管理和交互。Tuscany SCA框架可以帮助开发者快速构建和部署...
Fortify SCA(Software Composition Analysis)是一款强大的静态代码分析工具,用于在软件开发过程中发现潜在的安全漏洞和质量缺陷。2020年的“fortify SCA最新rules.7z”压缩包包含了最新的规则集,这些规则是针对...
在地质学和地球物理学领域,SCA(Statistical Continuum Approximation,统计连续体近似)和DEM(Discrete Element Method,离散元方法)是两种广泛使用的数值模拟技术,它们在岩石物理研究中占据着重要的地位。...
Tuscany源码的分析有助于深入理解SCA的工作原理以及如何在实际开发中应用这一框架。 SCA的核心概念包括组件、服务、绑定和配置。组件是应用程序的基本单元,可以提供或消费服务。服务是组件对外提供的接口,供其他...
变频器说明书大全系列-SCA-05.rar是一个压缩包文件,包含了关于变频器的详细使用手册,主要文件为SCA-05.pdf。变频器是一种电力控制设备,能够改变交流电机供电频率,从而调整电机转速,广泛应用于工业自动化领域。...
《Tuscany SCA在行动》一书深入探讨了Service Component Architecture(SCA)与Apache Tuscany项目,这是IT领域内对服务组件架构及其实现的重要研究资料。以下是基于标题、描述、部分目录和标签生成的相关IT知识点:...
根据提供的文件信息,SCA103T系列是Murata公司生产的一系列基于3D-MEMS技术的高精度双轴倾角传感器芯片。下面详细说明这个系列传感器的特点和应用。 知识点一:MEMS技术和倾角传感器 MEMS(Micro-Electro-...
通过深入研究这些源码,开发者可以学习到如何定义、实现、部署和管理SCA组件,理解服务之间的交互方式,以及如何利用Tuscany的API和工具提高开发效率。这将有助于提升开发者在分布式系统设计和实现方面的专业技能。