This is an interesting discussions. Not really relevant to your Java discussion but... in the C++ runtime we use SDO to load the contents of the scdl files to build the logical model. Initially we kept the SDOs around in the runtime as the model but this still required some extra classes to form the logical model. We changed this so that now SDO is only used to load the scdl. The reason I chose to use SDO is that I didn't have to write parser code for each of the scdl files. Maybe StAX would prove to be as simple but loading the scdl into a form I knew how to deal with was easy.
However the scdl is loaded there will always be a transformation from physical to logical model as the logical model is composed from several sources. I guess we are just using SDO to parse the xml but it works nicely. Maybe there could be some performance issues later. Of course, in the C++ case we don't have your classloader problems or dragging in EMF ;-)
