Zip包下载

  1. 首先获取CMDB-CORE免安装zip包
  2. 如果还没有mysql数据库,请下载MYSQL安装包
  3. 如果还没有jdk6+,请下载最新的jdk
  1. 确保安装Mysql
    创建用于CMDB-CORE的数据库。
    运行如下脚本: CREATE DATABASE FVSD_CMDB
    DEFAULT CHARACTER SET UTF8
    COLLATE UTF8_GENERAL_CI;
  2. 确保安装JDK6+
  3. 解压zip包;
  4. windows用户运行bin/startup.bat
    linux用户运行bin/startup.sh
  5. 打开浏览器访问http://localhost:8080/cmdb-core/
  6. 选择快速安装:
    a、配置控制台账号密码
    b、配置数据库并验证其可用性(必需保证配置的数据库连接是可用的,否则安装后启动失败)
  7. 重启
  8. 打开浏览器访问http://localhost:8080/cmdb-core/
  1. 集成进您的产品
  2. 开发属于自己的UI;

1.1  获取

首先获取CMDB-CORE免安装zip包

如果还没有mysql数据库,请下载MYSQL安装包

如果还没有jdk6+,请下载最新的jdk

1.2  安装

1.2.1  环境需求

  • 安装jdk6+
  • 安装mysql 5.1+

1.2.2  安装过程

  1. 创建用于CMDB-CORE的数据库。运行如下脚本:
    CREATE DATABASE FVSD_CMDB DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
  2. 解压下载的zip包
  3. windows用户运行bin/startup.bat,linux用户运行bin/startup.sh
  4. 启动完成后,打开浏览器进入http://localhost:8080/cmdb-core
  5. 选择快速安装

  6. 配置控制台账号密码

  7. 配置数据库并验证其可用性(必需保证配置的数据库连接是可用的,否则安装后启动失败)


  8. 完成安装:
    在配置完数据库连接后点击下一步,如果出现以下界面表示安装成功:

  9. 重新启动:安装成功后重新启动程序
  10. 启动完成后,打开浏览器进入http://localhost:8080/cmdb-core出现如下界面表示安装成功:

1.3  集成到您的产品中

CMDB-CORE提供了两种方式的集成:

  1. 组件嵌入方式
  2. 使用接口访问独立的CMDB服务方式

1.3.1  组件嵌入

组件嵌入方式是指将cmdb的相关代码直接嵌入到第三方应用中运行的方式。由于CMDB-CORE是由开发实现的,因此嵌入方式集成要求第三方应用也必需是基于java语言的。

OTU框架工程嵌入

如果您的工程是基于OTU框架的,您可以通过在pom中添加相应的依赖直接嵌入CMDB-CORE,组件的maven artifactId:

    <dependency>
        <groupId>com.dhcc.itsm</groupId>
        <artifactId>cmdb-core</artifactId>
        <version>4.3.0</version>
    </dependency>

普通工程嵌入

由于嵌入过程复杂性,稳定性等问题暂时不予以考虑。如有强烈需求或疑问请联系产品开发团队相关人员。

示例

组件嵌入方式下,可用的java api 参考Java API docs

如果进行页面开发可直接在页面中访问CMDB-CORE的WEB-API

以下是一个在嵌入集成方式下获取配置项类别列表的示例。示例工程以OTU框架的maven工程为例,下载地址如下:

Cmdb-example-1

注意:

  • 工程的运行要求maven配置连接产品研发部的中央仓库,如果不是本部门的开发人员请联系研发团队的有关人员。
  • 在运行示例时请保证8080端口未被占用,如果被占用请使用
    mvn jetty:run –Djetty.port=xxx
    重新指定端口运行。
  • 演示示例要求在已经存在数据库的环境下运行,数据库环境的配置见otu.properties文件。

示例的工程结构如下

主要文件和目录说明如下:

  • ExampleController.java : 示例代码文件
  • applicationContext-example.xml : 示例配置文件
  • components-def.xml : 组件定义文件
  • otu.properties : OTU参数配置文件
  • src/main/webapp/example : 前端页面示例代码目录;
  • src/main/webapp/WEB-INF/web.xml : web配置文件。
  • pom.xml : maven工程配置文件

嵌入演示示例包含两个例子,一个是直接使用web api的例子,一个是使用java api进行开发的例子。OTU嵌入开发的步骤如下:

为了集成OTU框架和COMB-CORE,首先需要创建一个maven web工程

同时,在工程的pom.xml中加入如下两个依赖:

  <dependency>
        <groupId>com.otu</groupId>
        <artifactId>otu_core</artifactId>
        <version>0.4.0</version>
    </dependency> 
    
    <dependency>
        <groupId>com.dhcc.itsm</groupId>
        <artifactId>cmdb-core</artifactId>
        <version>4.3.0</version>
    </dependency>

如果您要使用jetty插件运行您的项目,您需要添加相关的插件配置:

其次,为启动OTU框架需要在web.xml中加入相应的监听器,代码如下:

  <listener>
        <listener-class>com.otu.platform.StartupListener</listener-class>
  </listener>

第三,otu.propertis的主要配置如下:

#应用程序名称
otu.appName= CMDB-Example

#用于指示系统是否为第一次启动?
otu.state = installed

############# 系统基础设置 #################################

#标识系统是否是以开发模式启动,并以此设置不同的日志级别等
# dev: 开发模式
# online:生成模式
otu.runMode= dev

#一个用于保存文件型数据的操作系统绝对路径,路径分割符为 “/”
otu.dataDir = /tmp

#系统操作日志启用开关
otu.operationLog.enable= false

#平台的入口组件,使用此组件的入口地址作为系统的首页
otu.enter.component = security

otu.log.level = error

###########系统内置服务开关#################################

#JMS服务启动开关
otu.jms.enabled = false
#quartz任务调度服务启动开关
otu.quartz.enabled = false
#数据库存储服务启动开关
otu.db_persist.enable = true
#webservice启动开关
otu.webservice.enable = false

###########任务调度服务设置##################################

#任务调度运行模式
# db: 数据库运行模式,调度的数据将存储在数据库中,系统重启后仍然可以继续执行任务;
# memory:内存模式,调度数据存储在内存中,系统重启后数据将丢失;
otu.quartz.mode=db

#数据库连接
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/FVSD4?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=round
jdbc.username=root
jdbc.password=root
jdbc.dbType=mysql


#hibernate 配置
hibernate.show_sql = true
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.search.default.indexBase=classpath:/searchIndex

###########其他设置#######################################
cayenne.security.login.theme=security/login_theme_fvsd4
cayenne.security.frame.theme=security/main_theme_default

