Oracle、开源和商品化

工程 | Rod Johnson | 2006 年 10 月 28 日 | ...

我在旧金山参加 Oracle World。我甚至在 Thomas Kurian 关于 Java 中间件的主题演讲中简短发言。但 Neelan 和我不得不在周二离开,错过了大新闻:Larry Ellison 宣布 Oracle 将为 Linux 提供支持

从开源业务的角度来看,这是一个有趣的事件。更广泛的影响是什么?

Oracle 正在为他们没有创建和不控制的开源产品提供支持。

这可能是由于多种原因

  • Linux 不是一个产品。它是一类技术,公司或组织负责组装、文档、分发和支持产品。
  • Linux 支持在一定程度上已经商品化。Red Hat 只是提供支持的几家分销商之一。
  • Linux 的领导权是分散的。Linus Torvalds 不为大型分销商工作;Red Hat 比大多数公司做得更多,但没有一家公司提供明确的领导。
  • Linux 的领导作用不如你想象的那么重要。Linux 主要不是创新的引擎,而是商品化的引擎。

不过,很有趣的是思考像 Oracle 这样的公司在提供…方面有什么限制。

Interface21 / Spring 在 2006 年甲骨文全球大会

工程 | Neelan Choksi | 2006 年 10 月 23 日 | ...

Rod 和我正在旧金山参加 2006 年甲骨文全球大会。这确实是一个盛大的场面。我无法决定“傲慢”还是“令人印象深刻”是描述它的正确方式,但数字不会说谎。他们预计大会将有 45000 人参加,旧金山市认为此次展会将为该市带来 5000 万至 6000 万美元的收入。显然,任何甲骨文员工都不允许住在机场以北的酒店。更令人震惊的事情之一是,城市为了会议,封闭了莫斯康门前霍华德街的一段路。

在今天上午由 甲骨文高级副总裁 Thomas Kurian 发表的 Oracle Develop 主题演讲中,Spring 处于核心位置。Thomas 请 Rod 上台,在主题演讲中描述 Spring 是什么以及 Spring 2.0 的新特性。Rod 还谈到了协作……

Spring 2.0 最终版,首日下载量超过 10,000

工程 | Rod Johnson | 2006 年 10 月 05 日 | ...

Spring 2.0 已于周二发布最终版!这是 Spring 团队 9 个月辛勤工作和大量用户反馈(感谢!)的成果,也是一个巨大的进步。

我保证我的下一篇博客将不再是关于下载数量的。我一直在尝试一些有趣的测试 @AspectJ 注解中切入点的方法,所以我希望下次能发布一些有趣的代码。

但我们刚刚注意到 SourceForge 上的一些惊人数字,所以我忍不住要发帖介绍它们。Spring 2.0 在发布后的 24 小时内就有超过 10,000 次下载!对 Spring 2.0 的兴趣已经积累了好几个月——一些用户已经在生产环境中使用了一个发布候选版本,其中包括欧洲一个著名的媒体网站——我认为Keith 的精彩发布页面

Spring Web Flow 1.0 RC4 发布

发布 | Keith Donald | 2006 年 10 月 05 日 | ...
亲爱的Spring社区,
 
我们很高兴地宣布 Spring Web Flow 1.0 RC4 已发布。
 

 

Spring Web Flow 是 Spring 社区的一个产品,专注于协调 Web 应用程序中的用户界面流程。

此版本包含许多改进和几个令人兴奋的新功能。我们认为它是迄今为止最稳定的版本,并且最终,此版本使 Spring Web Flow 1.0 最终路线图功能完善。Spring Web Flow 1.0 最终版将于下周发布,改动极小。在此期间,我们鼓励您测试 1.0 RC4,以帮助在 1.0 正式发布前发现任何剩余问题。

请注意,此版本中存在影响用户的更改。1.0 RC3 或更早版本的用户应查阅 升级指南,其中详细概述了这些更改。

1.0 RC4 中的新增和值得注意的特性列表令人兴奋,包括:

新增和值得注意

