Spring For JavaServerFaces - TSSJS幻灯片和演示

工程 | Keith Donald | 2008年3月27日 | ...

今天,我将在拉斯维加斯的 TSSJS 上做题为Spring for Java Server Faces的演讲。本次演讲将探讨 JSF 和 Spring 如何协同工作,并引导听众了解集成这两种技术的几种方法。

您可以查看幻灯片,并根据需要使用。

在演讲中,我概述了两种集成 JSF 和 Spring 的方法。第一种方法是我所谓的“以 JSF 为中心”的方法,这是大多数具有传统 JSF 背景的人员今天采用的集成方法。第二种方法是我所谓的“以 Spring 为中心……”

在 Spring MVC 中使用混合注解和 XML 方法进行请求映射

工程 | Rossen Stoyanchev | 2008年3月24日 | ...

在 Spring 2.5 中,可以使用注解来配置 web 应用的所有部分。在 Web 层中应用注解尤其令人感兴趣,因为开发人员传统上依赖 SimpleFormController 和 MultiActionController 来处理表单页面。注解的引入创建了第三种选择,它不需要基类,同时仍然提供以前方法的灵活性。

虽然很容易看到使用带注解的 POJO 来实现控制器是很优雅的,但在 URL 到控制器的领域,其好处并不那么明显……

SpringSource 工具套件发布

工程 | Christian Dupuis | 2008年3月20日 | ...

今年的EclipseCon是我们公司第一次参加。我们做了一些演讲,都受到了好评,我们还宣布了测试计划,用于SpringSource 工具套件。总的来说,我们玩得很开心,并且从 Eclipse 社区获得了关于 Spring 产品组合中的项目以及我们在 web 领域所做的工作的很多反馈。我将在接下来的几周内将所有反馈转发给项目负责人。由于 EclipseCon 今天就要结束了,我终于有时间坐下来写一下我们在会议上介绍的内容。

我们在周一的BoF期间发布了 SpringSource 工具套件的个人使用版 (STS),我花了很多时间与人们讨论它带来的额外价值。在这个博客中,我将更详细地介绍 SpringSource 工具套件的功能。首先,我多次听说人们认为 SpringSource 工具套件的发布意味着我们将停止改进和塑造Spring IDE。请让我说明一下,这绝对不是事实;实际上,事实恰恰相反,从查看 Spring IDE JIRA 和 Subversion 代码库就可以看出这一点。事实上,自从我 1 月份加入 SpringSource 以来,在同时开发工具套件的同时,我能够增加在 Spring IDE 上花费的时间。

SpringSource 工具套件的目标是为您提供在 Eclipse 平台上使用 Spring 产品组合进行企业开发的**最先进的开发工具**——听起来像是营销术语,但这就是工具团队致力于实现的使命宣言。STS 当然是在经过验证的 Spring IDE 之上构建的,但它与 Eclipse Mylyn 深度集成,并且已经扩展了这两个开源工具,将企业级扩展带入您的 IDE。为了提供最好的 Spring 工具,我们已经开始并继续向 Spring 核心框架和其他 Spring 项目中添加与工具相关的功能、挂钩和扩展点。

因此,使用工具套件,您最终可以获得 Mylyn 的面向任务的用户界面进行 Spring 开发的所有好处。在处理 Spring 应用蓝图时,您可以获得上下文管理和专注。此外,我们将面向任务的 UI 方法提升到一个新的水平,并引入了一种我们命名为**面向任务的教程**的新技术。面向任务的教程扩展了 Eclipse Cheat Sheet 框架,并在教程的每个步骤中添加了任务焦点。使用面向任务的教程,新用户或想要学习特定功能或 Spring 项目的用户能够一键导入正在运行的示例应用程序并开始探索该示例。然后,每个教程步骤将提供对教程某个方面的解释,并且仅显示与理解和探索解释相关的 Java 和 Spring 元素。

Task-Focused Tutorials

