• No se han encontrado resultados

Resumen de los elementos del perfil

In document Universidad Autónoma Metropolitana (página 48-54)

4. Creación del lenguaje de modelado para los servicios declarativos

4.3. Perfil UML para los servicios declarativos

4.3.1. Resumen de los elementos del perfil

Los estereotipos de este perfil se resumen a continuación:

Nombre Clase Base

<<Component>> Class <<Service>> Class <<Properties>> Class <<Property>> Class <<Provide>> Assocation <<Reference>> Association <<Declares>> Association Tabla 4: Elementos del perfil

4.3.2. <<Component>>

Descripción

Un componente contiene una descripción que es interpretada en tiempo de ejecución para crear y desechar objetos dependiendo de la disponibilidad de otros servicios, la necesidad de dicho objeto o los datos de configuración del mismo. Dichos objetos pueden de manera opcional además proveer un servicio.

Representación UML para <<Component>>

Elemento del metamodelo Nombre del estereotipo Clase Base de UML Superclase (del metamodelo)

Component, Implementation, Service <<Component>> Class NA

Definición de valores etiquetados para <<Component>>

Nombre del estereotipo Valor Etiquetado Tipo del valor etiquetado Valor por omisión Definición del valor etiquetado

<<Component>> name String requerido Especificado por el usuario

enabled Boolean true

factory String no requerido Especificado por el usuario

immediate Boolean no requerido

delayed Boolean no requerido

implementationClass String requerido Especificado por el usuario

serviceFactory Boolean no requerido

Restricciones de <<Component>>

OCL :

package DeclarativeServices context Component

inv:

self.connection -> select(isStereotyped('Provide'))->size() >= 0

Existe cero o muchas asociaciones «Reference» para cada <<Component>>:

self.connection -> select(isStereotyped('Reference'))->size() >= 0

Existe cero o varias asociaciones «Declares» para cada <<Component>>:

self.connection -> select(isStereotyped('Declares'))->size() >= 0

Si immediate es verdadero entonces factory debe estar vacío y delayed debe ser falso

self.immediate = true implies self.factory -> isEmpty() and self.delayed = false

Si delayed es verdadero entonces factory debe estar vacío e immediate debe ser falso

self.delayed = true implies self.factory->isEmpty() and self.immediate = false

Si el componente es de tipo factory entonces immediate y delayed deben ser falsos

self.factory -> NotEmpty() implies self.immediate = false and self.delayed = false

endpackage

4.3.3. <<Service>>

Descripción

Especifica las interfaces que ofrece un componente para ofrecer o referenciar un servicio. Representación UML para <<Service>>

Elemento del metamodelo Nombre del estereotipo Clase Base de UML Superclase (del metamodelo)

Provide,Service <<Service>> Class NA

Definición de valores etiquetados para <<Service>>

Nombre del

estereotipo Valor Etiquetado Tipo del valor etiquetado Valor por omisión Definición del valor etiquetado

<<Service>> interface String requerido Especificado por el usuario

Restricciones de <<Service>>

OCL :

package DeclarativeServices context Service

inv:

Existe una asociación «Provide» para cada «Service»:

Existe una o más asociaciones «Reference» para cada «Service»:

self.connection -> select(isStereotyped('Reference'))->size() >= 0 endpackage

4.3.4. <<Properties>>

Descripción.

Un componente puede definir una serie de propiedades, que serán utilizadas para su configuración. En este caso las propiedades están en un archivo dentro del bundle

Representación UML para <<Properties>>

Elemento del metamodelo Nombre del estereotipo Clase Base de UML Superclase (del metamodelo)

Properties <<Properties>> Class NA

Definición de valores etiquetados para <<Properties>>

Nombre del

estereotipo Valor Etiquetado Tipo del valor etiquetado Valor por omisión Definición del valor etiquetado

<<Properties>> entry String requerido Especificado por el usuario

Restricciones de <<Properties>>

package DeclarativeServices context Properties inv:

Existe sólo una asociación «Requires» para cada Properties:

self.connection -> select(isStereotyped('Requires'))->size() = 1 endpackage

4.3.5. <<Property>>

Definición

Un componente puede definir una serie de propiedades, que serán utilizadas para su configuración. En este caso las propiedades se definen en la misma descripción del componente.

Representación UML para <<Property>>

Elemento del metamodelo Nombre del estereotipo Clase Base de UML Superclase (del metamodelo)

Property <<Property>> Class NA

4.3.5.1.Definición de valores etiquetados para Property.

Nombre del

estereotipo Valor Etiquetado Tipo del valor etiquetado Valor por omisión Definición del valor etiquetado

value String no requerido Especificado por el usuario

type javaTypes ‘String’ ‘String’, ‘Long’, ‘Double’, ‘Float’, ‘Integer’, ‘Byte’, ‘Char’, ‘Boolean’, ‘Short’

body String no requerido Especificado por el usuario

Restricciones de <<Property>>

package DeclarativeServices context Property

inv:

Existe sólo una asociación «Requires» para cada Property:

self.connection -> select(isStereotyped('Requires'))->size() = 1

Si value esta vacío implica que body debe de tener asignado un valor.

self.value->isEmpty() implies not self.content -> isEmpty() endpackage

4.3.6. <<Reference>>

Definición

La mayor parte de los bundles requerirá de otros servicios del registro de servicios. Estas dependencias son definidas vía referencias a los servicios requeridos.

