CN103957188B - 一种对称的双向解耦的企业服务描述方法及服务调度系统 - Google Patents

一种对称的双向解耦的企业服务描述方法及服务调度系统 Download PDF

Info

Publication number
CN103957188B
CN103957188B CN201410111861.7A CN201410111861A CN103957188B CN 103957188 B CN103957188 B CN 103957188B CN 201410111861 A CN201410111861 A CN 201410111861A CN 103957188 B CN103957188 B CN 103957188B
Authority
CN
China
Prior art keywords
service
message
type
name
symmetrical
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410111861.7A
Other languages
English (en)
Other versions
CN103957188A (zh
Inventor
刘俊红
李远贵
刘宁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur General Software Co Ltd
Original Assignee
Inspur General Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur General Software Co Ltd filed Critical Inspur General Software Co Ltd
Priority to CN201410111861.7A priority Critical patent/CN103957188B/zh
Publication of CN103957188A publication Critical patent/CN103957188A/zh
Application granted granted Critical
Publication of CN103957188B publication Critical patent/CN103957188B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种对称的双向解耦的企业服务描述方法及服务调度系统,涉及基于服务的业务与系统集成领域。该方法把服务的语义和服务的部署分离,引入额外的属性来标示服务类型(输出或者输入)和调用类型(同步读、同步写或者异步写)。对于类型定义、消息结构定义、服务Operation定义等则遵从WSDL2.0协议从而保证和任何其他基于WSDL描述的服务能够很好的集成。与现有技术相比,通过该方法能够以相同的方式对于服务调用者的服务需求和服务提供者的服务描述进行描述,使得服务调用者在逻辑上和服务提供者解耦。具有很好的推广应用价值。

Description

一种对称的双向解耦的企业服务描述方法及服务调度系统
技术领域
本发明涉及基于服务的业务与系统集成领域,具体地说是一种对称的双向解耦的企业服务描述方法及服务调度系统。
背景技术
面向服务的体系结构(service-oriented architecture,SOA)广泛的应用在复杂的信息系统之间的集成和企业应用的服务设计中,它将应用程序的不同功能单元(称为服务)通过定义良好的接口和契约联系起来,使得服务调用者无需关心服务提供者的技术实现细节,提高了软件系统的开放性,并降低了系统集成的复杂性和成本。
目前主要是通过服务组件(如CORBA)和Web Service来实现SOA架构,但是存在的主要问题是:服务实现虽然不关心别人如何调用,但是服务调用者即便是通过ESB解决了服务提供者的连接和路由问题,还是需要关心服务调用者的服务接口,并根据服务接口发出服务请求(Request),并理解服务提供者的响应消息(Response),从而根据响应消息的内容进行处理。这本质上是产生了一个单向依赖,只不过在ESB的介入下把物理层和逻辑层的依赖降低为只有逻辑层的依赖。
目前这种以服务提供者为中心的SOA实现,在系统集成场景中还有一个问题就是源系统和目标系统都只考虑提供服务被动的被其他人调用,项目实施过程还是需要通过代码来从某个系统发起服务的调用。基于上述的对称的服务描述,系统设计时可以分别以服务的形式设计系统需要调用的服务需求和提供对外提供的服务描述,系统集成时则可以实现完全基于服务的集成。
随着用户对于系统响应性(Responsiveness)要求的提高,异步的理念越来越多的被广泛使用在系统的设计中,特别是Ajax技术在Web编程中极大提高了网站的性能和用户体验,也进一步推广了异步编程模式,但是在异步服务调用方面还缺乏现成的框架进行集成。基于异步的编程模式,出现了业务事件的概念,其根本是事件发生的主体以服务的形式在企业服务库中进行描述,在事件发生的时候,以web服务的方式通知其他人,并把事件的信息发布出来。事件的订阅者基于业务事件和事件的信息进行异步的处理。
发明内容
本发明的技术任务是针对上述现有技术的不足,提供一种对称的双向解耦的企业服务描述方法通过该方法能够以相同的方式对于服务调用者的服务需求和服务提供者的服务描述进行描述,使得服务调用者在逻辑上和服务提供者解耦。
本发明进一步的技术任务是提供一种对称的双向解耦的企业调度系统。
本发明的技术任务是按以下方式实现的:一种对称的双向解耦的企业服务描述方法,其特点是将服务的语义和服务的部署分离,引入额外的属性来标示服务类型(输出或者输入)和调用类型(同步读、同步写或者异步写),对于类型定义、消息结构定义、服务Operation定义则遵从WSDL2.0协议以保证和其他基于WSDL描述的服务能够集成:
引入的额外的属性包括:
服务的描述引入额外ServiceType和OperationType:ServiceType用于描述服务是需求描述还是提供的服务的描述;OperationType用于描述调用类型是异步请求,同步读请求还是同步写请求;
消息头引入额外的属性字段IsSync、SycnCounter、MsgOrderContext及MsgOrderID,通过这些字段来保证数据的一致性:
IsSync用于确定是否状态同步;SycnCounter用于确定消息同步的次数;MsgOrderContext用于确定消息编号依据;MsgOrderID用于确定消息序列号。
在上述对称的无耦合的服务描述方法基础上实现了服务调度系统,来进行服务的调度和适配,从而实现了SOA架构的灵活的基于服务的系统集成。其特点是调度系统接受服务调用者的XML格式Message,并根据消息发送者的身份信息进行消息路由,并经过消息适配的过程把消息转换为符合消息接受者能够处理的消息结构后,发送给接收者,所述身份信息包括:Interface Name、Operation Name、发送者所在的系统及发送方ID。
具体来说,上述对称的双向解耦的企业服务调度系统包括以下功能模块:
(1)消息接收适配器:
针对不同的通信协议,提供消息发送者把服务调用或者通知消息发送给服务调度系统的通道,同时消息接收适配器通过通信通道的不同参数识别消息发送者的基本身份(如Interface名字,Operation名字,系统ID)等;
(2)消息队列:
消息队列接收消息接收适配器传递过来的消息进行持久化,避免消息丢失,然后从消息队列中提取消息提交给消息路由;
(3)服务路由:
根据消息发送者的基本身份信息和消息体的字段内容,读取部署的集成模型,进行服务路由,计算出消息应该发送给哪些接受者;
(4)服务映射:
服务映射组件根据定义的消息结构的映射,调用相应的功能把发送者传输的消息结构转换为接受者能够处理的结构,所述消息结构的映射是实施顾问在定义集成模型的时候定义的;
(5)映射逻辑:
实施顾问在定义集成模型时,定义的消息结构映射;
(6)数据库访问组件:
负责和数据库交互,提供消息持久化的API(用程序编程接口)和集成模型和服务描述信息读取的API;
(7)异常组件:
异常组件根据异常处理策略在mapping(映射)或者消息处理过程中发生异常时,进行对应的异常处理或者通知系统管理员进行人工处理;
(8)消息发送适配器:
消息发送适配器根据服务接收者定义的通信协议,把转换后的消息发送给服务的接收者;同时将内部XML消息转换为适配器对应的格式。
本发明的对称的双向解耦的企业服务描述方法及服务调度系统与现有技术相比具有以下突出的有益效果:
(1)通过对称的完全解耦的服务描述方法把服务调用者的需求作为一种服务进行描述和注册,从而实现了服务生产者和消费者逻辑上的解耦;
(2)在逻辑解耦的基础上,实现了异步的服务集成和服务化的业务事件发布和订阅机制;
(3)服务协同和调度框架实现了服务中介的功能,增加了服务需求定义,降低了系统集成的成本。
附图说明
附图1是本发明实施例中服务描述元素关系图;
附图2是本发明实施例中服务调度系统功能原理图;
附图3是本发明实施例中定义服务集成场景的示例图。
具体实施方式
参照说明书附图以具体实施例对本发明的对称的双向解耦的企业服务描述方法及服务调度系统作以下详细地说明。
实施例:
本发明的对称的双向解耦的企业服务描述方法,该方法把服务的语义和服务的部署分离,引入额外的属性来标示服务类型(输出或者输入)和调用类型(同步读、同步写或者异步写)。对于类型定义、消息结构定义、服务Operation定义等则遵从WSDL2.0协议从而保证和任何其他基于WSDL描述的服务能够很好的集成。服务的描述体系包括:
1.ServiceDefinition:是一个服务描述的根元素,包含一个ServiceInterface的元素和若干个DataType的元素。
2.Service Interface:服务接口,用来标示服务提供者的服务实现描述和服务调用者的服务需求描述。
Service Interface的元素和属性说明如下:
Operation元素:服务接口提供的服务方法,同一个服务接口可能包含1个或者多个服务方法;
Name属性:服务接口的名称;
NameSpace属性:服务接口名称的命名空间,可选;
ServiceType属性:服务接口的类型。ServiceType的值为0(表示服务提供者提供的服务描述)或者1(服务需求描述)。
3.Interface Operation:服务方法,用来定义服务对外部提供的方法。其他属性和元素如下:
OperationName属性:方法的名称;
OperationType属性:可以选择的值为0(异步),1(同步读),2(同步写);
RequestMessageType元素:服务请求的消息结构,类型为MessageType;
ResponseMessageType元素:服务响应的消息结构,类型为MessageType;
FaultMessageType元素:服务调用发生应用或者技术层面的错误,返回给调用者的故障消息结构,类型为MessageType。
4.MessageType:MessageType用来描述服务请求者和调用者之间的调用消息结构。每个Operation都必须定义Request或者Response的消息结构,同步的Operation会同时具备Request和Response消息结构。MessageType通过若干DataType的元素来定义,一般是一个树形的结构。其属性如下:
Name属性:服务消息结构的名称;
DataType属性:消息结构对应的数据类型名称。
消息头引入额外的属性字段IsSync(是否状态同步),SycnCounter(消息同步的次数),MsgOrderContext(消息编号依据),MsgOrderID(消息序列号),通过这些字段来保证数据的一致性。
5.FaultMessage:服务调用中出现了逻辑或者物理错误,最终没有返回正常的Response消息的情况下,返回FaultMessage。FaultMessage是一种特殊的MessageType。和MessageType没有任何区别。
6.DataType:和WSDL的DataType定义完全一致。
上述服务描述实体关系如附图1所示。
基于上述描述方法,业务事件能够以服务的形式描述,并发布在服务库中。对于业务事件,业务事件的通知可以是一种输出通知类的服务,其描述如下:
<?xml version="1.0" encoding="utf-8" ?>
<ServiceDefinition>
<dataType name=”MesageTypeName”>
<DataElement name=”element1” type = “int”/>
<DataElement name=”element2” type = “String”/>
</dataType>
<serviceInterface name=”serviceName” type= “0”>
<operation name=”operaionName” type=”0”>
<RequestmessageType Name=“EventNotification” DataType= “MessageTypeName”/>
</operation>
</serviceInterface>
</ServiceDefinition>
基于上述的XML服务描述,关注这个事件的应用能够收到XML的消息内容,消息内容将包含业务事件需要传递的业务信息。应用只需要实现一个Inbound的服务来处理收到的消息即可。
本发明在上述对称的无耦合的服务描述方法基础上实现了服务调度系统,来进行服务的调度和适配,从而实现了SOA架构的灵活的基于服务的系统集成。调度系统接受服务调用者的XML格式Message,并根据消息发送者的身份信息(Interface Name, OperationName,发送者所在的系统,发送方ID)进行消息路由,并经过消息适配的过程把消息转换为符合消息接受者能够处理的消息结构后,发送给接收者。
服务调度系统功能结构如附图2所示。
服务调度系统各个模块的功能描述如下:
消息接收适配器:
针对不同的通信协议,提供消息发送者把服务调用或者通知消息发送给服务调度系统的通道。同时消息适配器通过通信通道的不同参数能够识别出消息发送者的基本身份(如Interface名字,Operation名字,系统ID)等。
消息队列:
消息队列接收消息接收适配器传递过来的消息进行持久化,避免消息丢失。然后从消息队列中提取消息提交给消息路由。
服务路由:
根据消息发送者的基本身份信息和消息体的字段内容,读取部署的集成模型,进行服务路由,计算出消息应该发送给哪些接受者。
服务映射:
服务发送者和接收者因为是松耦合的,发送者发出的 消息结构可能和接受者能够处理的消息结构不一致。在定义集成模型的时候,实施顾问需要针对这种情况定义消息结构的映射。服务映射组件根据这个定义,调用相应的功能把发送者传输的消息结构转换为接受者能够处理的结构。
映射逻辑:
实施顾问在定义集成模型时,定义的消息结构映射。
数据库访问组件:
负责和数据库交互,提供消息持久化的API和集成模型和服务描述信息读取的API。
异常组件:
异常组件根据异常处理策略在mapping或者消息处理过程中发生异常时,进行对应的异常处理或者通知系统管理员进行人工处理。
消息发送适配器:
消息发送适配器根据服务接收者定义的通信协议,把转换后的消息发送给服务的接收者。同时适配器还需要把内部XML消息转换为适配器对应的格式。如File适配器需要把转换后的XML文件存放到对应的目录。
基于上述的服务调度系统,对于异步的业务事件,事件的发起者向调度框架提交一个XML Message,适配器提取了事件发起者的身份(Interface名字,发起的系统名字,Operation的名字等),消息体则是事件需要通知事件订阅者的信息。调度框架收到消息后进行协议转换,并放入消息队列。引擎获取消息,然后根据集成模型和消息内容进行路由,找到哪些订阅者应该被触发,并调用预置的映射定义进行消息结构的转换,最后通过发送适配把消息发送给订阅者。订阅者根据消息的内容进行事件处理,这样一个完整的基于服务的异步的集成就完成了。
对于同步的场景,和异步的类似,区别就在于调度框架需要等待服务生产者的响应消息,并把响应消息返回给服务调用者。
当已有的集成模型不满足需求时,则通过设计器对于集成模型进行重新定义,甚至可以导入新的服务,重新部署集成模型就可以实现服务的灵活扩展和替换。
下面,以一个销售订单确认后需要物流系统发货的业务为例,销售系统和物流系统属于两个独立的应用,他们之间通过服务调用进行集成。本发明在实际应用中,实施方式如下:
1.服务定义(outbound异步通知SalesOrderNotification,Inbound异步服务DeliveryRequestHandling)
<?xml version="1.0" encoding="utf-8" ?>
<ServiceDefinition>
<dataType name=”SalesOrderNotificationMsg”>
<DataElement name=”OrderID” type = “int”/>
<DataElement name=”ShiptoAddress” type = “String”/>
<DataElement name=”AccountID” type = “String”/>
<DataElement name=”TotalAmount” type = “double”/>
<DataElement name=”Items” type=”OrderItem” cardinality=”0,n”>
</dataType>
<dataType name=”OrderItem”>
<DataElement name=”ItemID” type = “CHAR(8)”/>
<DataElement name=”ProductID” type = “String”/>
<DataElement name=”Quantity” type=”int” />
<DataElement name=”Price” type=”float” />
<DataElement name=”DeliveryDate” type=”Date” />
</dataType>
<serviceInterface name=”SalesOrderNotification” ServiceType= “0”>
<operation name=”Create” type=”0”>
<RequestmessageType Name=“OrderNotification” DataType= “SalesOrderNotificationMsg”/>
</operation>
</serviceInterface>
</ServiceDefinition>
<?xml version="1.0" encoding="utf-8" ?>
<ServiceDefinition>
<dataType name=”DeliveryRequestHandlingMsg”>
<DataElement name=”RequestID” type = “int”/>
<DataElement name=”ShiptoAddress” type = “String”/>
<DataElement name=”ReferenceID” type = “String”/>
<DataElement name=”DeliveryItems” type=”DeliveryItem” cardinality=”0, n”>
</dataType>
<dataType name=”DeliveryItem”>
<DataElement name=”ItemID” type = “CHAR(8)”/>
<DataElement name=”ProductID” type = “String”/>
<DataElement name=”Quantity” type=”int” />
<DataElement name=”DeliveryDate” type=”Date” />
</dataType>
<serviceInterface name=”DeliveryRequestHandling” ServiceType= “0”>
<operation name=”Create” type=”0”>
<RequestmessageType Name=“DeliveryRequestHandling” DataType= “DeliveryRequestHandlingMsg”/>
</operation>
</serviceInterface>
</ServiceDefinition>
2.针对这两个服务定义,分别实现发送订单通知信息的程序OrderNotification.dll和交货请求处理的程序DeliveryRequestCreation.dll.
3.通过设计器定义集成模型和服务映射逻辑(两个消息结构不是完全一致的),如附图3所示。
<?xml version="1.0" encoding="utf-8" ?>
<MessageMapping>
<SourceDataType name=”SalesOrderNotificationMsg”/>
<TargetDataType name=” DeliveryRequestHandling”/>
<NodeMapping> Node=”DeliveryRequestHandling”Source= “SalesOrderNotificationMsg”>
<ElementMapping Element=”RequestID” Value=”DR”+source.OrderID />
<ElementMapping Element=” ShiptoAddress” Value=source. ShiptoAddress />
<ElementMapping Element=” ReferenceID” Value=source.OrderID />
</NodeMapping>
<NodeMapping> Node=”DeliveryRequestHandling.DeliveryItem”Source= “SalesOrderNotificationMsg.OrderItem”>
<ElementMapping Element=”ItemID” Value=”DR”+source.ItemID />
<ElementMapping Element=” ProductID” Value=source. ProductID />
<ElementMapping Element=” Quantity” Value=source. Quantity />
<ElementMapping Element=” DeliveryDate” Value=source. DeliveryDate />
</NodeMapping>
</MessageMapping>
部署集成场景到服务协同和调度框架中并激活运行。

Claims (1)

1.一种对称的双向解耦的企业服务描述方法,其特征在于:将服务的语义和服务的部署分离,引入额外的属性来标示服务类型和调用类型,对于类型定义、消息结构定义、服务操作定义则遵从WSDL2.0协议以保证和其他基于WSDL描述的服务能够集成:
引入的额外的属性包括:
服务的描述引入额外ServiceType和OperationType:ServiceType用于描述服务是需求描述还是提供的服务的描述;OperationType用于描述调用类型是异步请求,同步读请求还是同步写请求;
消息头引入额外的属性字段IsSync、SycnCounter、MsgOrderContext及MsgOrderID,通过这些字段来保证数据的一致性:
IsSync用于确定是否状态同步;SycnCounter用于确定消息同步的次数;MsgOrderContext用于确定消息编号依据;MsgOrderID用于确定消息序列号。
CN201410111861.7A 2014-03-24 2014-03-24 一种对称的双向解耦的企业服务描述方法及服务调度系统 Active CN103957188B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410111861.7A CN103957188B (zh) 2014-03-24 2014-03-24 一种对称的双向解耦的企业服务描述方法及服务调度系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410111861.7A CN103957188B (zh) 2014-03-24 2014-03-24 一种对称的双向解耦的企业服务描述方法及服务调度系统

Publications (2)

Publication Number Publication Date
CN103957188A CN103957188A (zh) 2014-07-30
CN103957188B true CN103957188B (zh) 2018-03-27

Family

ID=51334414

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410111861.7A Active CN103957188B (zh) 2014-03-24 2014-03-24 一种对称的双向解耦的企业服务描述方法及服务调度系统

Country Status (1)

Country Link
CN (1) CN103957188B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104572216A (zh) * 2015-01-27 2015-04-29 浪潮通用软件有限公司 一种业务元素的通用描述方法
CN104954469B (zh) * 2015-06-19 2018-07-24 长沙廖氏软件科技有限公司 一种异构系统信息交换方法
CN105577533A (zh) * 2016-03-18 2016-05-11 微梦创科网络科技(中国)有限公司 一种分布式的消息投放系统和方法
CN108259192A (zh) * 2016-12-28 2018-07-06 中国移动通信集团江西有限公司 通过业务服务组件化处理服务异常的方法及装置
CN107273138A (zh) * 2017-07-04 2017-10-20 杭州铜板街互联网金融信息服务有限公司 基于Android业务模块间交互的解耦方法和系统
CN108199865A (zh) * 2017-12-07 2018-06-22 中国航空工业集团公司西安航空计算技术研究所 一种基于发布订阅的路由服务实现方法
CN110365786B (zh) * 2019-07-19 2022-03-22 中国工商银行股份有限公司 作业处理系统、异步作业调度方法和计算机设备
CN113656195B (zh) * 2021-08-13 2024-02-27 广州虎牙科技有限公司 服务消息通道管理方法、装置和电子设备
CN117193225B (zh) * 2023-11-07 2024-01-02 北京珂阳科技有限公司 晶圆制造工艺流程控制方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102868608A (zh) * 2012-09-04 2013-01-09 江苏大学 一种基于消息机制的企业服务总线系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8259923B2 (en) * 2007-02-28 2012-09-04 International Business Machines Corporation Implementing a contact center using open standards and non-proprietary components

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102868608A (zh) * 2012-09-04 2013-01-09 江苏大学 一种基于消息机制的企业服务总线系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"基于ESB的企业应用集成框架的研究与应用";王铭;《中国优秀硕士学位论文全文数据库 信息科技辑》;20100601;第5页第1行到第27页末行 *

Also Published As

Publication number Publication date
CN103957188A (zh) 2014-07-30

Similar Documents

Publication Publication Date Title
CN103957188B (zh) 一种对称的双向解耦的企业服务描述方法及服务调度系统
US8027922B2 (en) Integration infrastructure
US8301687B2 (en) Systems and/or methods for standards-based messaging
EP2031818B1 (en) Systems and/or methods for providing feature-rich proprietary and standards-based triggers via a trigger subsystem
CN101853437A (zh) 端对端业务流程管理、业务事件管理和/或业务活动监控的系统和/或方法
CN100574221C (zh) 一种多系统错误码管理方法、装置及系统
CN104156798B (zh) 企业权威源系统数据实时推送方法
CN107395729A (zh) 一种消息队列的消费系统、方法及装置
Wada et al. Modeling non-functional aspects in service oriented architecture
CN107222530A (zh) 服务异步交互方法、设备、系统和可读介质
CN103701720A (zh) 与Socket服务器通信的方法、联机交易事务管理系统
US7383267B2 (en) Standardized integration model for distributed business processes
Kopp et al. Interaction choreography models in BPEL: Choreographies on the enterprise service bus
CN105893162A (zh) 一种基于消息自动路由的多医疗信息系统集成方法
CN101110700A (zh) 资源管理平台中的资源管理器
CN101339520B (zh) 一种将ejb接入企业服务总线的方法
CN105812241A (zh) 基于Spring Integration的企业应用集成方法和系统
Ying et al. Personalized modeling for SaaS based on extended WSCL
CN106909368B (zh) 一种实现快速业务开发的服务端业务层逻辑架构
CN111866157B (zh) 云服务网关及云服务内外请求格式转换方法
CN101795237A (zh) 基于数据交换的工作流整合方法和装置
Andersson et al. Architectural integration styles for large-scale enterprise software systems
TWI484424B (zh) Dynamic Management System of Telecommunication Fixed Network Resource Adjustment Process
Emmersberger et al. Tutorial: Open source enterprise application integration-introducing the event processing capabilities of apache camel
Moon et al. Transformation algorithms between BPEL4WS and BPML for the executable business process

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 250100 Ji'nan high tech Zone, Shandong, No. 1036 wave road

Applicant after: Langchao General Software Co., Ltd

Address before: 250101 Shandong Province, Ji'nan City hi tech Development Zone, Nga Road No. 1036

Applicant before: Shandong Universal Software Co., Ltd., Langchao Group Corp.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant