这篇社论是TSS的编辑最近发表的,作者对Java EE的发展方向表示了疑问,并且是自己的亲身体会中总结出来的,有很多跟贴对作者的观点进行了补充或反对,有兴趣的朋友可以看看原文里的跟贴,这样可以深入的了解这些外国人对这个论题的观点.
Editorial: Where Java EE goes horribly wrong
确实,Java EE囊括了一切,除了这些小角落.........但是为什么,为什么有这么多的小角落?!
Java EE在动摇,确实是这样的. 我使用它通常是很愉快的. 但是它却在一直打击着我---当它处理了几乎所有的东西,可偏偏忘了一些角落,这些角落它本该覆盖到的,而且能使他更强大,可它却没有. 这成了Java的
Achilles' heel
.
例如, 看看我
最近的一次辛苦
──为了给我的
EIS component
配置一个JMS消息目的地。考虑到我已经有了一个内在的EIS组件──它将与一个JNDI资源交互──这本应该不是一个大问题.
当时的事情是这样的:我写了一个收取mail的EIS组件. 它需要去伪造email地址(例如:所有的地址都是动态生成的),我的意图是当email发过来时,要把每个email送到JMS队列里. 一个message-driven bean监听这个JMS队列来判断是否该忽略这个email还是不能忽略.
我之所以在EIS组件里做这些,是因为这种方式不需要我记住应该把所有的应用组件都启动起来,否者我必需要启动我的数据库和应用程序服务器,把它们全都做好。
这样一来,我的EIS组件启动时需要一个已经准备好的JMS,不然的话它将会绑定一个端口,也就无法运行了. 这样我的"问题"就来了.
证明显示在
Glassfish
里, JNDI
只有在sever完全启动后才会被组装
. 这样,我的EIS组件初始化后,却不可能得到有效的JNDI资源来运行. 这在设计上的,明显的,如果我没搞错,是一种缺陷,我已经将它提交给Glassfish了. (
Bug #1950
, 正巧那一年我还没出生.)
我现在需要一个
Glassfish Lifecycle module
,用它来检查server是否已经准备好了, 这样我就可以从 lifecycle process中得倒 JNDI context了. 我可以启动一些线程(直到我把它们关掉),让它们去做我想要的. 在某方面这算是一个较为清洁的方案,比起将
SubEthaSMTP
拆解,我可以在生命周期模块里只启动 SubEthaSMTP,这样就可以了.
但是...如果我想把它转移到,比如,JBoss,将会发生什么事情? Or OC4J? Or WebLogic? Or WebSphere? Geronimo? JONAS? RESIN? 我现在使用的是Glassfish,用它来开发---主要是因为它是JEE5规格说明书的一种参考实现.并不是因为任何它作为一个应用服务器有着绝对的性能保证的特征. 如果我一直停留在Glassfish上,写一个生命循环事件是不错的事,但是我不想和任何一个特定的server绑的太紧. 这个生命周期只是针对Glassfish的,──其他的server好像并不会跟随着它的带领.
JavaEE ,在这个案例中,让我失败了. 这并不是个大的问题,除非你会在Java EE里的这个角落里一遍一遍又一遍运行这种类型的程序.
你也许想知道为什么人们在有了Messiah又要去关注
Spring
? 你也许想知道为什么
TheServerSide.com
总是对 OSGi and grids and Ruby and AJAX and 之类的喋喋不休?这就是为什么. 它们提供了覆盖那些小角落的方案. 不是一直要这样--我在期待着一个处理application server 的 OSGi or Spring 模板(例如,"向这个bean里注入一个app server,启动它")但是这样我们需要把这些小角落的问题当成它们的本身---角落,而不是一直要斗争下去的障碍.
Java EE doesn't suck - not really - but let's be real, it DOES suck in ways it shouldn't.(这句话中的suck不知道是什么意思!) JEE规格说明书应该提供一种指示去说明这些小角落,提供一些东西让开发者们可以去依赖. 我知道我对此有保留,我只是对那些它们中的一些没有价值的东西不满意.
有些争论认为,为这种问题提供反射注入点会增加复杂度-- witness people
complaining about all the phaselistener things in JSF 2.0
.Hey, I get that. 但是让我们现实点:如果你不需要它们,你就不必使用这种能力. 就是这样,如果你需要它,现在,那就不要漂泊了,你被规格说明书的作者规范在这里了,这个作者会认为通用性能的重要性大于通用需求.
这里必须要改变,否则就像 Bruce Tate 说的 Java is "
dead like COBOL
"──是说确实还活着,但不是十分的活跃──最终将会变成真的.
分享到:
相关推荐
### 论文研究 - 社论:IJMPCERO论文的作者 #### 国际医学物理学,临床工程与放射肿瘤学杂志:社论 **重要知识点解析:** **1. IJMPCERO简介:** - **期刊名称:**《国际医学物理学、临床工程与放射肿瘤学杂志》...
### 社论:创造栩栩如生的数字人类 #### 关键词:数字人类、建模、逼真度、沉浸感、动画 随着技术的进步和社会的发展,数字人类在我们的日常生活中扮演着越来越重要的角色。从早期仅限于娱乐行业的视频游戏和电影...
社论:镜子,墙上的镜子 [hellip] ......谁是整个国家最好的? - 无论是在“校长决斗”还是PISA中,只要问到“最佳”的标准或通过什么标准,就很难明确回答这个问题。 更令人惊讶的是,自从 PISA 结果公布以来,有...
视频分析作为计算机视觉领域的核心技术之一,随着移动互联网和个人设备的迅速发展,在网络上呈现出爆炸性增长的视频数据。这一现象催生了对视频分析技术的深入研究,其主要目的是为了提升对视频资料的管理和应用技术...
社论 这是社论版,一种面向新闻的设计,基于动态“锁定”侧边栏(请尝试将其切换为实际操作!)构建,并且专门用于以内容为中心的网站。 最初由为创建,后来移植到 演示: : 第一次使用Ghost主题? Ghost使用一种...
综上所述,《无监督Feature Learning for Vision》特刊为研究人员提供了一个展示最新研究成果的国际论坛,这些研究展示了无监督学习在计算机视觉领域应用的巨大潜力。通过理解这些知识点,我们可以更好地把握计算机...
计算机视觉领域则可能涉及对象检测、识别和跟踪技术,这些技术需要在少量标注样本的基础上工作,以识别和理解网络上的多媒体内容。通过深度学习和卷积神经网络(CNNs),研究人员可能会构建能够自动从噪声标签和不...
第七章 社论与评论员文章.ppt
Cudami是用于管理文化数字资产(如网站,文章,数字化对象,数字原生对象和实体)的社论后台。 使用的技术: 总体而言:Java,Spring Boot,Spring Security 前端:Spring MVC,Thymeleaf,React 业务:Java ...
Editorial EDITORIAL GERALD B.... In the January 1971 issue of PSYCHOLOGY I N THE SCHOOLS the president of Clinical Psychology Publishing Company, Frederick Thorne, indicated that the ...
把目录下的admin bbs guest md5 sql 文件夹和index.asp文件传到你空间目录就可以使用了. 后台地址:http://域名/admin/wapsv.asp 账号:wapsv 密码:wapsv 安全密码:wapsv.com
标题中的“lightoj-tutorial-editorial-by-sayeed”指的是LightOJ(Light Online Judge)平台上的一篇教程或社论,由用户Sayeed撰写,旨在帮助用户了解如何在LightOJ上创建类似于Codeforces编辑模式的教程。这篇社论...
《AIQUE:社论Aique游戏项目的存储库详解》 AIQUE,这个名字融合了人工智能(AI)与游戏(Que)的元素,暗示了一个独特的游戏项目,它将智能技术与游戏体验巧妙结合。该项目的存储库名为"Aique",是开发者共享代码...
leetcode卡May-LeetCoding-Challenge-2020 我对 2020 年五月 LeetCoding 挑战的解决方案 挑战网址: 我写的第 7 天和第 14 天问题的社论: 第 7 天: 第 14 天: