您是否曾经想过,为什么大多数Java框架中的依赖项注入仅用于本地进程内服务而不是分布式服务?

我最近在2013年EMC世界大会上遇到了Paul Maritz的主题演讲 (跳至第32分钟),这使我在云平台的背景下思考了这个问题。 主题演讲是关于Pivtol如何在新兴云平台市场中定位的极好的,深思熟虑的陈述。 他最有趣的观点之一是,随着移动和互连设备(通常称为物联网 )的激增,我们看到了一种新的应用程序类别,可以吸收,处理和分发大量数据。

Maritz通过一些有用的轶事证据来突出他的讲话:一次跨大西洋飞行会产生将近30TB的数据,需要通过新型应用程序进行记录,处理和分析。

云织物

这些类型的应用程序不能有效地建立在传统的Java EE应用程序服务器体系结构上。 取而代之的是,它们将在高度适应性强的动态互连基础架构云结构上运行。

云结构的动态性质对现有Java框架和容器提出了新要求。 例如,可以创建或迁移VM实例以满足不断增长的需求。 在此设置中,计算机(以及服务端点)的地址可能会更改。 这使得通常与Java EE应用程序服务器集群和消息代理相关联的静态体系结构难以管理和扩展

云结构基于硬件虚拟化构建,其中物理计算资源通过软件抽象。 需要将虚拟化扩展到Java编程模型的堆栈,以便可以更有效地运行应用程序。

Spring:服务虚拟化先驱

在这方面,Spring是早期的先驱。 它通过替换容器API来通过依赖关系注入来获取本地服务引用(JNDI),从而虚拟化了Java EE应用服务器的许多部分。 这样就可以在Java EE容器之外运行Spring应用程序代码,例如在单元测试中。

随着云结构的普及,我们将看到有必要将Spring的接线功能扩展到大型分布式服务-接线。 正如应用程序不需要容器API来获取对本地服务的引用一样,它们也不需要API来调用远程服务或向端点发送消息。 如果将远程服务连接到应用程序代码,则结构基础架构可以在迁移或创建VM时透明地传播端点地址更改,以响应不断变化的工作负载:

大型布线的另一个好处是通信 虚拟化。 应用程序代码不再依赖特定于传输的API发送消息或调用远程服务。 云结构负责将代码与管理通信的代理一起注入:

这将允许云结构采用和调整最合适的消息传递技术,而无需更改代码级。 除了大大简化代码外,通信虚拟化还使生产更多可移植的云应用成为可能。

在实践中进行大接线

那么,大型布线在实际中是什么样的呢? 好消息是它的许多概念早于现代云计算的出现。 OASIS SCA标准为我们提供了一种简单而熟悉的方式来连接非常适合云结构的远程服务:

<composite name="LoanComposite" ...><component name="Client"><implementation.java class="org.fabric3.sample.client.ClientImpl"/><reference name="service" target="Service"/> </component><component name="Service"><implementation.java class="org.fabric3.sample.service.ServiceImpl"/></component></composite>

可以通过JMS,ZeroMQ,AMQP,MQTT或其他某种通信技术连接上述服务-取决于SCA运行时或部署配置来选择一种。 应用程序代码将看起来相同:

public class ClientImpl implements Client {@Referenceprotected Service service;public void doSomething() {Message message = ...service.send(message);   }}

Fabric3运行时(一致的SCA实现)以我们上面讨论的方式提供了透明的动态端点传播。

下一步是什么?

目前,Fabric3支持大尺寸布线需要将应用程序部署到Fabric3容器中。 Fabric3社区正在努力消除此限制,以便可以从任何JVM或Java运行时以无所不在的方式访问云服务。 这是一个例子:

Fabric fabric = Bootstrap.initialize();
fabric.start();Domain domain = fabric.getDomain();Service service = domain.getService(Service.class);
Message message = ...
service.send(message);fabric.stop();

该API可以集成到诸如Spring和Guice之类的框架中,以提供透明的远程服务注入。 基本上,应用程序代码将不再需要处理特定的传输API,或者对于Spring,则不再需要处理模板。

****

回到Maritz的大规模使用,处理和分发数据的下一代应用程序的图片,大型布线有望起到与本地依赖注入对公司数据中心中的Java EE相同的现代化作用。 如果您想进一步了解可能的技术,请查看Fabric3 。

参考: 大型接线:我们的JCG合作伙伴 Jim Marino在服务机器博客上提供的Java云应用程序缺少的技术 。

