为什么叫Acegi?

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

在 Rod 最近关于Interface 名称起源的博客,以及最近关于 Acegi Security 更名的讨论,加上去年底我的同事 Ben Hale 建议我写一篇关于“Acegi”名称起源的博客,我决定是时候这样做了!

首先,发音是:“啊-西-吉”。既然我们已经搞定了这个,那么我们来了解一下它的来源。

  • 早在20世纪90年代初,我创办了一个公告板系统。我仍然记得我第一次使用300波特率调制解调器,并且实际上是看着字符以我能阅读的速度出现!总之,BBS需要一个名字,我很喜欢“午夜BBS”(或者是不是“闪电BBS”?)。在尝试向澳大利亚BBS注册局注册我喜欢的名字后,我接到一个电话,被告知这个名字已经被占用了。我寻找了另一个名字,没有发现冲突,并更改了我所有的屏幕(有人记得Avatar吗?)。然后我打算用新名字注册BBS,但另一个人刚刚抢先注册了相同的名字。当时澳大利亚大约有800个BBS——竞争非常激烈!所以,我决定选择一个保证是原创的名字:英文字母的第1、3、5、7和9个字符。于是Acegi BBS诞生了。
  • 这是BBS的鼎盛时期。它拥有来自澳大利亚各地的呼叫者,也是我们区号中第一个获得看似无限容量的CD-ROM的BBS。我成为了Fidonet的3:624网络协调员,并帮助在我们的区域内分发“echomail”。不久,人们开始寄来抬头为“Acegi BBS”的支票,因为他们想要更大的文件下载限制和访问Fidonet的网邮件。
  • 由于我需要兑现名称中带有“Acegi”的支票,所以在1993年初我们决定注册一个公司名称。Acegi Computer Technology被选中,人们愉快地据此开具支票。
  • 大约在1995年,我因工作搬到悉尼。拨号上网刚开始在澳大利亚向公众开放(调制解调器接入每小时仍然需要大约5美元!)。由于BBS的大部分用户来自特定本地区域,而我即将离开该区域,所以我把Acegi BBS交给了朋友继续运营。他后来也搬家了,又把BBS传给了另一个朋友。之后我就失去了联系。我在Google上搜索了“Acegi BBS”,甚至找到了1995年的一份旧记录
  • 到1996年,我的IT项目需要一家公司,于是Acegi Technology Pty Limited诞生了。此后一直运营至今。
  • 大约在2003年11月,我写出了最终成为Acegi Security的代码。我把它打包成一个ZIP文件,发给了Rod和Juergen。我提议新项目命名为“Spring Security”。然而,他们当时没有时间全面审查它,所以建议我直接以“_____ Spring安全系统”的形式发布。因此,我将“Acegi”作为前缀加入了名称。截至今天,Google搜索“Acegi”有大约660,000个结果,其中几乎全部都与该安全框架相关。
何去何从?名称的下一阶段是“分叉”。Acegi Technology Pty Limited 将继续运营,而 Acegi Security 将更名为“Spring Security”。我们更名有几个充分的理由。然而,这不仅仅是一个更名练习。它实际上是一个重新定位,将 Acegi Security 进一步融入 Spring 产品组合。

对于那些还没有听说过 Spring 组合产品的读者,你们将在未来几个月内更多地听到它。Spring 实际上是一个相关的产品家族,在技术和文化维度上具有可比性。Spring 组合中的每个产品都共享一致的架构质量、关键设计模式、代码库、文档、测试覆盖率、友好的社区、开源许可、集成的示例、发布路线图以及来自 Interface21 的商业服务(例如深入的培训和支持)的可获得性……

动态数据源路由

工程 | Mark Fisher | 2007年1月23日 | ...

Spring 2.0.1 引入了 AbstractRoutingDataSource。我相信它值得关注,因为(根据客户的频繁提问)我预感有很多“自制”的解决方案在解决这个问题。再加上它实现起来很简单但又容易被忽视的事实,现在我有几个理由来掸去团队博客我这个角落的灰尘了。

总体的想法是,一个路由 `DataSource` 作为中介——而“真实”的 DataSource 可以在运行时根据查找键动态确定。一个潜在的用例是确保标准 JTA 不支持的事务特定的隔离级别。为此,Spring 提供了一个实现:`IsolationLevelDataSourceRouter`……

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 批准的许可提供,并拥有活跃的社区,同时也各自有其独特的复杂性。一个考虑因素是,它们在多大程度上实现了提供针对 Web 浏览器部署的透明的基于 Java 的开发环境的目标。这个考虑因素有几个方面,包括 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 Web Flow 1.0.1 发布

发布 | Keith Donald | 2007 年 1 月 11 日 | ...

亲爱的Spring社区,

我们很高兴地宣布 Spring Web Flow 1.0.1 已经发布。

 

Spring Web Flow 是下一代 Java Web 应用程序控制器框架,允许开发人员将用户操作建模为称为流的高级模块。该框架提高了生产力和可测试性,同时为强制执行导航规则和管理应用程序状态提供了强大的解决方案。

发布说明

Spring Web Flow 1.0 在两个月内下载量超过 10,000 次,并被财富 500 强公司广泛使用。这是第一个 1.0 维护版本,包括自 1.0 最终版以来报告的错误修复,并引入了一些次要增强功能。请参阅更新日志了解所有详细信息。

入门

开始使用 Spring Web Flow 的最佳方法是下载发布版本,阅读Erwin 的实用介绍,并逐步学习示例应用程序。我们建议审查所有示例,从 Phonebook 开始,根据需要补充参考手册材料。此版本附带了十个示例应用程序,每个应用程序都演示了一组独特的产品功能。

祝您使用愉快!

Keith Donald 和 Erwin Vervaet
Spring Web Flow 项目负责人

Spring 2.0 有什么新奇酷炫的?

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

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

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

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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看所有