#otu.component.security.state = disable
# 可通过“classpath:”引用classpath下的位置
cayenne.filerepo.storage.path=${cayenne.workspace.path}/Cayenne_File_Repository
cayenne.filerepo.storage.tempPath = Cayenne_File_Repository_Temp/preview
#cayenne.filerepo.openoffice.cmd = /usr/bin/soffice

cmdb.categoryDesigner.storage.path = ${cayenne.workspace.path}/categoryDesigner/output
cmdb.filerepo.storage.path = ${cayenne.workspace.path}/cmdb_file_repo

###########版本仓库目录#######################################
cmdb.versionRepoDir = ${cayenne.workspace.path}/cmdb_version_repo


第四,为使您的spring注解生效您需要声明您的包路径(applicationContext-example.xml):

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd"
    default-lazy-init="false">
    
    <context:component-scan base-package="com.dhcc.cmdb.example"></context:component-scan>
</beans>

1.3.2  独立的CMDB服务

在独立访问方式中,CMDB-CORE采用http协议和json数据格式等语言无关的技术, 使得使用接口独立访问CMDB-CORE服务的方式能够支持与跨语言跨平台的第三方应用集成。

独立的CMDB服务的获取和安装请参考安装相关内容。

独立服务模式中CMDB-CORE需要通过公开的web接口进行访问。

以下是一个访问独立服务获取配置项类别列表的servlet演示示例,其他语言或使用框架可按类似的方式访问,示例工程下载地址如下:

Cmdb-example-2

注意:

  • 在进行独立服务访问演示前,需要部署CMDB-CORE服务。
  • 当前CMDB-CORE未提供安全认证机制,因此,最好将CMDB-CORE安装在内网环境下,以免被非法操作。

演示工程目录结构如下

主要文件和目录说明如下:

  • ExampleServlet.java 为示例servlet代码
  • web.xml为servlet 配置文件
  • pom.xml为maven配置文件

首先需要在pom.xml中为工程添加必要的依赖:

  <!-- 版本基线功能实现 -->
  <dependency>
      <groupId>org.eclipse.jgit</groupId>
      <artifactId>org.eclipse.jgit</artifactId>
      <version>3.5.2.201411120430-r</version>
  </dependency> 
  <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
  </dependency>
  
  <!-- 配置项类别(人员)支持 -->
  <dependency>
      <groupId>com.cayenne.component</groupId>
      <artifactId>cayenne_organization</artifactId>
      <version>${cayenne.version}</version>
  </dependency>
  
  <!-- 网络设备信息获取功能所需 -->
  <dependency>
      <groupId>org.snmp4j</groupId>
      <artifactId>snmp4j</artifactId>
      <version>2.3.3</version>
  </dependency>
  
  <!-- 配置项导入导出支持 -->
  <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.11</version>
  </dependency>
  <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-excelant</artifactId>
      <version>3.11</version>
  </dependency>
  
  <!-- 附件功能 -->
  <dependency>
      <groupId>com.cayenne.filerepo</groupId>
      <artifactId>cayenne_file_repository</artifactId>
      <version>${cayenne.version}</version>
  </dependency>
        
  <!-- 测试相关依赖 -->           
  <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>provided</version>
  </dependency> 
  
  <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.2.1</version>
      <scope<test</scope>
      <exclusions>
          <exclusion>
              <artifactId>commons-codec</artifactId>
              <groupId>commons-codec</groupId>
          </exclusion>
      </exclusions>
  </dependency>
  
  <dependency>
      <groupId>org.xerial</groupId>
      <artifactId>sqlite-jdbc</artifactId>
      <version>3.8.7</version>
      <optional>true</optional>
      <scope>test</scope>
  </dependency>
  
  <!-- xpath api -->
  <dependency>
      <groupId>jaxen</groupId>
      <artifactId>jaxen</artifactId>
      <version>1.1.1</version>
      <exclusions>
          <exclusion>
              <groupId>xalan</groupId>
              <artifactId>xalan</artifactId>
          </exclusion>
      </exclusions>
  </dependency>

  <!-- websocket-api -->
  <dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-api</artifactId>
    <version>1.1</version>
    <scope>provided</scope>
  </dependency>
  <!-- 支持关系视图的图片导出 -->
  <dependency>
      <groupId>com.mxgraph</groupId>
      <artifactId>mxgraph-core</artifactId>
      <version>1.11.0.0</version>
  </dependency>

如果你的工程不是maven工程,请将依赖包拷贝到工程的lib目录下。

其次,编写一个Servlet,代码如下(见ExampleServlet.java):

/**
 * Copyright (c) 2012-2014 by DHCC All rights reserved.
 */
package com.dhcc.cmdb.example.webapp.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

/**
 * 一个调用java api的示例
 * 
 * @author Qchen
 * @date 2014-10-15
 */
public class ExampleServlet extends HttpServlet {

    private static final long serialVersionUID = -5498577470470853679L;

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        HttpGet get = new HttpGet("http://localhost:8080/cmdb-core/cmdb/ci/category/list.mvc");
        get.addHeader("accept", "application/json");
        get.addHeader("Content", "text/html;charset=UTF-8");

        // 如果需要设置参数请启用一下代码
        // HttpParams params = new BasicHttpParams();
        // params.setParameter("example1", 10);
        // params.setParameter("example2", "example2");
        // get.setParams(params);

        HttpClient hc = new DefaultHttpClient();

        HttpResponse code = hc.execute(get);
        String json = IOUtils.toString(code.getEntity().getContent(), "UTF-8");

        resp.setContentType("application/json");
        resp.getWriter().write(json);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

第三,在web.xml中注册需要运行的servlet:

        <servlet>
            <servlet-name>cmdb-example</servlet-name>
            <servlet-class>com.dhcc.cmdb.example.webapp.servlet.ExampleServlet</servlet-class>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>cmdb-example</servlet-name>
            <url-pattern>/cmdb/example</url-pattern>
        </servlet-mapping>
 

第四,运行工程后通过http://localhost:9090/fvsd_cmdb_example_2/cmdb/example访问

功能结构描述CMDB-CORE的主要功能组成,如果你对CMDB已经有了解或仅仅因为某些原因需要实现单个的接口,你可以跳过本部分的内容。

如上图所示CMDB-CORE的主要功能包含CI模型定义、CI操作、CI版本和基线操作、CI统计四部分内容。

2.1  CI模型定义

CI模型的定义包含四个方面:CI的分类定义、CI的属性定义、CI间的关系定义、CI的生命周期模型定义

2.1.1  CI的分类

配置项的分类有利于配置项的管理,合理的分类对于配置项管理极其重要。在CMDB-CORE中,将CI的顶级分类叫做CI一级类别或CI的类型,CI的类型确定了CMDB-CORE能够管理的配置项的范围。CI在顶级分类下的子类叫做CI的类别,CI的类别确定了CMDB-CORE 管理CI的粒度。CI的类别越多说明配置管理的粒度越小。

CMDB-CORE仅支持类别的扩展而不支持类型的扩展,即产品能够管理的配置项范围是固定的,但是管理的粒度可以根据用户的需求进行细化。其主要原因是在多年的项目实施过程中还未发现新的类型。如在后续的使用过程中发现新的类型,将由开发团队升级产品实现。而管理的粒度根据不同的客户有不同的需求。

CMDB-CORE支持的CI类型如下:

类型 编码
服务 cagt_1_service
业务系统 cagt_1_business_system
设备 cagt_1_device
应用 cagt_1_application
流程 cagt_1_process
人员 cagt_1_people
配件 cagt_1_accessory
文档 cagt_1_document
逻辑资源 cagt_1_logic_resource
虚拟设备 cagt_1_virtual_device
其它 cagt_1_others
软件 cagt_1_software

经过多年的项目实践, 推荐的CI分类模板如下:

服务 业务服务
技术服务
业务系统
设备 网路设备 路由器
交换机
服务器 windows
aix
linux
solaris
存储设备 磁带库
磁盘列阵
安全设备 防火墙
基础设施 机柜/机架
通风系统设备
空调
配电设备
配线架
办公设备 打印机
复印机
扫描仪
桌面设备 台式机
笔记本
移动终端 智能手机
平板
手持pos机
虚拟设备 云运算资源
云存储
云网络设备
应用 业务应用
中间件 tomcat
iis
jboss
weblogic
websphere
数据库 mysql
oracle
sybase
sqlServer
其它应用
组件/部件
逻辑资源 HUB
接入点
IP
域名
流程
配件 CPU
内存
硬盘
网卡
板卡
文档
人员
其他
软件

2.1.2  CI的属性

配置项的属性由通用属性和扩展属性(特征属性)两部分组成。

通用属性是指所有的配置项都必须具备的属性。如配置项的唯一标识信息、类别标识、状态等。

扩展属性(特征属性)是指根据配置项管理的需要为不同的配置项类别单独定义的属性。扩展属性通常又称为配置项特征属性。如:设备的维保信息,使用信息等属于设备的特征信息。

属性池

如上图所示,CMDB-CORE将各类型的配置项可能用到的所有扩展属性进行统一起来叫做属性池。属性池中的属性由可预见的扩展属性和不可预见的扩展属性(预留属性)两部分组成。

可预见的扩展是指那些统计出来的可能会被用到的属性。但是由于不同的客户,对于配置管理的需求不同,某些属性可能不需要关注,就可以在配置项模板中把相应的属性忽略。(可预见属性的配置是对需要管理的配置项属性的裁剪)

当前属性池的可预见的扩展属性如下:

1.设备的可预见扩展属性

属性名 类型 编码
应用层级 String apApplicationLevel
传输速率 String apTransmissionRate
交换方式 String apExchangeMode
背板带宽 String apBackPlaneBandwidth
包转发率 String apPacketForwardingRate
MAC地址表 String apMacAddressTable
端口结构 String apPorts
端口数量 int apPortCount
扩展端口 String apPortNumber
传输模式 String apTransmissionMode
网络标准 String apNetworkStandard
堆叠功能 String apStackFunction
VLAN String apVlan
QOS String apQos
组播管理 String apMilticastManagement
网络管理 String apNetwortManagement
安全管理 String apSecurityManagement
电源电压 String apSupplyVoltage
电源功率 String apPowerRate
尺寸 String apSize
重量 String apWeight
环境标准 String apEnvironmentalStandatd
产品类型 String apRouteType
局域网接口 int apLanInterface
VPN支持 String apVpnSupport
WDS功能 String apWdsFunction
防火墙 String apFirewall
安全性能 String apSafetyPerformance
DRAM内存 String apDraMemory
Flash内存 String apFlashMemory
扩展插槽 int apExpansionSlot
QoS支持 String apQoSupport
NAT支持 int apNatSupport
电源 int apPower
功率 int apRate
工作环境 int apWorkEnvironment
客服电话 String apTelphone
质保政策 String apQualityPolicy
质保时间 String apQualityTime
详细内容 String apDetail
CPU系列 String apCpuSeries
CPU核心 String apCpuCore
CPU型号 String apCpuModel
CPU主频 String apCpuFrequency
三级缓存 String apCache
标配CPU数目 int apStandardCpuNumber
最大CPU数目 int apProcemaxCpuNumberssordigits
内存类型 String apRamModel
标配内存 String apStandardModel
内存插槽数 int apRamSlotNumber
硬盘接口类型 String apCalicheInterfaceModel
标配硬盘 String apStandardCaliche
硬盘转速 int apCalicheRotateSpeed
存储控制器 String apStoreController
网卡 String apNetworkCard
机箱托架 String apCabinateBracket
房间号/名称 String apRoomNo
所在楼层 int apFloor
房间性质 int apNature
分区信息 String apPartitions
容量 String apVolume
制冷范围 int apCoolCapacityRange
室外环境条件 String apOutdoorEnvirocondition
产品结构 String apProductStructure
送风方式 String apWindWay
备用时间 int apReserveTime
输入电压范围 String apInputVoltageRange
输出电压范围 String apOutputVoltageRange
输出插座 String apOutputConnector
电池型号 String apBatteryType
外观尺寸 String apExternalDimension
方式 String apWay
输出频率范围 String apOutputFrequencyRange
打印类型 String apPrintType
功能范围 String apFunctions
网络功能 String apNetModel
最大幅面 String apMaxPage
接口类型 String apPortsType
打印速度 String apPrintSpeed
分辨率 String apResolutionRatio
进纸盒容量 int apPageInNunber
出纸盒容量 int apPageOutNumber
颜色类型 String apColorType
复印速度 String apSpeed
处理器 String apProcessor
内存容量 String apMemory
介质重量 String apMediumWeight
输入频率范围 String apInputFrequencyRange
原稿类型 String apNetMode
连续复印页数 int apMaxCopypages
缩放范围 String apZoomRange
扫描光源 String apLightSource
投射适配器 String apProjectionAdapter
预热时间 String apPreheating
网络扫描 String apNetworkScaning
扫描方式 String apScanMode
扫描速度 String apScanSpeed
显示器 String apDisplay
处理器类型 String apProcessorType
处理器频率 int apProcessorFrequency
总线技术 String apTechnology
主板/芯片 String apMainboard
硬盘类型 String apDiskType
硬盘参数 int apDiskParameters
硬盘容量 String apDiskCapacity
光驱 String apDriver
显卡类型 String apCardType
显卡芯片 String apCardChip
显卡容量 String apCardCapacity
显卡性能 String apCardPerformance
声卡 String apCardVoice
接口 String apInterface
键盘鼠标 String apKeyboard
核心线程 int apCoreThread
核心架构 String apCoreArchitecture
二级缓存 String apSecondCache
机箱 String apCase
屏幕尺寸 String apScreenSize
摄像头 String apCamera
扬声器 String apVoice
色彩位数 int apColorBits
输入设备 String apInput
usb int apUsb
读卡器 String apReader
电池 int apBattery
电源适配器 String apPowerAdapter
线缆类型 String apLineType
路线级别 String apLineLevel
起始点 String apStartPoint
结束点 String apEndPoint
地面长度 String apOverGroundLength
地下长度 String apUnderGroundLength
所属客户 String apBelongCustomer
云服务支持 String apCloudSupport
主机类型 String apHostType
操作系统 String apOperatingSystem
散热方式 String apRadiatingType
设备档次 String apDeviceLevel
访问方式 String apAccessMethods
文件系统 String apFileSystem
路由器编号 String apRouterNumber
交换机编号 String apSwitchNumber
机架 所占列数 Long apOccupyColumn
剩余U位 String apRemainU
出租类型 String apRentalType
机架规格 String apRackSpecification
剩余功率 String apRemainRate
机架长度(CM) Long apRackLength
机架宽度(CM) Long apRackWeight
机架高度(CM) Long apRackHeight
机架描述 String apRackDescription
X值 Long apXValue
Y值 Long apYValue
所占行数 Long apOccupyRow
所属机架 String apBelongRack
RFID支持 boolean apRfidSupport
wifi支持 boolean apWifiSupport
gps支持 boolean apGpsSupport
加速度(重力)感应支持 boolean apAccSupport
温度感应支持 boolean apTmpSupport
NFC感应支持 boolean apNfcSupport
陀螺仪支持 boolean apGyroscopeSupport
ip地址 String apIpAddress
账户1 String apUseName1
密码1 String apPassword1
账户2 String apUseName2
密码2 String apPassword2
账户3 String apUseName3
密码3 String apPassword3
账户1是否是管理员 boolean apIsAdmin1
账户2是否是管理员 boolean apIsAdmin2
账户3是否是管理员 boolean apIsAdmin3
产品认证 String apCertification
端口描述 String apPortsDescribe
控制端口 String apPortsControl
状态指示灯 String apStateLight
平均无故障时间(h) String apMTBF
系统支持 String apSystemSupport
最大内存容量 String apMaxMemory
网络类型 String networkType
cpu状态 String apCpuStatus
内存状态 String apRamStatus
硬盘状态 String apCalicheStatus
网卡状态 String apMacStatus
标配网卡数 int apNetworkCardNum
压缩后存储容量 String apCompressedVolume
压缩后传输率 String apCompressedTransmissionRate
驱动器数目 int apDriverNumber
驱动器类型 String apDriverType
存储技术 String apStorageTechnology
混合磁带机技术 boolean apHybridDriveTechnology
支持存储介质 String apStorageMedia
磁带加载时间(s) String apTapeLoadTime
磁带卸载时间(s) String apTapeUninstallTime
平均寻道时间(s) String apAvgSeekTime
高速缓存 String apHighSpeedCache
硬盘数量 int apDiskNumber
扩展柜 String apSBOD
RAID级别 String apRaidLevel
支持应用 String apSupportApplication
并发连接数 int apConcurrentConnections
网络吞吐量 String apNetworkThroughput
安全过滤带宽 String apSecurityBroadband
用户数限制 int apUserLimit
入侵检测 String apIntrusionDetection
安全标准 String apSecurityStandard
其它性能 String apOtherCapability
标准 String apStandard
门及门锁 String apDoor
材料及工艺 String apMaterial
附加功能 String apAdditional
u位总数 String cabinetUNumber
冷暖类型 String apCoolWarmType
变频/定频 String apFrequencyType
房间类型 String apRoomType
空调匹数 int apHorsepower
适用面积 String apApplyArea
能效比 String apEer
能效等级 String apEfficiencyLevel
控制方式 String apControlWay
压缩机 String apCompressor
制冷剂 String apRefrigerantsFluid
制冷量 String apRefrigeratingOutput
制冷功率 String apRefrigeratingCapacity
制热量 String apHeatingOutput
制热功率 String apHeatingCapacity
电辅加热功率 String apElectricAuxiliaryHeatingCapacity
循环风量 String apCircularAir
室内机噪音 String apIndoorNoise
室外机噪音 String apOutdoorNoise
是否静音 boolean apIsMute
清洁功能 String apCleanFunction
除霜功能 String apDefrost
杀菌类型 String apDisinfectType
电辅加热 int apElectricAuxiliaryHeating
包装清单 String apPackingList
机身颜色 String apColor
室内机尺寸 String apIndoorSize
室外机尺寸 String apOutdoorSize
室内机质量 String apIndoorWeight
室外机质量 String apOutdoorWeight
配电量 String apDistributionPower
按时数 String apAh
上市时间 String apTimeToMarket
GPU型号 String apGpuModel
处理器位数 int apProcessorBit
RAM容量 int apRAMVolume
ROM容量 int apROMVolume
存储卡 boolean apStorageCard
扩展容量 String apExpansionVolume
触摸屏类型 String apTouchScreenType
主屏材质 String apScreenMaterial
屏幕像素密度 String apScreenPixelDensity
窄边框 String apNarrowBorder
屏幕占比 int apScreenShare
其他屏幕参数 String apOtherScreenParam
网络模式 String apNetworkMode
WLAN功能 String apWLAN
蓝牙功能 boolean apBluetoothSupport
音效技术 String apSoundTechnology
闪光灯 String apFlashLight
拍照功能 String apPhotograph
视频录制 String apVideoRecording
麦克风 String apMicrophone
视频播放 String apVideoDisplay
Flash功能 boolean apFlash
音频支持 String apAudioSupport
视频支持 String apVideoSupport
图片支持 String apImageSupport
文本支持 String apTextSupport
数据接口 String apDataInterface
音频接口 String apAudioInterface
其他接口 String apOtherInterface
功能按键 String apFunctionKeys
电池容量 String apBatteryCapacity
续航时间 String apLifeTime
内置感应 String apInternalSensor
商务功能 String apBusinessFunctions
特色功能 String apSpecialFeature
其他功能参数 String apOtherFeature
存储 String apStorage
顾客显示屏 String apCustomerDisplay
打印机 String apPrinter
机器语言 String apLanguage
涵盖功能 String apincludeFunction
耗材 String apConsumable
双面器 String apDADF
自动输稿器 String apADF
复印尺寸 String apCopierSize
首页复印时间 String apFirstCopierTime
产品定位 String apProductPositioning
黑白打印速度 String apBlackWhitePrintSpeed
彩色打印速度 String apColorsPrintSpeed
双面打印 String apPrintDuplexr
无线功能 String apWifiFunction
首页打印时间 String apFirstPrintTime
打印语言 String apPrintLanguage
月打印负荷 String apMonthCapacity
硒鼓寿命 String apCartridgeLife
墨盒类型 String apCartridgeType
墨盒数量 String apCartridgeNumber
墨粉盒打印量 String apCartridgePrintNumber
墨水打印量 String apInkPrintNumber
最小墨滴 String apMinInkVolumen
喷头配置 String apSprayHead
介质尺寸 String apMediumSize
工作噪音 String apWorkNoise
扫描元件 String apScanElement
扫描范围 String apScanRange
自动进纸盒 String apAutoFormfeed
输出格式 String apOutputFormat
双面扫描 String apDuplexScan
灰度参数 String apGrayParam
管理IP LogicalResource apManageIP
通风范围 String apVentilationRange
端口号生成规则 String apPortRules
端口类别 String apPortCategory
端子数量 int apTerminalNum
阻燃性 String apFlameRetardancy
接触电阻 String apContactResistance
绝缘电阻 String apInsulationResistance
抗电强度 String apElectricalStrength

2.逻辑资源的可预见扩展属性

属性名 类型 编码
是否被占用 boolean used
IP地址 String apIPAddress
所属客户 String apBelongCustomer
所属IP段 String apBelongIPSegment
备选DNS String apAlternativeDNS
运营商 String apOperator
IP地址总数 Long apIPAddressAmout
子网掩码 String apNetMask
IP地址段信息(CIDR) String apIPAddressSegmentInfo
首选DNS String apPreferredDNS
插槽号 String apSlotNumber
插盘号 String apInsertDiscNumber
对端设备 String apPortDevice
端口编号 String apPortNumber
端口所属客户 String apPortBelongCustomer
端口速率 String apPortSpeed
端口类型 String apPortType
所属路由器 String apBelongRouter
所属交换机 String apBelongSwitch
使用总数 String apUseCount
所属资源池 String apBelongResourcePool
IP总数 String apIPcount
带宽 Long apBandWidth
云主机ID String apCloudHostId
所属网络池 String apBelongNetPool
所属云主机 String apBelongCloudHost
状态 String apStatus
mac String mac
生效状态 String available
所属设备 Device apBelongDevice

3.虚拟设备的可预见扩展属性

属性名 类型 编码
虚拟CPU String apVirtualCPU
虚拟内存 String apVirtualMemory
云主机编号 String apCloudHostNumber
虚拟磁盘 String apVirtualDisk
云主机镜像编号 String apCloudHostMirrorNumber
所属云资源池 String apBelongCloudResourcePool
登录账号 String apLoginAccount
所在宿主机 String apPlaceHost
登录密码 String apLoginPassword
云主机镜像名 String apCloudHostMirrorName
大小 String apSize
所属云主机 String apBelongCloudHost
云主机ID String apCloudHostId
附加磁盘编号 String apAdditionDiskNumber

4.应用的可预见扩展属性

属性名 类型 编码
应用运行的设备 Device runOn
应用对应的软件 Software software
ip地址 String apIpAddress
占用的端口 String apUsePorts
版本 String apVersion
账户1 String apUseName1
密码1 String apPassword1
账户2 String apUseName2
密码2 String apPassword2
账户3 String apUseName3
密码3 String apPassword3
账户1是否是管理员 boolean apIsAdmin1
账户2是否是管理员 boolean apIsAdmin2
账户3是否是管理员 boolean apIsAdmin3
运行环境 String runEnvironment
授权 String authorization
安装路径 String installUrl
安装时间 Date installDate
使用单位 Organization usingOrg
使用人 Customer usingPeople
使用人电话 String userPhone
运维接口人 User maintenancer
运维电话 String maintenancerPhone
运维单位 Organization maintenancerOrg
补丁 String patch

5.配件的可预见扩展属性

属性名 类型 编码
产品 Product product
供应商 Supplier supplier
供应商电话 String supplierPhone
序列号 String sn
相关项目 String project
售后服务商 Supplier assProvider
售后联系人 String assContact
售后电话 String assPhone
维保开始时间 Date maintenanceStartDate
维保结束时间 Date maintenanceEndDate
维保联系人 User maintenancer
维保电话 String maintenancerPhone
维保单位 Organization maintenancerOrg
使用人 Customer usingPeople
使用单位 Organization usingOrg
所属单位 Organization ownerOrg
是否锁定 boolean locked
所在区域 Region region
所在楼宇 Building building
所在楼层 Floor floor
所在房间 Room room
适用类型 String apApplytype
CPU系列 String apCpuSeries
插条类型 String apSlotType
针脚数目 int apStitchNumber
核心代号 String apCoreCode
核心数量 int apCpuCore
线程数 int apCoreThread
制作工艺 String apWorkmanship
CPU主频 String apCpuFrequency
最大睿频 String apMaxTuro
外频 String apFSB
三级缓存 String apCache
内存控制器 String apMemoryController
64位处理器 String apCPUx64
Turbo Boost技术 String apTurboBoost
内存类型 String apRamModel
内存容量 String apMemory
硬盘类型 String apDiskType
硬盘接口类型 String apCalicheInterfaceModel
硬盘转速 String apCalicheRotateSpeed
网卡类型 String apNetworkCardType
板卡类别 String apCardCategory
端口数量 String apPortCount
端口缓存 String apPortCache
MAC String apMac
ARP String apArp
IPV6 boolean apIpv6
MPLS boolean apMpls
ACL String apAcl
队列 String apQueue
端口号生成规则 String apPortRules
端口类别 String apPortCategory
所属设备id String deviceId

不可预见的扩展是指那些没有统计出来的但是客户需要进行管理的属性。CMDB-CORE为用户预留了有限数量的属性以供扩展。其中,字符串扩展属性8个、长文本扩展属性3个、整型数据扩展属性5个、日期扩展属性5个、枚举扩展属性5个、对象关联扩展属性5个。如下所示:

不可预见的扩展属性 类型 说明
xfs1 – xfs8 字符串型 用于短字符串
xft1 – xft3 文本 用于长字符串
xfn1 – xfn5 整型 用于整型数字
xfd1 – xfd5 日期类型 用于存储日期
xfe1 – xfe5 枚举型 用于存储枚举数据
xfo1 – xfo5 对象关联型 用于存储对象唯一标识

2.1.3  CI间的关系

配置管理和服务资产管理的最大区别就在于配置管理需要管理配置项和配置项之间的关系。因此,CI之间的关系是配置项模型的重要组成部分。

2.1.3.1  单向关系和双向关系

单向关系是指有明确方向的关系,如:包含关系,当A包含B时我们只能说A包含B而不能说B包含A。

单向关系通常成对出现,如:包含/属于就是一组相对的关系,也称为关系对。 由于成对的关系缺一不可,定义一个单向关系必需定义一个与之对应的关系,为了保证定义的完整性和方便起见,在CMDB-CORE的实现上,将直接提供单向关系对的定义,而不提供单向关系的定义,即,如果在CMDB-CORE中能够直接创建“包含/属于”关系。

双向关系是指没有明确方向的关系,如:连接关系,当A连接B时我们也可以说B连接A。

2.1.3.2  物理关系和逻辑关系

物理关系是指配置项之间的关系是通过物理的方式发生的,如两个设备之间连接关系就是通过物理的数据线发送的关联。

逻辑关系是指配置项之间通过人为的划分和定义而存在的关系。如包含/属于关系就是人为的将某个整体的配置项划分成多个配置项而产生的。

为了能够在配置项的关系视图中准确的展示,在定义关系时不仅要定义关系的各项特征属性还要定义关系的图形信息。

一个完整的关系定义如下所示:

属性名称 属性编码 说明
名称 name
编码 code
描述 description
线型 linestyle
是否用于影响分析 forImpact
是否用于图形展示 graphicShow
是否为组件关系 componentRelation
关系应用规则 rules
是否只读 readonly
是否允许删除 removable

关系定义的模板如下:

包含/属于    
依赖/影响    
链接    
连接    
安装了/安装在    
运行了/运行在    
虚拟化/被虚拟化    
备份/被备份    

2.1.4  CI的生命周期

配置管理过程中每个生命周期阶段由配置项的状态进行标识。配置管理和其他生产活动都可能会导致配置项生命周期阶段的变更;如下所示为一个配置项生命周期模型的示例:

配置项生命周期模型由状态活动两部分组成。在CMDB-CORE中主要关注生命周期中的状态,而状态之间的转换由第三方产品实现。

2.2  CI操作

配置项的管理活动都是通过对CI的操作实现的。CMDB-COER将CI的操作划分为写入、读取、删除三类。

关于CI的操作接口请参考相关的 API说明。

2.3  CI版本和基线

建设中……

2.4  CI统计

当前CI的统计功能仅提供对状态和类别的数量统计,即统计某个类别或状态的CI数量。具体统计API请查阅 API说明。

2.5  枚举值管理

枚举值是一种对数据可选值范围的约束。如性别的取值范围只有“男”和“女”,CPU品牌包括:“intel”、“AMD”、“sumsung”、”高通” 等。

枚举值在cmdb的管理中通常起到两个作用:

