真正的模块化Web应用程序:为什么没有开发标准?

OSGI , SpringSource , Jboss模块 ,J2EE和清单永远不会结束。所有这些技术都向他们的最终用户/开发人员保证了相同的东西,或多或少是Java模块化Web应用程序(?)。 但是,我们当中有多少人实际上已经尝试过用Java开发REAL模块化软件系统? 我们中有多少人设法做到了? 您可能已经注意到,我已经将“真实”一词大写,但这并非偶然。 我将简要解释我的定义是什么:“真正的模块化Java系统”。

恕我直言,REAL软件模块至少应具有用于业务逻辑,持久性,用户界面和配置的部件。 在理想情况下,软件模块应该能够在运行的应用程序中轻松插入和拔出,而无需重新启动它。 例如,在J2EE应用程序服务器(例如Jboss或GlassFish)中,正在运行的应用程序(核心系统)是.war文件。 开发了核心系统的其他一些模块(包含上述部分),并将其打包在单独的jar文件中。 这些jar文件应该部署在应用服务器中,并与核心系统集成(通过业务逻辑和用户界面中的某些扩展点),而无需重新部署它。 我们可以做这样的事情吗?

让我们看看相关技术对此有何建议。 自从JBoss Modules迈出第一步以来,我一直是它的粉丝,而在最近发布的JBoss AS最新版本之后,我希望看到它们的实际应用。 说实话,JBoss模块提供了一种非常简单方便的方法来定义模块之间的依赖关系。 糟糕! 我写了“模块”吗? 这些是什么样的模块? 它们可以包括业务逻辑,配置,数据模型,但是用户界面呢? 不幸的是,没有任何提及,经过一番研究,我发现JBoss模块中的模块化概念不包含任何用户界面。

OSGI呢? 构建模块化应用程序的最有前途的方式。 如今, OSGI已获得许多应用程序服务器的支持,尽管其配置看起来像是工业革命时代的恐龙,但它似乎是一种非常不错的方法。 大量可用的服务,使用的许多框架,当然也没有引用任何用户界面功能。 另一方面,正如相关文章所暗示的, Vaadin与OSGI很好地集成(?)以构建模块化的Web应用程序。 我想知道是否有使用OSGI和Vaadin开发的真实/生产性模块化企业应用程序。

Spring是SpringSource的独立框架, SpringSource目前是开发Java企业应用程序的领导者。 与OSGI结合使用的Spring动态模块被认为是构建动态和模块化Web应用程序的最复杂的方法,但是我仍然感到即使Spring也无法解决我提出的问题。 根据我的研究经验,将上述技术集成到模块化系统中是一项艰巨的任务。

最后但并非最不重要的是J2EE。 Web的最新版本和完整的配置文件规范已将J2EE转换为非常强大的框架集。 JSF2和CDI以及所有新功能极大地提高了它在Java开发人员中的知名度。 当我第一次阅读本文时 ,我相信最终我找到了模块化Web应用程序的标准解决方案。 尽管每个jar可以包含所有不同的部分:使用EJB和CDI的业务逻辑,使用JPA及其实现的持久性,使用JSF及其实现的配置和用户界面),根据此问题 ,无法将带有JSF组件的jar作为单独的组件来处理模块。 再一次失望。 J2EE中的模块应该是一次打包的jar。 太接近了!! 我猜,我们必须等到JSF 2.2的发布以及几个月后才能获得最知名的应用程序服务器的支持。

由于没有用于构建模块化系统的标准,因此许多知名项目都基于上述框架之一或从头开始开发了自己的模块系统。 SonarSource的Jenkins , Atlassian的Jira和Sonar都是基于Java的应用程序,具有强大的模块/插件系统。 您按照一些准则开发插件(包括用户界面),然后通过模块/插件管理器将其部署为单个jar。 在大多数情况下,您需要重新启动系统,但是我认为这不会打扰任何管理员,因为您可以轻松地增加软件的功能。