从上面的屏幕截图中,您可以看到它在 Eclipse 中的外观。该教程将 PetClinic 示例应用程序带入 Eclipse 工作区,并将工作区聚焦于显示 @Autowired 注解及其如何应用于应用程序组件。在右侧,您可以看到扩展的步骤,解释了如何以及为什么应该使用 @Autowired 注解。在教程结束时,用户能够在一个捆绑的 Tomcat 服务器上启动示例应用程序,该服务器会自动安装和配置;同样,只需单击一下。

我们认为这种介绍新功能和产品的方式是一种非常强大的方法,并使人们能够轻松地探索 Spring 产品组合。开发人员入门时需要拥有和了解的一切都在它应该在的地方:IDE 内部。当您下载个人使用版 Beta 时,您可以立即访问大约 20 个教程,这些教程均由项目负责人或直接与客户合作的经验丰富的顾问创建。最值得注意的是Adrian Colyer花时间创建了 7 个教程,介绍了 OSGi 概念、Equinox 和Spring Dynamic Modules。如果您现在想加入 OSGi 的行列,这些教程非常棒。工具套件包含一个自动 OSGi 捆绑包更新/刷新机制,它最终允许在应用程序上工作并获得基于 OSGi 运行时功能的即时重新部署语义(您是否尝试过使用 EJB;我试过)。

我想谈论的下一个功能称为**运行时错误分析**: SpringSource 工具套件能够通过分析 Java 堆栈跟踪来提供有关如何解决运行时问题的信息。为了实现这一点,我们创建了一个集成到套件中的在线知识库,并且可以直接在 Eclipse IDE 内查询该知识库。知识库对所有使用该工具的人开放,我们甚至鼓励人们使用内置的富编辑功能来贡献他们自己的分析。请查看以下屏幕截图。

Runtime Error Analysis

使用工具套件,您不仅可以获得分析运行时错误的支持,而且该工具还将帮助您**查找常见缺陷**和**Spring 最佳实践违规**。尤其是在处理 XML bean 定义文件时,此功能非常方便,因为它会在 XML 编辑器中直接告知开发人员文件中可能需要修改的内容。例如,该工具将检测并在某些情况下建议使用 bean 继承。它还将建议使用不断改进的命名空间元素,而不是使用传统的 bean 定义样式。这是一个示例

Runtime Error Analysis

让我们看看我们得到了什么

  • Spring 开发工具
  • 用于 Java、资源和 Spring 应用程序蓝图的 Mylyn 面向任务的用户界面
  • 面向任务的教程
  • 运行时错误分析
  • 最佳实践和架构审查工具

还有更多我没有涉及的功能。您是否看到了此功能阵容中的主要主题?最后列出的三个功能为开发强大的基于 Spring 的应用程序提供了宝贵的帮助。在内部,我们开始为此功能集使用一个隐喻:盒装顾问。使用 SpringSource 工具套件,我们希望让您能够访问 SpringSource 的知识,就像您身边有一位顾问一样!

我鼓励大家访问测试注册页面并试用工具套件。最后,我还想感谢所有已经提交反馈、问题和建议的人。在 EclipseCon 令人难以置信的这一周结束后,我会尽快回复你们所有人。

Spring 依赖注入和 Java 5(包括幻灯片和代码)

工程 | Alef Arendsen | 2008年3月18日 | ...

我写这篇文章的时候正在去开罗的路上。我们正在意大利西边飞行,我能清楚地看到意大利海岸线,碧蓝的海水和波浪轻轻地拍打着海岸。现在那里一定很美。我正前往开罗参加埃及用户组的会议,该会议由 Ahmed Hashim 组织,毫无疑问,他一定做得非常出色,我相信这一点。我将以依赖注入、类型安全和 Java 5 为主题介绍 Spring。昨天(3 月 14 日),我在荷兰 Loenen 的Profict 冬令营上为……

Spring Web Flow 2.0 M4 - 征求反馈

工程 | Keith Donald | 2008年3月11日 | ...

Web Flow 团队一直在努力开发 Web Flow 2。我们刚刚达到了第 4 个里程碑,并将在下周初进入候选发布状态。2.0 正式版计划于月底发布。

