Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "MDT/UML2/UML2 5.0 Migration Guide"

< MDT‎ | UML2
(Resources)
(Legacy Interchange)
Line 1,054: Line 1,054:
  
 
= Legacy Interchange =
 
= Legacy Interchange =
"TBD"
+
The UML2 project supports interchange of legacy resources, i.e., artifacts that were created using older versions of the project. This XMI-based migration mechanism was enhanced to deal with the incompatibilities introduced by the new version of the UML2 API and schema. A mapping between the legacy UML2 4.x metamodel and the new UML2 5.0 metamodel was created and existing mappings for older versions of the UML2 schema were updated. New resource handler and extended metadata implementations were also developed to cover transformations which could not be automated during deserialization.
 +
 
 +
The following changes with respect to legacy interchange are of particular note:
 +
 
 +
* UML resources serialized by UML2 are now based on UML2 5.0, whose namespace URI is '''http://www.eclipse.org/uml2/5.0.0/UML'''.
  
 
= XMI Interchange =
 
= XMI Interchange =

Revision as of 10:19, 21 February 2014

Copyright © 2014 CEA

Summary

The intent of this guide is to assist consumers in the process of migrating from the UML2 4.x API, based on the UML 2.4.1 specification, to the new UML2 5.0 API, based on the UML 2.5 specification, and to summarize any new features of the implementation that developers may want to take advantage of.

Kenn Hussey, Christian W. Damus
Last Updated: February 20, 2014

Overview

The Eclipse UML2 (Unified Modeling Language 2.x) project is an EMF-based implementation of the UML 2.x metamodel for the Eclipse platform. This implementation was previously compliant with the 2.4.1 version of the UML specification, for which a newer version, namely 2.5, will soon be officially released by the Object Management Group (OMG).

The UML2 metamodel implementation has been enhanced so that it is compliant with the 2.5 version of the UML specification. This enhanced implementation has been delivered as a new version, 5.0, of the UML2 project, to be released as part of the Luna simultaneous release of Eclipse. The source code for this new version of the project is managed in an Eclipse git repository and built, using Buckminster, on the Hudson installation at Eclipse.

UML 2.5 was actually released by the OMG as part of a series of revisions, also known as the “2.5 series”, which includes updated versions of the Meta Object Facility (MOF) and MOF 2 XMI Mapping specifications as well. Based on a careful analysis of the delta between the previous UML2 implementation and the UML 2.5 specification, described in more detail below, it was decided that the new version of UML2 would NOT be compatible with UML2 4.x. UML2 5.0 supersedes previous version(s) of the project (i.e., new major or minor versions of the 4.x stream will NOT be released) and is neither API contract nor binary compatible with UML2 4.x.

While the UML 2.5 specification has been extensively re-written from its previous version to make it easier to read by removing redundancy and increasing clarity, the metamodel itself remains largely unchanged from UML 2.4.1 superstructure, with the following exceptions:

  • The metamodel has been partitioned into packages, corresponding to the clause structure of this specification. All of these packages are owned by a top-level package named UML; they are also imported into UML so that metaclasses may be referred to by their unqualified name in UML.
  • Many OCL constraints have been corrected or added where they were absent. In order to do this, some names of association-owned properties and the corresponding associations have been changed to avoid ambiguity in OCL expressions.
  • A small number of lower multiplicities have been relaxed from 1 to 0, in order to represent default values that cannot be formally represented using MOF. In these cases the absence of a value signifies the presence of a default value. These cases could not be represented at all in earlier versions of UML. They all occur in Clause 15: Activities and are made explicit in the text there.
  • The property LoopNode::loopVariable has been made composite, in order to enable interchange of loop variables, which was not possible in a standard way in UML 2.4.1.
  • An {ordered} constraint has been added to some properties in order to make the semantics consistent.
  • The StandardProfileL2 and StandardProfileL3 profiles have been amalgamated into a single StandardProfile.
  • NamedElement::clientDependency has been made derived.

This migration guide has been provided to assist consumers in the process of migrating to the new UML2 5.0 API. An XMI-based (de)serialization mechanism (described herein) has also been provided to automatically migrate resources based on the UML2 4.x schema to the new 5.0 schema.

The changes in UML2 5.0 can be broken into functional areas, relating to various aspects of the EMF-based UML implementation provided by the UML2 project. The following sections describe each of these areas in detail.

API

Incompatible changes in the UML2 API are primarily concerned with the UML metamodel and supporting model resources, but this release also includes an incompatible refactoring of some validation-related API.

EMF Validation Framework

In the 4.x releases, since Eclipse Juno, the org.eclipse.uml2.uml bundle has included implementations of certain EMF Validation Framework APIs to support validation of UML models using that API. This included an optional dependency on the org.eclipse.emf.validation bundle.

In the 5.0 release, the classes in the org.eclipse.uml2.uml.validation package and the consequent dependency metadata are moved into a new bundle, eponymously named. Any bundles that are using this API will have to add a dependency on the new org.eclipse.uml2.uml.validation bundle. Note that, if this dependency was previously expressed using Import-Package:, then no change will be needed as the API as such remains source and binary compatible; it is only moved to a new bundle. However, as these packages were not and are not individually versioned, such a dependency would have been difficult to manage.

UML Metamodel

The UML2 project provides a Java API for the UML metamodel that is generated using a (customized version of) the code generation facility in EMF. In the past, this API has been generated from a source model produced by merging a reference model of the merged L3 compliance level of UML with custom extensions introduced by the UML2 project. As of UML 2.5, however, this reference model has been partitioned into subpackages by the OMG. As a result, the API is now be generated from a source model produced by merging all of the subpackages of the reference model with custom extensions introduced by the UML2 project.

The following subsections describe the changes to the properties, operations, and constraints in the revised UML specification which affected the metamodel API provided by UML2. It is worth noting that a number of of the utilities and unit tests provided by UML2 were also modified in response to changes in the API.

OMG issue numbers could not be identified for many of the changes listed in the tables below (as indicated by questions marks) because they were made during preparation and submission of the UML 2.5 Beta 1 specification (and not by the UML 2.5 FTF).

Properties

Properties in UML are represented as Java fields with accessors (“getter” and “setter” methods) in the UML2 API. These members are generated using the (customized) EMF code generator and, in some cases (e.g., if a property is derived), implemented or customized by hand.

The following table lists the properties that were removed by the revised UML specification. Removals that had a nontrivial impact on API compatibility and/or migration of legacy resources are highlighted in yellow.

Property Issue
Property::default 9822
Property::isReadOnly 15781

The following table lists the properties that were modified by the revised UML specification. Modifications that had a nontrivial impact on API compatibility and/or migration of legacy resources are highlighted in yellow.

Property Change Issue
AcceptEventAction::result ordered 12789
ActivityEdge::weight lowerBound is 0  ?
Association::endType not ordered 18788
Classifier::attribute ordered  ?
ConnectableElement::end not ordered 18140
DurationObservation::event ordered 17466
EnumerationLiteral::enumeration lowerBound is 1 15107
Extension::isRequired default value is deleted 15668
ExtensionEnd::lower default value is deleted 15668
JoinNode::joinSpec lowerBound is 0  ?
Message::messageKind default value is deleted 15668
MultiplicityElement::lower lowerBound is 1 13992
MultiplicityElement::lower default value is deleted 15668
MultiplicityElement::upper default value is deleted 15668
NamedElement::clientDependency derived 15056
ObjectNode::upperBound lowerBound is 0  ?
Operation::isOrdered default value deleted 15668
Operation::isUnique default value deleted 15668
Operation::lower default value deleted 15668
Operation::upper default value deleted 15668
PackageableElement::visibility lowerBound is 0  ?
ReplyAction::replyValue ordered  ?
State::isComposite default value deleted 15668
State::isOrthogonal default value deleted 15668
State::isSimple default value deleted 15668
State::isSubmachineState default value deleted 15668
StringExpression::subExpression ordered 7882
UnmarshallAction::result ordered  ?

Operations