翻译自: https://www.javacodegeeks.com/2013/12/wiring-in-the-large-the-missing-technology-for-java-cloud-applications.html

大型布线:Java云应用程序缺少的技术相关推荐

  1. 布线问题分支限界法java_大型布线:Java云应用程序缺少的技术

    布线问题分支限界法java 您是否曾经想过,为什么大多数Java框架中的依赖项注入仅用于本地进程内服务而不是分布式服务? 我最近在2013年EMC世界大会上遇到了Paul Maritz的主题演讲 (跳 ...

  2. 云HIS源码 大型医院java云HIS系统源码 云his系统

  3. in java中文版百度云 thinking_小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送...

    前面写过一篇云开发实现小程序订阅消息(模板消息)推送的文章,<借助云开发实现小程序订阅消息和模板消息的推送功能>是有好多同学用的是Java写后台,所以今天就再来写一篇Java后台实现小程序 ...

  4. Java工程师(程序员)面题

    Struts,Spring,Hibernate三大框架 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开 ...

  5. 牛逼的uniapp+Java微信小程序商城来了

    牛逼的uniapp+Java微信小程序商城来了 减少重复造轮子,开源微信小程序商城(前后端开源:uniapp+Java),秒杀.优惠券.多商户.直播卖货.分销等功能.快速搭建一个属于自己的微信小程序商 ...

  6. Java云托管服务的开支削减策略

    \ 摘要 \ 随着项目不断扩大,你需要将其迁移到更大的虚拟机上.但如果新虚拟机环境超出了你的需求则会产生额外开支.\ 相比虚拟机,容器具有更小的粒度,并且无需重启运行中的实例即可垂直扩展.\ 单体应用 ...

  7. java书籍_Java程序员必看的 13 本 Java 书籍!

    原文:Java程序员必看的 13 本 Java 书籍! 作者: java技术栈 关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,J ...

  8. 在Tomcat中部署Java Web应用程序几种方式

    在Tomcat中部署Java Web应用程序有两种方式:静态部署和动态部署.在下文中$CATALINA_HOME指的是Tomcat根目录.  一.静态部署       静态部署指的是我们在服务器启动之 ...

  9. MVC模式 在Java Web应用程序中的实现

    一.MVC简介 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分 ...

最新文章

  1. C/C++ 混合编程
  2. Visual Studio® 2010 Web Deployment Projects站点编译生成bin同时发表插件
  3. html服务流程如何实现_朱传燕:美容院如何规范服务流程,提升专业口碑
  4. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 Mixin 混合进行方法注入 )
  5. 成功解决urllib.error.URLError urlopen error Errno 11004 getaddrinfo failed
  6. 正视长尾挑战!颜水成、冯佳时团队发布首篇《深度长尾学习》综述
  7. 博弈论之软件测试的价值
  8. AUTOSAR从入门到精通100讲(二十)-AUTOSAR通信篇—CanIf模块
  9. 制作网页版电子时钟特效
  10. 【java】JDK8的HashMap
  11. tensorflow 实验过程可重复
  12. keras 双向LSTM 简单示例
  13. 机器学习基础算法33-HMM实践
  14. [转]tar 命令使用
  15. 【RWM】基于matlab路由无线传感器网络模拟随机路点运动模型【含Matlab源码 1565期】
  16. python3-曲线拟合(polyfit/polyval)
  17. 自发光物体能被烘焙之后是否会影响周围的物体
  18. jdk11的class反射机制,将newInstance()方法设置为了不建议使用了,怎么通过反射创建新的对象
  19. dell G7 7588安装ubuntu双系统
  20. 智过网:2023年注册测绘师考试执业范围

热门文章

  1. idea创建标准的meaven项目
  2. rabbitmq-java生产者消费者
  3. java 读取 文本块_Java文本块
  4. poi动态创建文档_POI创建的文档具有不同条件的灵活样式
  5. spring 构造函数注入_Spring依赖注入–字段vs设置器vs构造函数注入
  6. java登录界面命令_Java命令行界面(第18部分):JCLAP
  7. 动态调整线程池_调整线程池的重要性
  8. jboss8日志级别设置_罐中研讨会:设置JBoss BRMS全日研讨会
  9. spring体系结构_了解Spring Web应用程序体系结构:经典方法
  10. java整数的因式分解_如何在Java中找到整数的质数-因式分解