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 在 Oracle OpenWorld 2006 上

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

Rod 和我正在旧金山的Oracle OpenWorld 2006。这确实是一个景象。“傲慢”还是“令人印象深刻”更适合用来形容它,我难以决定,但数字不会说谎。他们预计会议将有 45000 人参加,旧金山市认为此次展会将为该市带来 5000 万至 6000 万美元的收入。显然,不允许任何 Oracle 员工住在机场以北的酒店。更令人震惊的事情之一是,该市封锁了 Moscone 前面 Howard 街区的一部分,用于此次会议。

在今天上午由Oracle 高级副总裁 Thomas Kurian发表的Oracle Develop 主题演讲中,Spring 处于中心位置。Thomas 让 Rod 上台,介绍 Spring 是什么以及 Spring 2.0 的新功能。Rod 还谈到了合作……

Spring 2.0 正式版,第一天下载量超过 10,000 次

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

Spring 2.0 于周二正式发布!这是 Spring 团队 9 个月辛勤工作的成果,以及大量的用户反馈(谢谢!)它是一个巨大的进步。

我保证我的下一个博客将不会再讨论下载数字了。我一直在尝试一些有趣的测试 @AspectJ 注解中切点的方法,所以我希望下次能发布一些有趣的代码。

但我们刚刚注意到 SourceForge 上的一些惊人数据,所以我忍不住要发布它们。在*最初的 24 小时内*,Spring 2.0 的下载量超过 10,000 次!对 Spring 2.0 的兴趣已经持续数月——包括欧洲一家知名的媒体网站在内的一些用户已经在生产环境中使用候选版本——我认为Keith 精彩的发布页面……

Spring Web Flow 1.0 RC4 发布

发布 | Keith Donald | 2006年10月5日 | ...
亲爱的 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">
   
        <!-- 启动新的流程执行并恢复现有执行。 -->   
        <flow:executor id="flowExecutor" registry-ref="flowRegistry"/>
       
        <!-- 创建此应用程序的流程定义注册表 -->
        <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.txt 和 projects/spring-webflow/spring-webflow-samples/readme.txt。

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

感谢所有支持此发行版的人。Spring Web Flow 1.0 现在……终于……即将推出。

祝您使用愉快!

Spring Web Flow 团队

Spring 2.0 Maven POM 已准备好

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

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

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


2006年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 系列已经发展成熟,受益于超过 150,000 次早期访问下载(跨越 9 个里程碑版本),解决了超过 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 团队

 


其他资源

  • 观看 Juergen 和 Rob 与 InfoQ 就 Spring 2.0 的目标进行的 访谈
  • 参加 12 月 7 日至 10 日在佛罗里达州好莱坞举行的 Spring 社区顶级会议 Spring Experience 2006。在 10 月 16 日之前注册,即可为您的团队获得早鸟折扣。
  • 使用 路线图 跟踪未来的 Spring 2.x 开发。
  • 收藏此页面,以便了解后续推出的更多屏幕录像和代码示例,这些示例将演示新 2.0 功能的实际应用。

利用泛型元数据

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

在与客户交谈时,我经常听到一个常见的误解,即所有关于泛型类型的信息都会从您的 Java 类文件中擦除。这完全是错误的。所有静态泛型信息都将保留,只有单个实例的泛型信息会被擦除。因此,如果我有一个实现List<String>Foo类,那么我可以在运行时确定Foo实现了由String参数化的 List 接口。但是,如果我在运行时实例化一个ArrayList<String>的实例,则我无法获取该实例并确定其具体的类型参数(我可以确定ArrayList需要类型参数)。在本篇文章中,我将向您展示一些可用泛型元数据的实际用法,这些用法简化了策略接口和实现的创建,这些接口和实现因其处理的对象类型而异。

我在许多应用程序中看到的一种模式是使用某种策略接口,其具体实现分别处理特定的输入类型。例如,考虑投资银行领域的一个简单场景。任何公开交易的公司都可以发行公司行为,这些行为会对其股票带来实际变化。一个关键的例子是股息支付,它向所有股东每股支付一定数量的现金、股票或财产。在投资银行中,接收这些事件的通知并计算由此产生的权利对于保持交易账簿与正确的股票和现金价值同步至关重要。

作为对此的具体示例,考虑一下持有 1,200,000 股 IBM 股票的大银行 BigBank。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…

波士顿春季集团第一次会议

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

我很高兴地宣布,新英格兰 Java 用户组中的 Spring SIG 将于本周四(2006 年 9 月 28 日)举行第一次会议。Ramnivas Laddad(《AspectJ in Action》一书的作者和 Interface21 首席)将发表题为“面向 Spring 开发人员的 AspectJ”的演讲。这将是一个绝佳的机会,可以了解 Spring 2.0 中 AspectJ 集成的增强功能。

您可以点击此处查看详细信息,如果您计划参加,请务必单击页面左侧的“注册”链接。

这个小组将为“所有 Spring 相关内容”提供一个很好的论坛,最初将大约每季度举行一次会议。我期待着建立一个社区,并亲自结识波士顿大都会地区的 Spring 用户。

特别感谢 NEJUG 主席 Steven Maienza 和那些表示有兴趣成立 Spring 小组并在我搬到波士顿之前就启动了这个小组的 NEJUG 成员。谢谢!

很久没写博客了

工程 | 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日:这将是最有趣的事情。Spring 体验,在佛罗里达州好莱坞举行。今年我们预计将有 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 社区中所有即将举行的活动。

查看全部