1 package org.codehaus.plexus.component.registry;
2
3 import junit.framework.TestCase;
4 import org.codehaus.plexus.DefaultPlexusContainer;
5 import org.codehaus.plexus.PlexusContainer;
6 import org.codehaus.plexus.component.repository.ComponentDescriptor;
7 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
8
9 public class DefaultComponentRegistryTest extends TestCase {
10
11 public void testConcurrentDisposeAndLookup() throws Exception {
12 final PlexusContainer plexus = new DefaultPlexusContainer();
13
14 ComponentDescriptor<TestSynchronizedComponent> descriptor = new ComponentDescriptor<TestSynchronizedComponent>(
15 TestSynchronizedComponent.class, plexus.getContainerRealm());
16 descriptor.setRole(TestSynchronizedComponent.class.getCanonicalName());
17 descriptor.setImplementation(TestSynchronizedComponent.class.getCanonicalName());
18 plexus.addComponentDescriptor(descriptor);
19
20 TestSynchronizedComponent component = plexus.lookup(TestSynchronizedComponent.class);
21
22 class LookupThread extends Thread {
23 private TestSynchronizedComponent component;
24
25 @Override
26 public synchronized void run() {
27 try {
28 this.component = plexus.lookup(TestSynchronizedComponent.class);
29 } catch (ComponentLookupException e) {
30
31 }
32 }
33
34 public synchronized TestSynchronizedComponent getComponent() {
35 return component;
36 }
37 }
38
39 LookupThread lookupThread = new LookupThread();
40
41 component.setLookupThread(lookupThread);
42
43 plexus.dispose();
44
45 assertNull(lookupThread.getComponent());
46 }
47 }