protected void doRegisterLocator(ServerLocatorDescriptor descriptor) { MBeanServer server = descriptor.isExisting ? doFindServer(descriptor.domainName) : doCreateServer(descriptor); servers.put(descriptor.domainName, server); if (descriptor.isDefault) { defaultServer = server; } }
@Override public void registerContribution(Object contribution, String extensionPoint, ComponentInstance contributor) { if (extensionPoint.equals(LOCATORS_EXT_KEY)) { doRegisterLocator((ServerLocatorDescriptor) contribution); } }
@Override public void unregisterContribution(Object contribution, String extensionPoint, ComponentInstance contributor) { if (extensionPoint.equals(LOCATORS_EXT_KEY)) { doUnregisterLocator((ServerLocatorDescriptor) contribution); } }
protected void doBind(Resource resource) { if (!started) { return; } if (resource.mbean != null) { throw new IllegalStateException(resource + " is already bound"); } MBeanServer server = serverLocatorService.lookupServer(resource.managementName.getDomain()); try { resource.mbean = doBind(server, resource.managementName, resource.instance, resource.clazz); if (ResourcePublisherService.log.isDebugEnabled()) { ResourcePublisherService.log.debug("bound " + resource); } } catch (JMException | InvalidTargetObjectTypeException e) { ResourcePublisherService.log.error("Cannot bind " + resource, e); } }
@Override public MBeanServer lookupServer(String domainName) { return doFindServer(domainName); }
protected MBeanServer doCreateServer(final ServerLocatorDescriptor descriptor) { MBeanServer server = MBeanServerFactory.createMBeanServer(); JMXServiceURL url = doFormatServerURL(descriptor); if (!descriptor.remote) { return server; } final RMIConnectorServer connector; try { connector = new RMIConnectorServer(url, null, server); } catch (IOException e) { throw new ManagementRuntimeException("Cannot start connector for " + descriptor.domainName, e); } try { connector.start(); } catch (IOException e) { try { LocateRegistry.createRegistry(descriptor.rmiPort); } catch (RemoteException e2) { throw new ManagementRuntimeException("Cannot start RMI connector for " + descriptor.domainName, e); } try { connector.start(); } catch (IOException e2) { throw new ManagementRuntimeException("Cannot start RMI connector for " + descriptor.domainName, e2); } } assert connector.isActive(); log.info("Started a mbean server : " + url); return server; }
protected void doUnbind(Resource resource) { if (resource.mbean == null) { throw new IllegalStateException(resource.managementName + " is not bound"); } try { MBeanServer server = serverLocatorService.lookupServer(resource.managementName); server.unregisterMBean(resource.managementName); } catch (JMException e) { throw ManagementRuntimeException.wrap("Cannot unbind " + resource, e); } finally { resource.mbean = null; if (ResourcePublisherService.log.isDebugEnabled()) { ResourcePublisherService.log.debug("unbound " + resource); } } }
public void registerLocator(String domain, boolean isDefault) { doRegisterLocator(new ServerLocatorDescriptor(domain, isDefault)); }