Issue 7164: Misuse of XMI Proxy Links (deployment-ftf) Source: Mercury Computer Systems (Mr. Frank Pilhofer, fpilhofe@mc.com) Nature: Uncategorized Issue Severity: Summary: Section 9.5.8, "Transformation Exceptions and Extensions" in the "PSM for CCM to PSM for CCM for XML Transformation" chapter, contains the text: If the link attribute of a ComponentPackageDescription proxy that is part of a SubcomponentInstantiationDescription element does not contain a fragment identifier, then the referenced file can be either a Component Package Descriptor or a package (i.e. a ZIP file with the ".cpk" extension containing the package). This was added for better modularity, to allow a package to "import" another package, maybe from some external location. On second thought, considering the implementation impact, this does not seem like such a good idea, because it overloads an XMI proxy object with a second meaning: either do what XMI says, or import a package. It is also self-contradictory with the preceding sentence, which gives clear semantics to linking to an XML document without a fragment identifier. I suggest to replace this with an explicit importing mechanism: add a new class to the Component Data Model called "ComponentPackageImport", and use it in the SubcomponentInstantiationDescription. This resolution clarifies how to reuse packages. Proposed resolution: Add a new class "ComponentPackageImport" to the Component Data Model. 6.4.x ComponentPackageImport 6.4.x.1 Description Imports a package via an URL. 6.4.x.2 Attributes location: String [1..*] Alternative locations of the package that is to be imported. 6.4.x.3 Associations None. 6.4.x.4 Semantics A ComponentPackageImport can be used instead of a PackageConfiguration to import a package, rather than providing the package "inline." In 6.4.7.1 (SubcomponentInstantiationDescription description), replace the second paragraph, The SubcomponentInstantiationDescription links to a package that provides implementations for the sub-component that is to be instantiatiated. There is either a link to a ComponentPackageDescription in case a package recursively contains packages for its sub-components, or there is a link to a ComponentPackageReference that contains the requiredType of a component interface. Users of the Component Data Model will have to contact a Repository (possibly via a search path) in order to find a package that implements this interface. with The SubcomponentInstantiationDescription specifies a package to instantiate a subcomponent from, and configures this subcomponent instance. The package can be provided in one of three ways: - The package can be provided inline, as part of the same package, using a PackageConfiguration. - A package can be imported, using a ComponentPackageImport. The imported package may be part of the enveloping package, or it may be referenced from an external location. This allows reusing packages. - A package can be referenced indirectly, using a ComponentPackageReference. Users of the Component Data Model will have to contact a Repository (possibly via a search path) in order to find an appropriate package. In 6.4.7.3 (SubcomponentInstantiationDescription associations), add importedPackage: ComponentPackageImport [0..1] Imports a package by reference. In 6.4.7.4 (SubcomponentInstantiationDescription constraints), replace There can be either a package or a reference, but not both. with A package to supply an implementation for this subcomponent is either included, imported, or referenced: context SubcomponentInstantiationDescription inv: Set{self.package, self.importedPackage, self.reference}->size() = 1 In 6.5.1.5 (RepositoryManager semantics), add The installPackage and createPackage operations recursively resolve all imported packages: in all SubcomponentInstantiationDescription elements, ComponentPackageImport elements are replaced with PackageConfiguration elements, containing the data that was loaded from the imported package. PackageConfiguration elements returned from findConfigurationByName or findConfigurationByUUID do not contain ComponentPackageImport elements. In 9.5.8 (Transformation Exceptions and Extensions), delete the second sentence of the last paragraph, which reads If the link attribute of a ComponentPackageDescription proxy that is part of a SubcomponentInstantiationDescription element does not contain a fragment identifier, then the referenced file can be either a Component Package Descriptor or a package (i.e. a ZIP file with the ".cpk" extension containing the package). Resolution: Revised Text: Add a new class "ComponentPackageImport" to the Component Data Model. 6.4.x ComponentPackageImport 6.4.x.1 Description Imports a package via an URL. 6.4.x.2 Attributes location: String [1..*] Alternative locations of the package that is to be imported. 6.4.x.3 Associations None. 6.4.x.4 Semantics A ComponentPackageImport can be used instead of a PackageConfiguration to import a package, rather than providing the package "inline." In 6.4.7.1 (SubcomponentInstantiationDescription description), replace the second paragraph, The SubcomponentInstantiationDescription links to a package that provides implementations for the sub-component that is to be instantiatiated. Thereis either a link to a ComponentPackageDescription in case a package recursively contains packages for its sub-components, or there is a link to a ComponentPackageReference that contains the requiredType of a component interface. Users of the Component Data Model will have to contact a Repository (possibly via a search path) in order to find a package that implements this interface. with The SubcomponentInstantiationDescription specifies a package to instantiate a subcomponent from, and configures this subcomponent instance. The package can be provided in one of three ways: - The package can be provided inline, as part of the same package, using a PackageConfiguration. - A package can be imported, using a ComponentPackageImport. The imported package may be part of the enveloping package, or it may be referenced from an external location. This allows reusing packages. - A package can be referenced indirectly, using a ComponentPackageReference. Users of the Component Data Model will have to contact a Repository (possibly via a search path) in order to find an appropriate package. In 6.4.7.3 (SubcomponentInstantiationDescription associations), add importedPackage: ComponentPackageImport [0..1] Imports a package by reference. In 6.4.7.4 (SubcomponentInstantiationDescription constraints), replace There can be either a package or a reference, but not both. with A package to supply an implementation for this subcomponent is either included, imported, or referenced: context SubcomponentInstantiationDescription inv: Set{self.package, self.importedPackage, self.reference}->size() = 1 In 6.5.1.5 (RepositoryManager semantics), add The installPackage and createPackage operations recursively resolve all imported packages: in all SubcomponentInstantiationDescription elements, ComponentPackageImport elements are replaced with PackageConfiguration elements, containing the data that was loaded from the imported package. PackageConfiguration elements returned from findConfigurationByName or findConfigurationByUUID do not contain ComponentPackageImport elements. In 9.5.8 (Transformation Exceptions and Extensions), delete the second sentence of the last paragraph, which reads If the link attribute of a ComponentPackageDescription proxy that is part of a SubcomponentInstantiationDescription element does not contain a fragment identifier, then the referenced file can be either a Component Package Descriptor or a package (i.e. a ZIP file with the ".cpk" extension containing the package). Actions taken: March 16, 2004: received issue May 9, 2005: closed issue Discussion: Replace the special rule mentioned above with an explicit importing mechanism by adding a new class to the Component Data Model called "ComponentPackageImport". End of Annotations:===== ubject: Misuse of XMI Proxy Links Date: Tue, 16 Mar 2004 17:13:34 -0500 Thread-Topic: Misuse of XMI Proxy Links Thread-Index: AcQLo+x4HH9jw4NDRse3Oz/J9xp3BQ== From: "Pilhofer, Frank" To: Cc: X-MIME-Autoconverted: from quoted-printable to 8bit by amethyst.omg.org id i2GMBTre004833 Section 9.5.8, "Transformation Exceptions and Extensions" in the "PSM for CCM to PSM for CCM for XML Transformation" chapter, contains the text: If the link attribute of a ComponentPackageDescription proxy that is part of a SubcomponentInstantiationDescription element does not contain a fragment identifier, then the referenced file can be either a Component Package Descriptor or a package (i.e. a ZIP file with the ".cpk" extension containing the package). This was added for better modularity, to allow a package to "import" another package, maybe from some external location. On second thought, considering the implementation impact, this does not seem like such a good idea, because it overloads an XMI proxy object with a second meaning: either do what XMI says, or import a package. It is also self-contradictory with the preceding sentence, which gives clear semantics to linking to an XML document without a fragment identifier. I suggest to replace this with an explicit importing mechanism: add a new class to the Component Data Model called "ComponentPackageImport", and use it in the SubcomponentInstantiationDescription. This resolution clarifies how to reuse packages. Proposed resolution: Add a new class "ComponentPackageImport" to the Component Data Model. 6.4.x ComponentPackageImport 6.4.x.1 Description Imports a package via an URL. 6.4.x.2 Attributes location: String [1..*] Alternative locations of the package that is to be imported. 6.4.x.3 Associations None. 6.4.x.4 Semantics A ComponentPackageImport can be used instead of a PackageConfiguration to import a package, rather than providing the package "inline." In 6.4.7.1 (SubcomponentInstantiationDescription description), replace the second paragraph, The SubcomponentInstantiationDescription links to a package that provides implementations for the sub-component that is to be instantiatiated. There is either a link to a ComponentPackageDescription in case a package recursively contains packages for its sub-components, or there is a link to a ComponentPackageReference that contains the requiredType of a component interface. Users of the Component Data Model will have to contact a Repository (possibly via a search path) in order to find a package that implements this interface. with The SubcomponentInstantiationDescription specifies a package to instantiate a subcomponent from, and configures this subcomponent instance. The package can be provided in one of three ways: - The package can be provided inline, as part of the same package, using a PackageConfiguration. - A package can be imported, using a ComponentPackageImport. The imported package may be part of the enveloping package, or it may be referenced from an external location. This allows reusing packages. - A package can be referenced indirectly, using a ComponentPackageReference. Users of the Component Data Model will have to contact a Repository (possibly via a search path) in order to find an appropriate package. In 6.4.7.3 (SubcomponentInstantiationDescription associations), add importedPackage: ComponentPackageImport [0..1] Imports a package by reference. In 6.4.7.4 (SubcomponentInstantiationDescription constraints), replace There can be either a package or a reference, but not both. with A package to supply an implementation for this subcomponent is either included, imported, or referenced: context SubcomponentInstantiationDescription inv: Set{self.package, self.importedPackage, self.reference}->size() = 1 In 6.5.1.5 (RepositoryManager semantics), add The installPackage and createPackage operations recursively resolve all imported packages: in all SubcomponentInstantiationDescription elements, ComponentPackageImport elements are replaced with PackageConfiguration elements, containing the data that was loaded from the imported package. PackageConfiguration elements returned from findConfigurationByName or findConfigurationByUUID do not contain ComponentPackageImport elements. In 9.5.8 (Transformation Exceptions and Extensions), delete the second sentence of the last paragraph, which reads If the link attribute of a ComponentPackageDescription proxy that is part of a SubcomponentInstantiationDescription element does not contain a fragment identifier, then the referenced file can be either a Component Package Descriptor or a package (i.e. a ZIP file with the ".cpk" extension containing the package).