Operations in UML are represented as Java methods in the UML2 API. These signatures for these methods are generated using the (customized) EMF code generator and their bodies are implemented by hand.

The following table lists the operations that were removed by the revised UML specification. Removals that had a nontrivial impact on API compatibility are highlighted in yellow.

Operation Issue
Class::inherit(NamedElement) 18544
Component::realizedInterfaces()  ?
Component::usedInterfaces()  ?
DataType::inherit(NamedElement) 18544
MultiplicityElement::includesCardinality(Integer)  ?

The following table lists the operations that were modified by the revised UML specification. Modifications that had a nontrivial impact on API compatibility are highlighted in yellow.

Operation Change Issue
Action::context() OCL expression  ?
Behavior::context() OCL expression  ?
BehavioralFeature::isDistinguishableFrom(NamedElement, Namespace) OCL expression  ?
Class::extension() OCL expression  ?
Classifier::conformsTo(Type) parameter type is Type  ?
Classifier::inherit(NamedElement) OCL expression 18544
Classifier::isTemplate() OCL expression  ?
Component::provided() OCL expression  ?
Component::required() OCL expression  ?
EncapsulatedClassifier::ownedPort() ordered  ?
NamedElement::allNamespaces() OCL expression 14065
Namespace::importedMember() OCL expression  ?
Operation::isConsistentWith(RedefinableElement) parameter name is “redefiningElement” 15500
Property::isAttribute() parameter removed 11120
Property::isConsistentWith(RedefinableElement) parameter name is “redefiningElement” 15500
RedefinableElement::isConsistentWith(RedefinableElement) parameter name is “redefiningElement” 15500
RedefinableElement::isRedefinitionContextValid(RedefinableElement) parameter name is “redefinedElement” 15500
RedefinableTemplateSignature::isConsistentWith(RedefinableElement) parameter name is “redefiningElement” 15500
Region::isConsistentWith(RedefinableElement) parameter name is “redefiningElement” 15500
Region::isRedefinitionContextValid(RedefinableElement) OCL expression, parameter name is “redefinedElement”, parameter type is RedefinableElement 15500
State::isConsistentWith(RedefinableElement) parameter name is “redefiningElement” 15500
State::isRedefinitionContextValid(RedefinableElement) parameter name is “redefinedElement”, parameter type is RedefinableElement 15500
StateMachine::ancestor(Vertex, Vertex) OCL expression, parameter types are Vertex  ?
StateMachine::isConsistentWith(RedefinableElement) parameter name is “redefiningElement” 15500
StateMachine::isRedefinitionContextValid(RedefinableElement) parameter name is “redefinedElement”, parameter type is RedefinableElement 15500
StateMachine::LCA(Vertex, Vertex) OCL expression, return type is Region, parameter types are Vertex  ?
Transition::isConsistentWith(RedefinableElement) parameter name is “redefiningElement” 15500
Transition::isRedefinitionContextValid(RedefinableElement) parameter name is “redefinedElement” 15500

The following table lists the operations that were added by the revised UML specification.

Operation Issue
Action::allActions()  ?
Action::allOwnedNodes()  ?
Action::containingBehavior()  ?
ActivityEdge::isConsistentWith(RedefinableElement)  ?
ActivityGroup::containingActivity()  ?
ActivityNode::containingActivity()  ?
ActivityNode::isConsistentWith(RedefinableElement)  ?
Behavior::behavioredClassifier()  ?
Behavior::inputParameters()  ?
Behavior::outputParameters()  ?
BehavioralFeature::inputParameters()  ?
BehavioralFeature::outputParameters()  ?
CallAction::inputParameters()  ?
CallAction::outputParameters()  ?
CallBehaviorAction::inputParameters()  ?
CallBehaviorAction::outputParameters()  ?
CallOperationAction::inputParameters()  ?
CallOperationAction::outputParameters()  ?
Classifier::allAttributes()  ?
Classifier::allRealizedInterfaces()  ?
Classifier::allSlottableFeatures() 18177
Classifier::allUsedInterfaces()  ?
Classifier::directlyRealizedInterfaces()  ?
Classifier::directlyUsedInterfaces()  ?
Classifier::isSubstitutableFor(Classifier)  ?
ConditionalNode::allActions()  ?
FunctionBehavior::hasAllDataTypeAttributes(DataType)  ?
Gate::getOperand() 18528
Gate::isActual()  ?
Gate::isDistinguishableFrom(NamedElement, Namespace) 18528
Gate::isFormal()  ?
Gate::isInsideCF()  ?
Gate::isOutsideCF()  ?
Gate::matches(Gate)  ?
LinkEndCreationData::allPins()  ?
LinkEndDestructionData::allPins()  ?
LoopNode::allActions()  ?
LoopNode::sourceNodes()  ?
Message::isDistinguishableFrom(NamedElement, Namespace)  ?
MessageEnd::enclosingFragment()  ?
MessageEnd::isReceive()  ?
MessageEnd::isSend()  ?
MessageEnd::oppositeEnd()  ?
NamedElement::clientDependency() 15056
Port::basicProvided()  ?
Port::basicRequired()  ?
ReadLinkAction::openEnd()  ?
StartObjectBehaviorAction::behavior()  ?
StartObjectBehaviorAction::inputParameters()  ?
StartObjectBehaviorAction::outputParameters()  ?
StateMachine::LCAState(Vertex, Vertex)  ?
StructuredActivityNode::allActions()  ?
StructuredActivityNode::allOwnedNodes()  ?
StructuredActivityNode::containingActivity()  ?
StructuredActivityNode::sourceNodes()  ?
StructuredActivityNode::targetNodes()  ?
StructuredClassifier::allRoles() 18697
Vertex::isContainedInRegion(Region)  ?
Vertex::isContainedInState(State)  ?

Constraints

Constraints in UML are represented as Java methods in the UML2 API. The signatures for these methods are generated using the (customized) EMF code generator, along with an associated validator utility class, and their bodies are implemented by hand.

The following table lists the constraints that were removed by the revised UML specification. Removals that had a nontrivial impact on API compatibility are highlighted in yellow.

Constraint Issue
AcceptEventAction::trigger_events  ?
ActionInputPin::no_control_or_data_flow  ?
Activity::activity_parameter_node  ?
Activity::autonomous  ?
Activity::no_supergroups  ?
ActivityEdge::owned  ?
ActivityEdge::structured_node  ?
ActivityGroup::group_owned  ?
ActivityNode::owned  ?
ActivityNode::owned_structured_node  ?
ActivityParameterNode::maximum_one_parameter_node  ?
ActivityParameterNode::maximum_two_parameter_nodes  ?
ActivityPartition::represents_part  ?
ActivityPartition::represents_part_and_is_contained  ?
AddStructuralFeatureValueAction::unlimited_natural_and_multiplicity  ?
AddVariableValueAction::single_input_pin  ?
Behavior::most_one_behaviour  ?
Behavior::must_realize  ?
BroadcastSignalAction::number_and_order  ?
CallAction::number_and_order  ?
CallAction::type_ordering_multiplicity  ?
CallBehaviorAction::argument_pin_equal_parameter  ?
CallBehaviorAction::result_pin_equal_parameter  ?
CallBehaviorAction::type_ordering_multiplicity  ?
CallOperationAction::argument_pin_equal_parameter  ?
CallOperationAction::result_pin_equal_parameter  ?
CallOperationAction::type_ordering_multiplicity  ?
CombinedFragment::minint_and_maxint  ?
Connector::between_interfaces_ports  ?
Connector::compatible  ?
Constraint::value_specification_boolean  ?
EnumerationLiteral::classifier_equals_owning_enumeration  ?
ExceptionHandler::exception_body  ?
ExceptionHandler::result_pins  ?
ExpansionRegion::expansion_nodes  ?
Gate::messages_actual_gate  ?
Gate::messages_combined_fragment  ?
Generalization::generalization_same_classifier  ?
GeneralOrdering::irreflexsive_transitive_closure  ?
InvocationAction::on_port_receiver  ?
LinkEndCreationData::create_link_action  ?
LinkEndCreationData::single_input_pin  ?
LinkEndDestructionData::destroy_link_action  ?
LinkEndDestructionData::unlimited_natural_and_multiplicity  ?
Message::signature_is_operation  ?
ObjectFlow::no_actions  ?
ObjectFlow::selection_behaviour  ?
ObjectFlow::transformation_behaviour  ?
Port::port_destroyed  ?
ProtocolStateMachine::ports_connected  ?
Reception::not_query  ?
RedefinableTemplateSignature::inherited_parameters  ?
RemoveStructuralFeatureValueAction::non_unique_removal  ?
RemoveVariableValueAction::unlimited_natural  ?
StartObjectBehaviorAction::number_order_arguments  ?
StartObjectBehaviorAction::number_order_results  ?
StartObjectBehaviorAction::type_ordering_multiplicity_match  ?
StructuralFeatureAction::same_type  ?
StructuredClassifier::multiplicities  ?
TimeEvent:starting_time  ?
Transition::signatures_compatible  ?
UnmarshallAction::multiplicity_of_result  ?
UnmarshallAction::multiplicity_of_result  ?
UnmarshallAction::type_and_ordering  ?
UnmarshallAction::unmarshallType_is_classifier  ?
Variable::owned  ?
WriteStructuralFeatureAction::input_pin  ?
WriteStructuralFeatureAction::multiplicity  ?
WriteVariableAction::same_type  ?

The following table lists the constraints that were modified by the revised UML specification. In all cases the OCL expression defining the specification of the constraint was changed.

Constraint Issue
AcceptCallAction::trigger_call_event  ?
Actor::associations  ?
Association::binary_associations 18228
Class::passive_class  ?
CombinedFragment::opt_loop_break_neg  ?
Connector::roles 18697
Message::signature_is_signal 18545
Namespace::visibility_needs_ownership  ?
Package::elements_public_or_private  ?
Stereotype::generalize  ?

The following table lists the constraints that were added by the revised UML specification.

Constraint Issue
AcceptEventAction::conforming_type  ?
AcceptEventAction::one_output_pin  ?
ActionInputPin::no_control_or_object_flow  ?
Activity::maximum_one_parameter_node  ?
Activity::maximum_two_parameter_nodes  ?
ActivityPartition::represents_property  ?
ActivityPartition::represents_property_and_is_contained  ?
AddStructuralFeatureValueAction::insertAt_pin  ?
AddVariableValueAction::insertAt_pin  ?
Association::ends_must_be_typed 18788
Behavior::most_one_behavior  ?
BehavioralFeature::abstract_no_method  ?
BroadcastSignalAction::no_onport  ?
BroadcastSignalAction::number_of_arguments  ?
CallAction::argument_pins  ?
CallAction::result_pins  ?
CallBehaviorAction::no_onport  ?
CallOperationAction::type_target_pin  ?
ClassifierTemplateParameter::actual_is_classifier  ?
ClassifierTemplateParameter::constraining_classifiers_constrain_args  ?
ClassifierTemplateParameter::constraining_classifiers_constrain_parametered_element  ?
ClassifierTemplateParameter::matching_abstract  ?
ClassifierTemplateParameter::parametered_element_no_features  ?
Duration::no_expr_requires_observation  ?
DurationConstraint::has_one_or_two_constrainedElements  ?
Enumeration::immutable 8274
ExceptionHandler::exception_input_type  ?
ExceptionHandler::handler_body_edges  ?
ExceptionHandler::handler_body_owner  ?
ExceptionHandler::output_pins  ?
Gate::actual_gate_distinguishable 18528
Gate::actual_gate_matched  ?
Gate::formal_gate_distinguishable 18528
Gate::inside_cf_gate_distinguishable 18528
Gate::inside_cf_matched  ?
Gate::outside_cf_gate_distinguishable 18528
Gate::outside_cf_matched  ?
GeneralOrdering::irreflexive_transitive_closure  ?
Interaction::not_contained  ?
Lifeline::selector_int_or_string  ?
LinkEndCreationData::insertAt_pin  ?
LinkEndDestructionData::destroyAt_pin  ?
LoopNode::loop_variable_outgoing  ?
LoopNode::matching_loop_variables  ?
LoopNode::matching_output_pins  ?
LoopNode::matching_result_pins  ?
LoopNode::setup_test_and_body  ?
Message::signature_is_operation_reply  ?
Message::signature_is_operation_request  ?
MultiplicityElement::lower_is_integer 17583
MultiplicityElement::upper_is_unlimitedNatural 17583
Namespace::cannot_import_ownedMembers  ?
Namespace::cannot_import_self  ?
ObjectFlow::no_executable_nodes  ?
ObjectFlow::selection_behavior  ?
ObjectFlow::transformation_behavior  ?
OpaqueAction::language_body_size  ?
OperationTemplateParameter::match_default_signature  ?
PackageableElement::namespace_needs_visibility  ?
Parameter::object_effect 17584
Pin::not_unique  ?
Port::encapsulated_owner  ?
Property::qualified_is_association_end  ?
Property::type_of_opposite_end  ?
Reception::same_name_as_signal  ?
Reception::same_structure_as_signal  ?
RedefinableTemplateSignature::redefines_parents  ?
RemoveStructuralFeatureValueAction::removeAt_and_value  ?
RemoveVariableValueAction::removeAt_and_value  ?
SendObjectAction::type_target_pin  ?
SendSignalAction::type_target_pin  ?
StartObjectBehaviorAction::no_onport  ?
Stereotype::base_property_multiplicity_multiple_extension 13482
Stereotype::base_property_multiplicity_single_extension 13482
Stereotype::base_property_upper_bound 13482
StructuralFeatureAction::object_type  ?
TemplateSignature::unique_parameters  ?
TimeConstraint::has_one_constrainedElement  ?
TimeExpression::no_expr_requires_observation  ?
Trigger::trigger_with_ports  ?
UnmarshallAction::object_type  ?
UnmarshallAction::type_ordering_and_multiplicity  ?
WriteStructuralFeatureAction::multiplicity_of_value  ?
WriteStructuralFeatureAction::type_of_value  ?
WriteVariableAction::value_type  ?

Profiles

The UML2 project provides an implementation of the profiles mechanism described in the UML specification. This implementation supports definition of "static" or "dynamic" profiles containing stereotypes to extend the UML metamodel with domain-specific tagged values. Changes in the revised UML specification required updates to this mechanism.

The following changes with respect to profiles are of particular note:

  • A static implementation of the Standard profile has been provided by UML2, hence the addition of a new org.eclipse.uml2.uml.profile.standard bundle and removal of the org.eclipse.uml2.uml.profile.l2 and org.eclipse.uml2.uml.profile.l3 bundles.

Resources

The UML2 project provides a number of built-in primitive types libraries (Ecore, Java, and UML), metamodels (Ecore and UML), and profiles (Ecore and Standard), serialized in UML format. Changes in the revised UML specification required updates to these resources.

The following changes with respect to resources are of particular note:

  • Some XMI resources previously provided by the OMG, namely Infrastructure.xmi, Superstructure.xmi, StandardProfileL2.xmi, and StandardProfileL3.xmi have been removed from the org.eclipse.uml2 bundle.
  • The StandardL2 and StandardL3 profiles (StandardL2.profile.uml and StandardL3.profile.uml) that were provided by previous releases of UML2 have been combined into one (Standard.profile.uml), corresponding to the Standard profile defined in the UML specification.

Legacy Interchange

The UML2 project supports interchange of legacy resources, i.e., artifacts that were created using older versions of the project. This XMI-based migration mechanism was enhanced to deal with the incompatibilities introduced by the new version of the UML2 API and schema. A mapping between the legacy UML2 4.x metamodel and the new UML2 5.0 metamodel was created and existing mappings for older versions of the UML2 schema were updated. New resource handler and extended metadata implementations were also developed to cover transformations which could not be automated during deserialization.

The following changes with respect to legacy interchange are of particular note:

XMI Interchange

"TBD"

CMOF Interchange

"TBD"

Ecore / UML Conversion

"TBD"

Examples

"TBD"

Back to the top