`
brandNewUser
  • 浏览: 456964 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用DOSGi在OSGi环境下发布Web Services

阅读更多

前言

Apache CXF是一个开源的服务框架项目,而Distributed OSGi子项目提供了基于OSGi远程服务规范的分布式组件实现。它使用Web Services,HTTP上的SOAP手段实现了远程服务的功能,对外暴露了WSDL规约。本篇就是介绍使用dosgi在OSGi环境下将OSGi的服务暴露成Web Services的过程。

 

DOSGi的项目主页:http://cxf.apache.org/dosgi-single-bundle-distribution.html

环境搭建

DOSGi本身提供了三种实现:Apache Karaf Feature,Multi Bundle Distribution和Single Bundle Distribution,这里为了介绍方便,选择了最简单的Single Bundle Distribution,它提供了一个单独的bundle,其中内置了所有需要的依赖,下载后解压,找到其中的文件cxf-dosgi-ri-singlebundle-distribution-1.4.0.jar。

 

 

 

在eclipse(必须包含PDE环境)中Import->Plug-in Development->Plug-ins and Fragements,选择刚才下载dosgi的目录,选择对应的bundle,Finish进行导入之后,该bundle就已经在工作区中并可以使用。




程序实例

这里我们建立几个最简单的实例,这个实例中有3个bundle:

bundle名称

用途

com.clamaa.dosgi.sample.service

服务接口

com.clamaa.dosgi.sample.implementation

服务实现

 

首先,在bundle:com.clamaa.dosgi.sample.service中声明服务接口IHelloService,并将该Service所在的包Export出来,以便服务实现的bundle能够导入该服务接口。

 

public interface IHelloService {
   String echo();
}

 

第二步,在bundle: com.clamaa.dosgi.sample.implementation中导入service bundle中导出的接口包,并进行简单的实现:

public class HelloServiceImplementation implements IHelloService {
	@Override
	public String echo() {
		return "This is hello service implementation";
	}
}

 

在Activator中注册服务,注意使用dosgi时需要设置相应的属性properties,其中的url:http://localhost:9090/hello就是web服务的地址。

public class Activator implements BundleActivator {

	private static BundleContext context;
	private ServiceRegistration<IHelloService> registerService;

	static BundleContext getContext() {
		return context;
	}

	@SuppressWarnings("unchecked")
	public void start(BundleContext bundleContext) throws Exception {
		Activator.context = bundleContext;
		
		Dictionary<String, String> properties = new Hashtable<String, String>();
		properties.put("service.exported.interfaces", "*");
		properties.put("service.exported.configs", "org.apache.cxf.ws");
		properties.put("org.apache.cxf.ws.address", "http://localhost:9090/hello");
		registerService = (ServiceRegistration<IHelloService>) context.registerService(IHelloService.class.getName(), new HelloServiceImplementation(),properties);
	}

	public void stop(BundleContext bundleContext) throws Exception {
		registerService.unregister();
		Activator.context = null;
	}

}

 

在eclipse中进行调试,新建Debug Configuration,注意这里我们使用内置的jetty作为web服务器对web服务进行发布:

 

 

启动后,控制台输出信息,表示服务发布成功。

osgi> 六月 13, 2014 3:42:40 下午 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.sample.dosgi.clamaa.com/}IHelloService from class com.clamaa.dosgi.sample.service.IHelloService
六月 13, 2014 3:42:40 下午 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://localhost:9090/hello

 

我们可以在浏览器中查看wsdl:

 

 

下面,我们使用Soap UI对该web service进行测试,可以查看其输出,表明该web服务工作正常。

 


 

我们刚才发布的服务是硬编码完成的,其实还可以通过声明式服务(Declarative Service)来将OSGi中的服务发布成Web Service,此时,声明式服务的配置文件:

 

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="com.clamaa.dosgi.sample.implementation">
   <implementation class="com.clamaa.dosgi.sample.implementation.HelloServiceImplementation"/>
   <property name="service.exported.interfaces" value="*" />
   <property name="service.exported.configs" value="org.apache.cxf.ws" />
   <property name="org.apache.cxf.ws.address" value="http://localhost:9090/hello" />
   <service>
      <provide interface="com.clamaa.dosgi.sample.service.IHelloService"/>
   </service>
</scr:component>

 

同样可以正常发布Web服务并正常访问。

 

本篇只是DOSGi的一个入门介绍,其中大部分内容也是根据其官网的示例一步步操作完成的,对于复杂的服务(带参数以及复杂类型返回值),请查看其官网相关资料深入研究。

 

 

  • 大小: 27.4 KB
  • 大小: 65.9 KB
  • 大小: 254.4 KB
  • 大小: 262.5 KB
  • 大小: 171.4 KB
分享到:
评论

相关推荐

    以 OSGi 包的形式开发和部署 Web 服务

    - **cxf-dosgi**:这是Apache CXF项目的一个子项目,专门用于支持OSGi环境下Web服务的开发和部署。它提供了将Web服务封装为OSGi包的能力,并支持这些服务的分发。 #### 三、开发流程 1. **环境搭建**:安装Eclipse...

    cxf-dosgi-ri-multibundle-distribution-1.5.0-dir

    使用CXF DOGSi的好处在于,开发人员可以在OSGi容器中轻松地创建、发布和消费Web服务,而无需担心类加载器冲突或其他与模块化系统相关的复杂性。此外,由于OSGi支持动态服务发现和更新,这意味着应用程序可以根据需求...

    dosgi-service-7.0.2.fuse-097.zip

    例如,在开发基于OSGi的Java EE应用时,可以利用dosgi-service管理服务,同时通过shrinkwrap-container-openejb-31在测试阶段模拟OpenEJB环境,确保代码在真实环境下的正确运行。这种方式不仅简化了开发流程,还提高...

    cxf-dosgi-ri-singlebundle-distribution-1.4.0.jar

    cxf-dosgi-ri-singlebundle-distribution-1.4.0.jar

    apache-cxf-2.7.12

    此外,CXF的 CXF-DOSGi 支持OSGi环境中的服务发现和交互。 7. **Spring集成**: Apache CXF可以很好地与Spring框架集成,允许开发者利用Spring的依赖注入和配置管理来构建Web服务。通过Spring,你可以更方便地管理...

    cxf-dosgi:Apache CXF的镜像

    CXF DOSGi允许轻松发布和使用SOAP和REST服务,而无需使用CXF蓝图扩展或使用Java代码发布服务。 因此,这是在OSGi中将CXF与声明式服务一起使用的推荐方法。 查看示例以了解使用的简单程度。 模组 。 意向 意图允许...

    apache-CXF框架

    Apache CXF包含一系列插件,如CXF-DOSGi(用于OSGi环境的Web服务支持)、CXF-WS-Security(支持安全特性如WS-Security、WS-SecureConversation等)和CXF-WS-Discovery(实现Web服务发现)。这些插件和扩展使得CXF...

    apache-cxf-3.3.3.zip

    4. **模块化设计**:CXF由多个模块组成,开发者可以根据项目需求选择使用,如 CXF-DOSGi(用于OSGi环境)、CXF-RTC(实时通信)和CXF-WS-Addressing(Web服务寻址)等。 5. **测试工具**:CXF提供了一些工具,如CXF...

    apache cxf 工程

    9. **测试工具**:CXF提供了CXF-RI(Runtime Interface)和CXF-DOSGI(Dynamic OSGi)等工具,用于测试和调试Web服务。 10. **集成Spring**:CXF与Spring框架有很好的集成,可以方便地在Spring应用中配置和管理CXF...

    apache-cxf-2.4.3

    5. **模块化结构**:CXF由多个模块组成,如CXF-RT(Runtime)、CXF-DOSGi(用于OSGi环境)和CXF-WS(Web Services)等,这使得开发者可以根据项目需求选择必要的组件。 6. **工具支持**:CXF提供了一套完整的工具,...

    karaf-dosgi-cellar-kubernetes-example

    Karaf Cellar Kubernetes 示例这是一个在开发环境中使用 Kubernetes 集群的 Karaf Cellar DOSGi 应用程序的简单示例。 如果您正在寻找不使用 Kubernetes 的 DOSGi 示例,请更改此注意:这仅适用于提供的 Karaf ...

    ubuntu环境修下MyEclipse键盘失灵问题

    在Ubuntu环境下使用MyEclipse开发工具时,可能会遇到键盘输入异常的问题,即键盘输入不响应或者输入延迟等现象。这不仅会影响工作效率,还会导致编码过程中的诸多不便。本文将详细介绍如何在Ubuntu环境中解决...

    优秀计算机论文范文精选十篇.docx

    OSGI 是一个实现 Java 模块化 Web 应用的很好的途径,可以解决服务的模块化开发以及云环境中的远程模块交互的需求。 在第 3 章中,作者对 OSGI 的分布式扩展方法进行了讨论,包括 R-OSGI、DOSGI、Newton 和 WSBDOM ...

    apache-cxf-2.5.0

    Apache CXF是一个开源的服务...在实际开发中,了解和掌握Apache CXF 2.5.0版本的功能和使用方式,将有助于创建高效、可靠的web服务系统,同时利用其丰富的社区资源和持续更新,可以确保项目保持最新的技术和最佳实践。

    myeclipse提速+java环境变量配置

    这段代码用于生成一个相对路径,便于在不同环境下部署应用时,资源文件能够被正确引用。 **4. 验证功能配置** - 禁用自动验证功能。选择`Windows` &gt; `Preferences` &gt; `MyEclipse` &gt; `Validation`,然后取消选中...

    WEBSPHERE乱码问题的解决和处理

    在IT领域中,尤其是对于使用IBM WebSphere作为应用服务器的企业来说,遇到中文乱码的问题是一件非常头疼的事情。这类问题往往会影响到业务的正常运行,降低用户体验,因此及时有效地解决问题至关重要。本文将详细...

    java环境变量配置

    在Windows环境下,可以在`startup.bat`文件中添加或修改环境变量,例如: ```batch set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_202 set PATH=%JAVA_HOME%\bin;%PATH% ``` 然后,Tomcat将使用指定的JDK启动。 ...

    eclipse指定启动的虚拟机配置说明

    这不仅有助于确保 Eclipse 在正确的 Java 环境下运行,还可以根据实际需求调整 JVM 参数,以获得更好的性能表现。需要注意的是,在进行任何更改前,请确保备份原始文件,以免因误操作导致不必要的问题。此外,根据...

    fuse-workshop:研讨会 JB439A 的熔断器代码示例

    解压后,开发者可以查看和运行这些示例,从而学习如何在JBoss Fuse环境中配置和使用Camel路由,如何利用DOSGI进行模块化开发,以及如何从零开始构建Fuse应用。 总的来说,这个研讨会涵盖了Java集成开发的关键方面,...

    The Maven Integration requires that Eclipse be running in a JDK

    ### Maven集成要求Eclipse在JDK环境下运行的问题解决 #### 背景介绍 在使用Eclipse或Spring Tool Suite (STS)进行Java开发时,可能会遇到一个常见的问题:“The Maven Integration requires that Eclipse be ...

Global site tag (gtag.js) - Google Analytics