SlideShare a Scribd company logo
1 of 40
HTTP://RAONINERY.CGSOCIETY.ORG/GALLERY/853975/
(C) RAONI NERY (RAONINERY@GMAIL.COM)




                                                 3MF:
                                                 EMF TO THE INFINITY... AND BEYOND
ECON 2012                                                           SPEAKER
                                                 MARCH 27TH, 2012             MIKAEL BARBERO – OBEO
POINTS OF INTEREST
 Multiple Ecore       Wipe out
                                                                     Make EMF a
model versions in dependency from
                                                                     better OSGi
 the same OSGi    Java interfaces to
                                                                       citizen
    container      implementation



   Work inspired from Alex Blewit and Neil Bartlett following posts [1, 2] and bugs [3, 4]
    (1)   http://njbartlett.name/2011/02/07/emf-in-osgi.html
    (2)   http://alblue.bandlem.com/2010/11/using-emf-for-osgi-service-creation.html
    (3)   https://bugs.eclipse.org/bugs/show_bug.cgi?id=329209
    (4)   https://bugs.eclipse.org/bugs/show_bug.cgi?id=328227
PARENTAL

ADVISORY
KEEP OUT
        POSSIBILITY OF

BACKWARD INCOMPATIBILITY
USE CASE 1

ECORE MODEL V1   ECORE MODEL V2




 Tool Vendor 1    Tool Vendor 2
WAIT, I CAN’T USE
TOOLS FROM THESE
TWO VENDORS AT
THE SAME TIME?
I don’t care if they are based on
some data model whose
different versions can not live
together.
                                    HTTP://WWW.FLICKR.COM/PHOTOS/KALEXANDERSON/6237846841/
HTTP://WWW.FLICKR.COM/PHOTOS/RUSSMORRIS/181933880/




                     HTTP://WWW.FLICKR.COM/PHOTOS/ITSGREG/2634229136/   HTTP://WWW.FLICKR.COM/PHOTOS/RUSSMORRIS/181933880/




FIRST GUILTY:
ECLIPSE EXTENSIONS
FIRST GUILTY:
EXTENSIONS
OSGi is modular and dynamic by nature.

Extensions are reducing some of these
advantages by forcing plug-in to be singleton.

EMF uses extensions to contribute generated and
dynamic EPackages.
FIRST SOLUTION
Mimic GeneratedPackageRegistryReader and
DynamicPackageRegistryReader during activation
of model plug-ins.

Advantages: simple and mostly backward
compatible.

Drawbacks: plug-in must be activated to
contribute its model and some boilerplate code
needs to be written.
SECOND SOLUTION
Use OSGi (declarative) services.

Advantages: simple and mostly backward
compatible. Once defined as a service, any
requiring class can be made a component
requiring this service (DI).

Drawbacks: needs a ServiceTracker to track
services that can come and go anytime

EVEN BETTER OSGI R4.3: CREATE A CAPABILITY FOR EPACKAGES
HTTP://WWW.FLICKR.COM/PHOTOS/FIDDLEDYDEE/4349596304/



SECOND GUILTY
EPACKAGE.REGISTRY KEY
SECOND GUILTY:
REGISTRY KEYS
EPackage instances are identified by namespace
URI in the Registry.

  Best practice (workaround?) today is to include
  version into namespace URI.

It should be a tuple (URI, Version)
SOLUTION
Need a specific EPackage.Registry
implementation that handle versions
   public interface VersionedRegistry extends EPackage.Registry {

   	   EPackage getEPackage(String nsURI, String version);
   	
   	   EFactory getEFactory(String nsURI, String version);
   }


Contributed through
package_registry_implementation extension point.

Version can be valued from a property of service
or from version of contributing bundle (or from
capability?)
USE CASE 2
« If the interfaces can be kept "clean", i.e.
without any references to EMF-generated
implementation classes or to EMF itself, then the
APIs can be used standalone, for example in a
memory constrained environment. In this scenario,
normal hand-coded implementation classes could
be used. »
                                                       Neil Bartlett
             https://bugs.eclipse.org/bugs/show_bug.cgi?id=329209
HTTP://WWW.FLICKR.COM/PHOTOS/DCJOHN/12852539/



GUILTY:
EPACKAGE.EINSTANCE
aces
Interf

                    EMF



              YOUR MODEL
aces
Interf
        EObject   EPackage   EFactory
                                              EMF



                                        YOUR MODEL
aces
Interf
        EObject   EPackage     EFactory
                                                  EMF

          Foo     BarPackage   BarFactory
                                            YOUR MODEL
