服务组件对不同服务提供者的功能进行组合和封装,封装成粒度较粗的模块,例如地图组件、数据组件等,同时支持将一个或多个服务组件组装成服务组件集合提供服务。服务组件的配置是在<component>节点中进行,服务组件集合的配置在<componentSet>节点中进行。

服务组件和服务组件集都可以与服务接口相结合来提供服务实例,假设已配置了一个名为 rest 的 REST 服务接口(参见:服务接口层的配置),在以上 map-world 组件的配置中,已经绑定了“rest”接口,则 map-world 组件与 rest 服务接口组合提供的服务实例的 URI 依次如下:

http://<server>:<port>/iserver/services/map-world/rest

http://<server>:<port>/iserver/services/components-rest/rest

分别表示 map-world 服务组件包含的 REST 服务的根目录和 components-rest 组件集包含的 REST 服务的根目录,通过后者,可以访问到 map-world、data-world、3D-sample、transportationanalyst-sample 几个服务组件包含的全部 REST 服务。

其中,不同服务组件绑定的服务接口类型也是不完全相同的,目前 SuperMap iServer 中服务组件与服务接口的对应情况如表1_服务组件与服务接口对照表所示。

表1 服务组件与服务接口对照表

服务组件类型 服务接口类型 预定义的服务接口
地图服务组件 (MapImpl) REST 接口(RestServlet) ArcGIS REST 接口(AGSRestServlet) Baidu REST 接口 (BaiduRestServlet) Google REST 接口 (GoogleRestServlet) WMS 接口(WMSServlet) WMTS 接口(WMTSServlet) rest、arcgisrest1、baidurest1、googlerest1 wms111、wms130 wmts100、wmts-china
数据服务组件 (DataImpl) REST 接口(RestServlet) ArcGIS REST 接口(AGSRestServlet) WFS 接口(WFSSServlet) WCS 接口(WCSServlet) rest 、arcgisrest1 wfs100、wfs200 wcs111、wcs112
影像服务组件 (ImageImpl) REST/JSR 接口(JaxrsServletForJersey)
WMTS 接口(WMTSServlet)
restjsr,wmts100
空间分析服务组件 (SpatialAnalystImpl) REST/JSR 接口(JaxrsServletForJersey) WPS 接口(WPSServlet) restjsr wps100
交通网络分析服务组件 (TransportationAnalystImpl) REST 接口(RestServlet) ArcGIS REST 接口(AGSRestServlet) rest、arcgisrest1
交通换乘分析服务组件 (TrafficTransferAnalystImpl) REST/JSR 接口(JaxrsServletForJersey) restjsr
三维服务组件 (RealspaceImpl) REST 接口(RestServlet) rest
三维网络分析 (NetworkAnalyst3DImpl) REST/JSR 接口(JaxrsServletForJersey) restjsr
空间建模服务组件 (GeoprocessorComponent) GP 接口(GeoprocessorServlet) gpserver
动态标绘服务组件 (PlotImpl) REST接口(RestServlet) rest
地址匹配服务组件 (AddressMatchImpl) REST接口(RestServlet)

restjsr

注1:iServer高级版和iEdge提供该接口。

服务组件配置基本结构

<component> 和 <componentSet> 在配置文件中的结构如下所示:

<application>
                ...
                <componentSets>
                        ...
                        <componentSet>
                              ...
                        <componentSet/>
                </componentSets>
                <components>
                        ...
                        <component>
                             ...
                        <component/>
                </components>
</application>

地图组件配置

地图服务组件配置示例:

<component name="map-china400" class="com.supermap.services.components.impl.MapImpl"
     interfaceNames="rest,wms111,wms130,wmts100,wmts-china" providers="ugcMapProvider-China400">
        <config class="com.supermap.services.components.MapConfig">
           <useCache>false</useCache> 
           <tileCacheConfig class="com.supermap.services.tilesource.SMTilesTileSourceInfo"> 
               <datastoretype>TILES</datastoretype>
               <outputPath>D:/supermap/soft/supermap_iserver/webapps/iserver/output/sqlite</outputPath> 
           </tileCacheConfig>  
           <utfGridCacheConfig class="com.supermap.services.tilesource.UTFGridTileSourceInfo"> 
               <datastoretype>TILES</datastoretype>
               <type>UTFGrid</type>  
               <outputPath>D:/supermap/soft/supermap_iserver/webapps/iserver/output/sqlite</outputPath> 
           </utfGridCacheConfig>  
           <vectorTileCacheConfig class="com.supermap.services.tilesource.SVTilesTileSourceInfo"> 
               <datastoretype>TILES</datastoretype>
               <type>SVTiles</type>  
           </vectorTileCacheConfig>  
               <useUTFGridCache>false</useUTFGridCache>
               <useVectorTileCache>true</useVectorTileCache>
           <expired>0</expired> 
           <cacheReadOnly>false</cacheReadOnly> 
        </config>
</component>

其中<component>节点的 class 属性标识的是地图组件的实现类;providers 属性是地图组件用到的服务提供者(集合),(参见:服务提供者层的配置);interfaceNames 属性标识的是服务组件绑定的服务接口,多个服务接口之间用“,”分隔,参见:服务接口层的配置。<config>节点是该地图组件实现对应的配置项,对应接口配置类MapConfig,以下参数均为可选参数:

  • <outputPath>:瓦片的存储位置,可以根据需要更改。
  • <useCache>:是否使用缓存。
  • <datastoretype>:数据存储类型。
  • <useUTFGridCache>:是否使用属性瓦片缓存。
  • <useVectorTileCache>:是否使用矢量瓦片缓存。
  • <cacheReadOnly>:缓存文件是否只读。
  • <expired>:缓存过期时间,单位为分钟。从瓦片创建开始计算瓦片过期时间,当再次访问瓦片时,若当前系统时间与瓦片创建时间的差值大于该值,瓦片将会刷新。0代表缓存永不过期。
  • <tileCacheConfig>:地图瓦片配置类,瓦片类型支持 SMTiles、FastDFS、MongoDB、GDP。关于瓦片格式的详细介绍,请参考:瓦片格式注意:开启单机多进程后,地图服务将不再支持 SMTiles 类型的地图瓦片缓存。
  • 当瓦片类型为 SMTiles 时,对应类为 com.supermap.services.tilesource.SMTilesTileSourceInfo
  • 当瓦片类型为 FastDFS 时,对应类为 com.supermap.services.tilesource.FastDFSTileSourceInfo
  • 当瓦片类型为 MongoDB 时,对应类为 com.supermap.services.tilesource.MongoDBTileSourceInfo
  • 当瓦片类型为 GDP 时,对应类为com.supermap.services.tilesource.GDPTileSourceInfo
  • <utfGridCacheConfig>:属性瓦片配置类,瓦片类型支持 UTFGrid,对应类为 com.supermap.services.tilesource.UTFGridTileSourceInfo。
  • <vectorTileCacheConfig>:矢量瓦片配置类,瓦片类型支持 SVTilesTileSourceInfo,对应类为 com.supermap.services.tilesource.SVTilesTileSourceInfo。
  • <type>:瓦片缓存类型,当缓存类型为 SMTiles 时,此项可以省略。
  • <tileCacheUpdateConfig>:栅格瓦片缓存更新配置。
  • <cacheReadOnly>:栅格瓦片缓存文件是否只读,优先级高于公共的 cacheReadOnly 参数。
  • <expired>: 栅格瓦片过期时间。从瓦片创建开始计算瓦片存活时间。时间单位为分钟,0代表缓存永不过期。优先级高于公共的 expired 参数。
  • <vectorTileCacheUpdateConfig>:矢量瓦片缓存更新配置。
  • <cacheReadOnly>:矢量瓦片缓存文件是否只读,优先级高于公共的 cacheReadOnly 参数。
  • <expired>: 矢量瓦片过期时间。从瓦片创建开始计算瓦片存活时间。时间单位为分钟,0代表缓存永不过期。优先级高于公共的 expired 参数。

数据服务组件配置

数据服务组件配置示例:

<component name="data-world" class="com.supermap.services.components.impl.DataImpl"
           interfaceNames="rest,wfs100,wfs200,wcs111,wcs112" providers="ugcDataProvider-World"> 
      <config class="com.supermap.services.components.DataConfig">
         <editable>true</editable>
         <cacheStrategyConfig>
            <maxElementInMemory>100</maxElementInMemory>
            <timeToLiveSeconds>3</timeToLiveSeconds>
            <timeToIdleSeconds>3</timeToIdleSeconds>
         </cacheStrategyConfig>
      </config> 
    </component>

 

其中,<component>节点的 class 属性标识组件类型,对应实现类 DataImpl,<config>节点是该 Data 组件对应的配置项,即接口配置类DataConfig。主要参数说明:

  • <editable>属性,表示是否可编辑。当 editable 为 true 时可编辑。

  • <cacheStrategyConfig>属性,表示数据查询缓存相关设置:

  • <maxElementInMemory>:内存中允许存储的最大对象个数,默认为100个。
  • <timeToLiveSeconds>:内存中存储对象的有效时长,单位为秒,默认为3秒。
  • <timeToIdleSeconds>:内存中存储对象允许闲置的时长,单位为秒,默认为3秒。

影像服务组件配置

影像服务组件配置示例:

    <component class="com.supermap.services.components.impl.ImageImpl" enabled="true" initPriority="0" instanceCount="0" interfaceNames="wmts100,restjsr" name="imageservice-ChinaImages" providers="imageservice-ChinaImages">
      <config class="com.supermap.services.components.ImageConfig"> 
        <editable>false</editable>
        <downloadable>false</downloadable> 
      </config>
    </component>

其中,<component>节点的 class 属性标识组件类型,对应实现类 ImageImpl,<config>节点是该影像服务组件对应的配置项,即接口配置类ImageConfig。主要参数说明:

  • <editable>属性,表示是否可编辑。当 editable 为 true 时可编辑。

  • <downloadable>属性,表示影像数据资产是否可下载,当downloadable为true时可下载。

服务组件集合配置

<componentSet>节点可以将一个或多个服务组件组装成服务组件集,一个<componentSet>节点的示例如下:

<componentSet name="components-rest">
        <component-reference  name="map-world"></component-reference>
        <component-reference  name="3D-sample"></component-reference>
        <component-reference  name="data-world"></component-reference>
        <component-reference  name="transportationanalyst-sample"></component-reference>
</componentSet>

自定义服务组件配置

添加一个自定义组件类型,在系统配置文件(iserver-system.xml)中配置,示例如下:

<component-type  alias="SuperMap 自定义服务组件" configClass="com.supermap.services.components.SMConfig">
   com.supermap.services.components.impl.SMImpl
</component-type> 

其中 com.supermap.services.components.impl.SMImpl 是自定义的服务组件类型的实现类,com.supermap.services.components.SMConfig 是自定义的服务组件类型的配置类。

<component-type>节点在配置文件中的结构如下所示:

<server>
     <management>
              …
         <component-types>
                  …
               <component-type>
                      …
               </component-type> 
 
         </component-types>
      </management>
</server>

开启动态化管理的服务组件配置

以数据服务组件为例,示例如下:

<component name="data-world" class="com.supermap.services.components.impl.DataImpl" enabled="true" initOnCreate="true" initPriority="0" 
           instanceCount="0" interfaceNames="rest,wfs100,wfs200,wcs111,wcs112" providers="ugcDataProvider-World"> 
      <config class="com.supermap.services.components.DataConfig">
            <editable>true</editable>
      </config> 
</component>

其中,对于<component>节点:

  • <initOnCreate>属性:该服务实例是否需要立即初始化。开启服务实例动态化功能后默认为 false。true 表示服务实例将随着 iServer 启动立即初始化;false 表示不立即初始化,即 iServer 启动后服务实例延迟初始化。

注意,只有开启服务实例动态化功能后,该参数才有效。