001: package org.jboss.portal.core.management;
002:
003: import org.jboss.portal.portlet.Portlet;
004: import org.jboss.portal.portlet.federation.FederatedPortletInvoker;
005: import org.jboss.portal.portlet.federation.FederatingPortletInvoker;
006: import org.jboss.portal.portlet.management.LocalPortletManagement;
007: import org.jboss.portal.portlet.management.PortletContainerManagementInterceptor;
008: import org.jboss.system.ServiceMBeanSupport;
009:
010: import javax.management.ObjectName;
011: import java.util.Collection;
012: import java.util.HashMap;
013: import java.util.Iterator;
014: import java.util.Map;
015:
016: public class PortletDiscoveryService extends ServiceMBeanSupport {
017: public static final String WSRP_JMX_PREFIX = "portal.management:service=Management,type=WSRPPorlet,name=";
018: public static final String LOCAL_JMX_PREFIX = "portal.management:service=Management,type=LocalPortlet,name=";
019:
020: private PortletContainerManagementInterceptor interceptor;
021:
022: private FederatingPortletInvoker federatingPortletInvoker;
023:
024: private Map registeredPortlets = new HashMap();
025:
026: public void start() {
027: try {
028: processPortletDiscovery();
029: } catch (Exception e) {
030: e.printStackTrace();
031: }
032: }
033:
034: public void stop() {
035: Iterator it = registeredPortlets.values().iterator();
036: while (it.hasNext()) {
037: ObjectName objectName = (ObjectName) it.next();
038: try {
039: getServer().unregisterMBean(objectName);
040: } catch (Exception e) {
041: e.printStackTrace();
042: }
043: }
044: if (registeredPortlets.size() != 0) {
045: log
046: .error("Unable to remove all the Portlet management MBeans");
047: }
048: }
049:
050: public FederatingPortletInvoker getFederatingPortletInvoker() {
051: return federatingPortletInvoker;
052: }
053:
054: public void setFederatingPortletInvoker(
055: FederatingPortletInvoker federatingPortletInvoker) {
056: this .federatingPortletInvoker = federatingPortletInvoker;
057: }
058:
059: public void setInterceptor(
060: PortletContainerManagementInterceptor interceptor) {
061: this .interceptor = interceptor;
062: }
063:
064: public void processPortletDiscovery() throws Exception {
065: Collection federatedInvokers = federatingPortletInvoker
066: .getFederatedInvokers();
067: Iterator it = federatedInvokers.iterator();
068: while (it.hasNext()) {
069: FederatedPortletInvoker federatedPortletInvoker = (FederatedPortletInvoker) it
070: .next();
071: if (federatedPortletInvoker.getId().equals("local")) {
072: registerPortlets(federatedPortletInvoker.getPortlets(),
073: false);
074: } else {
075: registerPortlets(federatedPortletInvoker.getPortlets(),
076: true);
077: }
078: }
079: }
080:
081: private void registerPortlets(Collection portlets, boolean wsrp) {
082: Iterator it = portlets.iterator();
083: while (it.hasNext()) {
084: Portlet portlet = (Portlet) it.next();
085: String portletId = portlet.getContext().getId();
086: boolean used = interceptor.getPortletInfo(portletId)
087: .isUsed();
088: if ((!registeredPortlets.containsKey(portletId)) && (used)) {
089: try {
090: ObjectName objectName = createManagementMBean(
091: portlet, wsrp);
092: registeredPortlets.put(portletId, objectName);
093: } catch (Exception e) {
094: e.printStackTrace();
095: }
096: }
097: }
098: }
099:
100: private ObjectName createManagementMBean(Portlet portlet,
101: boolean wsrp) throws Exception {
102: Object management = null;
103: if (wsrp) {
104: management = new WSRPPortletManagement(portlet, interceptor);
105: } else {
106: management = new LocalPortletManagement(portlet,
107: interceptor);
108: }
109: ObjectName objectName = new ObjectName(getMBeanName(portlet,
110: wsrp));
111: getServer().registerMBean(management, objectName);
112: log.debug("Registered Management MBean for: "
113: + portlet.getContext().getId());
114: return objectName;
115: }
116:
117: private String getMBeanName(Portlet portlet, boolean wsrp) {
118: String id = portlet.getContext().getId();
119: if (wsrp) {
120: return WSRP_JMX_PREFIX + id;
121: } else {
122: return LOCAL_JMX_PREFIX + id;
123: }
124: }
125:
126: }
|