0
回答
使用 Aries 构建 OSGi 应用程序
【腾讯云】学生服务器套餐10元/月 >>>   

Aries 旨在提供一个 OSGi 可插入框架来构建应用程序。本文将介绍一些 Aries 和 OSGi 概念,并展示如何创建可用于构建应用程序的 OSGi 兼容模块。

Apache Aries 的目标是支持企业应用程序的创建,将 OSGi 用作一个底层技术来将各部件绑定在一起。使用 Aries,可以使用 Java Transaction API (JTA) 和 the Java Persistence API (JPA) 这样的技术来构建不同的应用程序部件,并将它们公开为 OSGi 服务和模块。Aries 中的 OSGi 模块被局限于特殊的应用程序,以便它们在您使用 Aries 构建的应用程序外部不可见。参见 参考资料 中的链接,了解关于 Apache Aries 孵化器项目的更多信息。

下载和安装 Aries

您可以以源代码形式下载 Aries,然后在本地构建它。Aries 站点上提供了关于以不同方式构建 Aries 源代码的说明(参见 参考资料)。本文中的示例使用 Maven 来构建 Aries 项目并将其代码导入 Eclipse。

要下载和安装 Aries,执行以下步骤:

  1. 在命令行使用 Subversion 命令检出 Aries 代码:

    svn export https://svn.apache.org/repos/asf/aries/

  2. 检出代码后,准备使用以下 Maven 命令下载代码:

    mvn clean

  3. 准备代码,以便使用以下 Maven 命令将代码导入一个 Eclipse 工作空间:

    mvn eclipse:eclipse

  4. 单击 File > Import,然后单击 General > Existing projects into Eclipse,将 Aries 项目导入 Eclipse。

构建一个服务

现在您已经下载和构建 Aries 代码并将其导入 Eclipse,您已经准备好基于 HelloWorld 示例创建自己的服务项目。样例服务对您给予的消息作出回显,但这种回显是反向的。这个示例展示如何将消息从客户端发送到服务端。

首先,为这个服务编写接口。理想情况下,OSGi 应用程序中的接口应该是独立于实现类的独立捆绑包(项目)。这种实践并没有增加 Eclipse 中的项目结构的复杂性,相反,它的好处是可以更轻松地交换出实现捆绑包。快速更改服务的实现是使用 OSGi 这样的技术(该技术实施一种模块式结构)的原因之一。

清单 1 显示了 EchoService 接口。该接口包含一个方法,该方法接受一个参数来对接口实现中的消息进行一些处理。它还包含一个 initialize 方法。这个方法的目的是展示,当 OSGi 框架启动服务时是如何调用服务的。


清单 1. EchoService Java 接口
				
package com.example.echo.api;

public interface EchoService {

    void echoMessage(String message);
    
    void initialize();
    
}

接口编写好后,准备编写调用该接口公开的方法的客户端类。这个客户端类如 清单 2 所示。


清单 2. EchoServiceClient 类
				
package com.example.echo.client;

import com.example.echo.api.EchoService;

public class EchoServiceClient {

    private EchoService service;

    public void initialize()
    {
        String message = "My Message";
        service.echoMessage(message);
    }
    
    public EchoService getService() {
        return service;
    }

    public void setService(final EchoService service) {
        this.service = service;
    }
    
}

现在,为 EchoService 的实现添加一个类。为名为 com.example.echo.service 的服务实现捆绑包创建另一个项目,将一个项目引用添加到 com.example.echo.api 项目。

常用的命名约定包括将类命名为 EchoServiceImpl 的命名方法;我喜欢使用 DefaultEchoService — 根据服务的实现类型来命名。这个实现类将是 EchoService 接口的默认实现,如 清单 3 所示。


清单 3. DefaultEchoService 实现
				
package com.example.echo.service;

import com.example.echo.api.EchoService;

public class DefaultEchoService implements EchoService {

    public void echoMessage(final String message) {
        StringBuilder sb = new StringBuilder(message);
        sb.reverse();
        System.out.println(sb.toString());
    }

    public void initialize() {
        System.out.println(this.getClass().getName() + " is initialized.");
    }

}

下面,您必须编辑告知 Aries 如何发现和部署服务的文件。

在 web 容器中使用 OSGi 服务

现在您已经创建了几个 OSGi 捆绑包并看到了它们的实际运行情况,下面我们看看 Aries 如何在一个 web 应用程序包中使用这些 OSGi 捆绑包。

您可以通过将运行 mvn install 任务时编译的项目组件(参见 参考资料 中下载二进制版本的链接)放置到一个目录中并启动 OSGi 控制台来启动一些 Aries web 应用程序。当 Aries 组件全部启动时,一个加载目录将被创建。

这些 web 应用程序从一些 OSGi 模块构建,这些模块打包在一个带有 .eba 文件扩展名的存档文件中。这些 .eba 文件拥有一个公共格式:如果您刚刚构建的 EchoService 接口拥有一个包含 Java servlets 的额外捆绑包,则这个 .eba 文件的内容将看起来如 清单 8 所示。


清单 8. 样例 .eba 文件
				
META-INF/APPLICATION.MF 
com.example.echo.api.jar 
com.example.echo.client.jar
com.example.echo.service.jar 
com.example.echo.web.jar

当 .eba 文件在一个 Aries 实例运行时被放置到加载文件夹中时,Aries 将解压这个 .eba 文件并启动文件中的捆绑包。要从 Aries 卸载一个应用程序,只需从加载目录移除该文件。

当您将一个 .eba 文件放置到加载目录中后,可以通过在一个浏览器中导航到这个 URL(比如 localhost:8080/com.example.echo.web/)来查看 web 应用程序。

Aries 自带的博客样例展示如何将 web 绑定放置在一起。此前运行的 mvn eclipse:eclipse 命令准备了将博客导入 Eclipse 的样例。这些样例项目如 清单 9 所示。


清单 9. 样例 web 捆绑包项目
				
org.apache.aries.samples.blog.api
org.apache.aries.samples.blog.biz
org.apache.aries.samples.blog.datasource
org.apache.aries.samples.blog.itests
org.apache.aries.samples.blog.jdbc.eba
org.apache.aries.samples.blog.jpa.eba
org.apache.aries.samples.blog.peristence.jdbc
org.apache.aries.samples.blog.peristence.jpa
org.apache.aries.samples.blog.web

深入挖掘

针对 Aries 的类似和补充项目和产品提供了许多方法来构建使用 OSGi 技术的应用程序。下面列举一些相关技术,可用于构建、管理并将 OSGi 组件分发到应用程序中。

Apache Felix 和 Apache Felix Karaf

Apache Felix 是一个核心 OSGi 框架实现。Felix OSGi 框架实现拥有许多子项目 — 例如,Apache Felix Karaf,它提供一个 OSGi 运行时,可以在其中部署 Aries — 用于添加一些组件来创建功能齐备的 OSGi 框架实现。在 参考资料 中了解关于 Apache Felix 和 Felix Karaf 的更多信息。

Apache ServiceMix

Apache ServiceMix 提供一个 Enterprise Service Bus (ESB) 且是 Felix Karaf 运行时的原始源。ServiceMix 使用 OSGi 组件构建,提供联合使用 OSGi 技术和面向服务架构(SOA)的能力。

WebSphere Feature Pack

Feature Pack for OSGi Applications and Java Persistence for IBM WebSphere Application Server 版本 7 实现了 Blueprint Container 规范,Aries 也使用这个规范(参见 参考资料)。Blueprint Container 负责以下功能:

  • 使用用于组件的 XML 配置文件
  • 实例化和初始化组件
  • 支持组件间的通信
  • 注册服务并查询服务

这个 Feature Pack 支持您将一些应用程序部署为 OSGi 捆绑包集合,这与 Aries 类似。

结束语

Aries 项目目前位于 Apache 孵化器中,但它的目标是支持开发使用 OSGi 技术的应用程序来构建模块式应用程序。OSGi 技术可用于构建 Java 服务和模块,这些服务和模块是真正模块化、可插入的组件。

您可以下载 Aries 并将其导入 Eclipse。从那里,您可以将本文中的样例应用程序用作模板来构建自己的服务,从而展示 Aries 的一些功能。

文章来自 IBM developerWorks 

 

举报
IBMdW
发帖于7年前 0回/869阅
顶部