Representación UML para <<Reference>>

Elemento del metamodelo Nombre del estereotipo Clase Base de UML Superclase (del metamodelo)

Reference <<Reference>> Association NA

4.3.6.1.Definición de valores etiquetados para Reference.

Nombre del

estereotipo Valor Etiquetado Tipo del valor etiquetado Valor por omisión Definición del valor etiquetado

<<Reference>> name String requerido Especificado por el usuario

targetFilter String no requerido Especificado por el usuario

bind String no requerido Especificado por el usuario

unbind String no requerido Especificado por el usuario

cardinality Cardinality ‘1..1’ ‘1..1’, ‘1..n’, ‘0..1’, ‘0..n’

policy Policy ‘static’ ‘static’, ‘dinamic’

Restricciones de <<Reference>>

OCL :

package DeclarativeServices context Reference inv:

self.isStereotyped('Reference')

La asociación es de tipo binario

self.connection->size() = 2

Una relación de tipo «Reference» tendrá una entidad «Component» de un lado y una entidad «Service» del otro:

self.connection -> exists(participant.isStereotyped('Component')) and self.connection-> exists(participant.isStereotyped('Service'))

La cardinalidad del lado «Component» es 1

self.connection -> exists(participant.isStereotyped('Component')) and multiplicity.min = 1 and multiplicity.max = 1

La cardinalidad del lado «Service» es 1

self.connection -> exists(participant.isStereotyped('Service')) and multiplicity.min = 1 and multiplicity.max = 1

endpackage

4.3.7. <<Provide>>

Definición

Un componente puede ofrecer un servicio, para establecer que interfaces de servicios proveerá un componente se utilizará la relación <<Provide>>.

Representación UML para <<Provide>>

Elemento del metamodelo Nombre del estereotipo Clase Base de UML Superclase (del metamodelo)

Provide <<Provide>> Association NA

Definición de valores etiquetados para <<Provide>>

Nombre del

estereotipo Valor Etiquetado

Tipo del valor etiquetado

Valor por omisión

Definición del valor etiquetado

Provide NA NA NA NA

Restricciones de <<Provide>>

OCL : package DeclarativeServices context Provide

inv:

La relación debe estereotiparse «Provide»

self.isStereotyped('Provide')

self.connection->size() = 2

Una relación de tipo «Provide» tendrá una entidad «Service» de un lado y una entidad «Component» del otro:

self.connection -> exists(participant.isStereotyped('Provide')) and self.connection-> exists(participant.isStereotyped('Component'))

La cardinalidad del lado «Service» es 1

self.connection -> exists(participant.isStereotyped('Provide')) and multiplicity.min = 1 and multiplicity.max = 1

La cardinalidad del lado «Provide» es 1

self.connection -> exists(participant.isStereotyped('Component')) and multiplicity.min = 1 and multiplicity.max = 1

endpackage

4.3.8. <<Declares>>

Definición

Algunas veces la instancia del componente requiere ser parametrizada por medio de propiedades definidas por el usuario, estas propiedades serán agregadas a un componente vía la relación <<Declares>>.

Representación UML para <<Declares>>

Elemento del metamodelo Nombre del estereotipo Clase Base de UML Superclase (del metamodelo)

Property, Properties, specifies,

parametrizes <<Declares>> Association NA

4.3.8.1.Definición de valores etiquetados para Declares

Nombre del

estereotipo Valor Etiquetado Tipo del valor etiquetado Valor por omisión Definición del valor etiquetado

Declares NA NA NA NA

Restricciones de <<Declares>>

OCL : package DeclarativeServices context Declares

inv:

La relación debe estereotiparse «Declares»

self.isStereotyped('Declares')

La asociación es de tipo binario

Una relación de tipo «Declares» tendrá una entidad «Component» de un lado y una entidad «Properties» o «Property» del otro:

self.connection ->

exists(participant.isStereotyped('Component')) and

( self.connection-> exists(participant.isStereotyped('Property')) or self.connection-> exists(participant.isStereotyped('Properties')) )

La cardinalidad del lado «Component» es 1

self.connection -> exists(participant.isStereotyped('Component')) and multiplicity.min = 1 and multiplicity.max = 1

La cardinalidad del lado «Properties» es 1 o la cardinalidad del lado «Property» es 1

self.connection -> exists(participant.isStereotyped('Properties')) and multiplicity.min = 1 and multiplicity.max = 1 or

self.connection -> exists(participant.isStereotyped('Property')) and multiplicity.min = 1 and multiplicity.max = 1

endpackage

La figura 26 muestra los elementos del perfil UML de los servicios declarativos de OSGi. En ésta se puede apreciar además de las clases del perfil tres clases adicionales estereotipadas como

Enumeration. Estas se utilizan para definir nuevos tipos de datos y el conjunto de valores que pueden

tomar, por ejemplo se puede notar que en la clase Reference existe un valor etiquetado llamado policy, que recordando es la forma en que el Componente de servicio manejará el ligado con otros servicios, que puede ser de dos formas: estático y dinámico, estos valores son listados en una enumeración para permitir que el valor etiquetado sólo pueda tomar cualquiera de los dos. También existen enumeraciones para listar los valores que pueden tomar la cardinalidad y el tipo de dato de una propiedad.

In document Universidad Autónoma Metropolitana (página 48-54)