Source code: org/mobicents/slee/container/management/jmx/DeploymentMBeanImpl.java
1 /***************************************************
2 * *
3 * Mobicents: The Open Source VoIP Platform *
4 * *
5 * Distributable under LGPL license. *
6 * See terms of license at gnu.org. *
7 * *
8 ***************************************************/
9
10 package org.mobicents.slee.container.management.jmx;
11
12 import java.io.File;
13 import java.net.MalformedURLException;
14 import java.net.URL;
15 import java.util.ArrayList;
16 import java.util.Hashtable;
17 import java.util.Iterator;
18
19 import javax.management.StandardMBean;
20 import javax.slee.ComponentID;
21 import javax.slee.EventTypeID;
22 import javax.slee.InvalidStateException;
23 import javax.slee.SLEEException;
24 import javax.slee.SbbID;
25 import javax.slee.ServiceID;
26 import javax.slee.UnrecognizedComponentException;
27 import javax.slee.management.AlreadyDeployedException;
28 import javax.slee.management.ComponentDescriptor;
29 import javax.slee.management.DependencyException;
30 import javax.slee.management.DeployableUnitDescriptor;
31 import javax.slee.management.DeployableUnitID;
32 import javax.slee.management.DeploymentException;
33 import javax.slee.management.DeploymentMBean;
34 import javax.slee.management.ManagementException;
35 import javax.slee.management.UnrecognizedDeployableUnitException;
36 import javax.slee.profile.ProfileSpecificationID;
37 import javax.slee.resource.ResourceAdaptorID;
38 import javax.slee.resource.ResourceAdaptorTypeID;
39 import javax.transaction.SystemException;
40
41 import org.jboss.logging.Logger;
42 import org.jboss.system.server.ServerConfig;
43 import org.jboss.system.server.ServerConfigLocator;
44 import org.mobicents.slee.container.SleeContainer;
45 import org.mobicents.slee.container.management.DeploymentManager;
46
47 /**
48 * Implementation of the deployment MBean.
49 *
50 * @author M. Ranganathan
51 * @author DERUELLE Jean - bug fix throw UnrecognizedDeployableUnitException on
52 * method getDescriptor(DeplyableUnit) if no descriptor has been found
53 */
54 public class DeploymentMBeanImpl extends StandardMBean implements
55 DeploymentMBean {
56
57 private File tempDUJarsDeploymentRoot;
58
59 private File classPath;
60
61 private Hashtable deployedUnits;
62
63 private static Logger log;
64
65 private String concurrentAccess = null;
66
67 static {
68 log = Logger.getLogger(DeploymentMBeanImpl.class);
69 }
70
71 public DeploymentMBeanImpl() throws Exception {
72 super(DeploymentMBean.class);
73 this.deployedUnits = new Hashtable();
74 this.classPath = new File(SleeContainer.DEPLOY_PATH);
75
76 this.tempDUJarsDeploymentRoot = createTempDUJarsDeploymentRoot();
77 }
78
79 /**
80 *
81 * Sets the root directory that will be used for unpacking DU jars.
82 *
83 * @TODO: make sure to remove this directory on undeploy
84 *
85 */
86 private File createTempDUJarsDeploymentRoot() {
87 ServerConfig config = ServerConfigLocator.locate();
88 File basedir = config.getServerTempDir();
89
90 // ${jboss.server.home.dir}/tmp/deploy
91 File tempDeploymentRootDir = new File(basedir, "deploy");
92
93 if (!tempDeploymentRootDir.exists()) {
94 boolean dirCreated = tempDeploymentRootDir.mkdirs();
95 if (!dirCreated)
96 throw new SLEEException(
97 "failed to create temp deployment dir: "
98 + tempDeploymentRootDir);
99 }
100 return tempDeploymentRootDir;
101 }
102
103 /*
104 * (non-Javadoc)
105 *
106 * @see javax.slee.management.DeploymentMBean#install(java.lang.String)
107 */
108 public DeployableUnitID install(String url) throws NullPointerException,
109 MalformedURLException, AlreadyDeployedException,
110 DeploymentException, ManagementException {
111 if (concurrentAccess != null) {
112 throw new RuntimeException(
113 "CONCURRENT ACCESS TO DEPLOYMENT MBEAN! Ongoing call to "
114 + concurrentAccess);
115 }
116 concurrentAccess = "install(" + url + ")";
117 DeployableUnitID did = null;
118 try {
119 DeploymentManager deploymentManager = new DeploymentManager();
120 log.info("Deploying " + url);
121 URL deployUrl = new URL(url);
122 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
123 did = deploymentManager.deployUnit(deployUrl,
124 this.tempDUJarsDeploymentRoot, this.classPath,
125 serviceContainer);
126 // Put it in our table for later lookup.
127 this.deployedUnits.put(url, did);
128 } finally {
129 concurrentAccess = null;
130 }
131 return did;
132 }
133
134 /*
135 * (non-Javadoc)
136 *
137 * @see javax.slee.management.DeploymentMBean#uninstall(javax.slee.management.DeployableUnitID)
138 */
139 public void uninstall(DeployableUnitID deployableUnitID)
140 throws NullPointerException, UnrecognizedDeployableUnitException,
141 DependencyException, InvalidStateException, ManagementException {
142 if (concurrentAccess != null) {
143 throw new RuntimeException(
144 "CONCURRENT ACCESS TO DEPLOYMENT MBEAN! Ongoing call to "
145 + concurrentAccess);
146 }
147 concurrentAccess = "uninstall(" + deployableUnitID + ")";
148 try {
149
150 if (this.isInstalled(deployableUnitID)) {
151 try {
152 SleeContainer serviceContainer = SleeContainer
153 .lookupFromJndi();
154 serviceContainer.removeDeployableUnit(deployableUnitID);
155 Iterator it = this.deployedUnits.values().iterator();
156 while (it.hasNext()) {
157 // clean up the url table.
158 if (it.next().equals(deployableUnitID))
159 it.remove();
160 }
161 log.debug("uninstalled " + deployableUnitID);
162 } catch (InvalidStateException ex) {
163 throw ex;
164 } catch (DependencyException ex) {
165 throw ex;
166 } catch (Exception ex) {
167 throw new ManagementException(
168 "Exception removing deployable Unit ", ex);
169 }
170 } else
171 throw new UnrecognizedDeployableUnitException(
172 "deployable unit " + deployableUnitID);
173 } finally {
174 concurrentAccess = null;
175 }
176 }
177
178 /*
179 * (non-Javadoc)
180 *
181 * @see javax.slee.management.DeploymentMBean#getDeployableUnit(java.lang.String)
182 */
183 public DeployableUnitID getDeployableUnit(String deploymentUrl)
184 throws NullPointerException, UnrecognizedDeployableUnitException,
185 ManagementException {
186 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
187 return serviceContainer.getDeployableUnitIDFromUrl(deploymentUrl);
188 }
189
190 /*
191 * (non-Javadoc)
192 *
193 * @see javax.slee.management.DeploymentMBean#getDeployableUnits()
194 */
195 public DeployableUnitID[] getDeployableUnits() throws ManagementException {
196 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
197 return serviceContainer.getDeployableUnits();
198 }
199
200 /*
201 * (non-Javadoc)
202 *
203 * @see javax.slee.management.DeploymentMBean#getSbbs()
204 */
205 public SbbID[] getSbbs() throws ManagementException {
206 try {
207 log.info("getSbbs()");
208 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
209 return serviceContainer.getSbbIDs();
210 } catch (Exception ex) {
211 throw new ManagementException(ex.getMessage());
212 }
213
214 }
215
216 /*
217 * (non-Javadoc)
218 *
219 * @see javax.slee.management.DeploymentMBean#getEventTypes()
220 */
221 public EventTypeID[] getEventTypes() throws ManagementException {
222 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
223 return serviceContainer.getEventTypes();
224 }
225
226 /*
227 * (non-Javadoc)
228 *
229 * @see javax.slee.management.DeploymentMBean#getProfileSpecifications()
230 */
231 public ProfileSpecificationID[] getProfileSpecifications()
232 throws ManagementException {
233 log.info("getProfileSpecifications");
234 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
235 return serviceContainer.getProfileSpecificationIDs();
236 }
237
238 /*
239 * (non-Javadoc)
240 *
241 * @see javax.slee.management.DeploymentMBean#getServices()
242 */
243 public ServiceID[] getServices() throws ManagementException {
244 log.info("getServices()");
245 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
246 return serviceContainer.getServiceIDs();
247 }
248
249 /*
250 * (non-Javadoc)
251 *
252 * @see javax.slee.management.DeploymentMBean#getResourceAdaptorTypes()
253 */
254 public ResourceAdaptorTypeID[] getResourceAdaptorTypes()
255 throws ManagementException {
256 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
257 return serviceContainer.getResourceAdaptorTypeIDs();
258 }
259
260 /*
261 * (non-Javadoc)
262 *
263 * @see javax.slee.management.DeploymentMBean#getResourceAdaptors()
264 */
265 public ResourceAdaptorID[] getResourceAdaptors() throws ManagementException {
266 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
267 return serviceContainer.getResourceAdaptorIDs();
268 }
269
270 /*
271 * (non-Javadoc)
272 *
273 * @see javax.slee.management.DeploymentMBean#getReferringComponents(javax.slee.ComponentID)
274 */
275 public ComponentID[] getReferringComponents(ComponentID componentId)
276 throws NullPointerException, UnrecognizedComponentException,
277 ManagementException {
278 if (componentId == null)
279 throw new NullPointerException(
280 "ComponentID should not be null. See SLEE 1.0 TCK test 3776.");
281 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
282 return serviceContainer.getReferringComponents(componentId);
283 }
284
285 /*
286 * (non-Javadoc)
287 *
288 * @see javax.slee.management.DeploymentMBean#getDescriptor(javax.slee.management.DeployableUnitID)
289 */
290 public DeployableUnitDescriptor getDescriptor(
291 DeployableUnitID deployableUnitID) throws NullPointerException,
292 UnrecognizedDeployableUnitException, ManagementException {
293 if (concurrentAccess != null) {
294 throw new RuntimeException(
295 "CONCURRENT ACCESS TO DEPLOYMENT MBEAN! Ongoing call to "
296 + concurrentAccess);
297 }
298 concurrentAccess = "getDescriptor(" + deployableUnitID + ")";
299 DeployableUnitDescriptor dud = null;
300 try {
301
302 log.info("getDescriptor " + deployableUnitID);
303 if (deployableUnitID == null)
304 throw new NullPointerException(
305 "deployableUnitID should not be null");
306 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
307 dud = serviceContainer
308 .getDeployableUnitDescriptor(deployableUnitID);
309 if (dud == null)
310 throw new UnrecognizedDeployableUnitException(
311 "unrecognized deployable unit " + deployableUnitID);
312 /*
313 * ComponentID[] components = dud.getComponents(); for ( int i = 0;
314 * i < components.length; i++) { log.info("component " +
315 * components[i]); }
316 */
317 } finally {
318 concurrentAccess = null;
319 }
320 return dud;
321 }
322
323 /*
324 * (non-Javadoc)
325 *
326 * @see javax.slee.management.DeploymentMBean#getDescriptors(javax.slee.management.DeployableUnitID[])
327 */
328 public DeployableUnitDescriptor[] getDescriptors(DeployableUnitID[] duIds)
329 throws NullPointerException, ManagementException {
330 if (duIds == null)
331 throw new NullPointerException("Null arg!");
332 try {
333
334 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
335 return serviceContainer.getDeployableUnitDescriptors();
336 } catch (SystemException ex) {
337 throw new ManagementException("Error in tx manager ");
338 }
339
340 }
341
342 /*
343 * (non-Javadoc)
344 *
345 * @see javax.slee.management.DeploymentMBean#getDescriptor(javax.slee.ComponentID)
346 */
347 public ComponentDescriptor getDescriptor(ComponentID componentID)
348 throws NullPointerException, UnrecognizedComponentException,
349 ManagementException {
350 if (componentID == null)
351 throw new NullPointerException("null component ID");
352
353 log.info("componentID " + componentID);
354 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
355 try {
356 ComponentDescriptor cd = serviceContainer
357 .getComponentDescriptor(componentID);
358 if (cd == null)
359 throw new UnrecognizedComponentException(
360 "unrecognized component " + componentID);
361 else
362 return cd;
363 } catch (IllegalArgumentException ex) {
364 throw new ManagementException(" Illegal Component Type "
365 + componentID);
366 }
367
368 }
369
370 /*
371 * (non-Javadoc)
372 *
373 * @see javax.slee.management.DeploymentMBean#getDescriptors(javax.slee.ComponentID[])
374 */
375 public ComponentDescriptor[] getDescriptors(ComponentID[] componentIds)
376 throws NullPointerException, ManagementException {
377 if (componentIds == null)
378 throw new NullPointerException("null component ids");
379 SleeContainer sleeContainer = SleeContainer.lookupFromJndi();
380 return sleeContainer.getDescriptors(componentIds);
381
382
383 }
384
385 /*
386 * (non-Javadoc)
387 *
388 * @see javax.slee.management.DeploymentMBean#isInstalled(javax.slee.management.DeployableUnitID)
389 */
390 public boolean isInstalled(DeployableUnitID deployableUnitID)
391 throws NullPointerException, ManagementException {
392 if (deployableUnitID == null)
393 throw new NullPointerException("null component ids");
394
395 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
396 return serviceContainer.isInstalled(deployableUnitID);
397
398 }
399
400 /*
401 * (non-Javadoc)
402 *
403 * @see javax.slee.management.DeploymentMBean#isInstalled(javax.slee.ComponentID)
404 */
405 public boolean isInstalled(ComponentID componentId)
406 throws NullPointerException, ManagementException {
407 if (componentId == null)
408 throw new NullPointerException(
409 "deployableUnitID should not be null");
410
411 SleeContainer serviceContainer = SleeContainer.lookupFromJndi();
412 return serviceContainer.isInstalled(componentId);
413 }
414
415 }
416