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