*/
public void start() throws TuscanyDependencyException {
try {
Embedder embedder = new Embedder();
ClassWorld classWorld = new ClassWorld();
classWorld.newRealm("plexus.core", getClass().getClassLoader());
// Evil hack for Tomcat classloader issue - starts
Field realmsField = ClassWorld.class.getDeclaredField("realms");
realmsField.setAccessible(true);
Map realms = (Map) realmsField.get(classWorld);
DefaultClassRealm realm = (DefaultClassRealm) realms.get("plexus.core");
Class clazz = Class.forName("org.codehaus.classworlds.RealmClassLoader");
Constructor ctr = clazz.getDeclaredConstructor(new Class[] { DefaultClassRealm.class, ClassLoader.class });
ctr.setAccessible(true);
Object realmClassLoader = ctr.newInstance(realm, getClass().getClassLoader());
Field realmClassLoaderField = DefaultClassRealm.class.getDeclaredField("classLoader");
realmClassLoaderField.setAccessible(true);
realmClassLoaderField.set(realm, realmClassLoader);
// Evil hack for Tomcat classloader issue - ends
embedder.start(classWorld);
metadataSource = (ArtifactMetadataSource) embedder.lookup(ArtifactMetadataSource.ROLE);
artifactFactory = (ArtifactFactory) embedder.lookup(ArtifactFactory.ROLE);
artifactResolver = (ArtifactResolver) embedder.lookup(ArtifactResolver.ROLE);
setUpRepositories(embedder);
embedder.stop();
} catch (DuplicateRealmException ex) {
throw new TuscanyDependencyException(ex);
} catch (PlexusContainerException ex) {
throw new TuscanyDependencyException(ex);