Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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