宣布 dm Server 2.0 M1

工程 | Rob Harrop | 2009年4月2日 | ...

dm Server 2.0 的开发工作已经全面展开一段时间了,我很高兴地宣布第一个里程碑版本已可供下载。您可以从我们的主页下载。有关此版本和即将发布版本的更多功能信息,请参阅我的上一篇文章

在这篇博客文章中,我将概述

  • 2.0 M1 的新特性
  • 直接从 SVN 构建 dm Server

我们正在使用 Scrum

为了开发 2.0 版本,dm Server 团队采用了 Scrum。您可以在我们的 JIRA 中查看我们当前的冲刺和发布待办事项列表。一如既往,dm Server 的开发是由我们用户的需求驱动的。如果您在待办事项列表中看到您希望我们实现的项目,请花时间投票支持它。同样,如果您希望 dm Server 能够完成待办事项列表中未涵盖的功能,请打开一个新的用户故事来描述您希望实现的功能。

新特性和值得注意的变化

初步支持计划 (Plans)

计划(Plans)与 PAR 文件类似,它们都是描述捆绑包集合作为应用程序一起加载的方式。不同之处在于,计划是一个简单的 XML 文件,它定义了一系列构件(artifacts),而不是实际包含它们。在此里程碑版本中,初步支持计划,使您能够创建具有与 PAR 文件相同语义的计划。

计划文件的语法非常简单。外部的 <plan/> 标签定义了名称 (name)版本 (version),以及作用域 (scoping) 和原子性 (atomicity) 要求。(在此里程碑版本中,仅支持既有作用域又具有原子性的计划)。在 标签内部至少有一个 标签,它定义了计划中构件的类型 (type)名称 (name)版本 (version)


<?xml version="1.0" encoding="UTF-8"?>
<plan name="multi-artifact.plan" version="1.0.0" scoped="true" atomic="true"
        xmlns="http://www.springsource.org/schema/dm-server/plan"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
            http://www.springsource.org/schema/dm-server/plan 
            http://www.springsource.org/schema/dm-server/plan/springsource-dm-server-plan.xsd">

    <artifact type="bundle" name="simple.bundle.one" version="[1.0.0, 2.0.0)"/>
    <artifact type="bundle" name="simple.bundle.two" version="[1.0.0, 2.0.0)"/>
</plan>

要使用计划,请将组成计划的捆绑包复制到 $DMS_HOME/repository/bundles/usr 目录并重启 dm Server。服务器启动后,将计划文件(扩展名为 .plan)放入 $DMS_HOME/pickup 目录。这将导致计划以与 PAR 文件相同的语义部署。从 pickup 目录中删除计划文件将导致计划卸载。

初步支持克隆 (Cloning)

M1 版本包含对克隆支持的第一阶段。有关克隆的概述,请参阅路线图

还有相当多的用户故事需要实现以及一些问题需要解决,但支持克隆的大部分基础设施已经到位并通过了基本测试。

当具有作用域的应用程序(即 PAR 文件或具有作用域的计划)由于 uses 约束而无法解析时,会自动触发克隆。指定失败 uses 约束的捆绑包会被克隆到应用程序的作用域中,然后尝试解析,此过程会重复进行,直到解析成功,或者没有更多可供克隆的候选捆绑包,此时应用程序的部署失败。

也可以在使用新的 "sharing" 指令的 import-bundle 或 import-library 上手动触发克隆。例如:


Import-Bundle: org.foo.mybundle;sharing:=clone


Import-Library: org.springframework.spring;sharing:=clone

如果自动或手动克隆导致 Spring DM 扩展器 (extender) 的任何依赖项被克隆,那么扩展器也会被克隆到应用程序的作用域中。dm Server 中一些直接处理 Spring 和 Spring DM 类型的代码需要修改,以应对 Spring 捆绑包被克隆的情况。在某些情况下,使用这些类型的代码被打包成小的捆绑包,然后这些捆绑包被克隆。在其他情况下,代码被修改为通过基于 OSGi blueprint service 草案的(非克隆的)接口分派给这些类型。

初步支持共享仓库 (shared repositories)

M1 版本包含对共享仓库支持的第一阶段。可以通过确保托管仓库 PAR 文件位于 pickup 目录中,并且 config/hostedRepository.config 中的配置是适当的,来配置 dm Server 节点以托管共享仓库。例如:


{
    "my-hosted-repo" : {
        "type" : "external",
        "searchPattern" : "repository/hosted/*"
    }
}

此配置将创建一个名为 my-hosted-repo 的托管仓库,该仓库填充有 repository/hosted 目录的内容。然后,可以通过更新其 config/repository.config 文件以添加远程仓库条目来配置 dm Server 节点访问此托管仓库。例如,假设托管仓库节点在 my-host 上运行,并且配置了 Tomcat 监听端口 8080:


{
    ...

    "remote-repo" : {
        "type" : "remote",
        "uri" : "http://my-host:8080/com.springsource.server.repository/my-hosted-repo",
        "indexRefreshInterval" : 30,
    },
    "repositoryChain" : [
        "bundles-subsystems",
        "bundles-ext",
        "bundles-usr",
        "libraries-ext",
        "libraries-usr",
        "remote-repo"
    ]
}

