1 package org.codehaus.plexus.component.manager;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import org.codehaus.plexus.MutablePlexusContainer;
18 import org.codehaus.plexus.component.factory.ComponentInstantiationException;
19 import org.codehaus.plexus.component.repository.ComponentDescriptor;
20 import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
21 import org.codehaus.plexus.lifecycle.LifecycleHandler;
22
23
24
25
26
27
28
29 public class SingletonComponentManager<T> extends AbstractComponentManager<T> {
30 private T singleton;
31
32 public SingletonComponentManager(
33 MutablePlexusContainer container,
34 LifecycleHandler lifecycleHandler,
35 ComponentDescriptor<T> componentDescriptor,
36 String role,
37 String roleHint) {
38 super(container, lifecycleHandler, componentDescriptor, role, roleHint);
39 }
40
41 public synchronized void release(Object component) throws ComponentLifecycleException {
42 if (singleton == component) {
43 dispose();
44 }
45 }
46
47 public synchronized void dispose() throws ComponentLifecycleException {
48 if (singleton != null) {
49 endComponentLifecycle(singleton);
50 singleton = null;
51 }
52 }
53
54 public synchronized T getComponent() throws ComponentInstantiationException, ComponentLifecycleException {
55 if (singleton == null) {
56 singleton = createComponentInstance();
57 }
58
59 incrementConnectionCount();
60
61 return singleton;
62 }
63 }