aces
Interf
          EObject   EPackage     EFactory
                                                    EMF

           Foo      BarPackage   BarFactory
                                              YOUR MODEL



   Impl


                                                    EMF



                                              YOUR MODEL
aces
Interf
          EObject    EPackage       EFactory
                                                        EMF

           Foo      BarPackage      BarFactory
                                                  YOUR MODEL



   Impl
      EObjectImpl   EPackageImpl   EFactoryImpl
                                                        EMF



                                                  YOUR MODEL
aces
Interf
          EObject     EPackage         EFactory
                                                            EMF

           Foo       BarPackage       BarFactory
                                                      YOUR MODEL



   Impl
      EObjectImpl   EPackageImpl     EFactoryImpl
                                                            EMF

          FooImpl   BarPackageImpl   BarFactoryImpl
                                                      YOUR MODEL
aces
Interf
          EObject     EPackage         EFactory
                                                            EMF

           Foo       BarPackage       BarFactory
                                                      YOUR MODEL



   Impl
      EObjectImpl   EPackageImpl     EFactoryImpl
                                                            EMF

          FooImpl   BarPackageImpl   BarFactoryImpl
                                                      YOUR MODEL
aces
Interf
          EObject     EPackage         EFactory
                                                            EMF

           Foo       BarPackage       BarFactory
                                                      YOUR MODEL



   Impl
      EObjectImpl   EPackageImpl     EFactoryImpl
                                                            EMF

          FooImpl   BarPackageImpl   BarFactoryImpl
                                                      YOUR MODEL
aces
Interf
          EObject     EPackage         EFactory
                                                            EMF

           Foo       BarPackage       BarFactory
                                                      YOUR MODEL



   Impl
      EObjectImpl   EPackageImpl     EFactoryImpl
                                                            EMF

          FooImpl   BarPackageImpl   BarFactoryImpl
                                                      YOUR MODEL
aces
Interf
          EObject     EPackage         EFactory
                                                            EMF

           Foo       BarPackage       BarFactory
                                                      YOUR MODEL



   Impl
      EObjectImpl   EPackageImpl     EFactoryImpl
                                                            EMF

          FooImpl   BarPackageImpl   BarFactoryImpl
                                                      YOUR MODEL
BENEFITS

Make generation gap pattern very natural and
easy.



Change from plain EMF objects to CDO native
objects.
SOLUTION
                                 EObjectImpl




                                  FooImpl      BarPackageImpl




Add a method to (Internal)EObject

          abstract EPackage ePackage();



Can be done in an extending interface
implemented by only newly generated models
SOLUTION
                                         EObjectImpl




                                          FooImpl      BarPackageImpl




                   Field in          Field in
              EPropertiesHolder   XXXObjectImpl


                          Access to
                  EPackage.Registry.INSTANCE




In all cases, it requires to give its defining EPackage to the
EObject’s constructor, and then to modify XXXFactoryImpl
SOLUTION
 Some adapter factories need to be modified too
 (AdapterFactory for models)

 Need to introduce a new interface extending
 AdapterFactory


public interface ModelAdapterFactory<P extends EPackage, F extends EFactory>
    extends AdapterFactory {
	 P getEPackage();
	 F getEFactory();
}
SOLUTION
public interface ModelAdapterFactory<P extends EPackage, F extends EFactory>
    extends AdapterFactory {
	 P getEPackage();
	 F getEFactory();
}




 XXXItemProviderAdapterFactory is also
 implementing it

     XXXItemProviders are taking this interface as
     argument to their constructor instead of simple
     AdapterFactory.
BIND IT ALL
This solution perfectly fits
with registration of
EPackages as OSGi
(declarative) services
USE CASE 3

« I want to use EMF models on another OSGi
runtime than Equinox »
ECLIPSE                  RICH CLIENT      ECLIPSE
   WORKBENCH                  PLATFORM       HEADLESS

            IDE                  RCP          EQUINOX




   STANDALONE                ECLIPSE RICH   GOOGLE WEB
                            AJAX PLATFORM     TOOLKIT

      JAVA RUNTIME               RAP           GWT




SUPPORTED PLATFORMS
RAP AND GWT SINCE EMF 2.6
What about other OSGi
            runtimes?
                                                     When running in an OSGi container,
                                                     EMF explicitly requires the following
                                                     8 bundles:
                                                       org.eclipse.core.runtime
                                                       org.eclipse.equinox.common
                                                       org.eclipse.core.jobs
                                                       org.eclipse.equinox.registry
                                                       org.eclipse.equinox.preferences
                                                       org.eclipse.core.contenttype
                                                       org.eclipse.equinox.app
                                                       org.eclipse.osgi
