c语言构建栈_选择技术栈构建通用平台

c语言构建栈

Java社区中有许多关于Spring vs Java EE的话题。 一群人会争辩说您应该使用一个而不是其他。等等。当我看到这一点时,我不禁要想为什么我们不能同时使用它们呢? 实际上,我认为有效地使用它们将为建立基础架构创建一个伟大的技术堆栈,例如,为一家大型公司,该公司希望提供一个可以托管和运行许多不同应用程序和项目的通用平台。

为什么将Spring和Java EE结合在一起?

在编写软件时,我们创建和构建可重复使用的库/框架,并帮助我们更快地完成工作。 Spring是一个像瑞士军刀一样的库,它允许以非侵入性的方式构建应用程序,并具有许多更简单的包装器和帮助器类。 这就是我所说的“对开发人员友好”的库。

但是,许多人没有意识到Spring只是一个包含对许多可以简化开发的事物进行包装的库。 例如,Spring具有一个Web框架层,可让您编写MVC Web应用程序,但您仍需要一个Servlet容器(服务器)。 Spring提供的数据层主要包装了其他JPA / Hibernate / JDBC,这些JPA / Hibernate / JDBC很好地集成在了它们的IoC容器中,但是实际的ORM实现不在Spring之外(例如:Hibernate)。 Spring包装了JMS甚至JNDI进行开发,但是您仍然需要JMS服务器或JNDI提供程序。 Spring有一个事务管理器抽象层,但它只是一个包装器(对于单个数据库,实际上是数据库供应商提供了交易保证的ACID属性,而不是Spring)。 如果要在多个资源(例如JMS和数据库,或多个数据库)上进行原子事务,则仍然需要“真实”事务管理器(JTA)!

所以现在您看到,要构建成功的企业应用程序,您需要在许多供应商提供的功能之上使用Spring。 如果您不小心,可能会陷入难以集成和部署的许多专有服务中。 这就是Java EE的用武之地。这是规范布局,供应商必须以标准方式提供大多数这些服务。 因此,任何JEE法规遵从性服务器都将提供具有标准API的服务,该标准API应当以类似的方式工作。

现在必须保持平衡。 根据我的经验,您执行的标准越多,获得的“对开发人员友好的”就越少。 但是同时,如果没有标准,很难提供通用的基础结构,例如API,运行时服务器甚至OS环境进行部署。 这就是我认为将Spring与Java EE相结合将为IT社区带来更实用,更有效的平台的原因。

选择技术栈

并非每个项目的创建都是平等的,他们的需求在很大程度上不同。 因此,不可能提供一个能够满足所有项目需求的通用技术堆栈。 但是我们当然可以尝试创建一个可以满足大多数项目需求的通用工具。 同样,选择一个具体的库/堆栈是非常有根据的,无论选择哪种实际实现,总是会有利弊的。 考虑到这一点,我将尝试提出自己对技术栈的个人选择,我认为它将为承载各种项目和应用程序提供最灵活的平台。 特别是在大型公司环境中。

我将选择Java EE应用程序服务器作为通用平台。 从中,我将选择一些“对开发人员友好”的库来代替(或添加一些现有的EE标准),以提高生产率。 我认为EE已经走了很长一段路,并且在每次规范迭代中都变得更好,但是我仍然觉得将POJO服务连接在一起时,使用Spring作为IoC容器比使用CDI有更大的灵活性。 另外,Spring框架带有非常灵活的MVC层,与普通的Servlet API相比,该层有效且易于开发。

使用Java EE 6,服务器必须提供两个配置文件。 因此,让我们从这两个视图开始探索堆栈。

JEE Web配置文件–基于Web的轻量级应用

  • 使用Spring MVC(控制器,表单,验证,ModelAndView和IoC配置)代替普通的Servlet API编程。
  • 使用尽可能多的POJO编写后端业务服务逻辑,并使用Spring IoC进行连接。 不要滥用这个。 我个人认为,与CDI相比,Spring IoC更灵活,更易于使用。
  • 将JPA用于数据服务层而不是JDBC API编程。
  • 使用JSON数据交换格式。 根据经验,与XML相比,JSON更加高效且易于使用。
  • 视图选项:
    • 使用格式正确的xhtml / Bootstraps / jquery / AJAX->如果您只需要静态页面和一些客户端交互
  • Servlet 3.0现在支持异步请求。 这解决了Web域中的许多难题。 如果需要,可以利用它! (最新的Spring MVC已经对此提供支持。)