在 2.0 正式版发布之前,我们希望得到您的反馈!如果您是当前使用 Web Flow 1.x 或正在评估在您的项目中使用 Web Flow 的应用程序开发人员,请评估 2.0 M4告诉我们您的想法。如果您是将 Web Flow 引擎集成到您的框架中的 Web 框架提供商,我们鼓励您评估 2.0 M4 中改进的挂钩,并……

在 GWT 客户端代码中启用测试驱动开发

工程 | Iwein Fuld | 2008年2月19日 | ...

在过去的几个月里,我一直在与各种客户合作,从事使用 Google Web Toolkit [GWT] 的项目。我主要喜欢 GWT 是因为它能够将 Java 编译成 javascript。这是打开大门,让普通的 Java 开发人员无需学习新语言即可创建 RIA 的关键。

我一直是测试驱动开发的粉丝,令我失望的是,起初看起来 TDD 和 GWT 好像无法一起使用。

测试 GWT 代码有点问题。问题的核心在于 GWT 代码在运行之前被编译成 javascript。在许多情况下,GWT.create() 语句……

创建 OSGi 捆绑包

工程 | Costin Leau | 2008年2月18日 | ...

在学习OSGi时,首先要了解的概念之一是bundle(包)的概念。在本篇博文中,我想更仔细地研究bundle究竟是什么,以及如何将一个普通的jar文件转换为OSGi bundle。所以,话不多说,

什么是bundle?

OSGi规范将bundle描述为一个“模块化单元”,它“由Java类和其他资源组成,这些资源共同为最终用户提供功能”。到目前为止还不错,但是bundle究竟是什么呢?再次引用规范:

bundle是一个JAR文件,它

  • 包含[...]资源
  • 包含一个描述JAR文件内容并提供关于bundle信息的清单文件
  • 可以在JAR文件的OSGI-OPT目录或其子目录之一中包含可选文档

简而言之,bundle = jar + OSGi信息(在JAR清单文件中指定 - META-INF/MANIFEST.MF),不需要额外的文件或预定义的文件夹布局。这意味着从jar创建bundle只需要在JAR清单中添加一些条目。

OSGi元数据

OSGi元数据由清单条目表示,这些条目指示OSGi框架bundle提供什么或/和需要什么。规范指示大约20个清单头,但我们只看看你最有可能使用的那些。

Export-Package

顾名思义,此头指示导出哪些包(在bundle中可用),以便其他bundle可以导入它们。只有标题指定的包将被导出,其余的将是私有的,并且在包含bundle之外将不可见。

Import-Package

类似于Export-Package,此头指示bundle导入的包。同样,只有此标题指定的包将被导入。默认情况下,导入的包是必需的——如果导入的包不可用,则导入bundle将无法启动。

Bundle-SymbolicName
唯一必需的标题,此条目指定bundle的唯一标识符,基于反向域名约定(也由Java包使用)。
Bundle-Name
定义此bundle的可读名称,不包含空格。建议设置此标题,因为它可以提供比Bundle-SymbolicName更短、更有意义的关于bundle内容的信息。
Bundle-Activator
BundleActivator是一个OSGi特定的接口,允许Java代码在OSGi框架启动或停止bundle时收到通知。此标题的值应包含激活器类的完全限定名称,该名称应是公共的,并且包含没有任何参数的公共构造函数。
Bundle-Classpath
当jar包含嵌入式库或位于不同文件夹下的类包时,此标题非常方便,方法是扩展默认的bundle类路径(该路径期望类直接在jar根目录下可用)。
Bundle-ManifestVersion
这个鲜为人知的标题指示用于读取此bundle的OSGi规范。1表示OSGi 3版,而2表示OSGi 4版及更高版本。由于1是默认版本,因此强烈建议指定此标题,因为OSGi 4版bundle在OSGi 3版下将无法按预期工作。

