And now Mikael Barbero starts its talk an 3MF. This project started by wondering how to improve EMF:
- how to have multiple versions of a meta-model in the same OSGI container
- how to wipe out dependency from Java interfaces to implementation
- how to improve OSGI integration in EMF
EMF is widely use because of the concern of backward compatibility. Some things in 3MF may break backward compatibility.
An user cannot use two tools that are using two different versions of the same metamodels (same uri). OSGI is modular and dynamic by nature but Eclipse extension points are forcing plugins to be singleton. Declarative service from OSGI can help solve this issue.
Another problem comes from the fact that the key of the package registry is the URI of the package. It should use instead the URI and a version. To handle this problem, a "VersionedRegistry" was needed. The version is computed from the version of the contributing bundle or from a property.
In EMF, interfaces are linked to implementation, by removing this link you could switch implementation quite easily. Several classes would have to be changed to implement new interfaces design to provide this link (to the EPackage for example).
The solutions presented by Mikael are very interesting, have a look at the code on github.