ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/catalina/tribes/jmx/JmxRegistry.java

Path
ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/catalina/tribes/jmx/JmxRegistry.java
Status
scanned
Type
file
Name
JmxRegistry.java
Extension
.java
Programming language
Java
Mime type
text/x-c
File type
C source, ASCII text, with CRLF line terminators
Tag

      
    
Rootfs path

      
    
Size
5935 (5.8 KB)
MD5
7e2874b2e9db02b61d8a7194d1eae0eb
SHA1
c6e227d3510bffb46afc3a7f5c98c4bcc538a9b7
SHA256
95fc260b76b8a0b7de15472c35251e3d203e1c3bbbe9484906669788d4d846d0
SHA512

      
    
SHA1_git
ab99a5b6358a4cc220d27c94ea3fe6d8cc1d68f6
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
JmxRegistry.java | 5.8 KB |

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.catalina.tribes.jmx; import java.lang.management.ManagementFactory; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import javax.management.InstanceNotFoundException; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import org.apache.catalina.tribes.Channel; import org.apache.catalina.tribes.JmxChannel; import org.apache.catalina.tribes.util.StringManager; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; public class JmxRegistry { private static final Log log = LogFactory.getLog(JmxRegistry.class); protected static final StringManager sm = StringManager.getManager(JmxRegistry.class); private static final ConcurrentHashMap<String,JmxRegistry> registryCache = new ConcurrentHashMap<>(); private final MBeanServer mbserver = ManagementFactory.getPlatformMBeanServer(); private ObjectName baseOname = null; private JmxRegistry() { } public static JmxRegistry getRegistry(Channel channel) { if (channel == null || channel.getName() == null) { return null; } JmxRegistry registry = registryCache.get(channel.getName()); if (registry != null) { return registry; } if (!(channel instanceof JmxChannel jmxChannel)) { return null; } if (!jmxChannel.isJmxEnabled()) { return null; } ObjectName baseOn = createBaseObjectName(jmxChannel.getJmxDomain(), jmxChannel.getJmxPrefix(), channel.getName()); if (baseOn == null) { return null; } // create registry registry = new JmxRegistry(); registry.baseOname = baseOn; // It doesn't matter if existing object gets over-written. This object // holds minimal state and that state will be the same for all objects // created for the same channel. registryCache.put(channel.getName(), registry); return registry; } public static void removeRegistry(Channel channel, boolean clear) { JmxRegistry registry = registryCache.get(channel.getName()); if (registry == null) { return; } if (clear) { registry.clearMBeans(); } registryCache.remove(channel.getName()); } private static ObjectName createBaseObjectName(String domain, String prefix, String name) { if (domain == null) { log.warn(sm.getString("jmxRegistry.no.domain")); return null; } ObjectName on = null; StringBuilder sb = new StringBuilder(domain); sb.append(':'); sb.append(prefix); sb.append("type=Channel,channel="); sb.append(name); try { on = new ObjectName(sb.toString()); } catch (MalformedObjectNameException e) { log.error(sm.getString("jmxRegistry.objectName.failed", sb.toString()), e); } return on; } public ObjectName registerJmx(String keyprop, Object bean) { if (mbserver == null) { return null; } String oNameStr = baseOname.toString() + keyprop; ObjectName oName; try { oName = new ObjectName(oNameStr); if (mbserver.isRegistered(oName)) { mbserver.unregisterMBean(oName); } mbserver.registerMBean(bean, oName); } catch (NotCompliantMBeanException e) { log.warn(sm.getString("jmxRegistry.registerJmx.notCompliant", bean), e); return null; } catch (MalformedObjectNameException e) { log.error(sm.getString("jmxRegistry.objectName.failed", oNameStr), e); return null; } catch (Exception e) { log.error(sm.getString("jmxRegistry.registerJmx.failed", bean, oNameStr), e); return null; } return oName; } public void unregisterJmx(ObjectName oname) { if (oname == null) { return; } try { mbserver.unregisterMBean(oname); } catch (InstanceNotFoundException e) { log.warn(sm.getString("jmxRegistry.unregisterJmx.notFound", oname), e); } catch (Exception e) { log.warn(sm.getString("jmxRegistry.unregisterJmx.failed", oname), e); } } private void clearMBeans() { String query = baseOname.toString() + ",*"; try { ObjectName name = new ObjectName(query); Set<ObjectName> onames = mbserver.queryNames(name, null); for (ObjectName objectName : onames) { unregisterJmx(objectName); } } catch (MalformedObjectNameException e) { log.error(sm.getString("jmxRegistry.objectName.failed", query), e); } } }
Detected license expression
apache-2.0
Detected license expression (SPDX)
Apache-2.0
Percentage of license text
20.88
Copyrights

      
    
Holders

      
    
Authors

      
    
License detections License expression License expression SPDX
apache_2_0-4bde3f57-78aa-4201-96bf-531cba09e7de apache-2.0 Apache-2.0
URL Start line End line
http://www.apache.org/licenses/LICENSE-2.0 9 9