作为 Spring Web Flow 1.0 最终版之前的最后一个发布候选版,Spring Web Flow 1.0 RC4 引入了强大的新功能,例如渲染动作 (1)、评估动作 (2)、设置动作 (3)、闪存范围 (4)、流程执行属性 (5) 和始终在暂停时重定向 (6)。它提供了增强的文档、更好的流程定义验证、智能默认值以及用于配置流程执行引擎的完整自定义 Spring 2.0 配置模式 (7)。

  • (1) 渲染动作在响应渲染之前执行应用程序行为。当视图状态被要求进行可渲染视图选择时,渲染动作会被调用,无论是在进入时还是在由重定向或浏览器刷新按钮触发的刷新时。以下示例显示了一个渲染动作,它在呈现结果视图之前执行电话簿搜索。

    <view-state id="displayResults" view="searchResults">
        <render-actions>
            <bean-action bean="phonebook" method="search">
                <method-arguments>
                    <argument expression="flowScope.searchCriteria"/>          
                </method-arguments>
                <method-result name="results"/>
            </bean-action>
        </render-actions>
        <transition on="newSearch" to="enterCriteria"/>
        <transition on="select" to="browseDetails"/>
    </view-state>

  • (2) 评估动作根据流程执行状态评估表达式。表达式(默认基于 OGNL)可以针对流程执行的根 RequestContext 可访问的任何对象,包括任何范围(例如流程范围)中的对象。以下示例显示了一个评估动作,它调用“game”流程范围 bean 上的“makeGuess”方法
    <action-state id="makeGuess">
        <evaluate-action expression="flowScope.game.makeGuess(requestParameters.guess)">
            <evaluation-result name="guessResult"/>
        </evaluate-action>
        <transition on="CORRECT" to="showAnswer"/>
        <transition on="*" to="enterGuess"/>
        <transition on-exception="java.lang.NumberFormatException" to="enterGuess"/>
    </action-state>
  • (3) 设置动作设置范围类型(如流程范围)中的属性值。属性可以是顶级属性,也可以是嵌套属性路径中的属性。以下示例显示了一个设置动作,它将闪存范围中的“fileUploaded”属性设置为“true”。
    <action-state id="uploadFile">
        <action bean="uploadAction" method="uploadFile"/>
        <transition on="success" to="selectFile">
            <set attribute="fileUploaded" scope="flash" value="true"/>
        </transition>
    </action-state>
  • (4) 闪存范围是一种新的范围类型,用于在重定向和视图的任何刷新之间持久化属性。当事件被信号通知从视图中转换时,闪存范围将被清除。以下完整的流程定义示例显示了使用闪存范围将“fileUploaded”属性公开给 selectFile 视图状态,以便在成功上传后显示成功消息。
    <flow xmlns="http://www.springframework.org/schema/webflow"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.springframework.org/schema/webflow
                                           http://www.springframework.org/schema/webflow/spring-webflow-1.0.xsd">
   
        <start-state idref="selectFile"/>
       
        <view-state id="selectFile" view="fileForm">
            <transition on="submit" to="uploadFile"/>
        </view-state>
   
        <action-state id="uploadFile">
            <action bean="uploadAction" method="uploadFile"/>
            <transition on="success" to="selectFile">
                <set attribute="fileUploaded" scope="flash" value="true"/>
            </transition>
        </action-state>
       
    </flow>
  • (5) 流程执行属性允许您设置自定义属性,这些属性可以影响流程执行行为。以下示例显示了在 Portlet 环境中将“alwaysRedirectOnPause”属性设置为 false 的指令(其中重定向通常不适用)。
    <flow:executor id="flowExecutor" registry-ref="flowRegistry">
        <flow:execution-attributes>
            <flow:alwaysRedirectOnPause value="false"/>
        </flow:execution-attributes>
    </flow:executor>
  • (6) “始终在暂停时重定向”为您提供默认的 POST+REDIRECT+GET 行为,无需特殊编码。现在,默认情况下,当进入视图状态时,会自动发出重定向。这会触发对流程执行 URL 的刷新,该 URL 在会话处于活动状态时保持稳定。
  • (7) 新的 Spring 2.0 配置方言极大地简化了系统配置并提供了强大的验证和工具支持。配置 webflow 的基础设施现在只需定义两个元素,如下完整所示
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:flow="http://www.springframework.org/schema/webflow-config"
           xsi:schemaLocation="
               http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
               http://www.springframework.org/schema/webflow-config
               http://www.springframework.org/schema/webflow-config/spring-webflow-config-1.0.xsd">
   
        <!-- Launches new flow executions and resumes existing executions. -->   
        <flow:executor id="flowExecutor" registry-ref="flowRegistry"/>
       
        <!-- Creates the registry of flow definitions for this application -->
        <flow:registry id="flowRegistry">
            <flow:location path="/WEB-INF/flows/**-flow.xml"/>
        </flow:registry>
       
    </beans>

有关这些功能的更多信息,请参阅参考手册。Spring Web Flow 1.0 RC4 进一步完善了参考文档,提供了 70 页关于 SWF 用法的内容。手册可在线获取 HTMLPDF 格式。

入门

开始使用 Spring Web Flow 的最佳方法之一是查看和演练示例应用程序。我们建议查看所有示例,并根据需要从一开始就补充参考手册材料。此版本附带了十个示例应用程序,每个应用程序都演示了一组独特的产品功能。这些示例是

  1. 电话簿 - 演示大多数功能(包括子流程)的原始示例
  2. 售卖商品 - 演示带有条件转换、流程执行重定向、自定义文本字段格式和续期的向导
  3. 流程启动器 - 演示启动和恢复流程的所有可能方式
  4. 项目列表 - 演示 REST 风格的 URL 和内联流程
  5. 运费 - 演示 Spring Web Flow 与 Ajax 技术结合使用
  6. 猜数字 - 演示有状态 bean、评估动作和“单一键”流程执行重定向。
  7. 生日 - 演示 Struts 集成
  8. 文件上传 - 演示多部分文件上传、设置动作和闪存范围
  9. 电话簿-Portlet - Portlet 环境中的电话簿示例(请注意流程定义没有改变)
  10. 售卖商品-JSF - JSF 环境中的售卖商品示例

要快速评估示例应用程序,只需

  1. 解压 spring-webflow-1.0-rc4.zip 发布归档文件
  2. 访问 projects/spring-webflow/build-spring-webflow 目录
  3. 执行“ant dist”目标。
  4. 请参阅“target/artifacts”目录,其中包含每个示例的可部署 .war 文件以及已解压的 war 目录。
有关发布归档内容和示例的更多信息,请分别参阅 release readme.txt 和 projects/spring-webflow/spring-webflow-samples/readme.txt。

所有示例项目都是 Spring IDE 项目,可直接导入 Eclipse。

感谢所有支持此版本的人。Spring Web Flow 1.0 终于...指日可待。

祝您使用愉快!

Spring Web Flow 团队

Spring 2.0 Maven POMs 已就绪

工程 | Ben Hale | 2006 年 10 月 04 日 | ...

在今天众多 Spring 2.0 公告中,这是最后一个。Spring 2.0 的 Maven POM 已上传到 Spring 的私有仓库。如果你想直接指向它,请查看https://svn.sourceforge.net/svnroot/springframework/repos/repo/。如果你想等待,它们应该会在接下来的几天内复制到 Ibiblio Maven 仓库。

对于那些喜欢浏览更多元数据的人来说,SourceForge 的ViewVC 接口是一个不错的选择。请记住,你应该使用前一个链接作为 maven 的 URL,但你可以使用后一个链接进行浏览。


更新于 10/3 22:03:添加了关于 ViewVC 的段落

Spring 2.0 最终版发布

发布 | Rod Johnson | 2006 年 10 月 3 日 | ...

我们很高兴地宣布,备受期待的 Spring Framework 2.0 最终版现已发布。

Spring 2.0 Released

下载 | 文档 | 更新日志 

作为领先的全栈 Java/Java EE 应用程序框架,Spring 为许多项目带来了显著的好处,减少了开发工作和成本,同时提高了测试覆盖率和质量。

经过 9 个月的积极开发,这个稳定、生产级的版本终于发布了。在如此短的时间内,Spring 2.x 系列已经取得了巨大的成熟,受益于 9 个里程碑版本的超过 150,000 次早期访问下载,解决了超过 750 个 JIRA 问题,其中 50 个引入了主要的新功能。

有什么新内容?

我们相信三个属性概括了用户对 Spring 2.0 系列的期望:简单强大成熟


2.0 版对框架的整体使用模型带来了重大简化。正如我们现有用户所知,Spring 的核心是 Bean 容器,它驱动您的 Java 和 Java EE 应用程序的配置。在 2.0 版中,通过引入自定义 Bean 配置方言,许多常见的配置任务得到了简化。这对您意味着什么?

这意味着您现在可以

  • 在一行配置代码中使您的业务服务具有事务性。
  • 在一行配置代码中从 JNDI 查找对象。
  • 在一行配置代码中将外部化属性公开给您的服务。
  • 使用单个注解将一致的异常处理策略应用于您的数据访问对象。
  • 通过定义单个配置标签调用无状态远程 EJB。不再需要自定义服务定位器或业务委托。
简化继续贯穿框架的模块,让您能够
  • 在一行代码中编写参数化 JDBC 查询。
  • 在部署 Spring MVC 控制器时应用约定优于配置
  • 在开发输入表单时使用 Spring JSP 标签减少输入。


