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中查看我们当前的 sprint 和发布 backlog。和以往一样,dm Server 的开发由用户的需求驱动。如果您在 backlog 中看到您希望我们实现的项目,请花时间为其投票。同样,如果您希望 dm Server 能够完成 backlog 中目前未涵盖的功能,请创建一个新的用户故事来描述您希望实现的功能。

新增和值得关注的功能

对计划的初步支持

计划类似于 PAR,它们都是描述一组捆绑包作为应用程序一起加载的方法。它们的不同之处在于,计划是一个简单的 XML 文件,它定义了一组工件,而不是实际包含它们。在这个里程碑版本中,对计划的初步支持使您可以创建与 PAR 文件语义相同的计划。

计划文件的语法非常简单。外部的<plan/>标签定义了名称版本,以及范围和原子性要求。(对于此里程碑版本,只支持既有范围又有原子性的计划)。在标签内至少有一个标签,它定义了计划中工件的类型名称版本


<?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 目录中删除计划文件将导致计划取消部署。

对克隆的初步支持

M1 包含克隆支持的第一阶段。请参阅路线图以了解克隆的概述。

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

当由于 uses 约束而导致范围应用程序(即 PAR 文件或范围计划)无法解析时,会自动触发克隆。指定失败 uses 约束的捆绑包将克隆到应用程序的范围中,尝试解析,并重复此过程,直到解析成功或没有更多候选捆绑包可供克隆,在这种情况下,应用程序的部署将失败。

也可以使用新的“共享”指令在 import-bundle 或 import-library 上手动触发克隆。例如


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


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

如果自动或手动克隆导致 Spring DM 扩展器的任何依赖项被克隆,则扩展器也将被克隆到应用程序的范围中。一些直接处理 Spring 和 Spring DM 类型的 dm Server 代码需要更改,以便在 Spring 捆绑包被克隆时能够应对。在某些情况下,使用此类类型的代码被打包到小型捆绑包中,然后被克隆。在其他情况下,代码被更改为通过基于 OSGi 草案蓝图服务的(未克隆的)接口来调度此类类型。

对共享存储库的初步支持

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 挂钩
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
    

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

    更多资源

  • dm Server 论坛
  • 获取 Spring 新闻通讯

    保持与 Spring 新闻通讯的联系

    订阅

    领先一步

    VMware 提供培训和认证,以加快您的进度。

    了解更多

    获得支持

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

    了解更多

    即将举行的活动

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

    查看全部