共享仓库以及 dm Server 2.0 的通用仓库支持将在后续的博客文章中更详细地描述。

其他

  • 改进了启动过程中的故障检测和处理
  • 改进了约束满足算法,包括对不需要的依赖项进行垃圾回收
  • 服务作用域改进
  • 支持 Findbugs 构建(并修复其检测到的问题)
  • 各种小改进和错误修复

Subversion 仓库

为了更好地反映 dm Server 的模块化特性,我们将 dm Server 代码库拆分成了多个新的 Subversion 仓库,这些仓库现在可以公开访问:

仓库 URL内容
https://anonsvn.springsource.org/svn/dm-server-util 通用工具代码
https://anonsvn.springsource.org/svn/dm-server-repository 构件仓库
https://anonsvn.springsource.org/svn/dm-server-osgi OSGi 扩展和 Equinox Hook
https://anonsvn.springsource.org/svn/dm-server-kernel dm 内核
https://anonsvn.springsource.org/svn/dm-server-servlet Servlet 子系统
https://anonsvn.springsource.org/svn/dm-server-web Web 子系统
https://anonsvn.springsource.org/svn/dm-server 打包
https://anonsvn.springsource.org/svn/dm-server-documentation 文档

每个仓库都划分成一个通用的文件夹结构,仓库根目录下有三个目录。让我们以内核仓库为例来看看:


svn ls https://anonsvn.springsource.org/svn/dm-server-kernel
development-branches/
main-branches/
tags/

最令人关注的是 main-branches 和 tags 目录。tags 目录包含内核每个标记发布版本对应的目录,例如,目前它包含 M1 发布版本的单一标签。main-branches 目录包含我们当前正在开发的每个主分支(即发布版本)对应的目录。2.0 发布版本的代号是 Jersey(以岛屿命名),正如您在下面看到的,main-branches 目录包含 jersey (2.0) 发布版本的目录:


svn ls https://anonsvn.springsource.org/svn/dm-server-kernel/main-branches
jersey/

从源码构建 dm Server

如果您只是想创建一个 dm Server 安装二进制文件,最简单的方法是打包现有的二进制文件。或者,如果您有兴趣修改或向 dm Server 代码库添加内容,也可以从源码编译所有 dm Server 代码库并将它们打包成一个安装二进制文件。

设置

在从源码构建 dm Server 之前,您的机器上需要进行以下设置:

  • 安装 Java 6 并配置 JAVA_HOME 环境变量指向它
  • 安装 Ant 1.7.0 或更高版本
  • 配置 ANT_OPTS 环境变量以提供至少 512MB 的最大堆空间,例如 ANT_OPTS=Xmx512m
  • 完成此设置后,您就可以构建 dm Server 了。

    打包现有二进制文件

    打包现有的已发布二进制文件非常简单。只需检出打包仓库即可:

    
    svn co https://anonsvn.springsource.org/svn/dm-server/tags/2.0.0.M1
    

    然后进入 build-dm-server 目录并使用 Ant 运行 jar 和 package 目标:

    
    cd 2.0.0.M1/build-dm-server
    ant jar package
    

    构建过程将下载构成 dm Server 2.0.0.M1 发布版本的所有捆绑包,并将它们打包成一个安装二进制文件。您可以在 target/artifacts 目录中找到此二进制文件。

    完全从源码构建

    要完全从源码构建 dm Server,您需要检出更多仓库,以便在您的机器上拥有完整的代码库。各个仓库检出到的目录名称及其相互之间的相对位置很重要,因此请使用下面显示的目录名称,并在同一个目录中执行所有检出操作:

    
    svn co https://anonsvn.springsource.org/svn/dm-server-util/main-branches/jersey util
    svn co https://anonsvn.springsource.org/svn/dm-server-repository/main-branches/jersey repository
    svn co https://anonsvn.springsource.org/svn/dm-server-osgi/main-branches/jersey osgi-extensions
    svn co https://anonsvn.springsource.org/svn/dm-server-kernel/main-branches/jersey kernel
    svn co https://anonsvn.springsource.org/svn/dm-server-servlet/main-branches/jersey servlet
    svn co https://anonsvn.springsource.org/svn/dm-server-web/main-branches/jersey web
    svn co https://anonsvn.springsource.org/svn/dm-server-documentation/main-branches/jersey documentation
    svn co https://anonsvn.springsource.org/svn/dm-server/main-branches/jersey packaging
    

    接下来,进入 packaging/build-dm-server 目录:

    
    cd packaging/build-dm-server
    

    现在运行 src-build Ant 目标:

    
    ant src-build
    

    构建完成后,一个带有时间戳的 dm Server 安装二进制文件(zip 文件形式)现在可以在 target/artifacts 中找到。其名称格式将是 springsource-dm-server-2.0.0.BUILD-.zip

    更多资源

  • dm Server 论坛
  • 订阅 Spring 新闻通讯

    通过 Spring 新闻通讯保持联系

    订阅

    领先一步

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

    了解更多

    获取支持

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

    了解更多

    近期活动

    查看 Spring 社区的所有近期活动。

    查看全部