下面是一个示例,摘自使用上述一些标题的Spring 2.5.x核心bundle清单

 
Bundle-Name: spring-core 
Bundle-SymbolicName: org.springframework.bundle.spring.core 
Bundle-ManifestVersion: 2 
Export-Package:org.springframework.core.task;uses:="org.springframework.core,org.springframework.util";version=2.5.1 org.springframework.core.type;uses:=org.springframework.core.annotation;version=2.5.1[...] 
Import-Package:org.apache.commons.logging,edu.emory.mathcs.backport.java.util.concurrent;resolution:=optional[...] 

大多数时间用于OSGi元数据可能花在Export/Import包条目上,因为它们描述了bundle之间的关系(即模块之间)。在包方面,没有什么隐含的——只有提到的包才会被导入/导出,其余的不会。这也适用于子包:导出org.mypackage将仅导出此包,而不会导出其他任何内容(例如org.mypackage.util)。导入也是如此——即使某个包在OSGi空间中可用,除非某个bundle显式导入它,否则它对该bundle不可见。

总而言之,如果bundle A导出包org.mypackage,而bundle B想要使用它,则bundle A的META-INF/MANIFEST.MF应该在其Export-Package头中指定该包,而bundle B应该将其包含在其Import-Package条目中。

包注意事项

虽然导出相当简单,但导入稍微复杂一些。应用程序通常通过搜索环境中的某些库并仅使用可用的库来很好地降级,或者库包含用户不使用的代码。此类示例包括日志记录(使用JDK 1.4或Log4j)、正则表达式(Jakarta ORO或JDK 1.4+)或并发实用程序(JDK 5中的java.util或backport-util-concurrent库用于JDK 1.4)。

用OSGi术语来说,依赖于基于其可用性的包转换为可选的Package-Import。你已经在前面的示例中看到了这样的包

```code Import-Package: [...]edu.emory.mathcs.backport.java.util.concurrent;resolution:=optional ```

由于在OSGi中,可以存在同一类的多个版本,因此最佳实践是在导出和导入包时都指定类包的版本。这是通过version属性完成的,该属性添加到每个包声明之后。OSGi支持的版本格式为<major>.<minor>.<micro>.<qualifier>,其中majorminormicro是数字,而qualifier是字母数字。

版本的含义完全取决于bundle提供者,但是,建议使用流行的编号方案,例如Apache APR项目中的方案,其中

  • <major> - 表示重大更新,不保证任何兼容性
  • <minor> - 表示保留与旧次要版本的兼容性的更新
  • <micro> - 代表从用户角度来看微不足道的更新,完全向前和向后兼容
  • <qualifier> - 是用户定义的字符串 - 它没有广泛使用,可以为版本号提供额外的标签,例如构建编号或目标平台,但没有标准化的含义

默认版本(如果属性丢失)为“0.0.0”。

虽然导出的包必须指示特定版本,但导入者可以使用数学区间表示法指示范围 - 例如

[1.0.4, 2.0)将匹配版本1.0.42及更高版本,直到2.0(不包括)。请注意,指定版本而不是区间将匹配所有大于或等于指定版本的包,也就是说

Import-Package: com.mypackage;version="1.2.3"

等价于

Import-Package: com.mypackage;version="[1.2.3, ∞)"

作为最后一条提示,请确保在指定版本时始终使用引号,无论它是范围还是不是。

使用OSGi元数据

现在我们已经了解了一些关于bundle的信息,让我们看看我们可以使用哪些工具将现有的jar转换为osgi格式

手动

不建议使用这种DIY方法,因为错别字和多余的空格很容易潜入并使清单变得无用。即使使用智能编辑器,清单格式本身也可能导致一些问题,因为它每行最多有72个空格的限制,如果破坏了这个限制,可能会导致一些神秘的问题。手动创建或更新jar不是一个好主意,因为jar格式要求META-INF/MANIFEST.MF条目是存档中的第一个条目——如果不是,即使它存在于jar中,清单文件也不会被读取。手动方法仅推荐在没有其他选择的情况下使用。