所以我的困境仍然有效。 我应该开始构建自己的模块/插件系统还是应该等待标准出台并促进全球模块化Web应用程序的开发? 我不知道为什么这种标准化尚不可用,为什么我们不得不在所有这些技术和框架中最终尝试(仍然没有资源)! 我们是否接近开发真正的模块化企业Web应用程序的标准?

参考: 为什么没有用于开发真正的模块化Web应用程序的标准? 从我们的JCG合作伙伴 Patroklos Papapetrou在Only Software Matters博客上获得 。

相关文章 :

  • OSGi将Maven与Equinox结合使用
  • Tomcat中的零停机部署(和回滚); 演练和清单
  • Java Code Geeks Andygene Web原型
  • Java最佳实践系列
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/09/real-modular-web-applications-why-there.html

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

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

相关文章

C语言5-7习题

本题要求实现一个函数&#xff0c;用下列公式求cos(x)的近似值&#xff0c;精确到最后一项的绝对值小于e&#xff1a; #include <stdio.h> #include <math.h>double funcos( double e, double x );int main() { double e, x;scanf("%lf %lf", &…

JDBC批处理executeBatch

JDBC运行SQL声明&#xff0c;有两个处理接口&#xff0c;一PreparedStatement,Statement,一般程序JDBC有多少仍然比较PreparedStatement 只要运行批处理&#xff0c;PreparedStatement少一点Statement ps conn.prepareStatement(sql); for(int i 0;i<10;i){ ps.setString(…

BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)

第一题没话说 智商欠费 加老柴辅导终于过了 需要在意的是数据范围为2的63次方-1 三个数相加肯定爆了 四边形的定义  任意边小于其余三边之和 换句话说就是  最长边小于其余三边之和 这样的话问题转化为 最长边依次减其余三边的结果是否小于等于0 还有一点是题目出现0边 即最…

习题6-1 分类统计字符个数 (15 分)

本题要求实现一个函数&#xff0c;统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。 函数接口定义&#xff1a; void StringCount( char s[] );其中 char s[] 是用户传入的字符串。函数StringCount须在一行内按照 letter 英文字母个数, blank 空格或回车…

Servlet 3.0异步处理可将服务器吞吐量提高十倍

Servlet是Java中处理服务器端逻辑的主要组件&#xff0c;新的3.0规范引入了一些非常有趣的功能&#xff0c;其中异步处理是最重要的功能之一。 可以利用异步处理来开发高度可伸缩的Web应用程序。 使用此功能可以有效地构建Web 2.0站点和AJAX应用程序。 我们的JCG合作伙伴之一To…

使用secureCRT连接VMware-Ubuntukylin虚拟机

使用SecureCRT连接VMware时总是提醒主机拒绝连接。这时可以使用sudo apt-get install openssh-server openssh-client&#xff0c;在主机上安装ssh. 安装成功后&#xff0c;可以连接到主机了。 如果显示远程主机拒绝连接。则可以使用如下方法。 VMware里面装的是Ubuntukylin版本…

加载音频Audio

var cameraAudio new Audio(); cameraAudio.src camera.wav;// 设置音频对象的属性,预加载视频 var options_audio { preload : auto } for(var key in options_audio){ if(options_audio.hasOwnProperty(key) && (key in cameraAudio)){ cameraAudio[key] opti…

习题6-2 使用函数求特殊a串数列和 (20 分)

给定两个均不超过9的正整数a和n&#xff0c;要求编写函数求aaaaaa⋯aa⋯a&#xff08;n个a&#xff09;之和。 int fn( int a, int n ); int SumA( int a, int n );其中函数fn须返回的是n个a组成的数字&#xff1b;SumA返回要求的和。 我的代码&#xff1a; int fn( int a, i…

Java中可怕的双重检查锁定成语

本文讨论的问题不是新问题&#xff0c;但即使是经验丰富的开发人员也仍然很棘手。 单例模式是常见的编程习惯。 但是&#xff0c;当与多个线程一起使用时&#xff0c;必须进行某种类型的同步&#xff0c;以免破坏代码。 Khangaonkar报告中的 JCG合作伙伴Manoj Khangaonkar在一篇…

