利用Ruby简化你的Java测试
本文是Productive Java with Ruby系列文章的第一篇,我将从单元测试这个话题开始,让Java的开发人员能够在实际工作中利用Ruby提高工作效率。
作者 Charles Humble译者 韩锴 发布于 2008年6月6日 下午1时59分
大多数Java Web框架都构建于Servlet API之上,并且除了依赖于WEB-INF/lib目录之外,还需要你在应用程序的web.xml中配置一个或者多个Servlet、过滤器或监听器。JSR-315,即Servlet 3.0规范,计划将成为JEE 6的一部分。它在试图改变这种现状。规范目前还处于早期的草案阶段,可以在这里下载并审阅。
为了达到零配置和可插拔的目标,规范中建议了几种新特性,其中包括:
新规范使用一个metadata-complete(完全使用metadata的)标记来控制Annotation与web.xml片段的查找。这些特性在专家组内部正在引发激烈的争论,有些人担心这会带来严重的安全风险,比如无意或者故意地部署了非预期的Filter和Servlet。还有一些争论是围绕这些新特性是否足够灵活展开的。最后,专家组在等待来自社区的反馈。Greg Wilkins在他的Blog中详细描述了他所关心的问题,特别提到了Web片段的自动查找与合并,并列出了三种可能的方案之一:使用可选的<include> 选项了引导配置的自动发现行为。
“如果没有web.xml或者3.0 web.xml中没有列出任何包含项,在当前提议的草案中,默认情况下会完整查找WEB-INF以发现被标注过(annotated)的Servlet和Filter、TLD监听器和web.xml片段。但是,如果web.xml包含了<include>元素,发现过程将被改变,如下例所示:<include src="WEB-INF/lib/dwr.jar"/>
<include src="WEB-INF/lib/cometd.jar"/>
<include src="WEB-INF/classes"/>这些<include>表明只需要在dwr.jar和cometd.jar扫描Annotation、TLD片段和web.xml片段,而在WEB-INF/classes中扫描注释过的Servlet。容器不会再扫描其他的类或者jar,除非在web.xml的某个地方将它们列在include元素中。”
Rajiv Mordani对规范提出了质疑:
“实际上,Greg Wilkins提出的include方案的好处非常有限,尤其是人们主要的关注点有时是在Servlet和Filter是否在用户没有预期的情况下被暴露出去。我认为确保没有特定类型的组件被暴露应该是框架开发者的工作,而不是框架使用者的事情。通过使用一个标签来控制查找,你可以有效地获得include机制的功能,唯一的例外是,你无法只针对某个特定的Jar包集合进行查找。不过,利用include机制列出你希望查找的jar,可能只会令描述符变得更复杂。”
在今年的JavaOne大会上,专家组讨论了另外两种可能的方案。其一是除了metadata-complete标记外,再引入第二个标记,用来激活/禁用web片段和启用/关闭Web片断的查找,以及其他Annotation的功能。但是,正如Rajiv Mordani指出的,Annotation机制已经可以通过web.xml文件被覆写,提供一个更合理的控制的级别:
“如果使用Annotation声明Servlet和Filter,相应的Servlet/Filter就必须有一个url-mapping/FilterMapping属性。按照这种方式,如果没有显式的映射,要暴露哪个Servlet,是没有任何约定的。同时,如果考虑到Java EE平台的其他部分,尤其是EJB和Web Service这类技术,那么部署描述符过去经常会覆盖Annotation中设置的信息...如果你不想让容器处理任何Annotation,而是想通过部署描述符确定所有的配置信息,那么就像Java EE 5平台的其他部分一样,我们的描述符中有一个metadata-complete元素。如果这个元素存在并且设置为‘true’,容器将不会处理任何Annotation的信息,仅仅使用描述符中指定的配置信息。处于性能和安全性的考量,这种方法可以关闭自动查找行为。”
另一个选择是提供一种机制在应用程序的web.xml中禁用Servlet和Filter,这样任何在生产环境中不需要的Servlet,都可以应用程序的主web.xml来禁用,例如:
<servlet>
<servlet-name>FrameworkServlet</servlet-name>
<enabled>false</enabled>
</servlet>
可以把你的反馈发送到专家组jsr-315-comments@jcp.org。
查看英文原文:Servlet 3.0 Features Spark Debate本文是Productive Java with Ruby系列文章的第一篇,我将从单元测试这个话题开始,让Java的开发人员能够在实际工作中利用Ruby提高工作效率。
InfoQ中文站有幸与阿里软件的首席架构师赵进在一起探讨了SaaS的相关话题,包括SOA和ASP与SaaS的异同、云计算、SaaS的前景、它的关键技术、技术瓶颈等等。
在这篇文章中,Adrien Louis和Marc Dutoo在一个典型的ESB场景中讨论了编配和路由的区别和优缺点。他们讨论了几种连接服务的方法,从使用如自定义路由这样的低级别方法,到使用如工作流和编配这样面向业务的高级别方式,并总结说不存在“一边倒”的解决方案。
本文是根据7月26日InfoQ中文站在杭州举行的QClub活动(第三期)后半程小组讨论总结而成。主要内容包括如何在SOA系统中实现服务编排,如何保证分布式系统中的一致性和可用性,以及如何在实施SOA的过程中控制接口的粒度等。
人们很容易想当然的以为虚拟化技术仅仅应用于服务器。而在现实中,虚拟化这一苏醒的概念正被运用于各个层面,其中包括网络,存储以及应用基础架构。在这篇导论中,InfoQ将深入每个方面,详尽向您描述虚拟化技术的运用以及其优点与不足。
在这篇案例研究中,InfoQ对Adobe AIR和Amazon的简单存储服务(Simple Storage Service ,S3)在NASDAQ市场回放程序(NASDAQ Market Replay)中的应用进行了详细的分析。
没有回复
回复