1 /***
2 * JFoxSOAF, Service-Oriented Application Framework
3 *
4 * Copyright (C) www.huihoo.org
5 *
6 * Distributable under GNU LGPL For more information, please visit:
7 * http://www.huihoo.org/jfox/jfoxsoaf
8 */
9
10 package org.huihoo.jfox.soaf.container;
11
12 import javax.management.MBeanServer;
13 import javax.management.MBeanServerFactory;
14 import javax.management.MalformedObjectNameException;
15 import javax.management.ObjectName;
16
17 /***
18 * <p>
19 * The manageable service container is a wrapper container on the top of
20 * ServiceContainer and MBeanServer. It's a manageable Inversion of Control
21 * (IoC) container which service can be managed by JMX.
22 * </p>
23 *
24 * @author <a href="mailto:founder_chen@yahoo.com.cn">Peter Cheng </a>
25 * @version $Revision: 1.2 $ $Date: 2004/10/18 14:22:49 $
26 * @version Revision: 1.0
27 */
28
29 public class ManageableServiceContainer {
30
31 private static ManageableServiceContainer manageableServiceContainer;
32
33 private ServiceContainer serviceContainer = ServiceContainer.getInstance();
34
35 private MBeanServer mBeanServer = MBeanServerFactory
36 .createMBeanServer("jfoxsoafmx");
37
38 public static ManageableServiceContainer getInstance() {
39 if (manageableServiceContainer == null) {
40 manageableServiceContainer = new ManageableServiceContainer();
41 }
42 return manageableServiceContainer;
43 }
44
45 /***
46 * Regist managable service.
47 *
48 * @param serviceInstance
49 * @param serviceEntry
50 * @throws Throwable
51 */
52 public void registManagebleService(Object serviceInstance,
53 ServiceEntry serviceEntry) throws Throwable {
54 if (isIDEmpty(serviceEntry)) {
55 mBeanServer
56 .registerMBean(serviceInstance, objectName(serviceEntry));
57 serviceContainer.registerServiceInstance(serviceInstance);
58 } else {
59 registManagebleService(serviceEntry.getId(), serviceInstance,
60 serviceEntry);
61 }
62 }
63
64 /***
65 * Regist manageable service with service id.
66 *
67 * @param serviceKey
68 * @param serviceInstance
69 * @param serviceEntry
70 * @throws Throwable
71 */
72 private void registManagebleService(Object serviceKey,
73 Object serviceInstance, ServiceEntry serviceEntry) throws Throwable {
74 mBeanServer.registerMBean(serviceInstance, objectName(serviceEntry));
75 serviceContainer.registerServiceInstance(serviceKey, serviceInstance);
76 }
77
78 /***
79 * Get an MBeanServer instance.
80 *
81 * @return MBeanServer
82 */
83 public MBeanServer getMBeanServer() {
84 return this.mBeanServer;
85 }
86
87 /***
88 * Convert object string to ObjectName.
89 *
90 * @param serviceEntry
91 * @return
92 * @throws MalformedObjectNameException
93 */
94 public ObjectName objectName(ServiceEntry serviceEntry)
95 throws MalformedObjectNameException {
96 String objectStr = "";
97 if (!isIDEmpty(serviceEntry)) {
98 objectStr = mBeanServer.getDefaultDomain() + ":type="
99 + serviceEntry.getId();
100 return new ObjectName(objectStr);
101 } else {
102 objectStr = mBeanServer.getDefaultDomain() + ":type="
103 + serviceEntry.getImplementation();
104 return new ObjectName(objectStr);
105 }
106 }
107
108 /***
109 * Is service id empty?
110 *
111 * @param serviceEntry
112 * @return boolean
113 */
114 public boolean isIDEmpty(ServiceEntry serviceEntry) {
115 if (serviceEntry.getId() == null || serviceEntry.getId() == "") {
116 return true;
117 } else {
118 return false;
119 }
120 }
121
122 }