  • 约束属性的取值范围;
  • 使用选择操作取代键盘输入提高输入速度

CMDB-CORE提供了两类枚举值的管理功能——普通枚举值和树形枚举值。这两类枚举值统一采用字符串形式进行保存。

在使用时CMDB-CORE在存储层不对枚举类型进行强约束,以提高存取效率。在展示方面,使用者可以直接以字符串的形式显示值,在录入数据时,枚举项需要通过枚举值获取接口进行数据的获取。

如下图所示,CMDB-CORE中的枚举值都存储在枚举值字典中。每个枚举值都包含一个dataSign属性。dataSign属性用于枚举值的分组。在指定CI属性的约束时可以直接指定一个dataSign而不需要直接指定具体的约束值。在使用时,需要先根据dataSign读取可用的值,然后用户选择对应的值存入配置项记录中。

枚举值操作接口说明请参考API文档说明。

模型定义文件是配置项各类别定义的说明文件,其中描述了配置项的属性定义,关系定义和生命周期定义。类别模型定义文件主要为第三方提供类别说明,及为配置项原始数据解析提供支持。

类别模型定义文件为JSON格式,可以通过类别设计工具生成,也可以手动编写。以下是一个类别定义文件示例:

{
    "id" : "402881d6483f64c601483f64e31b0002",
    "code" : "cagt_1_device",
    "properties" : [{
        "type" : "String",
        "name" : "资产编号",
        "code" : "assetNO",
        "nullable" : true,
        "enumKey" : ""
    },{
        "name" : "产品信息",
        "code" : "productInfo",
        "isGroup" : true,
        "properties" : [{
            "type" : "Product",
            "name" : "产品",
            "code" : "product",
            "nullable" : false,
            "enumKey" : ""
        }, {
            "type" : "String",
            "name" : "品牌",
            "code" : "brand",
            "nullable" : false,
            "enumKey" : ""
        }] 
    },{
        "name" : "系统用户",
        "code" : "systemUserInformation",
        "isGroup" : true,
        "properties" : [{
            "type" : "boolean",
            "name" : "是否是管理账户",
            "code" : "apIsAdmin1",
            "nullable" : true,
            "enumValues" : ["true", "false"]
        }]
     }],
    "extention_info" : {
        "list_config" : {
        },
        "add_config" : {
        },
        "common_read_config" : {
        },
        "common_edit_config" : {
        },
        "feature_read_config" : {
        },
        "feature_edit_config" : {
        },
        "readonly_tags_config" : [],
        "edit_tags_config" : [],
        "persist_config" : "com.dhcc.itsm.model.Device"
    }
}

3.1  schema

其属性说明如下:

属性名称 类型 是否必须 说明
id 字符串 类别ID,用于和类别进行关联
code 字符串 类别CODE,用于和类别进行关联及查询
properties 数组 类别属性定义
extention_info 对象 类别扩展说明

3.1.1  properties

properties属性是类别的属性定义。properties通过一个数组来保存其全部的属性。每个属性说明为一个对象,其属性说明如下:

属性名称 类型 是否必须 说明
type 字符串 配置项属性的类型,参考CI的属性相关说明
name 字符串 配置项属性的业务名称
code 字符串 配置项属性的唯一编码
nullable 布尔 配置项属性约束——是否可为空
enumKey 字符串 配置项属性约束——枚举值标识
enumValues 数组 配置项属性约束——枚举值

在properties中除了属性外,还可以包含属性的分组描述。如表示位置信息的多个属性可以组成位置信息分组。

分组的属性描述如下:

属性名称 类型 是否必须 说明
name 字符串 分组名称
code 字符串 分组的唯一编码
isGroup 布尔 分组的标识,以区分对象为分组或是属性。
properties 数组 分组所包含的属性。

3.1.2  extention_info

extention_info描述的是配置项类别定义的扩展信息,包括其视图展示说明、持久化技术说明等。这些信息不属于标准化的内容,其解析也由其定义者各自实现。extention_info中的具体内容不做强制约束。

3.2  类别属性模型定义文件的获取

在通过接口获取类别信息时,系统会返回类别定义文件的地址,使用者可以通过在浏览器输入地址直接下载。

如果使用者知道某个类别的ID也可以通过直接在浏览器输入一下地址获取:

http://[ hostName]/cmdb/ci/category/definition/get.mvc?id=[categoryId]&type=json

其中,hostName为主机名,categoryId为类别id。

3.3  类别属性模型定义文件的生效

要使类别的定义文件生效,必须将类别的定义文件上传到CMDB-CORE中。上传地址为:

http://[ hostName]/cmdb/ci/category/definition/update.mvc?categoryId=[]&modelDef=[]

详细的接口说明请参考API说明。

类别生命周期模型定义文件定义了类别的生命周期模型。类别的生命周期由状态和活动两个要素组成。以下是生命周期模型的json文件示例:

{
    {
        id : '',// 类别id
        code : ''// 类别编码
        status: [
            {id:'', name : '', code:'', icon:''},
            { id:'', name : '', code:'', icon:''},
            { id:'', name : '', code:'', icon:'' },
            …
        ],
        actions : [
            { name : '', code : '', from: 'status1', to : 'status2', handle : ''},
            { name : '', code : '', from: 'status1', to : 'status2', handle: ''},
            { name : '', code : '', from: 'status1', to : 'status2', handle: ''},
            …
        ],
        extention_Info : {
            graph_info : [
                { status : 'xxx', x : '', y: ''} // 状态位置坐标
            ]
    }
}

4.1  schema

属性名称 类型 是否必须 说明
Id 字符串 类别ID,用于和类别进行关联
code 字符串 类别CODE,用于和类别进行关联及查询
status 数组 类别的状态集合
actions 数组 类别的活动集合
extention_info 对象 类别扩展说明

4.1.1  status

生命周期定义文件中的状态需要通过状态管理接口进行添加和管理。文件中的状态数据是对状态管理的数据的冗余。在使用生命周期定义文件时,需要和状态管理进行状态的同步以及时发现生命周期模型的变更,并确保生命周期定义文件的合法和有效。

属性名称 类型 是否必须 说明
id 字符串 状态ID
name 字符串 状态名称
code 字符串 状态编码
icon 字符串 状态图标

4.1.2  actions

属性名称 类型 是否必须 说明
name 字符串 活动名称
code 字符串 活动编码
from 字符串 起始状态ID
to 字符串 目标状态ID
handle 字符串|对象 进行状态转换时需要进行的操作,由使用者自定义

4.1.3  extention_info

extention_info描述的是配置项类别生命周期的扩展信息,可以是声明周期的视图展示说明等。这些信息不属于标准化的内容,其解析也由其定义者各自实现。Extention_info中的具体内容不做强制约束。

4.2  获取生命周期模型定义

生命周期模型定义可通过相关的api获取,详细api说明请参考API说明。

4.3  更新生命周期定义

生命周期模型定义可通过相关的api更新,详细api说明请参考 API说明。

CMDB-CORE为使用者提供了一个工具集。通过工具的使用能够简化配置管理工作的难度。

CMDB-CORE提供的工具包括:

  • 类别设计工具;
  • 网络发现工具;
  • 数据联邦和调和工具;

5.1  网络发现工具

网络发现工具是一个基于snmp协议的网络管理工具。其主要功能是基于snmp协议发现和获取网络中启用了snmp功能设备的实际信息。

在配置管理过程中,发现工具可用于简化CMDB初始化过程、实现CMDB记录和真实物理环境的数据同步及审计。

需要特别说明的是,网络发现工具不等同于网络管理工具。网络发现工具只是网络管理工具的一个组成部分。网络的监控和警告不属于网络发现工具的功能范畴,需要由网络管理工具的其他功能来实现。

5.1.1  启用网络发现功能

CMDB-CORE提供默认的网络发现工具,其网络发现工具的安装请根据发布包中的安装说明进行。

CMDB-CORE如果需要能够启动网络发现工具需要在CMDB-CORE的配置文件——otu.properties中配置自动发现工具的启动路径,如下所示:

其值为网络发现工具的执行程序路径。

5.1.2  通过CMDB接口启动网络扫描

通过网络扫描工具进行网络发现包含两个阶段——网络扫描阶段、信息采集阶段。

在网络扫描阶段,网络扫描工具根据软件配置扫描工具所属的整个局域网,以获取网络结构和网络所包含的设备。

在信息采集阶段,网络扫描工具根据网络扫描阶段的结果,对固定的设备进行信息采集。

通过CMDB启动网络扫描工具的操作也分为网络扫描和信息采集两个操作。操作的具体接口说明见接口

5.1.3  扫描结果处理

在网络扫描阶段,网络扫描工具的结果以xml文件的形式存储在扫描工具配置的固定目录中。

CMDB在处理扫描结果时,将网络扫描工具当做单独的mdr(management data repository) 对待,使用数据联邦的方式对扫描结果进行处理。

DhccDiscoverMdrWrap类是CMDB-CORE实现的将发现工具结果代理类。其主要功能是将发现结果进行预处理,并返回符合CMDB-CORE数据规范的配置项记录或配置项关系记录。获取发现的配置项数据的示例代码如下:

其中DhccDiscoverMdrWrap的构造函数的参数为网络发现工具的发现结果输出目录。

5.2  沙盒工具

CMDB沙盒用于系统进行较大范围数据的变更时,用户能在不影响正式CMDB的情况下多次进行数据调和及变更的演习,当操作结果符合预期并不会造成不利影响时,用户能够将这些操作应用到正式的CMDB中来。

5.2.1  沙盒的基本操作

CMDB-COER将沙盒的基本操作划分为创建、打开、数据访问和操作、应用到正式库、关闭、销毁六种。

  • 创建 : 创建一个新的沙盒,提供三种方式:正式库的CMDB版本、空的CMDB版本、基于某个基线的CMDB版本
  • 打开 : 打开一个已经存在的沙盒,即系统加载该沙盒
  • 数据访问和操作 : 用户使用和正式库一致的API访问和操作沙盒里的数据, 不影响正式库、不记录基线
  • 应用 : 将沙盒中调和好的数据应用到正式库(考虑权限问题,不应用沙盒中删除的数据,只应用添加和修改的数据,且记录基线)
  • 关闭 : 关闭沙盒数据库连接,释放内存资源
  • 销毁 : 对沙盒进行物理删除,为保证删除成功,删除前会执行沙盒关闭操作

关于各接口的具体使用方法可参考相关的 API说明。

5.2.2  沙盒的生命周期

其生命周期可以描述如下:

  • 用户创建或打开沙盒(创建时会自动执行打开操作),此时沙盒被CMDB系统加载,建立数据库连接,在此基础上用户才可对沙盒数据进行访问、操作和应用
  • 关闭沙盒操作会关闭数据库连接,释放内存资源,此时沙盒的数据文件仍然存在但未被CMDB系统加载
  • 销毁沙盒将物理删除沙盒的数据文件,此时沙盒不复存在;

5.2.3  沙盒数据访问和操作

沙盒的核心功能就是对数据库变更进行预演和调和,即用户可对沙盒的数据进行访问和操作;

我们提供了JAVA 和 WEB两种API供用户访问和操作沙盒数据,使用时不会影响正式库、不记录基线版本,且与正式库操作保持了一致的用户体验

JAVA调用:

CMDB系统提供了一系列的Service API供用户调用以操作正式库数据,如:

  • CiService
  • SupportService
  • RelationshipService
  • ……

为保持一致的用户体验,沙盒提供了构建同样的Service API的方法,该Service的使用方法同正式库一样,不同的是沙盒的Service操作的是沙盒的数据库且关闭了基线功能。

以创建配置项CI为例,使用代码如下

//正式库创建CI代码:
@Resource
private CiService ciService; //注入获取正式库的service
……

public CiBean testCreate() {
    String categoryId = "xxxxxxx";
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("assetNO", "test");
    return ciService.create(categoryId, properties);
}


//沙盒创建CI代码:

@Resource
private SandboxManager sandboxManager; //注入获取沙盒管理器,用以获取沙盒对象

……

public CiBean testCreate() {
    Sandbox sandbox = sandboxManager.create(null, null); //创建沙盒

    CiService sandboxCiService = sandbox.getService(CiService.class); //获取沙盒Service

    String categoryId = "xxxxxxx", 
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("assetNO", "test");
    return sandboxCiService.create(categoryId, properties);
}

//其它Service的具体用法请看CMDB的API接口

WEB调用:

CMDB调用web接口时以URL路径区分、传递不同的参数以完成各类操作,沙盒的web调用路径与正式库相比, 只需在正式库的URL路径上加入要操作的沙盒的信息即可,其它路径和参数都保持了一致

以创建配置项CI为例,使用代码如下:

//操作正式库数据代码:
$.ajax({
    url : '/cmdb/ci/create.mvc',
    data : {
        'categoryId' : 'xxx',
        'name' : 'xxx',
        'assertNO' : 'xxx',
        'status.id' : 'xxx'
    },
    dataType : "json",
    success : function(data) {
        alert(data);
    }
});

//操作沙盒数据代码:
$.ajax({
    url : '/cmdb/tools/sandbox/{sandboxName}/ci/create.mvc',  // 只在原url上增加"/tools/sandbox/{sandboxName}"即可,
                                                                 sandboxName为要操作沙盒的名字
    data : {
        'categoryId' : 'xxx',
        'name' : 'xxx',
        'assertNO' : 'xxx',
        'status.id' : 'xxx'
    },
    dataType : "json",
    success : function(data) {
        alert(data);
    }
});

5.2.4  沙盒数据应用到正式库

在沙盒中进行cmdb预演操作后,最终要将这些操作应用到正式cmdb中以使数据生效。

由于沙盒操作的随意性,使得沙盒中对于数据的删除过于随意。因此,在将沙盒数据应用到正式库中时,在沙盒中进行的删除操作将不会应用到正式库中,只有添加和更新的数据需要应用到正式cmdb中。

另外需要说明的是,沙盒数据的应用,对于正式cmdb来说是一个写入操作,因此将记录版本。

具体用法请操控相关 API说明

1 如何修改独立服务的端口?

答:端口的修改在conf/server.xml中



2 独立服务访问返回数据中文乱码?

答:独立服务统一采用UTF-8编码,请确保对独立服务的请求和数据接收都采用UTF-8编辑进行。

3 嵌入组件后运行出现entity命名冲突?

答:组件嵌入系统后,由于hibernate entity可能出现重名的情况,通常,如果重名的是代码中的entity,可以通过修改注解或配置文件修改entity的名称。

如果冲突的两个entity都是引入的依赖,需要联系开发团队进行协商解决。

4 在使用CMDB-CORE前已经有其他实现,如何进行切换?

答: 切换包含两部分内容,集成、数据迁移。关于如何集成可以参考快速开始的部分内容。切换的主要问题在于如何进行配置项模型的映射和数据迁移。

模型的映射需要人为进行指定。

对于数据的迁移,CMDB-CORE后续版本将提供数据迁移工具。在没有数据迁移工具前,数据迁移工作请联系产品开发团队进行支持。

5 第三方应用是否可以通过与CMDB-CORE共享数据库实现数据交互?

答: 直接使用表结构主要存在以下问题:

  • 直接操纵表结构会被系统识别为非法的变更
  • 直接操纵表结构使系统无法完整的记录所有的变更,导致数据的不一致及版本基线的未知错误
  • 版本的升级导致的表结构变化会使第三方应用不能正常运行
  • CMDB-CORE使用了数据库换成,如果直接操纵表可能导致数据出错

综合考虑,CMDB-CORE将不支持共享数据库, 仅支持接口访问

6 在嵌入模式下第三方开发者是否可以通过继承类的方式扩展CMDB-CORE的类别?

答:第三方开发者通过继承类的方式扩展类别时不被允许的,此方式存在以下问题:

  • 扩展的模型可能由于级联而导致原有模型的读写失败
  • 扩展的模型的操作不能被基线和版本管理监控
  • CMDB-CORE的一级类别扩展方式是非公开的技术实现,在不同的版本下,一级类别的扩展实现方式不保证是通用的