Issue 7163: Subcomponents Package Inconsistency (deployment-ftf) Source: Mercury Computer Systems (Mr. Frank Pilhofer, fpilhofe@mc.com) Nature: Uncategorized Issue Severity: Summary: In 6.4.7, (SubcomponentInstantiationDescription), an assembly can point to another package to provide an instance of a subcomponent, using the "package" reference to ComponentPackageDescription. The resolution to issue 6047 changed the main "work product", the package, to contain a PackageConfiguration as the toplevel item, rather than a ComponentPackageDescription. For consistency, I suggest that SubcomponentInstantiationDescription reference PackageConfiguration, too. Proposed resolution: In 6.4.7.3 (associations for SubcomponentInstantiationDescription), change package: ComponentPackageDescription [0..1] Describes a package that provides an implementation for this subcomponent instance. to package: PackageConfiguration [0..1] The package that provides an implementation for this subcomponent instance. Resolution: Revised Text: Add a new class "ComponentUsageDescription" to the Component Data Model by adding the follwing UML diagram and the text below. 6.4.x ComponentUsageDescription 6.4.x.1 Description ComponentUsageDescription describes the (re-)use and configuration of an existing package. Configuration properties are used to configure the package's properties; their names and types must match external properties of the component that the package implements. Selection requirements are used to influence deployment decisions by matching them against implementation capabilities in the ComponentImplementationDescription. ComponentUsageDescription is used (inherited) by PackageConfiguration, which configures a package as a work product, which may thus be recursive (a package can be no more than a reference to another package, with some configuration data), and by SubcomponentInstantiationDescription, which configures a package to provide an instance for a subcomponent in an assembly. 6.4.x.2 Attributes No attributes. 6.4.x.3 Associations basePackage: ComponentPackageDescription [0..1] Links to a ComponentPackageDescription that this ComponentUsageDescription uses and configures. specializedConfig: PackageConfiguration [0..1] Links to a PackageConfiguration that is being specialized and configured. importedPackage: ComponentPackageImport [0..1] Imports a package using a URI location. Imported packages are resolved during installation in a Repository. referencedPackage: ComponentPackageReference [0..1] References a package that is installed in a Repository, using its installation name, UUID or interface type. Referenced packages are resolved during planning. selectRequirement: Requirement [*] During planning, selection requirements are matched against capabilities in ComponentImplementationDescription elements to identify implementations with desired characteristics. configProperty: Property [*] Properties to configure the component with. 6.4.x.4 Constraints A ComponentUsageDescription must have a base package, specialize a PackageConfiguration, import a package, or reference a package. context ComponentUsageDescription inv: Set{self.basePackage, self.specializedPackage, self.importedPackage, self.referencedPackage}->size() = 1 6.4.x.5 Semantics A ComponentUsageDescription ultimately resolves to a single ComponentPackageDescription in one of four different ways: - By pointing directly to a ComponentPackageDescription "base package." - By (recursively) specializing a PackageConfiguration. - By importing a package by URI. Imported packages are resolved during installation; the RepositoryManager replaces all ComponentPackage- Import instances with a "specializedConfig" PackageConfiguration. - By referencing a package in a Repository. Referenced packages are resolved during planning; the Planner uses information in the ComponentPackageReference to locate a matching installed package, acting as if the referenced PackageConfiguration replaced the referencedPackage. The set of configuration properties and selection requirements that are accumulated by traversing one or more ComponentUsageDescription elements are then applied to the "ultimate" ComponentPackageDescription base package. A configuration property in a ComponentUsageDescription overrides a configuration property with the same name in a specialized PackageConfiguration or in a base ComponentPackageDescription. With this change in place, we can simplify 6.4.2, "PackageConfiguration". So replace 6.4.2 with 6.4.2 PackageConfiguration 6.4.2.1 Description A PackageConfiguration describes one configuration of a component package, and represents a reusable work product. It inherits from ComponentUsageDescription, which allows for several means of specifying a ComponentPackageDescription that is to be configured for use. It adds a label and a UUID to identify the work product. 6.4.2.2 Attributes label: String [0..1] An optional human-readable label. UUID: String [0..1] A unique identifier for this PackageConfiguration. 6.4.2.3 Associations See ComponentUsageDescription. 6.4.2.4 Constraints If the UUID attribute is not the empty string, then it must contain a unique identifier; PackageConfiguration instances with the same non-empty UUID must be identical. context PackageConfiguration inv: self.UUID <> "" implies PackageConfiguration.allInstances->forAll (p | p.UUID = self.UUID implies p = self) 6.4.2.5 Semantics PackageConfiguration elements represent a reusable work product. They are the top-level element in a package. PackageConfiguration exhibits the same semantics as ComponentUsageDescription. Also, the SubcomponentInstantiationDescription can be reduced by using the ComponentUsageDescription class. So replace 6.4.7 with 6.4.7 SubcomponentInstantiationDescription 6.4.7.1 Description In an assembly-based implementation, the SubcomponentInstantiationDescription describes one instance of a subcomponent. This instance is provided by a package. For this purpose, SubcomponentInstantiationDescription inherits ComponentUsageDescription, allowing to link directly, link indirectly, import or reference a package that will be used to provide an implementation for the subcomponent instance. SubcomponentInstantiationDescription adds a "name" attribute to identify the subcomponent instance within the assembly. 6.4.7.2 Attributes name: String Identifies this subcomponent instance within the assembly. 6.4.7.3 Associations See ComponentUsageDescription. 6.7.4.4 Constraints No additional constraints. 6.7.4.5 Semantics Same as for ComponentUsageDescription. Actions taken: March 16, 2004: received issue May 9, 2005: closed issue Discussion: Introduce an explicit importing mechanism: add a new class to the Component Data Model called "ComponentPackageImport", and use it in the SubcomponentInstantiationDescription. End of Annotations:===== Subject: Subcomponents Package Inconsistency Date: Tue, 16 Mar 2004 15:16:16 -0500 Thread-Topic: Subcomponents Package Inconsistency Thread-Index: AcQLk4kxd8KSySy/RGWmi6TLEB6lsA== From: "Pilhofer, Frank" To: Cc: X-MIME-Autoconverted: from quoted-printable to 8bit by amethyst.omg.org id i2GKECre003077 In 6.4.7, (SubcomponentInstantiationDescription), an assembly can point to another package to provide an instance of a subcomponent, using the "package" reference to ComponentPackageDescription. The resolution to issue 6047 changed the main "work product", the package, to contain a PackageConfiguration as the toplevel item, rather than a ComponentPackageDescription. For consistency, I suggest that SubcomponentInstantiationDescription reference PackageConfiguration, too. Proposed resolution: In 6.4.7.3 (associations for SubcomponentInstantiationDescription), change package: ComponentPackageDescription [0..1] Describes a package that provides an implementation for this subcomponent instance. to package: PackageConfiguration [0..1] The package that provides an implementation for this subcomponent instance. X-Info: This message was accepted for relay by smtp02.mrf.mail.rcn.net as the sender used SMTP authentication X-Trace: UmFuZG9tSVZiW8LtMDupth9fPn4QP2lmvAFZDJ7xWhUsoZ/YSC5nwkhjT+nqYrVn Date: Wed, 24 Mar 2004 09:02:26 -0500 From: "Manfred R. Koethe" User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax) X-Accept-Language: en-us, en To: James Kulp CC: "Pilhofer, Frank" , deployment-ftf@omg.org Subject: Re: Subcomponents Package Inconsistency I would rather object to change the structure to the inheritance Jim describes below. PackageConfiguration and SubcomponentInstantiationDescription are indeed *structurally* similar, but type-wise are two different animals. Using inheritance as proposed by Jim would however imply an "is-a" type relationship between the PackageConfiguration and SubcomponentInstantiationDescription, which is IMHO not given. Or in different words, following Jims proposal, a PackageConfiguration could always being used where a SubcomponentInstantiationDescription is required, which is IMHO not the case. Regards, Manfred James Kulp wrote: I don't think the "consistency" is worth the redundancy here. The SubcomponentInstantiationDescription already has everything that a PackageConfiguration does. I would suggest a different "solution" that actually simplifies things, both in the model and at runtime. Since SubcomponentInstantationDecription and PackageConfiguration are so similar, simply have PackageConfiguration inherit from SubcomponentInstantiationDescription. Then PackageConfiguration would simply make the following additions to the class it inherits: UUID attribute Label attribute Possible reference to another one of itself (mutex with the other references). This provides the consistency/sharing and reduces redundancy. Jim Pilhofer, Frank wrote: In 6.4.7, (SubcomponentInstantiationDescription), an assembly can point to another package to provide an instance of a subcomponent, using the "package" reference to ComponentPackageDescription. The resolution to issue 6047 changed the main "work product", the package, to contain a PackageConfiguration as the toplevel item, rather than a ComponentPackageDescription. For consistency, I suggest that SubcomponentInstantiationDescription reference PackageConfiguration, too. Proposed resolution: In 6.4.7.3 (associations for SubcomponentInstantiationDescription), change package: ComponentPackageDescription [0..1] Describes a package that provides an implementation for this subcomponent instance. to package: PackageConfiguration [0..1] The package that provides an implementation for this subcomponent instance. -- ************************************************ * PLEASE NOTE OUR NEW PHONE & FAX NUMBER BELOW * ************************************************ ___________________ / Manfred R. Koethe \_____________________________________ 88solutions Corp. E-Mail: koethe@88solutions.com 37 Mague Avenue Tel: +1 (617) 848 0525 Newton, MA 02465-1553 FAX: +1 (617) 848 8819 U.S.A. _____________________________"We make your business flow"_ ################################################################# ################################################################# ################################################################# ##### ##### ##### ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ##### ##### ##### ################################################################# ################################################################# ################################################################# Date: Wed, 24 Mar 2004 09:11:01 -0500 From: James Kulp Organization: Mercury Computer Systems, Inc. User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.5.1) Gecko/20031120 X-Accept-Language: en,pdf To: "Manfred R. Koethe" CC: "Pilhofer, Frank" , deployment-ftf@omg.org Subject: Re: Subcomponents Package Inconsistency I agree with you, and propose a slightly more correct inheritance: a class that is inherited by both. The base class is ComponentUsageDescription, which is the same as the current PackageConfiguration, but without the "standalone work product" attributes (UUID and label).\ Then both PackageConfiguration and SubcomponentInstantiation can easily and naturally inherit from it, with PackageConfiguration adding the "work product" attributes, and SubcomponentInstantiation adding the "name" attribute. This achieves the original intent of Frank's proposal, without the redundancy, and with proper inheritance. Jim Manfred R. Koethe wrote: I would rather object to change the structure to the inheritance Jim describes below. PackageConfiguration and SubcomponentInstantiationDescription are indeed *structurally* similar, but type-wise are two different animals. Using inheritance as proposed by Jim would however imply an "is-a" type relationship between the PackageConfiguration and SubcomponentInstantiationDescription, which is IMHO not given. Or in different words, following Jims proposal, a PackageConfiguration could always being used where a SubcomponentInstantiationDescription is required, which is IMHO not the case. Regards, Manfred James Kulp wrote: I don't think the "consistency" is worth the redundancy here. The SubcomponentInstantiationDescription already has everything that a PackageConfiguration does. I would suggest a different "solution" that actually simplifies things, both in the model and at runtime. Since SubcomponentInstantationDecription and PackageConfiguration are so similar, simply have PackageConfiguration inherit from SubcomponentInstantiationDescription. Then PackageConfiguration would simply make the following additions to the class it inherits: UUID attribute Label attribute Possible reference to another one of itself (mutex with the other references). This provides the consistency/sharing and reduces redundancy. Jim Pilhofer, Frank wrote: In 6.4.7, (SubcomponentInstantiationDescription), an assembly can point to another package to provide an instance of a subcomponent, using the "package" reference to ComponentPackageDescription. The resolution to issue 6047 changed the main "work product", the package, to contain a PackageConfiguration as the toplevel item, rather than a ComponentPackageDescription. For consistency, I suggest that SubcomponentInstantiationDescription reference PackageConfiguration, too. Proposed resolution: In 6.4.7.3 (associations for SubcomponentInstantiationDescription), change package: ComponentPackageDescription [0..1] Describes a package that provides an implementation for this subcomponent instance. to package: PackageConfiguration [0..1] The package that provides an implementation for this subcomponent instance. Subject: Updated Proposal for Issue 7163 Date: Fri, 2 Apr 2004 12:49:00 -0500 X-MS-Has-Attach: yes Thread-Topic: Updated Proposal for Issue 7163 thread-index: AcQLlsPStspGjPfWRMmEgYaKpgxtTQGPDT5QAcHpyHA= From: "Pilhofer, Frank" To: "Deployment FTF" Based on Manfred's and Jim's feedback, here is an updated proposal to resolve issue 7163. As suggested by Jim, this unifies the common data from PackageConfiguration and SubcomponentInstantiationDescription, which are both concerned with re- using and configuring a package (a work product), into a ComponentUsage- Description class. This resolution is based on the proposal for issue 7164, as it makes use of the ComponentPackageImport class that issue 7164 introduced to Subcomponent- InstantiationDescription. Proposed resolution: Add a new class "ComponentUsageDescription" to the Component Data Model. 6.4.x ComponentUsageDescription 6.4.x.1 Description (attached UML diagram) ComponentUsageDescription describes the (re-)use and configuration of an existing package. Configuration properties are used to configure the package's properties; their names and types must match external properties of the component that the package implements. Selection requirements are used to influence deployment decisions by matching them against implementation capabilities in the ComponentImplementationDescription. ComponentUsageDescription is used (inherited) by PackageConfiguration, which configures a package as a work product, which may thus be recursive (a package can be no more than a reference to another package, with some configuration data), and by SubcomponentInstantiationDescription, which configures a package to provide an instance for a subcomponent in an assembly. 6.4.x.2 Attributes No attributes. 6.4.x.3 Associations basePackage: ComponentPackageDescription [0..1] Links to a ComponentPackageDescription that this ComponentUsageDescription uses and configures. specializedConfig: PackageConfiguration [0..1] Links to a PackageConfiguration that is being specialized and configured. importedPackage: ComponentPackageImport [0..1] Imports a package using a URI location. Imported packages are resolved during installation in a Repository. referencedPackage: ComponentPackageReference [0..1] References a package that is installed in a Repository, using its installation name, UUID or interface type. Referenced packages are resolved during planning. selectRequirement: Requirement [*] During planning, selection requirements are matched against capabilities in ComponentImplementationDescription elements to identify implementations with desired characteristics. configProperty: Property [*] Properties to configure the component with. 6.4.x.4 Constraints A ComponentUsageDescription must have a base package, specialize a PackageConfiguration, import a package, or reference a package. context ComponentUsageDescription inv: Set{self.basePackage, self.specializedPackage, self.importedPackage, self.referencedPackage}->size() = 1 6.4.x.5 Semantics A ComponentUsageDescription ultimately resolves to a single Component- PackageDescription in one of four different ways: - By pointing directly to a ComponentPackageDescription "base package." - By (recursively) specializing a PackageConfiguration. - By importing a package by URI. Imported packages are resolved during installation; the RepositoryManager replaces all ComponentPackage- Import instances with a "specializedConfig" PackageConfiguration. - By referencing a package in a Repository. Referenced packages are resolved during planning; the Planner uses information in the ComponentPackageReference to locate a matching installed package, acting as if the referenced PackageConfiguration replaced the referencedPackage. The set of configuration properties and selection requirements that are accumulated by traversing one or more ComponentUsageDescription elements are then applied to the "ultimate" ComponentPackageDescription base package. A configuration property in a ComponentUsageDescription overrides a configuration property with the same name in a specialized PackageConfiguration or in a base ComponentPackageDescription. With this change in place, we can simplify 6.4.2, "PackageConfiguration". So replace 6.4.2 with 6.4.2 PackageConfiguration 6.4.2.1 Description A PackageConfiguration describes one configuration of a component package, and represents a reusable work product. It inherits from ComponentUsageDescription, which allows for several means of specifying a ComponentPackageDescription that is to be configured for use. It adds a label and a UUID to identify the work product. 6.4.2.2 Attributes label: String [0..1] An optional human-readable label. UUID: String [0..1] A unique identifier for this PackageConfiguration. 6.4.2.3 Associations See ComponentUsageDescription. 6.4.2.4 Constraints If the UUID attribute is not the empty string, then it must contain a unique identifier; PackageConfiguration instances with the same non-empty UUID must be identical. context PackageConfiguration inv: self.UUID <> "" implies PackageConfiguration.allInstances->forAll (p | p.UUID = self.UUID implies p = self) 6.4.2.5 Semantics PackageConfiguration elements represent a reusable work product. They are the top-level element in a package. PackageConfiguration exhibits the same semantics as ComponentUsageDescription. Also, the SubcomponentInstantiationDescription can be reduced by using the ComponentUsageDescription class. So replace 6.4.7 with 6.4.7 SubcomponentInstantiationDescription 6.4.7.1 Description In an assembly-based implementation, the SubcomponentInstantiationDescription describes one instance of a subcomponent. This instance is provided by a package. For this purpose, SubcomponentInstantiationDescription inherits ComponentUsageDescription, allowing to link directly, link indirectly, import or reference a package that will be used to provide an implementation for the subcomponent instance. SubcomponentInstantiationDescription adds a "name" attribute to identify the subcomponent instance within the assembly. 6.4.7.2 Attributes name: String Identifies this subcomponent instance within the assembly. 6.4.7.3 Associations See ComponentUsageDescription. 6.7.4.4 Constraints No additional constraints. 6.7.4.5 Semantics Same as for ComponentUsageDescription. ComponentUsageDescription.gif