今天继续《OSGi原理与最佳实践》。看到第四章。做 HelloWorld-cxf 的样例

照着样例敲来着,整个样例敲完了,执行。一直报错,

----------------这里是解决方法------------------

	Dictionary<String, String> props = new Hashtable<String, String>();

        props.put("osgi.remote.interfaces", "*");
props.put("osgi.remote.configuration.type", "pojo");
props.put("osgi.remote.configuration.pojo.address", "http://localhost:9000/hello_world"); registration = bundleContext.registerService(HelloWorldServiceInterfaces.class.getName(),
new HelloWorldImple(), props);

把上面的内容改成以下

	Dictionary<String, String> props = new Hashtable<String, String>();

        <span style="color:#ff0000;">props.put("service.exported.interfaces", "*");
props.put("service.exported.configs", "org.apache.cxf.ws");
props.put("org.apache.cxf.ws.address", "http://localhost:9000/hello_world");</span> registration = bundleContext.registerService(HelloWorldServiceInterfaces.class.getName(),
new HelloWorldImple(), props);

bundle配置例如以下,我没有单独到处servlet和osgi,直接用的eclipse里面的

---------------以下是故事。能够不看-------------------

不行,复制原来的代码直接贴过去(网上找的资源)还是一样。

各种缺包的提示。尝试着加入各种bundle。最后都要吐来了。还是提示缺。并且是越来越缺,全然一个无底洞。一定那里出问题了。

删除项目又一次建,还好,这次不提示缺包了,这让我想起了,上一篇里面提到的,有可能是bundle以来问题,应该简单操作一下即可了,详细操作请查看

http://blog.csdn.net/q821424508/article/details/46604279

言归正传,说下今天的问题。

把项目弄好之后启动项目。没有错误提示,訪问的时候抱404错误,控制台提示httpservice startup at 8080 ,这事什么意思,我代码里不是这么写的

	Dictionary<String, String> props = new Hashtable<String, String>();

        props.put("osgi.remote.interfaces", "*");
props.put("osgi.remote.configuration.type", "pojo");
props.put("osgi.remote.configuration.pojo.address", "http://localhost:9000/hello_world"); registration = bundleContext.registerService(HelloWorldServiceInterfaces.class.getName(),
new HelloWorldImple(), props);

这问题就来了。启动不报错。可是訪问不到路径。一定还是那里配置错误,

亲,没错的,代码都是复制过来的。那问题可有可能是版本号的问题,我的环境。cxf插件下载的事最新的cxf-dosgi-ri-singlebundle-distribution-1.2.jar,

osgi也是比书里面的新,

别问我为什么不依照书里面的版本号弄。我也想。仅仅是有些资源时找不到的。所以就依照自己eclipse的默认版本号来了。

说到版本号不同,那就找下官网吧。

Service Provider properties For Configuring SOAP-based services and consumers

Note: for backwards compatibility old values marked below are still supported.

Property Name

Data Type

Example

Description

service.exported.interfaces

(previously:osgi.remote.interfaces)

String

org.example.BarService,org.example.FooService*

Denotes the interfaces to be exposed remotely. This is a comma-separated list of fully qualified Java interfaces that should be made available remotely. A special value of * can be provided meaning that all of the interfaces passed to
the BundleContext.registerService() call are suitable for remoting.

service.exported.configs (previously:osgi.remote.configuration.type)

String

org.apache.cxf.ws

Specifies the mechanism for configuring the service exposure. Possible values:

  • org.apache.cxf.ws (previously: pojo) the OSGi Service is exposed as a Web Service.
  • wsdl configuration driven from WSDL

这个事官网的,

Note: for backwards compatibility old values marked below are still supported.

这句翻译过来,应该是为了兼容老的功能,以下呗标记出来的依旧支持吧,高中水平。不知道是不是这么翻译的。

可是依照翻译来说,我依照书上敲(别扣字眼。是复制来的我知道)的代码应该没问题

继续看

org.apache.cxf.ws configuration type

When the service.exported.configs=org.apache.cxf.ws (or osgi.remote.configuration.type=pojo) property is specified, the following properties may also be specified.

突然来了一句,这句的大概意思是 假设service.exported.configs=org.apache.cxf.ws (or osgi.remote.configuration.type=pojo)
这个被指定了,

那么以下的也必须被设置,

我仅仅能呵呵了 。

Property Name

Data Type

Example

Description

org.apache.cxf.ws.address

(previously:osgi.remote.configuration.pojo.address)

String

{{

http://localhost:9090/greeter

}}

The address at which the service with be made available remotely. If this property is not specified, this defaults to {{

http://localhost:9000/fully/qualified/ClassName

}}.

org.apache.cxf.ws.httpservice.context

(previously:osgi.remote.configuration.pojo.httpservice.context)

String

/auction

When this property is specified, the OSGi HTTP Service is used to expose the service, rather than a dedicated Jetty HTTP Server. This property doesn't allow the specification of a port number, as this is provided by the HTTP Service. The Distributed OSGi distributions
come with Pax-Web, for which configuration information can be found here:

http://wiki.ops4j.org/display/paxweb/Configuration

, however other OSGi HTTP Service implementations are potentially configured differently.

org.apache.cxf.ws.frontend

String

jaxws

The CXF frontend which will be used to create endpoints. Defaults to 'simple' which is an Aegis-based simple frontend. Note that for JAXWS to work a javax.jws.* has to be imported into the interface and/or implementation and client bundles for annotations like
@WebService and @WebMethod be recognized

org.apache.cxf.ws.databinding

String

jaxb

Supported values are 'aegis and 'jaxb', defaults to 'aegis'. Note that for JAXB to work JAXB packages like javax.xml.bind.annotation.* have to be imported

org.apache.cxf.ws.wsdl.location

String

/wsdl/service.wsdl

WSDL location

org.apache.cxf.ws.wsdl.service.ns

String

{{

http://services.org

}}

WSDL service namespace

org.apache.cxf.ws.wsdl.service.name

String

SoapService

WSDL service name

org.apache.cxf.ws.wsdl.port.name

String

SoapServicePort

WSDL port name

org.apache.cxf.ws.in.interceptors

String, String[], List

List of CXF in interceptors

org.apache.cxf.ws.out.interceptors

String, String[], List

List of CXF out interceptors

org.apache.cxf.ws.in.fault.interceptors

String, String[], List

List of CXF in fault interceptors

org.apache.cxf.ws.out.fault.interceptors

String, String[], List

List of CXF out fault interceptors

org.apache.cxf.ws.features

String, String[], List, Object

List of CXF out features

Service Provider properties For Configuring RESTful JAXRS-based endpoints and consumers

org.apache.cxf.rs configuration type

When the service.exported.configs=org.apache.cxf.rs property is specified, the following properties may also be specified.

Property Name

Data Type

Example

Description

org.apache.cxf.rs.address

String

{{

http://localhost:9090/greeter

}}

The address at which the service with be made available remotely. If this property is not specified, this defaults to {{

http://localhost:9000/fully/qualified/ClassName

}}.

org.apache.cxf.rs.httpservice.context

String

/auction

When this property is specified, the OSGi HTTP Service which is used to expose the service, rather than a dedicated Jetty HTTP Server. By default, absolute address may look like 'http://localhost:8080/auction'

org.apache.cxf.rs.provider

Boolean

true/false

Can be used to identify a global JAXRS provider as CXF-compatible

org.apache.cxf.rs.provider.expected

Boolean

true/false

Can be used to require global providers to set an 'org.apache.cxf.rs.provider' property with a value 'true'.

org.apache.cxf.rs.provider.globalquery

Boolean

true/false

Can be used to disable queries for global providers, defaults to 'true'.

org.apache.cxf.rs.databinding

String

aegis

This property has a limited value for JAXRS services as JAXB is supported by default, the only supported value is 'aegis' and it is a shortcut for registering an Aegis provider, see below for more information on how to register custom providers for JAXRS services

org.apache.cxf.rs.wadl.location

String

/wadl/service.wadl

WADL location

org.apache.cxf.rs.provider

String, String[], List

List of JAX-RS providers

org.apache.cxf.rs.in.interceptors

String, String[], List

List of CXF in interceptors

org.apache.cxf.rs.out.interceptors

String, String[], List

List of CXF out interceptors

org.apache.cxf.rs.in.fault.interceptors

String, String[], List

List of CXF in fault interceptors

org.apache.cxf.rs.out.fault.interceptors

String, String[], List

List of CXF out fault interceptors

org.apache.cxf.rs.features

String, String[], List

List of CXF out features


这么多,怎么设。算了。用最新的吧

	Dictionary<String, String> props = new Hashtable<String, String>();

        props.put("service.exported.interfaces", "*");
props.put("service.exported.configs", "org.apache.cxf.ws");
props.put("org.apache.cxf.ws.address", "http://localhost:9000/hello_world"); registration = bundleContext.registerService(HelloWorldServiceInterfaces.class.getName(),
new HelloWorldImple(), props);

最新版的java代码是这种,

能执行,能訪问了。

我还是想吐糟一下。明明说要向下兼容,为什么要设置那么多额外的属性。

distributed OSGI demo的更多相关文章

  1. OSGI动态加载删除Service bundle

    OSGi模块化框架是很早就出来的一个插件化框架,最早Eclipse用它而出名,但这些年也没有大热虽然OSGi已经发布了版本1到版本5.现在用的最多的,也是本文讲述基于的是Equinox的OSGi实现, ...

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

    前言 Apache CXF是一个开源的服务框架项目,而Distributed OSGi子项目提供了基于OSGi远程服务规范的分布式组件实现.它使用Web Services,HTTP上的SOAP手段实现 ...

  3. Build Telemetry for Distributed Services之OpenTracing实践

    官网:https://opentracing.io/docs/best-practices/ Best Practices This page aims to illustrate common us ...

  4. 【HBase】HBase Getting Started(HBase 入门指南)

    入门指南 1. 简介 Quickstart 会让你启动和运行一个单节点单机HBase. 2. 快速启动 – 单点HBase 这部分描述单节点单机HBase的配置.一个单例拥有所有的HBase守护线程- ...

  5. 使用MapReduce实现join操作

     在关系型数据库中,要实现join操作是非常方便的,通过sql定义的join原语就可以实现.在hdfs存储的海量数据中,要实现join操作,可以通过HiveQL很方便地实现.不过HiveQL也是转化成 ...

  6. zhihu spark集群,书籍,论文

    spark集群中的节点可以只处理自身独立数据库里的数据,然后汇总吗? 修改 我将spark搭建在两台机器上,其中一台既是master又是slave,另一台是slave,两台机器上均装有独立的mongo ...

  7. Spark:大数据的电花火石!

    什么是Spark?可能你很多年前就使用过Spark,反正当年我四六级单词都是用的星火系列,没错,星火系列的洋名就是Spark. 当然这里说的Spark指的是Apache Spark,Apache Sp ...

  8. The Apache HBase™ Reference Guide

    以下内容由http://hbase.apache.org/book.html#getting_started节选并改编而来. 运行环境:hadoop-1.0.4,hbase-0.94.22,jdk1. ...

  9. clickhouse入门到实战及面试

    第一章. clickhouse入门 一.ClickHouse介绍 ClickHouse(开源)是一个面向列的数据库管理系统(DBMS),用于在线分析处理查询(OLAP). 关键词:开源.面向列.联机分 ...

随机推荐

  1. JAVA基础之集合、Iterator迭代器、泛型及增强for循环

    个人理解: 对于集合,首先要明确的是最顶层的接口是Collection接口类,其包含一些基本的方法以便子类调用,不过在定义的时候最好定义好数据类型,以免遍历时还得必须进行向上转型:特别注意的是其没有关 ...

  2. protobuf3 语法解析

    定义一个消息类型 先来看一个非常简单的例子.假设你想定义一个“搜索请求”的消息格式,每一个请求含有一个查询字符串.你感兴趣的查询结果所在的页数,以及每一页多少条查询结果.可以采用如下的方式来定义消息类 ...

  3. Install Ruby on Rails on Ubuntu 12.04 LTS

    1:Update package repository. sudo apt-get update 2:Install git and Curl.     Git:是一个简单,快速,高效的版本控制系统. ...

  4. struts_hibernate登陆范例

    开发工具:MyEclipse 6.0 ,Tomcat 5.5 ,JDK 1.5  ,MySQL 5.0 :开发准备:下载Struts 2.0和Hibernate 3.2,大家可Struts和Hiber ...

  5. 【共享单车】—— React后台管理系统开发手记:Router 4.0路由实战演练

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  6. javascript的window.open()具体解释

    通过button打开一个新窗体.并在新窗体的状态栏中显示当前年份. 1)在主窗体中应用下面代码加入一个用于打开一个新窗体的button: <body> <script type=&q ...

  7. Lua学习七----------Lua函数

    © 版权声明:本文为博主原创文章,转载请注明出处 1.Lua函数 - 完成指定的任务,这种情况下函数作为调用语句使用 - 计算并返回值,这种情况下函数作为赋值语句的表达式使用 - Lua函数可以返回多 ...

  8. cmake学习之-project

    一.系统版本 cmake version: 3.5.2 系统版本: Ubuntun 16.04 cmake docment: 3.14.4 最后更新: 2019-05-31 二.指令说明 projec ...

  9. Iconfot阿里妈妈-css高级应用

    矢量图标替换教程 首先进入:http://www.iconfont.cn/ 搜索你分类的关键字---然后加入购物车 加入购物车之后,下载到本地用浏览器打开demo.html 把a class=“原来样 ...

  10. 49 个jquery代码经典片段

    49 个jquery代码经典片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一 些则是真正有用的函数或方法,他们能够帮助你又快又 ...