Spring 2.0 的一个主要目标是让常见任务变得更容易。2.0 版本也为以优雅的方式解决更困难的问题开辟了令人兴奋的新途径。在 2.0 中,您可以

  • 使用 AspectJ 简洁的切入点表达式语言,将自定义行为编织到程序执行的多个点。
  • 以事务和线程安全保证接收异步 JMS 消息。观看演示
  • 为您的应用程序开发自己的Bean 配置方言
  • 以线程安全的方式从自定义范围(如“请求”和“会话”范围)注入对象。
  • 从您的 Java 应用程序调用 Groovy、Beanshell 和 JRuby 脚本。
  • 使用复杂的线程和池选项异步调度任务。

2.0 版建立在 Spring 1.x 奠定的基础之上。这个新版本提供了主要的新功能,同时尽可能保持向后兼容性。

自 2004 年 3 月发布以来,Spring 1.x 已被下载超过一百万次,使使用普通 Java 对象 (POJO) 开发复杂应用程序成为事实上的标准。2.x 系列在此广泛认可的最佳实践之上,提供了新的简化和强大功能,同时完全兼容已建立的 Spring 1.x 系列。用户可以期望他们的升级是直接的;在大多数情况下,只需将 1.2.8 JAR 文件替换为 Spring 2.0 中包含的 JAR 文件。

请享受,并感谢您

Spring 2.0 代表了过去一年许多人的共同努力。从 Interface21 的主要开发人员 Juergen、Rob、Rick 和 Costin,到我们的支持合作伙伴 BEA 和 Oracle,再到社区中贡献创新、补丁、文档、错误报告和测试的许多人——这里面包含了大量的汗水、努力和泪水。我们衷心希望您在使用这个新版本时感到像我们构建它时一样快乐。享受它吧,并且请放心:工作不会止步于此。

此致,

Spring 团队

 


其他资源

  • 参加 2006 年 Spring 体验大会,这是 Spring 社区的顶级会议,将于 12 月 7 日至 10 日在佛罗里达州好莱坞举行。在 10 月 16 日前注册可为您的团队获得早鸟折扣。
  • 通过路线图跟踪未来的 Spring 2.x 开发
  • 请收藏此页面,以获取更多演示新 2.0 功能的截屏视频和代码示例。

利用泛型元数据

工程 | Rob Harrop | 2006 年 09 月 29 日 | ...

我与客户交谈时经常听到一种普遍的误解,认为 Java 类文件中的所有泛型信息都会被擦除。这完全是错误的。所有静态泛型信息都会被保留,只有关于单个实例的泛型信息会被擦除。所以,如果我有一个实现 List<String> 的类 Foo,那么我可以在运行时确定 Foo 实现的是以 String 为参数的 List 接口。但是,如果我在运行时实例化一个 ArrayList<String> 的实例,我无法通过该实例来确定其具体的类型参数(但我可以确定 ArrayList 需要类型参数)。在这篇文章中,我将向您展示一些可用的泛型元数据的一个实际用途,这些元数据可以简化策略接口和实现(根据它们处理的对象类型而有所不同)的创建。

我在许多应用程序中看到的一种模式是使用某种策略接口,其具体实现分别处理特定的输入类型。例如,考虑投资银行业务中的一个简单场景。任何上市公司都可以发布公司行为,从而导致其股票发生实际变化。一个主要例子是股息支付,它按每股向所有股东支付一定数量的现金、股票或财产。在投资银行内部,接收这些事件的通知并计算由此产生的权益非常重要,以便使交易账簿与正确的股票和现金价值保持同步。

作为一个具体示例,考虑 BigBank 持有 1,200,000 股 IBM 股票。IBM 决定派发每股 0.02 美元的股息。因此,BigBank 需要接收股息行动的通知,并在适当的时间更新其交易账簿,以反映额外的 24,000 美元可用现金。

权益的计算将根据执行的公司行动类型而有很大差异。例如,合并很可能导致一家公司的股票损失和另一家公司的股票增加。

如果我们考虑这在 Java 应用程序中可能是什么样子,我们可以假设会看到类似(大大简化)的示例


public class CorporateActionEventProcessor {

    public void onCorporateActionEvent(CorporateActionEvent event) {
        // do we have any stock for this security?

        // if so calculate our entitlements
    }
}

关于事件的通知可能通过多种机制从外部方传入,然后发送到这个 CorporateActionEventProcessor 类。CorporateActionEvent 接口可能通过许多具体类实现


public class DividendCorporateActionEvent implements CorporateActionEvent {

