Spring IDE 正在强势发展

工程 | Rod Johnson | 2007 年 1 月 22 日 | ...

上个月的 Spring Experience 大会我玩得很开心。一个惊喜是 Spring IDE 团队最近的工作范围之广。我在会议上多次遇到 Spring IDE 开发者 Christian Dupuis,每次他似乎都实现了一个新功能……

即将发布的 Spring IDE 2.0 版本是一个全面的更新,旨在匹配 Spring 2.0 中的新功能。Spring IDE 团队在两项主要任务上取得了巨大进展:XML 扩展命名空间和 AOP 增强。 (顺便说一句,如果您想知道我为什么有一段时间没有发帖,我花了很多时间在 InfoQ 上写了一篇 Spring 2.0 更新文章……

使用 AJAX 和 Spring 集成进行 Java 到 JavaScript 编译

工程 | Ben Alex | 2007 年 1 月 22 日 | ...

一段时间以来,我一直对以客户端为中心的基于 Web 的用户界面感兴趣。这些第四代框架的特点是其基于组件、事件驱动的编程模型,并专注于完全驻留在客户端的表示逻辑。以这种方式针对 Web 浏览器通常需要使用 JavaScriptFlash,这本身就带来了一些独特的挑战。

如果我们能够用 Java 编程并自动生成 JavaScript 或 Flash 运行时模块,就可以解决其中许多挑战。目前实现这一目标的两个知名产品分别是 Google Web Toolkit (GWT) 和 Open Laszlo。两者均在 OSI 批准的许可证下提供,并拥有活跃的社区,以及各自独特的复杂性。一个考虑因素是它们在多大程度上实现了提供一个透明的基于 Java 的开发环境以用于 Web 浏览器部署的目标。这个考虑因素有几个方面,包括 IDE 支持、调试集成、反射能力、运行时小部件绑定等等。所有这些……

在 Ubuntu 上安装 WebSphere Application Server 6.1

工程 | Rob Harrop | 2007 年 1 月 19 日 | ...

最近我一直在和一个客户合作,处理 WAS 6.1 的一些工作。由于我们有很多 Spring 用户在 WAS 上,我需要测试应用程序,所以我决定是时候在我的一个工作笔记本电脑上运行一个 WAS 副本了。我之所以说“一个”,是因为我目前在我的 Mac(使用 OSX)和我的 ThinkPad(使用 Ubuntu)上工作——最近我只使用 ThinkPad,因为我可以在没有 Parallels 等虚拟机工具的情况下运行 Oracle XE 和 WAS。我仍然更喜欢 Mac,但老实说,日常使用中并没有太大区别——我只是怀念一些更有用的 Mac 工具,比如 SpotlightQuicksilverTextMateNewsFire

言归正传,回到主题——在 Ubuntu 上安装 WAS 6.1。我使用的是 Ubuntu Edgy,我第一次尝试安装完全失败了,我就是搞不明白为什么。幸运的是,快速的 Google 搜索找到了 这篇 文章。我完全不知道/bin/sh链接到 dash 而不是 bash——到底是什么让他们这样做的。我不太喜欢建议的解决方案:运行安装程序,让它失败,然后更改已安装目录中的所有脚本。相反,我只是重新链接了/bin/sh使用一个快速的sudo unlink /bin/sh然后是sudo ln -s /bin/bash /bin/sh。之后,安装程序运行得像梦一样,我在大约 15 分钟内完成了 WAS 的安装并运行起来。

即使在我的 ThinkPad 上同时运行 Oracle XE,WAS 也运行得相当快。WAS 最好的地方之一是它提供的工具(管理控制台、命令行工具)非常健壮。管理控制台的性能非常出色——许多其他服务器的控制台都非常慢。

一座太远的桥

工程 | Rob Harrop | 2007 年 1 月 16 日 | ...

在我上一篇文章中,我介绍了一种创建策略类的方法,该方法充分利用了应用程序中存在的任何泛型元数据。在那篇文章的末尾,我展示了这段代码片段

EntitlementCalculator calculator = new DividendEntitlementCalculator();
calculator.calculateEntitlement(new MergerCorporateActionEvent());

您会记得DividendEntitlementCalculator被定义为

public class DividendEntitlementCalculator implements EntitlementCalculator<DividendCorporateActionEvent> {

    public void calculateEntitlement(DividendCorporateActionEvent event) {

    }
}

因此,将MergerCorporateActionEvent的实例传递给calculateEntitlement方法是不正确的。DividendEntitlementCalculator然而,正如我在上一篇文章中提到的,该代码将编译。为什么?嗯,EntitlementCalculator.calculateEntitlement()被定义为接受任何扩展CorporateActionEvent的类型,因此它应该编译。那么在这种情况下,运行时会发生什么,Java 如何强制执行类型安全?嗯,正如您可能想象的,运行此代码会得到一个ClassCastException,提示您无法强制转换MergerCorporateActionEvent转换为DividendCoporateActionEvent。通过这种方式,Java 可以为您的应用程序强制执行类型安全——MergerCorporateActionEvent不可能“爬入”期望DividendCorporateActionEvent的方法中。

这里真正的问题是:“那个ClassCastException是从哪里来的?”答案很简单——Java 编译器通过引入一个桥接方法,添加了创建和抛出它的代码。桥接方法是编译器将生成并添加到您的类中的合成方法,以确保在面对泛型类型时的类型安全。

在上面所示的例子中EntitlementCalculator.calculateEntitlement可以调用任何与CorporateActionEvent类型兼容的对象。然而,DividendEntitlementCalculator只接受与DividendCorporateActionEvent类型兼容的对象,但是,由于您可以通过DividendEntitlementCalculator调用EntitlementCalculator接口,它也必须接受CorporateActionEvent。那么这在编译后的类文件中意味着什么呢?我们有用户提供的方法

public void calculateEntitlement(DividendCorporateActionEvent event) {
    System.out.println(event);
}

这会转化为以下字节码

public void calculateEntitlement(bigbank.DividendCorporateActionEvent);
  Code:
   Stack=2, Locals=2, Args_size=2
   0:   getstatic       #2; //Field java…

使用存根和模拟进行单元测试

工程 | Dave Syer | 2007 年 1 月 15 日 | ...

前几天我与一些客户在一起,他们问我关于单元测试和模拟对象的问题。我决定将我们讨论的一些内容写成一篇关于为单元测试创建依赖项(协作者)的教程。我们讨论了两种选择,存根和模拟对象,并给出了一些简单的例子来说明两者的用法、优点和缺点。

在单元测试中,通常会模拟或存根被测试类的协作者,以便测试独立于协作者的实现。这也是一项非常有用的能力,能够……

Spring 2.0 有什么新奇酷炫的?

工程 | Ben Alex | 2006 年 12 月 17 日 | ...

上个月,Rod Johnson 在三次澳大利亚 Spring 用户组会议上发表了一场题为“Spring 2.0 有什么新奇酷炫的”的演讲。Rod 在这些会议上提到我将提供他的演示文稿,所以就在这里

还有一些其他近期演讲,人们也一直在给我发邮件询问。不分先后,这是最新的内容

对于那些参加了演讲的人,我希望你们喜欢。

为什么叫 Interface21?

工程 | Rod Johnson | 2006 年 12 月 16 日 | ...

几周前,我写了一篇关于 Spring 名称的由来的博客。我们还收到许多关于 Interface21 名称由来的问题。

对于读过我的书或考虑过 Spring 设计的人来说,interface 部分 hardly 令人惊讶。它既利用了接口的 OO 概念(我一直深爱),也利用了系统接口的概念。例如,为现有绿屏系统添加一个 Web 接口——这正是我第一次想到公司名称时正在做的事情。

到目前为止,一切顺利。真正的问题出在数字上。

和 Spring 这个名字一样,有些理论比真正的解释更有趣。所以我们从我听到的关于 21 的理论开始……

getConfigLocations() 怎么了?

工程 | Ben Hale | 2006 年 12 月 08 日 | ...

上周我在一个客户现场,人群中有一个问题:“为什么 getConfigLocations() 不再是抽象的了?”在客户面前工作一段时间后,你很少会说不出话来,但我当时就是。老实说,我第一个想法是客户不可能对。但是瞧,在 AbstractSingleSpringContextTests 的修订版 1.3 中,它清楚地表明 getConfigLocations() 不再是抽象的。我没有针对 2.0.1 创建任何新的集成测试,所以我甚至没有看到这个改变。

对此感到惊讶,我给 Juergen 发了一封电子邮件,内容是……

2006 年 Spring Experience 大会值得期待之处……

工程 | Keith Donald | 2006 年 11 月 30 日 | ...

这些场地照片是昨天拍摄的(靠近这样的地方是 Interface21 在佛罗里达州设有办公室的福利之一)。

 
雄伟的威斯汀外交官酒店
配备无边泳池
下方有一条缓慢流淌的河流
位于美丽的海滨地带

我们将把其中几张照片融入主会议横幅,悬挂在 Diplomat 高耸的天花板上。一切都已准备就绪,将是一场精彩的盛会。下周在 Spring Experience 见!

SimpleJdbcTemplate:Spring 2.0 和 Java 5

工程 | Ben Hale | 2006 年 11 月 28 日 | ...

The Spring Experience 大会临近之际,我一直很忙,但我注意到 Rod 在博客方面非常活跃。所以今天在机场和飞机上的一些空闲时间里,我决定写一点博客。

我们 Spring 社区面临的最大平衡挑战之一是确保我们保持向后兼容性,同时仍能创新。这种创新的一部分是利用 Java 后续版本(如 Java 5)中的新特性和构造。自从 1.2.x 分支以来,我们已经看到了一些这方面的内容,例如 @Transactional 注解和我们基于 @ManagedResource 注解的 JMX 自动检测。最终,这些都是很棒的功能,并且大大简化了开发(至少是我的开发),但它们实际上只是将元数据移到代码中。我们还没有看到的是……

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有