This is an automated email from the ASF dual-hosted git repository. remm pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit a14b3d29bd08a7ec157319f7d3171d3aed9743aa Author: remm <r...@apache.org> AuthorDate: Mon Feb 1 15:04:32 2021 +0100 Remove ugly reflection using a generic id The id if available then replaces address-port to name threads and mbeans. --- java/org/apache/catalina/connector/Connector.java | 14 +++++++------- java/org/apache/coyote/AbstractProtocol.java | 12 +++++++++--- java/org/apache/coyote/ProtocolHandler.java | 11 +++++++++++ java/org/apache/tomcat/util/net/AbstractEndpoint.java | 11 +++++++++++ java/org/apache/tomcat/util/net/AprEndpoint.java | 10 ++++++++++ java/org/apache/tomcat/util/net/NioEndpoint.java | 12 ++++++++++++ 6 files changed, 60 insertions(+), 10 deletions(-) diff --git a/java/org/apache/catalina/connector/Connector.java b/java/org/apache/catalina/connector/Connector.java index 28e0019..b8fb103 100644 --- a/java/org/apache/catalina/connector/Connector.java +++ b/java/org/apache/catalina/connector/Connector.java @@ -944,11 +944,11 @@ public class Connector extends LifecycleMBeanBase { StringBuilder sb = new StringBuilder("type="); sb.append(type); - Object path = getProperty("unixDomainSocketPath"); - if (path != null) { + String id = protocolHandler.getId(); + if (id != null) { // Maintain MBean name compatibility, even if not accurate sb.append(",port=0,address="); - sb.append(ObjectName.quote(path.toString())); + sb.append(ObjectName.quote(id)); } else { sb.append(",port="); int port = getPortWithOffset(); @@ -1060,7 +1060,7 @@ public class Connector extends LifecycleMBeanBase { protected void startInternal() throws LifecycleException { // Validate settings before starting - if (getProperty("unixDomainSocketPath") == null && getPortWithOffset() < 0) { + if (protocolHandler.getId() == null && getPortWithOffset() < 0) { throw new LifecycleException(sm.getString( "coyoteConnector.invalidPort", Integer.valueOf(getPortWithOffset()))); } @@ -1126,9 +1126,9 @@ public class Connector extends LifecycleMBeanBase { StringBuilder sb = new StringBuilder("Connector["); sb.append(getProtocol()); sb.append('-'); - Object path = getProperty("unixDomainSocketPath"); - if (path != null) { - sb.append(path.toString()); + Object id = protocolHandler.getId(); + if (id != null) { + sb.append(id.toString()); } else { int port = getPortWithOffset(); if (port > 0) { diff --git a/java/org/apache/coyote/AbstractProtocol.java b/java/org/apache/coyote/AbstractProtocol.java index 227f9c1..a2fca87 100644 --- a/java/org/apache/coyote/AbstractProtocol.java +++ b/java/org/apache/coyote/AbstractProtocol.java @@ -207,6 +207,12 @@ public abstract class AbstractProtocol<S> implements ProtocolHandler, } + @Override + public String getId() { + return endpoint.getId(); + } + + // ---------------------- Properties that are passed through to the EndPoint @Override @@ -370,9 +376,9 @@ public abstract class AbstractProtocol<S> implements ProtocolHandler, private String getNameInternal() { StringBuilder name = new StringBuilder(getNamePrefix()); name.append('-'); - String path = getProperty("unixDomainSocketPath"); - if (path != null) { - name.append(path); + String id = getId(); + if (id != null) { + name.append(id); } else { if (getAddress() != null) { name.append(getAddress().getHostAddress()); diff --git a/java/org/apache/coyote/ProtocolHandler.java b/java/org/apache/coyote/ProtocolHandler.java index 0b884d3..5c7a9f9 100644 --- a/java/org/apache/coyote/ProtocolHandler.java +++ b/java/org/apache/coyote/ProtocolHandler.java @@ -207,6 +207,17 @@ public interface ProtocolHandler { /** + * The default behavior is to identify connectors uniquely with address + * and port. However, certain connectors are not using that and need + * some other identifier, which then can be used as a replacement. + * @return the id + */ + public default String getId() { + return null; + } + + + /** * Create a new ProtocolHandler for the given protocol. * @param protocol the protocol * @param apr if <code>true</code> the APR protcol handler will be used diff --git a/java/org/apache/tomcat/util/net/AbstractEndpoint.java b/java/org/apache/tomcat/util/net/AbstractEndpoint.java index a0f9719..9022213 100644 --- a/java/org/apache/tomcat/util/net/AbstractEndpoint.java +++ b/java/org/apache/tomcat/util/net/AbstractEndpoint.java @@ -836,6 +836,17 @@ public abstract class AbstractEndpoint<S,U> { protected abstract boolean getDeferAccept(); + /** + * The default behavior is to identify connectors uniquely with address + * and port. However, certain connectors are not using that and need + * some other identifier, which then can be used as a replacement. + * @return the id + */ + public String getId() { + return null; + } + + protected final List<String> negotiableProtocols = new ArrayList<>(); public void addNegotiatedProtocol(String negotiableProtocol) { negotiableProtocols.add(negotiableProtocol); diff --git a/java/org/apache/tomcat/util/net/AprEndpoint.java b/java/org/apache/tomcat/util/net/AprEndpoint.java index cb67e07..9878646 100644 --- a/java/org/apache/tomcat/util/net/AprEndpoint.java +++ b/java/org/apache/tomcat/util/net/AprEndpoint.java @@ -274,6 +274,16 @@ public class AprEndpoint extends AbstractEndpoint<Long,Long> implements SNICallB } + @Override + public String getId() { + if (getUnixDomainSocketPath() != null) { + return getUnixDomainSocketPath(); + } else { + return null; + } + } + + // ----------------------------------------------- Public Lifecycle Methods diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java b/java/org/apache/tomcat/util/net/NioEndpoint.java index bb63718..a748819 100644 --- a/java/org/apache/tomcat/util/net/NioEndpoint.java +++ b/java/org/apache/tomcat/util/net/NioEndpoint.java @@ -231,6 +231,18 @@ public class NioEndpoint extends AbstractJsseEndpoint<NioChannel,SocketChannel> } + @Override + public String getId() { + if (getUseInheritedChannel()) { + return "JVMInheritedChannel"; + } else if (getUnixDomainSocketPath() != null) { + return getUnixDomainSocketPath(); + } else { + return null; + } + } + + // ----------------------------------------------- Public Lifecycle Methods /** --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org