JEE 6完整个人资料–完整EE功能应用程序

  • 在上面的所有Web配置文件中提到。
  • 将JMS用于属于点对点或发布/订阅域的任何消息传递需求。
  • 当您需要原子事务进行多个数据库和/或JMS交付时,请使用JTA。
  • 使用标准的JAX-RS(RESTful Web服务API)来公开外部服务。 使用JSON数据交换格式。
  • 使用一致的Spring IoC进行服务注入。 与CDI相比,它更灵活,更易于使用。
  • 如果可能的话,使用POJO服务并通过Spring代替EJB进行连接。 我发现它们更易于测试和开发。
  • 加上它所支持的其他任何EE规范,例如(JavaMail和JCA等。通常,Spring也会为这些API提供更简单的包装。)

Apache Camel –轻量级ESB

Camel项目不是EE标准。 但是,我的经验是,使用简单的Camel路由/工作流可以轻松完成许多常见的IT工作。 Camel的开发和样式易于理解且易于测试。 它可以作为独立的应用程序/服务运行,也可以作为Web应用程序的一部分运行。 我相信,在上面的通用平台之上添加一个巨大的价值。 您将在需要以下各项时使用它:

  • 对于任何类似工作流流程的集成模式(例如:将文件轮询器桥接到Web服务,将JMS队列桥接到数据库等)
  • 用于创建业务工作流程。
  • 适用于任何ETL工作流程。
  • 为了轻松将业务需求工作流映射到代码逻辑流程

使用哪个EE应用程序服务器

我认为这也是主观的,但是我们需要选择适合我们业务需求的产品。 我个人更喜欢JBoss,因为它是开源的,但是他们提供了其应用服务器的商业支持版本。 作为基于开源的产品,它使开发人员在学习和探索平台方面具有更大的灵活性。 我还看到了他们内部项目的许多好处,例如开放的测试工具和库,这些都使平台开发人员受益。

Tomcat服务器呢?

Tomcat是一个非常著名的Servlet容器。 但是,它只是一个支持Servlet / JSP应用程序的Web容器。 它不提供Java EE服务器提供的JMS或JTA功能。 事实上,仅使用一个简单的Tomcat服务器就可以满足许多Web应用程序的需求。 但是,在大型IT环境中,您经常需要仅由Java EE服务器提供的其他服务。 在许多情况下,人们将只需要运行Tomcat webapp并在需要时桥接到其他Java EE服务器。

使用JEE6,可以将Web配置文件简化为大多数Web容器功能,这应该使服务器启动更快(加载更少的额外服务)。 但是,如果应用程序需要额外的EE功能,我们提供的平台将能够支持它们。

参考:在A Programmer's Journal博客上 ,选择我们JCG合作伙伴 Zemian Deng的技术堆栈来构建通用平台 。

翻译自: https://www.javacodegeeks.com/2013/06/choosing-technology-stack-to-build-a-common-platform.html

c语言构建栈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【强化学习】Actor Critic原理

PG算法是一种只基于policy的一种方法,存在的问题就是该算法需要完整的状态序列,且单独对策略函数进行迭代更新,不太容易收敛。 Actor-critic方法呢是一种将 策略(Policy Based)和价值(Value Based)相结合的方法。下面继续来理一下AC方法的思路…

Java 9:对Process API的增强

Java 9对Process API进行了各种改进,用于控制和管理操作系统进程。 获取有关流程的信息 有一个新的ProcessHandle类,提供了进程的pid,父级和后代,以及有关开始时间和累积CPU时间的信息。 jshell> Process p new ProcessBui…

【强化学习】AC注释版本

## 强化学习 Actor-critic # 和PG比起来主要的变化: # 评估点由状态价值变成了TD_error,网络形式变了 # learn函数长得不一样 # action有一个优化函数,优化的是价值函数,希望最大化期望的reward,Critic网络也有一个reward&#xf…

python中sorted的用法append_Python中高阶函数sorted()用法

