CN101719059B - 操纵soa注册表中的对象的方法 - Google Patents
操纵soa注册表中的对象的方法 Download PDFInfo
- Publication number
- CN101719059B CN101719059B CN200910211668.XA CN200910211668A CN101719059B CN 101719059 B CN101719059 B CN 101719059B CN 200910211668 A CN200910211668 A CN 200910211668A CN 101719059 B CN101719059 B CN 101719059B
- Authority
- CN
- China
- Prior art keywords
- application
- mapping
- registry objects
- attribute
- classification
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/465—Distributed object oriented systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/46—Indexing scheme relating to G06F9/46
- G06F2209/462—Lookup
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及操纵SOA注册表中的对象的方法,并公开了一种通过应用(1)来操纵SOA注册表(2)的至少一个注册表对象(20)的方法,该至少一个注册表对象(20)可通过用于XML注册表的Java API(JAXR)(40)而被访问,该方法包括以下步骤:a.定义至少一个注册表对象类型(220)和至少一个应用对象类型(110)之间的映射(30),其中映射(30)由一个或多个Java注解来描述;b.例示至少一个应用对象类型(110)以向应用(1)提供与至少一个注册表对象(20)相对应的至少一个应用对象(10);以及c.通过应用(1)来操纵至少一个应用对象(10),该操纵通过JAXR(40)而引起对相应的至少一个注册表对象(20)的相关操纵。
Description
技术领域
本发明涉及操纵SOA注册表(registry)中的对象的方法。
背景技术
现代的应用(application)(特别是在面向服务的体系结构(SOA)的环境中)经常包括进行协作以提供该应用的整体功能的多个独立组件。为此,SOA注册表可用于发布、发现和利用这些组件。在“电子黄页”的意义上,SOA注册表通常是一种存储对SOA组件的描述的共享资源,以及在SOA注册表中查询某些组件的手段。此外,SOA注册表不仅能够存储对SOA中常用的web服务的描述,而且可以通过定义自定义类型(custom type)来描述任意种类的组件。
在现有技术中,存在定义了SOA注册表的内容的结构和信息模型的许多注册表规范,例如ebXML和UDDI。为了使得应用能够访问SOA注册表的内容(即,发布新的组件、查找现有的组件等等),现有技术中已知的是应用编程接口(API),最流行的是用于XML注册表的Java API(JAXR)。
JAXR是一种一般性的API,这是因为其提供对各种类型的SOA注册表的访问,例如对符合上述规范的SOA注册表的访问。因此,JAXR定义了一种信息模型,该信息模型试图对不同注册表规范的不同信息模型进行统一。
然而,由于JAXR是一般性的这一事实,利用了JAXR的对应用进行编程的任务是非常复杂的并且需要对底层的JAXR信息模型的详细了解。例如,在SOA注册表中创建某一自定义类型的注册表对象的过程需要应用执行类似于以下的多个步骤:创建一般性的注册表对象,创建自定义概念以及通过分类对象而将注册表对象与概念相链接。当访问现有的注册表对象时,不得不定义相似的步骤。每次创建和搜索新的注册表对象时通常不得不重复这些步骤,这样效率低下并且容易出错,使得被编程的应用的操作很可能失败。
鉴于以上,以下问题因而是本发明的技术问题:改善应用通过JAXR对SOA注册表的访问,以使得对注册表对象的操纵更加高效且更少出错,并从而至少部分地克服现有技术的缺点。
发明内容
根据本发明的一个实施例,该问题是通过一种通过应用来操纵SOA注册表的至少一个注册表对象的方法来解决的,该至少一个注册表对象可通过用于XML注册表的Java API(JAXR)来访问。在一个实施例中,该方法包括以下步骤:
a.定义至少一个注册表对象类型和至少一个应用对象类型之间的映射,其中该映射通过一个和多个Java注解(annotation)来描述;
b.例示至少一个应用对象类型以向应用提供与该至少一个注册表对象相对应的至少一个应用对象;以及
c.通过应用来操纵该至少一个应用对象,该操纵经由JAXR而引起对相应的至少一个注册表对象的相关操纵。
因此,定义一种映射,该映射将注册表对象类型映射到应用对象类型,即,应用对象(其是应用对象类型的实例)用作SOA注册表中注册表对象(其是注册表对象类型的实例)的一种代理(surrogate)。该映射是由一个或多个Java注解进行描述的,这允许一种简明并且易读的可灵活适应的映射定义,如在以下的详细描述中进一步概述的。该映射通常是一种1:1映射,即,其将一个应用对象类型映射到一个相应注册表对象类型。然而,在本发明中,1:n的映射也是可能的,即,将一个应用对象类型映射到多于一个的注册表对象类型,或者甚至可以定义m:n映射。
然后,向应用提供至少一个所例示的应用对象。通过应用对应用对象的操纵通过JAXR而引起对相应的至少一个注册表对象的相关操纵。这可以实现,因为应用对象优选地向应用提供一组简单的操作并且在内部利用复杂的JAXR,从而隐匿了从应用来访问JAXR的繁琐细节。
在发明的一个方面中,至少一个注册表对象可以包括至少一个属性,并且映射可以包括至少一个属性到相应应用对象的至少一个属性的映射。
JAXR信息模型可以定义注册表对象的属性的不同概念,例如,对象属性、对象槽位(slot)以及JAXR定义的对象类型的属性,这将在以下的详细描述进行描述。然而,一种应用可以包括不同的属性概念,例如,可通过获取(get)操作和设置(set)操作而访问的私有性质(attribute)。因此,JAXR属性概念被映射到应用属性概念。该映射的目的是,当应用操纵应用对象时(即,通过设置应用对象的属性值),应用对象例如通过利用JAXR而能够设置相应注册表对象的相应属性。
在发明的另一方面,至少一个注册表对象的至少一个属性可以具有至少一个字符串值,并且到相应应用对象的至少一个属性的映射包括到字符串值的转换。
JAXR信息模型中的某些类型的属性(例如对象槽位)可被限制为存储类型值字符串,即简单的字符序列。另一方面,应用可以支持各种其他类型,诸如整数、布尔值、日期、日历等等。由于将应用对象属性的值被转换为字符串,所以他们能够蔓延到注册表对象的相应属性,反之亦然。
在发明的又一方面中,至少一个注册表对象可通过一个或多个关联对象(association object)而与至少一个第二注册表对象相关联,并且至少一个应用对象可通过一个或多个聚集(aggregation)和/或依赖(dependency)关系而与至少一个第二应用对象相关联,并且,映射可以包括一个或多个关联对象到一个或多个聚集和/或依赖关系的映射。
此外,至少一个注册表对象可通过一个或多个分类对象而与SOA注册表的至少一个概念相关联,至少一个应用对象可通过一个或多个聚集和/或组成关系而与至少一个第二应用对象相关联,并且映射可以包括一个或多个分类对象到一个或多个聚集和/或组成关系的映射。
另外或者作为替换,至少一个注册表对象可以通过一个或多个分类对象而与至少一个分类方案(classification scheme)相关联,该至少一个分类方案定义SOA注册表中的至少一个分类法(taxonomy),并且映射可以包括至少一个注册表对象到相应至少一个应用对象的映射。
此外,至少一个第二注册表对象可通过一个或多个分类对象而与至少一个概念相关联,该至少一个概念是至少一个分类法中的子概念。另一方面,至少一个第二应用对象可通过继承(inheritance)关系而与至少一个应用对象相关联,并且该映射可以包括至少一个第二注册表对象到至少一个第二应用对象的映射。
可以看到,JAXR信息模型可以定义XML注册表中的注册表对象之间的各种关系概念,例如关联、分类和分类法(即分类方案)。这些概念可被映射到应用域的合适概念上,例如聚集、组成、依赖和继承关系。在以下详细的描述中将进一步说明具体的JAXR概念、应用概念以及映射。
在发明的一个方面中,步骤b.可以包括在SOA注册表中创建与至少一个应用对象相对应的至少一个注册表对象的步骤。此外,步骤b.可以包括在SOA注册表中查询与至少一个应用对象相对应的至少一个注册表对象的步骤。这两个方面允许应用在SOA注册表中创建新的条目(即新的注册表对象)以及查找现有的注册表对象。
在发明的另一方面中,映射的定义是基于一组预定义的映射规则的,并且该方法还包括定义至少一个新的映射规则的步骤。如以上所说明的,该方法提供用于将JAXR信息模型的概念映射到应用的概念上的映射规则。为了使得能够将映射规则扩展到其他概念,可以定义新的映射规则。这确保了例如自定义应用能够提供最初并非由该方法提供的映射规则的其自己实现方式。然后,该方法可以使用这些自定义映射规则来处理自定义映射,以使得该方法可以灵活地适应于新的自定义概念和信息模型。
在又一方面中,至少一个应用对象适合于仅当属性或关系被至少一个应用所访问时加载属性或关系。因此,可能直到属性或关系实际被应用访问时才将属性或关系加载到应用对象。这在加载具有许多属性和关系的复杂应用对象或者具有大量数据的应用对象的时候尤为有利,这些应用对象通常将需要应用程序中的大量的处理能力和存储器。这对于组成注册表对象(即,包括其他对象的对象)也是有利的。
在发明的又一方面中,至少一个应用对象是Java Bean并且应用对象类型是Java Bean的接口定义。Java Bean是包括许多类和接口的特定类型的Java程序。在以下详细描述中将说明Java Bean概念。
最后,发明还涉及一种包括用于执行任意上述方法的指令的计算机程序。
附图说明
在以下的详细描述中,参考以下附图进一步描述本发明当前优选的实施例:
图1:根据现有技术、应用访问SOA注册表的示意图;
图2:本发明的一个实施例的示意图;
图3:属性和关系的JAXR概念以及相应的应用概念的概图;
图4:应用对象属性和注册表对象属性之间的映射的更详细视图;
图5:应用对象关系和注册表对象关系之间的映射的更详细视图;
图6:应用对象类型层级和注册表对象分类法之间的映射的更详细视图;
图7:示出RegistryBean的主要类型的类图;
图8:示出映射类的主要类型的类图;
图9:示出RegistryBean的注解的主要类型的类图;以及
图10:示出示例性Java bean的创建和更新的序列图。
具体实施方式
以下,将针对图2所示意性示出的情况来描述本发明当前优选的实施例。可以看到,例如可以是XML注册表的SOA注册表2包括注册表对象20。图2还示出假定用于操纵SOA注册表2中的注册表对象20的应用1。在现有技术中(如图1所示),应用1可以直接利用用于XML注册表的JavaAPI(JAXR)40(如图1中箭头所示)。如以上已经描述的,JAXR 40是用于访问各种类型的SOA注册表(例如UDDI和ebXML注册表)的应用编程接口(API),其是非常一般性的且强大的,但是具有高的复杂性级别。因此,图1所示的现有技术方法可能由于JAXR 40的复杂性而在应用1中导致复杂的且容易出错的应用代码。
相比之下,图2所示的本发明的方法隐藏了JAXR 40的复杂性,并且允许应用1以更高效且简单的方式来操纵注册表对象20。这是以下述方式实现的:应用1设有应用对象10,应用对象10用作注册表对象20的一种代理。应用1对应用对象10的操纵引起对相应的注册表对象20的相关操纵,例如应用对象10可以在内部利用JAXR 40(如图1的水平箭头所示),从而对应用1隐藏了JAXR40的复杂性。
JAXR 40为SOA注册表2中的注册表对象定义信息模型,也就是,其定义注册表对象20可以包括某些类型的属性和与其他注册表对象的关系。另一方面,取决于应用1的具体实现方式,应用1可以定义属性和关系的不同概念。因此,本发明将JAXR信息模型概念映射到应用1的相关概念。
以下,首先概括地描述映射概念,然后通过JAXR概念到例如在申请人的CentraSite中使用的Java bean的概念的一种具体映射(参见图3)来说明映射概念。CentraSite是一种用于对SOA应用的开发的SOA支配和寿命周期管理的平台。然而,应当认识到,Java bean仅是应用1的各种实现方式中的一种,并且本发明的有利概念可容易地适用于其他编程语言。因此,本发明不限于像CentraSite或JAXR那样的具体产品,而是也可以用在其他情况中。此外,尽管图2仅示出了一个示例性注册表对象20和相应的应用对象10,但是应当认识到,本发明可针对SOA注册表2中任意数量的对象而工作。
将注册表对象映射到应用对象
通过图2所示的映射30来确定哪一个应用对象10是哪一个注册表对象20的代理。映射30是在类型级别上定义的,即,在应用对象类型110和注册表对象类型220之间定义的。从而,应用对象10(其是应用对象类型110的一个实例)用作注册表对象20(其是注册表对象类型220的一个实例)的一种代理。
以下代码示出了使用Java注解的映射30的一个具体示例:
RegistryObject(objectTypeName=
″{http://namespaces.CentraSite.com/csaf}Item″)
public interface Item extends RegistryBean{
}
可以看到,接口Item(项目)(对应于应用对象类型110)的接口定义是通过RegistryObject注解来作注解的,RegistryObject注解以宣告方式经由objectTypeName参数而将Item接口映射到相应的注册表对象类型220(指定为{http://namespaces.CentraSite.com/csaf}Item).
映射属性
JAXR信息模型包括注册表对象的至少三种属性概念:JAXR对象属性、JAXR对象槽位以及JAXR定义的对象类型的属性(即,特定于JAXR定义的对象类型的属性,与一般JAXR对象类型“RegistryEntry”的一般性属性(诸如“name(名称)”或“description(描述)”)相对)。JAXR对象槽位提供一种在运行时向注册表对象添加任意性质的动态方式,这允许了信息模型内的可扩展性。另一方面,应用中例如像Java bean那样的应用对象包括bean属性和相应的获取操作和设置操作以读取和操纵bean属性。
图4示出了应用1中的应用对象10如何包括属性100。属性100通过映射30而被映射到SOA注册表2中相应注册表对象20所包含的相应属性200。应当认识到,在技术上,属性是在类型级别上(即,在应用对象类型110中)定义的并且在对象级别上例示的。以下,为了简单起见而仅描述对象级别。
因此,可通过如下所示的直接属性到属性映射(direct property-to-propertymapping)而将标准JAXR注册表对象属性映射到bean属性:
Property
String getDescription();
可以看到,应用对象10的bean属性description(描述)(由其获取操作getDescription()表示)被映射到相应的JAXR注册表对象属性。由于在没有参数的情况下使用Property注解,所以在缺省情况下可以将bean属性description映射到具有相同名称的JAXR注册表对象属性。在具有不同名称的JAXR注册表对象属性被做为目标的情况下,可以相应地使用形式为Property(target=“anotherRegistryObjectProperty”)的注解。
此外,可以将JAXR对象槽位映射到bean属性,像以下代码清单中那样:
Slot(name=″{http://namespaces.CentraSite.com/csaf}shortName″)
String getShortName();
JAXR 40可以仅允许对象槽位具有字符串值。然而,Java bean可以利用许多其他属性类型,像整数、布尔值、日期、日历等等。因此,优选地将bean属性转换为字符串值。
可以使用类似于以下描述的专用注解来将JAXR定义的对象类型的属性(即,某些特定于JAXR的类型的JAXR注册表对象属性(例如JAXR标准所定义的TelephoneNumber或者PersonName))映射到bean属性:
TelephoneNumbers
TelephoneNumbers getTelephone();
映射关系
注册表对象之间的JAXR关系可以通过三个对象来表示,例如源注册表对象可以通过关联对象而与目标注册表对象相关。该概念在图5中描述,其中注册表对象20通过关联对象25而与注册表对象21相关联。
另一方面,应用1可以知道两个对象所表示的关系,例如应用对象10通过聚集或依赖关系15而与应用对象11相关联,其中聚集或依赖关系15不是对象。在Java bean的环境中,聚集关系可以由Java bean(其表示应用对象10)的bean属性的获取操作表示,其中获取操作的返回值确定目标应用对象(应用对象11)。以下代码清单说明了这方面:
Association(type=″HasAction″,targetType=Action.class,
mappedTo=MappedTo.ASSOCIATION_OBJECT)
List<Action>getActions();
可以看到,通过将Association注解的mappedTo参数设置为关联的目标对象,bean属性action(动作)(由其获取操作getActions()表示)被映射到相应的JAXR关联对象本身。type参数确定关联对象的类型(即,表示关联的JAXR概念)并且targetType参数指示关联目标的类型,即,作为关联目标的bean的类型。在该示例中,bean的类型被映射到关联对象。作为替换,可以使用mappedTo=MappedTo.ASSOCIATION_TARGET,因为targetType参数指定被映射到关联目标的bean的类型。另外,可以在被映射到关联的bean内使用AssociationTarget注解,从而指定以该注解进行注解的属性被映射到相应关联的目标对象。应当认识到,以上映射针对应用域中的聚集和依赖概念二者。在实现方式级别上,这两个概念之间不存在清楚的边界,但是该区别在相当程度上基于应用正在如何处理bean属性。
此外,JAXR信息模型可以包括分类关系,其利用某一概念对注册表对象进行分类。为此,在图5中,注册表对象20通过分类对象26而与概念22相关。
另一方面,应用1可能不知道分类的概念。因此,同样如图5所示,分类对象26被映射到应用对象10和11之间的聚集或组成关系16。在Java bean的环境中,这可以通过Classification和ClassificationConcept注解来实现,如以下代码清单所示:
Classification(classificationScheme=″My Taxonomy″,
conceptPath=″Root Concept/Concept/Subconcept″,
targetType=Subconcept.class)
List<Subconcept>getSubconcepts();
Classification(classificationScheme=″My Taxonomy″,
conceptPath=″Root Concept/Concept/Subconcept2″)
Subconcept2 getSubconcept2();
从以上示例性清单可以看到,JAXR信息模型包括称为“分类法”的概念,其以树状结构对SOA注册表的对象进行分类或归类。在JAXR信息模型中,分类法树的根由分类方案表示并且分类法树的子节点由概念来表示。然后,通过概念之一对注册表对象的分类确定该注册表对象被分类在分类法的哪一级别上。例如,Geography分类方案能够提供这样的分类法系统:其定义了具有大陆、大陆内的国家、国家内的州(或者省或内部的子划分)以及州内的市和城镇的地理结构。
因此,以上代码清单指示subconcept应用对象属性到所有分类的映射,其中JAXR概念是分类法“My Taxonomy”中的“Root Concept/Concept/Subconcept”。作为替换,通过使用参数mappedTo=MappedTo.TARGET_CONCEPT,该映射可被应用到概念本身。存在对正被映射到属性的分类进行过滤的各种方式:概念路径、概念关键字、母路径、或者母关键字。在后两种情况中,可以规定母概念(concept parent)。这通常在以下情况中使用,即分类从预定义的一组替换物中选择元素的情况。此外,使用targetType参数来指定作为分类目标的应用对象。在单个结果对象的情况中,不需要指定目标类型,因为结果类型(以上实例中的getSubconept2)可以作为缺省值而被使用。
此外,可以在映射到分类本身的bean中使用ClassificationConcept注解,以便将bean属性映射到该分类的底层概念,如以下代码清单所示:
RegistryObject(objectTypeKey=Constants
.OBJECT_TYPE_KEY_Classification)
public interface Finding extends RegistryBean {
ClassificationConcept
public MyConceptBean getConceptBean();
}
映射继承
图6的示例示出了SOA注册表2的分类法29,其中(通过分类27)将注册表对象20分类为位于分类法29的根部的分类方案50并且(通过分类28)将注册表对象21分类为分类法29的子概念51。
另一方面,应用可能不知道分类法的概念,但在应用对象(或者分别地,应用对象类型)之间提供继承的概念。图6示出了应用10如何通过继承关系17而与应用对象11相关联。在编程语言层面上,这将意味着与应用对象11相对应的应用对象类型是应用对象类型110的子类型,从而继承其所有的属性和关系,即,类型构建了一种类型层级。
如图6所示,分类法和类型层级之间的映射可以按下述方式实现:应用对象10和11分别根据它们在分类法29内的级别以及继承层级而被各自映射到注册表对象20和21。在Java bean的环境下,以下的代码清单示出了该映射30可以如何通过Java注解进行定义:
RegistryObject(objectTypeName=
″{http://namespaces.CentraSite.com/csaf}Action″)
ClassifiedInstances(
instances={
ClassifiedInstance(
classificationScheme=″CSAF-Taxonomy″,
conceptPath=″/ClassificationInstances/
ActionTypes/Action1″,
beanType=Action1.class),
ClassifiedInstance(
classificationScheme=″CSAF-Taxonomy″,
conceptPath=″/ClassificationInstances/
ActionTypes/Action2″,
beanType=Action2.class)
}
)
public interface Action extends RegistryBean {}
RegistryObject(objectTypeName=
″{http://namespaces.CentraSite.com/csaf}Action″)
public interface Action1 extends Action {
ClassifiedInstanceProperty
Slot(name=″{http://namespaces.CentraSite.com/
csaf}customerProject″)
String getCustomerProject();
}
可以看到,应用对象11的应用对象类型(接口Action1)是由extends关键字确定的应用对象类型110(接口Action)的子类型。此外,如以上已经描述的,接口Action通过RegistryObject注解而被映射到相应的注册表对象类型“{http://namespaces.CentraSite.com/csaf}Action”。此外,接口Action的注解ClassifiedInstances描述了分类法29如何被映射到(通过Action和Action1形成的)bean的类层级,其中该注解包括两个ClassifiedInstance注解,这两个ClassifiedInstance注解指定从来自分类法的概念到来自bean类层级的bean的映射。子类型Action1进一步包括注解ClassifiedInstancePropery,用于访问被表示为特定于类型的分类对象的一部分的属性。classificationScheme参数指定分类方案的名称,其中用于对该注册表对象进行分类的概念属于该分类方案(如以上所说明的,分类方案表明分类法)。conceptPath参数唯一表明分类法中的概念。最后,BeanType参数对被例示并被映射到底层JAXR注册表对象的bean的类型进行指定。
方法的应用情形
通过利用上述的映射概念中一个或多个,应用1可以通过相应的应用对象10而高效地操纵注册表对象20。例如,通过使用本发明的方法,可以高效地实现创建自定义类型的新注册表对象并设置其名称属性的任务,如以下代码清单所说明的:
BeanPool pool=context.getBeanPool();
Application app=pool.create(Application.class);
app.setName(″My Application Number Demo Test 2″);
pool.update(app)
可以看到,应用1设有应用对象10app,其是应用对象类型110Application的一种实例。然后,应用1通过调度相应的setName()操作来设置应用对象10的name属性。如上面已经说明的,通过以下所注解的对应用对象类型110(Application)的类型定义来实现应用对象类型110到相应注册表对象类型220的映射30以及name属性的映射30:
RegistryObject(objectTypeName=
BeanPoolExample.OBJ_TYPE_APPLICATION)
public interface Application extends RegistryBean{
Property
public String getName();
public void setName(String name);
}
可以看到,应用对象类型110(Application)经由RegistryObject注解而映射到相应的注册表对象类型220,并且名称属性100(getName())经由Property注解而被映射到注册表对象类型220(和注册表对象20)的相应对象类型200。
为了处理以上所定义的映射,优选地以框架意义上的计算机程序来实现本发明的方法。一种示例性的框架例如可以包括管理会话中的bean寿命周期的BeanPool(bean池),例如其创建应用1所请求的bean。其还可以用作会话bean缓存。此外,其可以为bean提供CRUD接口(创建、读取、更新、删除)以及各种查找操作。bean到JAXR的映射器(Beans-to-JAXR-Mapper)可以处理bean与JAXR注册表对象之间的上述映射,其中该映射器在被BeanPool调用时对定义了映射的Java注解进行解析。最后,注册表访问器(RegistryAccessor)可以对JAXR操作进行封装,并且可适合于供Mapper类使用。说明当创建和更新bean时上述框架的联网的示例性序列图在图10中示出。
上述bean是示例性框架的体系结构的中心点。这些bean优选地仅包括数据而不包括处理逻辑。在该示例性框架中,bean需要对所提供的基类类进行扩展,即,它们需要实现RegistryBean接口并且扩展其缺省的实施方式DynamicRegistryBean。bean可以或多或少地遵循值对象(ValueObject)和数据传送对象(Data Transfer Object)设计模式,以对数据进行封装并将其经由应用层而传输。这种应用层的一种典型示例是表示层、商业逻辑层和数据层,这是对现代的应用经常使用的一种体系结构中。表示层可以处理应用向用户的可视化。商业逻辑可以对应用内的所有商业规则进行封装。最后,数据层可以对在SOA注册表中检索和存储数据进行处理。所有的层需要交互以便提供应用的功能,通常是表示逻辑与商业逻辑交互并且商业逻辑与数据层交互。在该情况下,层之间的信息可以按bean的形式进行传输,即,bean“传播”经过这些层。
图7中的类图概述了包括示例性框架中的基本bean层级的主类。主接口是RegistryBean。图7示出了两种实现方式,作为抽象类的AbstractRegisttyBean和作为具体实现方式的DynamicRegistryBean。这些类可被应用使用以促进应用bean的实现。加于应用bean之上的限制仅仅是它们不得不扩展RegistryBean接口。
如以上已经说明的,通过在示例性框架中使用被宣告为Java注解的映射规则而提供将bean映射到JAXR注册表对象的机制,bean和JAXR注解之间的映射隐藏了JAXR的复杂性。图8的类图概述了示例性框架中映射器(其处理映射规则)的主类和接口。可以看到,两个主接口是BeanMapper和PropertyMapper。前者处理bean到注册表对象的映射,后者将bean属性映射到JAXR注册表对象属性、槽位、关联、分类等等,如以上已经描述的。为此,两个接口定义两种方法,toJaxr()和toBean(),这两种方法在两个向上相应地处理映射。图8中的其他类示出了这些接口的具体实现方式,例如SlotMapper是一种处理bean属性到槽位的映射的PropertyMapper。DefaultBeanMapper是用于将bean(RegistryBean)映射到JAXR注册表对象的BeanMapper的缺省实现方式。
此外,图8中的CustomMapper和AnotherCustomMapper描述了实现自定义映射的特定于应用的映射器。这说明了本发明的一个非常有利的特征,也就是其可扩展性机制。例如,应用可以引入自身的注解和相应的映射规则,并且可以配置框架以当bean正被以自定义注解进行注解的时候例示和使用自定义映射器。图9示出了对在示例性框架中实现的上述注解类型的概述。
根据上述本发明的方法的框架可以提供许多另外的特征,这些特征在以下说明。
在bean(通过其属性和关系)具有对相当数量的其他bean的参考的某些情况下,当将bean加载到应用的存储器中时可能需要巨大量的数据。因此,直到应用实际请求bean的关系和属性的时候,框架可能才将它们加载。在框架的环境下,通过使用代理模式,可以透明地或相对独立于其他功能(除了映射器和bean池)来实现该概念。然后BeanPool可能具有将代理类附着到如下bean的责任:当应的获取操作被调用时,该bean将加载数据。
此外,可能希望框架在多个用户同时访问相同资源的情况下工作。为了使得复杂性最小化,框架因此可以依赖于并使用底层的JAXR层所提供的功能,例如事务的支持、锁定、线程安全性等等。
Claims (12)
1.一种通过应用(1)来操纵面向服务的体系结构(SOA)注册表(2)的至少一个注册表对象(20)的方法,所述至少一个注册表对象(20)可经由用于XML注册表的Java API(JAXR)(40)而被访问,该方法的特征在于以下步骤:
a.定义至少一个注册表对象类型(220)和至少一个应用对象类型(110)之间的映射(30),其中映射(30)由附着到所述至少一个应用对象类型(110)的一个或多个Java注解来描述;
b.在所述应用(1)的请求下,解析所述一个或多个Java注解,并且例示所述至少一个应用对象类型(110),以向所述应用(1)提供与所述至少一个注册表对象(20)相对应的至少一个应用对象(10),所述至少一个应用对象(10)与所述至少一个注册表对象(20)之间的对应是通过由所述一个或多个Java注解定义的映射(30)来确定的;以及
c.通过所述应用(1)来操纵所述至少一个应用对象(10),该操纵根据所述映射(30),通过所述JAXR(40)而引起对相应的所述至少一个注册表对象(20)的相关操纵,其中所述应用(1)调用由所述应用对象(10)提供的操作,这些操作对所述应用(1)隐藏了访问所述JAXR(40)的繁琐细节。
2.如权利要求1所述的方法,其中,所述至少一个注册表对象(20)包括至少一个属性(200),并且所述映射(30)包括所述至少一个属性(200)到相应的应用对象(10)的至少一个属性(100)的映射。
3.如权利要求2所述的方法,其中,所述至少一个注册表对象(20)的至少一个属性(200)能够保持至少一个字符串值,并且,到相应的应用对象(10)的至少一个属性(100)的所述映射(30)包括到字符串值的转换。
4.如权利要求1至3中任一项所述的方法,其中,所述至少一个注册表对象(20)通过一个或多个关联对象(25)而与至少一个第二注册表对象(21)相关联,并且所述至少一个应用对象(10)通过一个或多个聚集和/或依赖关系(15)而与至少一个第二应用对象(11)相关联,并且,所述映射(30)包括所述一个或多个关联对象(25)到所述一个或多个聚集和/或依赖关系(15)的映射。
5.如权利要求1所述的方法,其中,所述至少一个注册表对象(20)通过一个或多个分类对象(26)而与所述SOA注册表(2)的至少一个概念(22)相关联,并且所述至少一个应用对象(10)通过一个或多个聚集和/或组成关系(16)而与至少一个第二应用对象(11)相关联,并且,所述映射(30)包括所述一个或多个分类对象(26)到所述一个或多个聚集和/或组成关系(16)的映射。
6.如权利要求1所述的方法,其中,所述至少一个注册表对象(20)通过一个或多个分类对象(27)而与至少一个分类方案(50)相关联,所述至少一个分类方案(50)定义所述SOA注册表(2)中的至少一个分类法(29),并且,所述映射(30)包括所述至少一个注册表对象(20)到相应的至少一个应用对象(10)的映射。
7.如权利要求6所述的方法,其中,至少一个第二注册表对象(21)通过一个或多个分类对象(28)而与至少一个概念(51)相关联,所述至少一个概念(51)是所述至少一个分类法(29)中的子概念,至少一个第二应用对象(11)通过继承关系(17)而与所述至少一个应用对象(10)相关联,并且所述映射(30)包括所述至少一个第二注册表对象(21)到所述至少一个第二应用对象(11)的映射。
8.如权利要求1所述的方法,其中,步骤b.包括在所述SOA注册表(2)中创建与所述至少一个应用对象(10)相对应的至少一个注册表对象(20)的步骤。
9.如权利要求1所述的方法,其中,步骤b.包括在所述SOA注册表(2)中查询与所述至少一个应用对象(10)相对应的至少一个注册表对象(20)的步骤。
10.如权利要求1所述的方法,其中,对所述映射(30)的定义是基于一组预定义的映射规则的,并且该方法还包括定义至少一个新的映射规则的步骤。
11.如权利要求1所述的方法,其中,仅当属性(100)或关系(15,16,17)被所述至少一个应用(1)访问时,所述至少一个应用对象(10)适合于加载所述属性(100)或关系(15,16,17)。
12.如权利要求1所述的方法,其中,所述至少一个应用对象(10)是Java Bean,并且所述应用对象类型(110)是Java Bean的接口定义。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP08016448.6A EP2169550B1 (en) | 2008-09-18 | 2008-09-18 | Method for manipulating objects in a SOA registry |
EP08016448.6 | 2008-09-18 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101719059A CN101719059A (zh) | 2010-06-02 |
CN101719059B true CN101719059B (zh) | 2014-02-19 |
Family
ID=40342611
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910211668.XA Active CN101719059B (zh) | 2008-09-18 | 2009-09-18 | 操纵soa注册表中的对象的方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9183040B2 (zh) |
EP (1) | EP2169550B1 (zh) |
CN (1) | CN101719059B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE523852T1 (de) * | 2009-02-27 | 2011-09-15 | Software Ag | Verfahren, soa-register und soa-speicher zur gewährleistung eines sicheren zugangs auf die ressourcen eines prozesses für den benutzer |
EP2810179B1 (en) * | 2012-01-31 | 2018-07-11 | Oracle International Corporation | Method and system for implementing a common data interface to web services |
US9984158B2 (en) | 2014-03-18 | 2018-05-29 | Axis Ab | Finding services in a service-oriented architecture (SOA) network |
EP3413537B1 (en) * | 2016-03-01 | 2020-04-22 | Huawei Technologies Co., Ltd. | Method of transmitting information and core network access apparatus |
CN112882685A (zh) * | 2019-11-29 | 2021-06-01 | 中国石油天然气股份有限公司 | 面向对象编程语言的对象的扩展方法及装置 |
CN113467436A (zh) * | 2021-06-28 | 2021-10-01 | 重庆长安汽车股份有限公司 | 一种基于soa服务分层的整车功能实现方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080189439A1 (en) * | 2007-02-01 | 2008-08-07 | Microsoft Corporation | Synchronization framework for occasionally connected applications |
CN101266613A (zh) * | 2007-03-14 | 2008-09-17 | 软件股份公司 | 管理对面向服务的体系结构的对象的操作要求的注册表 |
-
2008
- 2008-09-18 EP EP08016448.6A patent/EP2169550B1/en active Active
- 2008-12-15 US US12/314,706 patent/US9183040B2/en active Active
-
2009
- 2009-09-18 CN CN200910211668.XA patent/CN101719059B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080189439A1 (en) * | 2007-02-01 | 2008-08-07 | Microsoft Corporation | Synchronization framework for occasionally connected applications |
CN101266613A (zh) * | 2007-03-14 | 2008-09-17 | 软件股份公司 | 管理对面向服务的体系结构的对象的操作要求的注册表 |
Non-Patent Citations (3)
Title |
---|
Oracle.overview summary.《Java(TM) Web Services Developer Pack (Version 2.0) Combined API Specification 》.http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/api/overview-summary.html,2005,全文. * |
SMITH M. 等.TELECOMMUNICATIONS.《Model Driven Development of Service-Oriented Grid Applications》.2006,第139页. * |
Sun Microsystems, Inc..A Technical White Paper.《Web Services Made Easier, The Java APIs and Architectures for XML》.http://web.archive.org/web/20011116112311/http://java.sun.com/xml/webservices.pdf,2004,全文. * |
Also Published As
Publication number | Publication date |
---|---|
US20100094905A1 (en) | 2010-04-15 |
CN101719059A (zh) | 2010-06-02 |
EP2169550A1 (en) | 2010-03-31 |
US9183040B2 (en) | 2015-11-10 |
EP2169550B1 (en) | 2013-04-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Lerman | Programming Entity Framework: Building Data Centric Apps with the ADO. NET Entity Framework | |
CN101719059B (zh) | 操纵soa注册表中的对象的方法 | |
Marinho et al. | MobiLine: A Nested Software Product Line for the domain of mobile and context-aware applications | |
JP2004272907A (ja) | 分散コンピューティングシステムと、分散アプリケーションの自動化された設計、展開、および管理とのためのアーキテクチャ | |
WO2006118872A2 (en) | Application description language | |
Zimmermann et al. | Introduction to microservice API patterns (MAP) | |
US10089084B2 (en) | System and method for reusing JavaScript code available in a SOA middleware environment from a process defined by a process execution language | |
Prehofer et al. | From internet of things mashups to model-based development | |
US11269603B2 (en) | Compiler for context-dependent code global data types | |
US10223143B2 (en) | System and method for supporting javascript as an expression language in a process defined by a process execution language for execution in a SOA middleware environment | |
CN103677842A (zh) | 软件工具配置式集成扩展调用方法与系统 | |
Van Cutsem | Ambient references: Object designation in mobile ad hoc networks | |
US20160292003A1 (en) | System and method for supporting object notation variables in a process defined by a process execution language for execution in a soa middleware environment | |
CN100428152C (zh) | 一种基于领域本体的软构件分类注册方法 | |
Cavallaro et al. | Satisfying requirements for pervasive service compositions | |
Chopra | Web engineering | |
Tran et al. | On the role and application of ontologies in information systems | |
Wilson | Architectures to support authoring and content management with learning design | |
Amini et al. | Notice of Retraction: GIS software architecture based on SOA concept and OGC standards | |
Leonard et al. | SQL Server 2012 integration services design patterns | |
US10223142B2 (en) | System and method for supporting javascript activities in a process defined by a process execution language for execution in a SOA middleware environment | |
Kong et al. | Separation of concerns: a web application architecture framework | |
Betts et al. | Dependency injection with unity | |
Lee et al. | SOA-based Service Layering for Facilitating Dynamic Service Composition and Alternative Service Discovery. | |
van Leeuwen et al. | Supporting collaboration design by type recognition and knowledge sharing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |