KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > ejb3 > JmxKernelAbstraction


1 /*
2 * JBoss, Home of Professional Open Source
3 * Copyright 2005, JBoss Inc., and individual contributors as indicated
4 * by the @authors tag. See the copyright.txt in the distribution for a
5 * full listing of individual contributors.
6 *
7 * This is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as
9 * published by the Free Software Foundation; either version 2.1 of
10 * the License, or (at your option) any later version.
11 *
12 * This software is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this software; if not, write to the Free
19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21 */

22 package org.jboss.ejb3;
23
24 import javax.management.DynamicMBean JavaDoc;
25 import javax.management.MBeanServer JavaDoc;
26 import javax.management.ObjectName JavaDoc;
27 import org.jboss.deployment.DeploymentInfo;
28 import org.jboss.mx.util.MBeanProxyExt;
29 import org.jboss.system.ServiceControllerMBean;
30 import org.jboss.system.ServiceMBeanSupport;
31 import org.jboss.logging.Logger;
32
33 /**
34  * Comment
35  *
36  * @author <a HREF="mailto:bill@jboss.org">Bill Burke</a>
37  * @version $Revision: 57006 $
38  */

39 public class JmxKernelAbstraction
40    extends JmxClientKernelAbstraction
41    implements KernelAbstraction
42 {
43    private static final Logger log = Logger.getLogger(JmxKernelAbstraction.class);
44
45    private MBeanServer JavaDoc server;
46    private ServiceControllerMBean serviceController;
47    private DeploymentInfo di;
48
49    public JmxKernelAbstraction(DeploymentInfo di)
50    {
51       super(di.getServer());
52       this.server = di.getServer();
53       serviceController = (ServiceControllerMBean) MBeanProxyExt.create(ServiceControllerMBean.class, ServiceControllerMBean.OBJECT_NAME,
54             di.getServer());
55       this.di = di;
56    }
57    
58    public JmxKernelAbstraction(MBeanServer JavaDoc server)
59    {
60       super(server);
61       serviceController = (ServiceControllerMBean) MBeanProxyExt.create(ServiceControllerMBean.class, ServiceControllerMBean.OBJECT_NAME,
62                                                                         server);
63    }
64    
65    public void setMbeanServer(MBeanServer JavaDoc server)
66    {
67       this.server = server;
68    }
69
70
71    public void install(String JavaDoc name, DependencyPolicy dependencies, Object JavaDoc service)
72    {
73       if (!(service instanceof ServiceMBeanSupport) && !(service instanceof DynamicMBean JavaDoc))
74       {
75          log.debug("creating wrapper delegate for: " + service.getClass().getName());
76          // create mbean delegate.
77
service = new ServiceDelegateWrapper(service);
78       }
79       JmxDependencyPolicy policy = (JmxDependencyPolicy)dependencies;
80       try
81       {
82          log.info("installing MBean: " + name + " with dependencies:");
83          for (Object JavaDoc obj : policy.getDependencies())
84          {
85             log.info("\t" + obj);
86          }
87          ObjectName JavaDoc on = new ObjectName JavaDoc(name);
88          
89          if(policy.getDependencies().contains(on))
90             throw new IllegalStateException JavaDoc("circular dependencies detected");
91          
92          server.registerMBean(service, on);
93          addParentDependency(on);
94
95          serviceController.create(on, policy.getDependencies());
96          serviceController.start(on);
97       }
98       catch (Exception JavaDoc e)
99       {
100          throw new RuntimeException JavaDoc(e);
101       }
102    }
103
104    private void addParentDependency(ObjectName JavaDoc on)
105    {
106       //di.mbeans.add(on);
107

108       // this is done so that we can get dependency error messages.
109
// and this is the only reason this is done.
110
// if you don't put add to the top DI mbean list, then no dependency
111
// error message is printed out if there is one.
112
DeploymentInfo parent = di;
113       while (parent.parent != null)
114       {
115          parent = parent.parent;
116       }
117       parent.mbeans.add(on);
118
119    }
120    
121    private void removeParentDependency(ObjectName JavaDoc on)
122    {
123       DeploymentInfo parent = di;
124       while (parent.parent != null)
125       {
126          parent = parent.parent;
127       }
128       parent.mbeans.remove(on);
129    }
130
131    public void installMBean(ObjectName JavaDoc on, DependencyPolicy dependencies, Object JavaDoc service)
132    {
133       JmxDependencyPolicy policy = (JmxDependencyPolicy)dependencies;
134       try
135       {
136          server.registerMBean(service, on);
137          addParentDependency(on);
138          serviceController.create(on, policy.getDependencies());
139          serviceController.start(on);
140       }
141       catch (Exception JavaDoc e)
142       {
143          throw new RuntimeException JavaDoc(e);
144       }
145    }
146
147    public void uninstallMBean(ObjectName JavaDoc on)
148    {
149       try
150       {
151          serviceController.stop(on);
152          serviceController.destroy(on);
153          serviceController.remove(on);
154          removeParentDependency(on);
155          if(server.isRegistered(on))
156             server.unregisterMBean(on);
157          else
158             log.warn(on + " is not registered");
159       }
160       catch (Exception JavaDoc e)
161       {
162          throw new RuntimeException JavaDoc(e);
163       }
164    }
165
166    public void uninstall(String JavaDoc name)
167    {
168       ObjectName JavaDoc on;
169       try
170       {
171          on = new ObjectName JavaDoc(name);
172       }
173       catch (Exception JavaDoc e)
174       {
175          throw new RuntimeException JavaDoc(e);
176       }
177       
178       uninstallMBean(on);
179    }
180 }
181
Popular Tags