HTTP://NJBARTLETT.NAME/2011/02/07/EMF-IN-OSGI.HTML
SOLUTION 1 & 2

(Repackage EMF bundles)

Big refactoring to separate
Eclipse/Equinox related bits
from OSGi related bits

Use import-package instead
or require-bundle
SOLUTION 3
There are some less radical changes that can be
done in a backward compatible fashion, but

  Introduces even more graceful handling of target
  running platform into the runtime

  Ex: rewriting EMFPlugin.IS_ECLIPSE_RUNNING
  in a similar way to
  IS_RESOURCE_BUNDLE_AVAILABLE in the
  term of a new EMFPlugin.IS_OSGI_RUNNING.
CONCLUSION
EMF is a great piece of engineering

OSGi is a great piece of engineering too

3MF is an experimentation to make EMF mimic /
use some of the best qualities of OSGi (modularity,
dynamicity)

With these, EMF would reach the infinity... and
beyond!
CONCLUSION
EMF is a great piece of engineering

OSGi is a great piece of engineering too

3MF is an experimentation to make EMF mimic /
use some of the best qualities of OSGi (modularity,
dynamicity)

With these, EMF would reach the infinity... and
beyond!
HTTPS://GITHUB.COM/MBARBERO/EMF/TREE/3MF
HTTP://WWW.SLIDESHARE.NET/MIKAELBARBERO/




                                HTTP://WWW.FLICKR.COM/PHOTOS/B-LOVE/5032931614/




        MIKAEL.BARBERO@OBEO.FR
           HTTP://WWW.OBEO.FR

More Related Content

Similar to 3mf infinity-and-beyond

EclipseCon 2006: Introduction to the Eclipse Modeling Framework
EclipseCon 2006: Introduction to the Eclipse Modeling FrameworkEclipseCon 2006: Introduction to the Eclipse Modeling Framework
EclipseCon 2006: Introduction to the Eclipse Modeling FrameworkDave Steinberg
 
EclipseCon 2007: Effective Use of the Eclipse Modeling Framework
EclipseCon 2007: Effective Use of the Eclipse Modeling FrameworkEclipseCon 2007: Effective Use of the Eclipse Modeling Framework
EclipseCon 2007: Effective Use of the Eclipse Modeling FrameworkDave Steinberg
 
What every Eclipse developer should know about EMF - Tutorial at EclipseCon
What every Eclipse developer should know about EMF - Tutorial at EclipseConWhat every Eclipse developer should know about EMF - Tutorial at EclipseCon
What every Eclipse developer should know about EMF - Tutorial at EclipseConJonasHelming
 
EMF - The off beat path
EMF - The off beat pathEMF - The off beat path
EMF - The off beat path17thcamel
 
Eclipse 4 Context Functions
Eclipse 4 Context FunctionsEclipse 4 Context Functions
Eclipse 4 Context FunctionsSopot Cela
 
Codegeneration Goodies
Codegeneration GoodiesCodegeneration Goodies
Codegeneration Goodiesmeysholdt
 
CDO Ignite
CDO IgniteCDO Ignite
CDO IgniteHolmes70
 
EMF-IncQuery 0.7 Presentation for Itemis
EMF-IncQuery 0.7 Presentation for ItemisEMF-IncQuery 0.7 Presentation for Itemis
EMF-IncQuery 0.7 Presentation for ItemisIstvan Rath
 
Confusing introduction to elixir
Confusing introduction to elixirConfusing introduction to elixir
Confusing introduction to elixirLauri Kainulainen
 
Behat c'est plus que ça | Behat is more than that
Behat c'est plus que ça | Behat is more than thatBehat c'est plus que ça | Behat is more than that
Behat c'est plus que ça | Behat is more than thatSamuel ROZE
 
Dynamic Overriding
Dynamic OverridingDynamic Overriding
Dynamic Overridingrentzsch
 

Similar to 3mf infinity-and-beyond (14)

EclipseCon 2006: Introduction to the Eclipse Modeling Framework
EclipseCon 2006: Introduction to the Eclipse Modeling FrameworkEclipseCon 2006: Introduction to the Eclipse Modeling Framework
EclipseCon 2006: Introduction to the Eclipse Modeling Framework
 
EclipseCon 2007: Effective Use of the Eclipse Modeling Framework
EclipseCon 2007: Effective Use of the Eclipse Modeling FrameworkEclipseCon 2007: Effective Use of the Eclipse Modeling Framework
EclipseCon 2007: Effective Use of the Eclipse Modeling Framework
 
What every Eclipse developer should know about EMF - Tutorial at EclipseCon
What every Eclipse developer should know about EMF - Tutorial at EclipseConWhat every Eclipse developer should know about EMF - Tutorial at EclipseCon
What every Eclipse developer should know about EMF - Tutorial at EclipseCon
 
EMF - The off beat path
EMF - The off beat pathEMF - The off beat path
EMF - The off beat path
 
Eclipse Modeling Overview
Eclipse Modeling OverviewEclipse Modeling Overview
Eclipse Modeling Overview
 
Eclipse 4 Context Functions
Eclipse 4 Context FunctionsEclipse 4 Context Functions
Eclipse 4 Context Functions
 
Codegeneration Goodies
Codegeneration GoodiesCodegeneration Goodies
Codegeneration Goodies
 
CDO Ignite
CDO IgniteCDO Ignite
CDO Ignite
 
EMF-IncQuery 0.7 Presentation for Itemis
EMF-IncQuery 0.7 Presentation for ItemisEMF-IncQuery 0.7 Presentation for Itemis
EMF-IncQuery 0.7 Presentation for Itemis
 
ITU - MDD - EMF
ITU - MDD - EMFITU - MDD - EMF
ITU - MDD - EMF
 
Confusing introduction to elixir
Confusing introduction to elixirConfusing introduction to elixir
Confusing introduction to elixir
 
Behat c'est plus que ça | Behat is more than that
Behat c'est plus que ça | Behat is more than thatBehat c'est plus que ça | Behat is more than that
Behat c'est plus que ça | Behat is more than that
 
Eclipse RCP 4
Eclipse RCP 4Eclipse RCP 4
Eclipse RCP 4
 
Dynamic Overriding
Dynamic OverridingDynamic Overriding
Dynamic Overriding
 

More from mikaelbarbero

Kubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating SystemKubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating Systemmikaelbarbero
 
Language Server Protocol - Why the Hype?
Language Server Protocol - Why the Hype?Language Server Protocol - Why the Hype?
Language Server Protocol - Why the Hype?mikaelbarbero
 
What's new in Eclipse Oxygen (Devoxx France 2017)
What's new in Eclipse Oxygen (Devoxx France 2017)What's new in Eclipse Oxygen (Devoxx France 2017)
What's new in Eclipse Oxygen (Devoxx France 2017)mikaelbarbero
 
The Eclipse IDE: What's new in the 2017 release?
The Eclipse IDE: What's new in the 2017 release?The Eclipse IDE: What's new in the 2017 release?
The Eclipse IDE: What's new in the 2017 release?mikaelbarbero
 
What every Eclipse developer should know about progress reporting and job can...
What every Eclipse developer should know about progress reporting and job can...What every Eclipse developer should know about progress reporting and job can...
What every Eclipse developer should know about progress reporting and job can...mikaelbarbero
 
The Eclipse IDE - The Force Awakens (Devoxx France 2016)
The Eclipse IDE - The Force Awakens (Devoxx France 2016)The Eclipse IDE - The Force Awakens (Devoxx France 2016)
The Eclipse IDE - The Force Awakens (Devoxx France 2016)mikaelbarbero
 
Sirius: Graphical Editors for your DSLs
Sirius: Graphical Editors for your DSLsSirius: Graphical Editors for your DSLs
Sirius: Graphical Editors for your DSLsmikaelbarbero
 
Modeling in a Team Environment with EMF Compare and EGit
Modeling in a Team Environment with EMF Compare and EGitModeling in a Team Environment with EMF Compare and EGit
Modeling in a Team Environment with EMF Compare and EGitmikaelbarbero
 
Diff and Merge with Ease: EMF Compare
Diff and Merge with Ease: EMF CompareDiff and Merge with Ease: EMF Compare
Diff and Merge with Ease: EMF Comparemikaelbarbero
 
Eclipse simultaneous release in a nutshell
Eclipse simultaneous release in a nutshellEclipse simultaneous release in a nutshell
Eclipse simultaneous release in a nutshellmikaelbarbero
 
OSGi: Don't let me be Misunderstood
OSGi: Don't let me be MisunderstoodOSGi: Don't let me be Misunderstood
OSGi: Don't let me be Misunderstoodmikaelbarbero
 
EMF.Edit the Force Unleashed!
EMF.Edit the Force Unleashed!EMF.Edit the Force Unleashed!
EMF.Edit the Force Unleashed!mikaelbarbero
 
EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)mikaelbarbero
 
EMFCompare 2.0: Scaling to Millions
EMFCompare 2.0: Scaling to MillionsEMFCompare 2.0: Scaling to Millions
EMFCompare 2.0: Scaling to Millionsmikaelbarbero
 
Eclipseconeurope 2011 - EMFCompare Improvements
Eclipseconeurope 2011 - EMFCompare ImprovementsEclipseconeurope 2011 - EMFCompare Improvements
Eclipseconeurope 2011 - EMFCompare Improvementsmikaelbarbero
 
Google Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG NantesGoogle Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG Nantesmikaelbarbero
 
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)mikaelbarbero
 

More from mikaelbarbero (18)

Kubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating SystemKubernetes 101 - A Cluster Operating System
Kubernetes 101 - A Cluster Operating System
 
Language Server Protocol - Why the Hype?
Language Server Protocol - Why the Hype?Language Server Protocol - Why the Hype?
Language Server Protocol - Why the Hype?
 
What's new in Eclipse Oxygen (Devoxx France 2017)
What's new in Eclipse Oxygen (Devoxx France 2017)What's new in Eclipse Oxygen (Devoxx France 2017)
What's new in Eclipse Oxygen (Devoxx France 2017)
 
The Eclipse IDE: What's new in the 2017 release?
The Eclipse IDE: What's new in the 2017 release?The Eclipse IDE: What's new in the 2017 release?
The Eclipse IDE: What's new in the 2017 release?
 
What every Eclipse developer should know about progress reporting and job can...
What every Eclipse developer should know about progress reporting and job can...What every Eclipse developer should know about progress reporting and job can...
What every Eclipse developer should know about progress reporting and job can...
 
The Eclipse IDE - The Force Awakens (Devoxx France 2016)
The Eclipse IDE - The Force Awakens (Devoxx France 2016)The Eclipse IDE - The Force Awakens (Devoxx France 2016)
The Eclipse IDE - The Force Awakens (Devoxx France 2016)
 
Sirius: Graphical Editors for your DSLs
Sirius: Graphical Editors for your DSLsSirius: Graphical Editors for your DSLs
Sirius: Graphical Editors for your DSLs
 
Modeling in a Team Environment with EMF Compare and EGit
Modeling in a Team Environment with EMF Compare and EGitModeling in a Team Environment with EMF Compare and EGit
Modeling in a Team Environment with EMF Compare and EGit
 
Diff and Merge with Ease: EMF Compare
Diff and Merge with Ease: EMF CompareDiff and Merge with Ease: EMF Compare
Diff and Merge with Ease: EMF Compare
 
Eclipse simultaneous release in a nutshell
Eclipse simultaneous release in a nutshellEclipse simultaneous release in a nutshell
Eclipse simultaneous release in a nutshell
 
OSGi: Don't let me be Misunderstood
OSGi: Don't let me be MisunderstoodOSGi: Don't let me be Misunderstood
OSGi: Don't let me be Misunderstood
 
EMF.Edit the Force Unleashed!
EMF.Edit the Force Unleashed!EMF.Edit the Force Unleashed!
EMF.Edit the Force Unleashed!
 
EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)EMF Compare 2.0: Scaling to Millions (updated)
EMF Compare 2.0: Scaling to Millions (updated)
 
EMFCompare 2.0: Scaling to Millions
EMFCompare 2.0: Scaling to MillionsEMFCompare 2.0: Scaling to Millions
EMFCompare 2.0: Scaling to Millions
 
Eclipseconeurope 2011 - EMFCompare Improvements
Eclipseconeurope 2011 - EMFCompare ImprovementsEclipseconeurope 2011 - EMFCompare Improvements
Eclipseconeurope 2011 - EMFCompare Improvements
 
Google Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG NantesGoogle Guava & EMF @ GTUG Nantes
Google Guava & EMF @ GTUG Nantes
 
EMFPath
EMFPathEMFPath
EMFPath
 
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
Generating an Android App with Acceleo (Eclipse Summit Europe 2010)
 

Recently uploaded

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 

Recently uploaded (20)

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 

3mf infinity-and-beyond

  • 1. HTTP://RAONINERY.CGSOCIETY.ORG/GALLERY/853975/ (C) RAONI NERY (RAONINERY@GMAIL.COM) 3MF: EMF TO THE INFINITY... AND BEYOND ECON 2012 SPEAKER MARCH 27TH, 2012 MIKAEL BARBERO – OBEO
  • 2.
  • 3. POINTS OF INTEREST Multiple Ecore Wipe out Make EMF a model versions in dependency from better OSGi the same OSGi Java interfaces to citizen container implementation Work inspired from Alex Blewit and Neil Bartlett following posts [1, 2] and bugs [3, 4] (1) http://njbartlett.name/2011/02/07/emf-in-osgi.html (2) http://alblue.bandlem.com/2010/11/using-emf-for-osgi-service-creation.html (3) https://bugs.eclipse.org/bugs/show_bug.cgi?id=329209 (4) https://bugs.eclipse.org/bugs/show_bug.cgi?id=328227
  • 4. PARENTAL ADVISORY KEEP OUT POSSIBILITY OF BACKWARD INCOMPATIBILITY
  • 5. USE CASE 1 ECORE MODEL V1 ECORE MODEL V2 Tool Vendor 1 Tool Vendor 2
  • 6. WAIT, I CAN’T USE TOOLS FROM THESE TWO VENDORS AT THE SAME TIME? I don’t care if they are based on some data model whose different versions can not live together. HTTP://WWW.FLICKR.COM/PHOTOS/KALEXANDERSON/6237846841/
  • 7. HTTP://WWW.FLICKR.COM/PHOTOS/RUSSMORRIS/181933880/ HTTP://WWW.FLICKR.COM/PHOTOS/ITSGREG/2634229136/ HTTP://WWW.FLICKR.COM/PHOTOS/RUSSMORRIS/181933880/ FIRST GUILTY: ECLIPSE EXTENSIONS
  • 8. FIRST GUILTY: EXTENSIONS OSGi is modular and dynamic by nature. Extensions are reducing some of these advantages by forcing plug-in to be singleton. EMF uses extensions to contribute generated and dynamic EPackages.
  • 9. FIRST SOLUTION Mimic GeneratedPackageRegistryReader and DynamicPackageRegistryReader during activation of model plug-ins. Advantages: simple and mostly backward compatible. Drawbacks: plug-in must be activated to contribute its model and some boilerplate code needs to be written.
  • 10. SECOND SOLUTION Use OSGi (declarative) services. Advantages: simple and mostly backward compatible. Once defined as a service, any requiring class can be made a component requiring this service (DI). Drawbacks: needs a ServiceTracker to track services that can come and go anytime EVEN BETTER OSGI R4.3: CREATE A CAPABILITY FOR EPACKAGES
  • 12. SECOND GUILTY: REGISTRY KEYS EPackage instances are identified by namespace URI in the Registry. Best practice (workaround?) today is to include version into namespace URI. It should be a tuple (URI, Version)
  • 13. SOLUTION Need a specific EPackage.Registry implementation that handle versions public interface VersionedRegistry extends EPackage.Registry { EPackage getEPackage(String nsURI, String version); EFactory getEFactory(String nsURI, String version); } Contributed through package_registry_implementation extension point. Version can be valued from a property of service or from version of contributing bundle (or from capability?)
  • 14. USE CASE 2 « If the interfaces can be kept "clean", i.e. without any references to EMF-generated implementation classes or to EMF itself, then the APIs can be used standalone, for example in a memory constrained environment. In this scenario, normal hand-coded implementation classes could be used. » Neil Bartlett https://bugs.eclipse.org/bugs/show_bug.cgi?id=329209
  • 16.
  • 17. aces Interf EMF YOUR MODEL
  • 18. aces Interf EObject EPackage EFactory EMF YOUR MODEL
  • 19. aces Interf EObject EPackage EFactory EMF Foo BarPackage BarFactory YOUR MODEL
  • 20. aces Interf EObject EPackage EFactory EMF Foo BarPackage BarFactory YOUR MODEL Impl EMF YOUR MODEL
  • 21. aces Interf EObject EPackage EFactory EMF Foo BarPackage BarFactory YOUR MODEL Impl EObjectImpl EPackageImpl EFactoryImpl EMF YOUR MODEL
  • 22. aces Interf EObject EPackage EFactory EMF Foo BarPackage BarFactory YOUR MODEL Impl EObjectImpl EPackageImpl EFactoryImpl EMF FooImpl BarPackageImpl BarFactoryImpl YOUR MODEL
  • 23. aces Interf EObject EPackage EFactory EMF Foo BarPackage BarFactory YOUR MODEL Impl EObjectImpl EPackageImpl EFactoryImpl EMF FooImpl BarPackageImpl BarFactoryImpl YOUR MODEL
  • 24. aces Interf EObject EPackage EFactory EMF Foo BarPackage BarFactory YOUR MODEL Impl EObjectImpl EPackageImpl EFactoryImpl EMF FooImpl BarPackageImpl BarFactoryImpl YOUR MODEL
  • 25. aces Interf EObject EPackage EFactory EMF Foo BarPackage BarFactory YOUR MODEL Impl EObjectImpl EPackageImpl EFactoryImpl EMF FooImpl BarPackageImpl BarFactoryImpl YOUR MODEL
  • 26. aces Interf EObject EPackage EFactory EMF Foo BarPackage BarFactory YOUR MODEL Impl EObjectImpl EPackageImpl EFactoryImpl EMF FooImpl BarPackageImpl BarFactoryImpl YOUR MODEL
  • 27. BENEFITS Make generation gap pattern very natural and easy. Change from plain EMF objects to CDO native objects.
  • 28. SOLUTION EObjectImpl FooImpl BarPackageImpl Add a method to (Internal)EObject abstract EPackage ePackage(); Can be done in an extending interface implemented by only newly generated models
  • 29. SOLUTION EObjectImpl FooImpl BarPackageImpl Field in Field in EPropertiesHolder XXXObjectImpl Access to EPackage.Registry.INSTANCE In all cases, it requires to give its defining EPackage to the EObject’s constructor, and then to modify XXXFactoryImpl
  • 30. SOLUTION Some adapter factories need to be modified too (AdapterFactory for models) Need to introduce a new interface extending AdapterFactory public interface ModelAdapterFactory<P extends EPackage, F extends EFactory> extends AdapterFactory { P getEPackage(); F getEFactory(); }
  • 31. SOLUTION public interface ModelAdapterFactory<P extends EPackage, F extends EFactory> extends AdapterFactory { P getEPackage(); F getEFactory(); } XXXItemProviderAdapterFactory is also implementing it XXXItemProviders are taking this interface as argument to their constructor instead of simple AdapterFactory.
  • 32. BIND IT ALL This solution perfectly fits with registration of EPackages as OSGi (declarative) services
  • 33. USE CASE 3 « I want to use EMF models on another OSGi runtime than Equinox »
  • 34. ECLIPSE RICH CLIENT ECLIPSE WORKBENCH PLATFORM HEADLESS IDE RCP EQUINOX STANDALONE ECLIPSE RICH GOOGLE WEB AJAX PLATFORM TOOLKIT JAVA RUNTIME RAP GWT SUPPORTED PLATFORMS RAP AND GWT SINCE EMF 2.6
  • 35. What about other OSGi runtimes? When running in an OSGi container, EMF explicitly requires the following 8 bundles: org.eclipse.core.runtime org.eclipse.equinox.common org.eclipse.core.jobs org.eclipse.equinox.registry org.eclipse.equinox.preferences org.eclipse.core.contenttype org.eclipse.equinox.app org.eclipse.osgi HTTP://NJBARTLETT.NAME/2011/02/07/EMF-IN-OSGI.HTML
  • 36. SOLUTION 1 & 2 (Repackage EMF bundles) Big refactoring to separate Eclipse/Equinox related bits from OSGi related bits Use import-package instead or require-bundle
  • 37. SOLUTION 3 There are some less radical changes that can be done in a backward compatible fashion, but Introduces even more graceful handling of target running platform into the runtime Ex: rewriting EMFPlugin.IS_ECLIPSE_RUNNING in a similar way to IS_RESOURCE_BUNDLE_AVAILABLE in the term of a new EMFPlugin.IS_OSGI_RUNNING.
  • 38. CONCLUSION EMF is a great piece of engineering OSGi is a great piece of engineering too 3MF is an experimentation to make EMF mimic / use some of the best qualities of OSGi (modularity, dynamicity) With these, EMF would reach the infinity... and beyond!
  • 39. CONCLUSION EMF is a great piece of engineering OSGi is a great piece of engineering too 3MF is an experimentation to make EMF mimic / use some of the best qualities of OSGi (modularity, dynamicity) With these, EMF would reach the infinity... and beyond!
  • 40. HTTPS://GITHUB.COM/MBARBERO/EMF/TREE/3MF HTTP://WWW.SLIDESHARE.NET/MIKAELBARBERO/ HTTP://WWW.FLICKR.COM/PHOTOS/B-LOVE/5032931614/ MIKAEL.BARBERO@OBEO.FR HTTP://WWW.OBEO.FR

Editor's Notes

  1. (c) Raoni Nery (raoninery@gmail.com)\nhttp://raoninery.cgsociety.org/gallery/853975/\nexperiment, available on my github, anchors @ the end\n
  2. EMF is cool, it&amp;#x2019;s a great piece of software, and \nfrom a software engineering point of view, it&amp;#x2019;s really smart.\nroom for improvments? DO NOT TALK ABOUT BACKWARD COMPATIBILITY\n
  3. some patterns in EMF are keeping it from being more modular and dynamic\n
  4. Backward compatibility is a day-to-day issue\nSometimes, to reach the next big step, we may break it\nmajor concern\nbenefits outweigh the costs\n
  5. one ecore model, multiple version, say from a standard consortium\nTwo tools vendors implement tools on 2 different versions of this model\nOne end user wants to use those two tools at the same time, in the same Eclipse instance\n
  6. oh crap! he does not care, from its point of view it&amp;#x2019;s implementation details\nif you are one of these tool vendor, you may loose a customer because of your underlying technology. You may be ready to loose a customer because of anything else than the technology used two or more layers deeper than you \n\n
  7. Who are the guilty? First Eclipse extensions mechanism, now built upon OSGi (since 3.0)\n
  8. Extensions force singleton and reduce dynamicity for good technical reasons, but it introduces some very crappy thing (think of restart after installing plug-in, &amp;#xAB;Do you want to restart? Yes, Apply change, Cancel&amp;#xBB; \nEMF use extension because it started in pre-OSGi eclipse, this was the way to do it. It has been kept since then.\nRemove generated_packages and dynamic_packages extensions\n
  9. RegistryReader are classes that are responsible to read plugins&amp;#x2019; extensions from Eclipse extension registry @ startup time of the ecore plugin and then fill the EPackage registry with proper values (with gracefull handling of class loading (and then activation) of contributed plugins).\n\n
  10. declare that MyPackageImpl provides an EPackage service, it can be listened by ServiceTracker\nwhat to do when several MyPackageImpl provides EPackage with same nsURI\n
  11. crap, it&amp;#x2019;s a single strign\n
  12. nsURI MUST identify the EPackage artifact the same as the FQN of a Java package is identifying it.\nVersion has to be handled separatly from the identity.\nThen, if we want to have a single place to get EPckages, the map&amp;#x2019;keys must be a tuple\n
  13. EPackage.Registry.getEPackage(String) could return the highest version for instance\ncontribution through xtension point is valid only if the declaring plugins is installed into the OSGi before Ecore plugin is started, otherwise, it will use its default implementation (EPackageRegistryImpl)\n
  14. \n
  15. \n
  16. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  17. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  18. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  19. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  20. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  21. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  22. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  23. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  24. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  25. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  26. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  27. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  28. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  29. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  30. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  31. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  32. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  33. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  34. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  35. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  36. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  37. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  38. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  39. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  40. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  41. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  42. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  43. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  44. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  45. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  46. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  47. FooImpl refers to BarPackage.Literals static final fields by protected method eStaticClass()\nBarPackage.Literals refers to BarPackage.eINSTANCE\nBarPackage.eINSTANCE refers to BarPackageImpl by static init()\n\n
  48. you can make your own implementation of interfaces, or an extending implementation of the generated one\nprovide your implementation as a service to the interface. Requiring bundles will either filter to have your implementation, or you can remove the generated component to have only yours...\nI have to be honest, I didnot have test it with CDO, but to me, CDOObject interface does not need to be exposed in the very first set of interfaces. The separtion of interface and implementation is necessary to make the CDO legacy mode useless\n
  49. \n
  50. Implementation of this method can be done at by three means\nWhy the package to get the EClass, could&amp;#x2019;n we give the Eclass only ?\n&amp;#xAB;give the package because of some advanced generation pattern with FeatureMap and extended_metadata..&amp;#xBB;\n
  51. \n
  52. \n
  53. we inject epackage into the Epckage.registry and Service Registry through services\nany depending plugin is able to ask from one or the other registry\nno more simple singleton (less easy for newcomers) but much more modularity\n\n
  54. emf has a great runtime, and when you are used to create thing with it, you can&amp;#x2019;t do without it\nwhat if you have to do something with emf and another osgi runtime\n
  55. it runs on several platforms but, some of them are hardwired to the target (but their lack are handled gracefully)\n
  56. \n
  57. poor solution to repackage\n\n
  58. optional requirements and even more conditionnals into the code.\n
  59. - EMF has tons of qualities\n- But not so much modular and dynamic regarding the models it creates\n- spread its usage on several osgi runtime, be used in more and more environment and from more and more people.\nIt would ease also version management of ecore models.\n
  60. \n