但是,如果确实需要直接使用清单,则应使用可以处理UNIX/DOS空格的编辑器以及合适的jar创建实用程序(例如JDK附带的jar工具)来满足所有清单要求。

Bnd

Bnd代表BuNDle工具,它是Peter Kriens(OSGi技术主管)创建的一个不错的实用程序,它“帮助[...]创建和诊断OSGi R4 bundle”。Bnd解析Java类以了解可用的和导入的包,以便它可以创建等效的OSGi条目。Bnd提供了一系列指令和选项,可以自定义生成的工件。bnd.jar本身的好处是可以从命令行、通过专用任务使用Ant运行,或作为插件集成到Eclipse中。

Bnd可以根据类路径或Eclipse项目中可用的类创建jar,也可以通过添加所需的OSGi工件来将现有jar转换为osgi格式。此外,它可以打印和验证给定jar的OSGi信息,使其成为一个功能强大且易于使用的工具。

第一次使用的用户可以使用Bnd查看将添加到普通jar中的OSGi清单。让我们选择一个普通jar,例如c3p0(这是一个优秀的连接池库),并发出打印命令

```code java -jar bnd.jar print c3p0-0.9.1.2.jar ```

输出相当大,包含几个部分

  1. 通用清单信息
    [MANIFEST c3p0-0.9.1.2.jar]
    Ant…

Spring Batch最近的更改和即将发布的m4版本

工程 | Dave Syer | 2008年2月4日 | ...

我们一直在努力工作,准备Spring Batch的Spring Portfolio 2.5发布列车,我认为现在是更新大家现状的好时机。在这篇文章中,我将对领域建模以及我们提高一些核心领域对象配置文件并增加其责任的决定进行一些扩展。我还将介绍即将发布的1.0之前的几个版本中的一些内容,以便人们有机会发表评论。

作为道歉:内部发生了一些相当重大的变化……

一些决定很容易——就像SpringSource收购Covalent一样

工程 | Rod Johnson | 2008年1月29日 | ...

我的上一篇博客展示了Spring如何超越EJB。BZ Media和其他机构的研究表明,Apache Tomcat是领先的开源应用程序服务器,市场渗透率为64%。Spring和Tomcat的主导地位众所周知。人们可能不太了解的是,数千家组织正在使用Tomcat上的Spring作为其中间件基础设施。这些组织希望有一家公司能够为他们取得成功所需的產品和服务提供支持。

今天,我们宣布收购Covalent Technologies。Covalent不仅带来了Apache方面的领导地位,而且合并后的公司现在在Apache Tomcat和HTTP方面也拥有显著的领导地位。两周前,Sun 斥资10亿美元收购了LAMP中的“M”。现在,Covalent卓越的Apache专业知识和服务已成为SpringSource的一部分,我们在“A”方面也占据了强大的领导地位。我们始终致力于技术领导地位,因此我们对与Covalent共同取得的成就感到非常兴奋。在过去的几年里,Covalent凭借其对Apache项目的支持(包括Tomcat和Apache HTTP)赢得了良好的市场声誉。其数百家支持客户包括超过一半的财富500强企业,以及辉瑞、强生、英国电信(BT)、NASA、英特尔、苏格兰皇家银行和贝尔斯登等家喻户晓的名字。我们的公告……

Spring 2.5 全面的注解支持

工程 | Juergen Hoeller | 2008年1月28日 | ...

Spring 2.5 的核心主题之一就是全面的基于注解的配置。我们一直在讨论和博客中大量谈论@Autowired,关于Spring MVC的@RequestMapping,以及对使用JUnit4或TestNG编写的带注解的测试的新支持。@Autowired无疑是Spring 2.5 注解的核心,可用于服务组件、Web组件、单元测试,甚至在使用Spring的@Configurable和AspectJ编织时用于领域对象。Spring MVC的@RequestMapping同样灵活,支持许多不同版本的处理程序方法签名。

今天我……

获取Spring新闻

通过Spring新闻保持联系

订阅

领先一步

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

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部