WebLogic 10 技术预览版发布 - 基于 Spring Framework

工程 | Rod Johnson | 2007年2月11日 | ...

祝贺 WebLogic 团队发布 WebLogic 10 预览版,该版本通过了 Java EE 5 CTS 认证。很高兴看到 BEA 在 J2EE 1.4 的异常情况后,又回到了他们快速行动的传统。

这对 Spring 社区来说是个有趣的新闻,因为 WebLogic 10 在内部使用了Pitchfork。Pitchfork 项目是一个由 Interface21 领导并与 BEA 共同开发的开源项目,它在 Spring 之上实现了 EJB 3.0 拦截和 JSR-250 注入。它用于 WebLogic 10 EJB 容器和其他服务器部分,以满足新的……

为什么叫 Acegi?

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

在 Rod 最近关于Interface 名称起源的博客文章、最近的一篇讨论帖询问 Acegi Security 重命名的问题,以及去年年底我的同事Ben Hale建议撰写一篇关于“Acegi”名称起源的博客文章之后,我决定是时候这么做了!

首先,发音:“ah-see-gee”。现在我们已经解决了这个问题,让我们来看看它的起源。

  • 早在 90 年代初,我创建了一个电子公告板系统。我还记得使用我的第一个 300 波特调制解调器,并且实际观看字符以我阅读的速度出现!无论如何,BBS 需要一个名字,我非常喜欢“Midnight BBS”(或者说是“Lightning BBS”?)。在尝试向澳大利亚 BBS 注册机构注册我首选的名称后,我接到一个电话,告知我该名称已被占用。我搜索了另一个名称,没有发现冲突,并更改了我所有的屏幕(有人记得Avatar吗?)。然后我用新名称去注册 BBS,但另一个人刚刚抢先注册了相同的名称。大约在那个时候,澳大利亚大约有 800 个 BBS——这可是竞争激烈的行业!所以,我决定使用一个保证原创的东西:英语字母表的第 1、3、5、7 和 9 个字符。Acegi BBS 就这样诞生了。
  • 这是 BBS 的鼎盛时期。它有来自澳大利亚各地的用户,并且是我们的区号中第一个获得看似无限容量的 CD-ROM 的 BBS。我成为Fidonet的 3:624 网络协调员,并帮助在我们地区分发“回声邮件”。不久之后,人们开始寄送以“Acegi”为名的支票,因为他们希望获得更大的文件下载限制和访问 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”。但是,他们当时没有时间完全审核它,因此建议我将其作为“_____ Security System for 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。由于我们在 WAS 上有很多 Spring 用户,并且我需要测试应用程序,所以我决定是时候在我的工作笔记本电脑上运行 WAS 了。我说“之一”,是因为我目前正在使用我的 Mac(带有 OSX)和我的 ThinkPad(带有 Ubuntu)——最近我一直在使用 ThinkPad,因为我可以运行 Oracle XE 和 WAS,而无需使用像 Parallels 这样的虚拟机工具。我还是更喜欢 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**部分并不令人惊讶。它同时利用了面向对象概念中的接口(我一直非常热爱)以及系统接口的概念。例如,为现有的绿色屏幕系统添加Web接口——这正是我第一次想到公司名称时正在做的事情。

到目前为止,一切都很好。真正的问题在于数字。

与Spring的名称一样,一些理论比真实的解释更有趣。因此,让我们从我听说过的关于**21**的理论开始……

获取Spring新闻通讯

通过Spring新闻通讯保持联系

订阅

领先一步

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

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

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

查看全部