在Python中,有内置的排序方法:sorted(iterable, key, reverse)。Sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序。key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。print(s…

【强化学习】A3C原理

先解释一下什么叫异步、什么叫并发: **异步:**和同步相对,同步是顺序执行,而异步是彼此独立,在等待某个事件的过程中继续做自己的事,不要等待这一事件完成后再工作。线程是实现异步的一个方式,异…

天玑机器人颈椎_天玑骨科手术机器人亮相机器人大会 误差不到1毫米

千龙网北京8月22日讯(记者 詹婷婷)8月23日-27日,年度科技盛典--2017年世界机器人大会将登陆北京亦创国际会展中心。100多家国内外机器人顶尖企业将携手机器人亮相。大会期间将秀出人工智能系统、特种机器人、服务机器人、工业机器人以及智慧家居机器人等先进产品。参…

jboss eap 7.0_创建委托登录模块(用于JBoss EAP 6.1)

jboss eap 7.0[如果只想查看代码,请向下滚动] 动机 在RHQ中,我们需要一个安全域,该域可用于通过容器管理的安全性来保护REST-api及其Web应用程序。 过去,我只是使用经典的DatabaseServerLoginModule对DatabaseServerLoginModule进…

cdn简单理解_简单地聊聊CDN原理作用及实现方法

释放双眼,带上耳机,听听看~!相信只要会网上冲浪的都会接触到CDN吧,今天我们来聊聊对CDN的理解,给大家作为参考,本文将会以简单的描述来解释相关原理,供大家理解,希望相关专业同学进行…

JDK 10:FutureTask获取一个toString()

我已经有很长时间了,对于大多数具有独特属性的Java类,开发人员应该花时间重写Object.toString() ,即使它只是通过IDE生成的实现或使用诸如Apache之类的库类来实现Commons Lang的ToStringBuilder 。 如果要手动实现toSt…

【强化学习】A3C代码注释版本

########################################## # A3C做出的改进: # 解决AC难以收敛的问题 # 不一样的地方: #import threading # import tensorflow as tf import tensorflow.compat.v1 as tftf.compat.v1.disable_eager_execution() import numpy as np …

用python做人脸识别的程序怎么做_手把手教你用Python实现人脸识别

作者:Kangvcar简书专栏:http://www.jianshu.com/u/d9c480744afd环境要求:Ubuntu17.10Python 2.7.14环境搭建:1. 安装 Ubuntu17.10 > 安装步骤在这里2. 安装 Python2.7.14 (Ubuntu17.10 默认Python版本为2.7.14)3. 安装 git 、c…

【强化学习】PPO代码注释版本

# PPO主要通过限制新旧策略的比率,那些远离旧策略的改变不会发生# import tensorflow as tf import tensorflow.compat.v1 as tf tf.compat.v1.disable_eager_execution() import numpy as np import matplotlib.pyplot as plt import gym# 定义一些超级参量 EP_MAX…

【强化学习】可视化学习tensorboard

tensorflow定义了一个图结构: 代码: a tf.constant(3.0, name"a")b tf.constant(4.0, name"b")c tf.add(a, b, name"add")var tf.Variable(tf.random_normal([2, 3], mean0.0, stddev1.0), name"variable"…

面向初学者的JSF 2.0教程

1.什么是JSF? JSF是Java Server Faces的首字母缩写。 它是一种服务器端处理技术,它允许将服务器端代码嵌入到网页中。 由于可以将服务器端处理和呈现代码嵌入网页本身,因此使项目的整体编码更加简单。 减少总体数量以及文件大小。 JSF包含2个…

篡改referer_HTTP_REFERER的用法及伪造

引言在php中,可以使用$_SERVER[‘HTTP_REFERER’]来获取HTTP_REFERER信息,关于HTTP_REFERER,php文档中的描述如下:“引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项&a…

华为nova7保密柜_华为发布nova8系列新品 轻松拍出Vlog黄金脸占比

2020年12月23日,华为nova8系列手机正式发布。作为深受年轻人喜爱的手机品牌之一,华为nova8系列此次延续其强大的前置视觉实力、强悍的设计性能以及独特的设计美学,带来业内首款专为Vlog拍摄设计的5G手机。随着短视频和Vlog的崛起,…

从拉格朗日乘数法到KKT条件

从拉格朗日乘数法到KKT条件 最近看论文遇到了Karush–Kuhn–Tucker (KKT)条件,想搞清楚这是个什么东东,因此就把这个东西认真学习一下并且分享出来,希望对大家有用。学习KKT就不得不先学习一下拉格朗日乘数法&#xf…

26.0.0-alpha1_WildFly 8.0.0.Alpha1的发布和一些历史

26.0.0-alpha1自从我们发布WildFly 8.0.0.Alpha1版本以来, 已经过去了大约2周。 该下载位于WildFly下载页面上 。 我敢肯定,你们中的许多人可能会想知道WildFly是什么,而其中一些知道它是什么的人可能不会知道已经发布了。 我将尝试回答其中的…

单机最大负载_分布式高可靠之负载均衡,今天看了你肯定会

到目前为止,我已经为你介绍了分布式起源、分布式协调与同步、分布式资源管理与负载调度、分布式计算技术、分布式通信技术和分布式数据存储。可以说,掌握了这些内容,基本上就掌握了分布式的关键技术。然而,只有可靠的分布式系统才…

【强化学习】一文带你理清强化学习

整理不易,希望留个赞再走哦!! 学习路线 这个图描述的比较清晰,蓝框里是整个强化学习的一些概念基础了,橙色是一些学习方法,可以针对性的选择一些,废话不多说,接下来就按照这个路线图…