    private PayoutType payoutType;
    private BigDecimal ratioPerShare;

    // ...
}

public class MergerCorporateActionEvent implements CorporateActionEvent {

    private String currentIsin; // security we currently hold
    private String newIsin; // security we get
    private BigDecimal…

波士顿 Spring 小组首次会议

工程 | Mark Fisher | 2006 年 09 月 25 日 | ...

我非常激动地宣布,新英格兰 Java 用户组 (New England Java Users Group) 内的 Spring SIG 将于本周四(2006 年 9 月 28 日)举行首次会议。Ramnivas Laddad(《AspectJ in Action》作者和 Interface21 首席工程师)将发表题为“AspectJ for Spring Developers”的演讲。这将是了解 Spring 2.0 中 AspectJ 集成增强功能的好机会。

你可以在此处阅读详细信息,如果你打算参加,请务必点击页面左侧的“注册”链接。

这个小组将为“所有与 Spring 相关的事物”提供一个很棒的论坛,最初大约每季度开会一次。我期待着建立一个社区,并亲自会见波士顿地区的 Spring 用户。

特别感谢 NEJUG 主席 Steven Maienza 和 NEJUG 成员,他们表达了组建 Spring 小组的兴趣,并在我搬到波士顿之前就将其付诸实施。谢谢!

好久不见,再次写博客

工程 | Rod Johnson | 2006年9月22日 | ...

欢迎来到我的新博客!自2004年8月以来,我一直没有写博客,但受到了我们新团队博客的启发,试图提升自己的水平。我也被同事们在博客上投入的精力所“羞愧”。

目前,我对许多话题都非常兴奋,并承诺将来写博客的频率会比每两年一次多得多……敬请期待我对Spring 2.0及更高版本、面向对象设计、AOP以及企业级Java未来的思考。

与此同时,我将分享我未来几个月的旅行日程(这至少可以给我一个不总是定期发帖的借口)。

  • 10月1-6日:在丹麦奥胡斯举行的JAOO会议。
  • 10月10-11日:在布拉格举行的BEAWorld活动。布拉格总是一座美丽的城市,尽管它不再是一个便宜的旅游目的地。
  • 10月23日:在旧金山举行的Oracle Develop活动(Oracle Open World大会的新组成部分)上,就Spring 2.0发表主题演讲。这看起来将是一次大型会议。
  • 11月:我将在澳大利亚度过11月的大部分时间,部分是为了探亲访友,部分是因为Interface21在那里开设了一个新办事处,由Acegi Security负责人Ben Alex领导。我将在各种活动中发表演讲,包括悉尼和布里斯班的Spring用户组、悉尼JUG以及墨尔本的一个论坛。
  • 11月27-28日:在新加坡举行的JAX Asia会议。这是一个新会议。德国的JAX会议规模宏大且内容有趣,所以我很期待。时间安排得非常巧合,这正是我从悉尼返回伦敦的时候,所以我实际上就在附近……雅加达也有一个JAX会议,但我对未来几个月的旅行忍耐度已经达到了极限,所以无法承诺参加。
  • 12月7-10日:这将是最有趣的。在佛罗里达州好莱坞举行的The Spring Experience。今年我们预计将有500多名开发者参加,并一如既往地邀请到优秀的演讲者。Keith与No Fluff Just Stuff的Jay Zimmerman一起,在组织方面做得非常出色。
  • 12月11-15日:安特卫普的JavaPolis。这是一次大型欧洲会议,对与会者来说非常有价值,并且总是有顶级的演讲嘉宾阵容——这可能是因为组织者Stephan Janssen似乎认识Java社区中的所有重要人物。当然,比利时总是值得一游,即使只是为了啤酒。我特别喜欢比利时白啤酒。
哎呀。光是写下这份清单就让我感到疲惫。幸运的是,过去几个月我飞行的次数比平时少了很多,所以避开了英国机场的延误和限制。但很明显,到12月底,我将急需休息……

感谢大家!Spring Framework下载量突破100万次

工程 | Rod Johnson | 2006年9月22日 | ...

几周前,Spring Framework项目在其SourceForge主页上的下载量突破了100万次。真实的总数可能要高得多,因为这个数字不包括每日构建或Spring可以下载的其他站点。当然,Spring也被包含在大量且不断增长的其他产品的发行版中。还有Spring.NET……

最重要的是,Spring 势头持续增长:数字增长非常迅速。下载次数最多的 Spring 版本是最近的生产版本 1.2.8,已被下载 175,000 次…

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看所有