国内有哪些好的刷题网站?

http://www.zhihu.com/question/25574458 Luau Lawrence&#xff0c;Data Mining 弱鸡 / PhDNTU 温梦强、石一帆、知乎用户 等人赞同 - Welcome To PKU JudgeOnline 北京大学的Online Judge。POJ上面的题目有点老了&#xff0c;但好处是做的人多&#xff0c;经典算法题多&…

IE版本判断

我们常常会在网页的HTML里面看到形如[if lte IE 9]……[endif]的代码&#xff0c;表示的是限定某些浏览器版本才能执行的语句&#xff0c;那么这些判断语句的规则是什么呢&#xff1f;请看下文&#xff1a; <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]…

Js 流程控制

流程控制 顺序、分支、循环 顺序结构 代码一行一行从上往下执行并解析 分支结构 if语句 switch语句 if语句 单分支 if(条件表达式){ //语句块 } 含义&#xff1a;当条件表达式为真的时候就执行里面的语句块 示例&#xff1a; 双分支&#xff1a; if(条件表达式){ //语句块1 }el…

习题6-3 使用函数输出指定范围内的完数 (20 分)

本题要求实现一个计算整数因子和的简单函数&#xff0c;并利用其实现另一个函数&#xff0c;输出两正整数m和n&#xff08;0<m≤n≤10000&#xff09;之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如&#xff1a;6123&#xff0c;其中1、2、3为6的因子。…

速览Java 7 MethodHandle及其用法

由于Java的Reflection API&#xff0c;我们已经能够在运行时检查和更改程序执行。 特别是&#xff0c;我们可以在运行时观察接口/类/方法和字段&#xff0c;而在编译时不知道它们的名称。 JDK 7为这种动态/运行时检查引入了一个新的参与者&#xff0c;即方法句柄&#xff08;即…

习题6-4 使用函数输出指定范围内的Fibonacci数 (20 分)

本题要求实现一个计算Fibonacci数的简单函数&#xff0c;并利用其实现另一个函数&#xff0c;输出两正整数m和n&#xff08;0<m≤n≤10000&#xff09;之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和&#xff08;最开始两项均定义为1&#xff09;…

SmartGWT入门,提供出色的GWT界面

SmartGWT简介 我最近开始使用SmartGWT &#xff0c;它是一个基于GWT的框架&#xff0c;该框架为您的应用程序UI提供了一个全面的小部件库&#xff0c;并为服务器端的数据管理提供了帮助。 您可以在SmartGWT展示柜上查看其漂亮的功能。 我准备了一个简短的“入门”指南&#xf…

Android OpenGL ES(四)----调整屏幕的宽高比

1.宽高比问题 我们现在相当熟悉这样一个事实&#xff0c;在OpenGL里&#xff0c;我们要渲染的一切物体都要映射到X轴和Y轴上[-1&#xff0c;1]的范围内&#xff0c;对于Z轴也一样。这个范围内的坐标被称为归一化设备坐标&#xff0c;其独立于屏幕实际尺寸或形状。 不幸的是&…

使用Spring AOP进行面向方面的编程

面向方面的编程&#xff08;AOP&#xff09;是指将辅助功能或支持功能与主程序的业务逻辑隔离开来的编程范例。 AOP是用于分离横切关注点的有前途的技术&#xff0c;这在面向对象的编程中通常很难做到。 以此方式增加了应用程序的模块化&#xff0c;并且维护变得非常容易。 横切…

面试题24 二叉搜索树的后序遍历序列

题目描述 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。1 class Solution {2 public:3 bool VerifySquenceOfBST(vector<int> sequence) {4 if (seque…

习题6-5 使用函数验证哥德巴赫猜想 (20 分)

本题要求实现一个判断素数的简单函数&#xff0c;并利用该函数验证哥德巴赫猜想&#xff1a;任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意&#xff1a;1不是素数&#xff0c;2是素数。 函数接口定义&#xff1a; int prime( int…