1
2
3
4
5
6
7
8
9
10
11 package org.mule.component;
12
13 import org.mule.api.MuleException;
14 import org.mule.api.component.LifecycleAdapter;
15 import org.mule.api.lifecycle.InitialisationCallback;
16 import org.mule.api.lifecycle.InitialisationException;
17 import org.mule.api.model.EntryPointResolverSet;
18 import org.mule.api.object.ObjectFactory;
19 import org.mule.api.routing.NestedRouterCollection;
20 import org.mule.config.PoolingProfile;
21 import org.mule.util.pool.DefaultLifecycleEnabledObjectPool;
22 import org.mule.util.pool.LifecyleEnabledObjectPool;
23
24
25
26
27 public class PooledJavaComponent extends AbstractJavaComponent
28 {
29
30 protected PoolingProfile poolingProfile;
31 protected LifecyleEnabledObjectPool lifecycleAdapterPool;
32
33 public PooledJavaComponent()
34 {
35 super();
36 }
37
38 public PooledJavaComponent(ObjectFactory objectFactory)
39 {
40 this(objectFactory, null);
41 }
42
43 public PooledJavaComponent(ObjectFactory objectFactory, PoolingProfile poolingProfile)
44 {
45 super(objectFactory);
46 this.poolingProfile = poolingProfile;
47 }
48
49 public PooledJavaComponent(ObjectFactory objectFactory,
50 PoolingProfile poolingProfile,
51 EntryPointResolverSet entryPointResolverSet,
52 NestedRouterCollection nestedRouterCollection)
53 {
54 super(objectFactory, entryPointResolverSet, nestedRouterCollection);
55 this.poolingProfile = poolingProfile;
56 }
57
58 protected LifecycleAdapter borrowComponentLifecycleAdaptor() throws Exception
59 {
60 return (LifecycleAdapter) lifecycleAdapterPool.borrowObject();
61 }
62
63 protected void returnComponentLifecycleAdaptor(LifecycleAdapter lifecycleAdapter)
64 {
65 lifecycleAdapterPool.returnObject(lifecycleAdapter);
66 }
67
68 protected void doStart() throws MuleException
69 {
70 super.doStart();
71
72
73 lifecycleAdapterPool = new DefaultLifecycleEnabledObjectPool(new LifeCycleAdaptorFactory(), poolingProfile);
74 lifecycleAdapterPool.initialise();
75 lifecycleAdapterPool.start();
76 }
77
78 protected void doStop() throws MuleException
79 {
80 super.doStop();
81 if (lifecycleAdapterPool != null)
82 {
83 lifecycleAdapterPool.stop();
84 lifecycleAdapterPool.close();
85 lifecycleAdapterPool = null;
86 }
87 }
88
89 public void setPoolingProfile(PoolingProfile poolingProfile)
90 {
91
92
93
94 this.poolingProfile = poolingProfile;
95 }
96
97 public PoolingProfile getPoolingProfile()
98 {
99 return poolingProfile;
100 }
101
102
103
104
105
106
107
108
109
110
111 protected class LifeCycleAdaptorFactory implements ObjectFactory
112 {
113
114 public Object getInstance() throws Exception
115 {
116 return createLifeCycleAdaptor();
117 }
118
119 public Class getObjectClass()
120 {
121 return LifecycleAdapter.class;
122 }
123
124 public void initialise() throws InitialisationException
125 {
126 objectFactory.initialise();
127 }
128
129 public void dispose()
130 {
131 objectFactory.dispose();
132 }
133
134 public void addObjectInitialisationCallback(InitialisationCallback callback)
135 {
136 objectFactory.addObjectInitialisationCallback(callback);
137 }
138
139 public boolean isSingleton()
140 {
141 return false;
142 }
143 }
144
145 }