import java.net.InetAddress;
import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicLong;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
/**
+ * Obtain the name of the protocol, (Http, Ajp, etc.). Used with JMX.
+ */
+ protected abstract String getProtocolName();
+
+
+ /**
* Obtain the handler associated with the underlying Endpoint
*/
protected abstract Handler getHandler();
if (rgOname != null)
Registry.getRegistry(null, null).unregisterComponent(rgOname);
}
+
+
+ // ------------------------------------------- Connection handler base class
+
+ protected abstract static class AbstractConnectionHandler
+ implements AbstractEndpoint.Handler {
+
+ protected RequestGroupInfo global = new RequestGroupInfo();
+ protected AtomicLong registerCount = new AtomicLong(0);
+
+ protected abstract AbstractProtocol getProtocol();
+ protected abstract Log getLog();
+
+
+ @Override
+ public Object getGlobal() {
+ return global;
+ }
+
+
+ protected void register(AbstractProcessor processor) {
+ if (getProtocol().getDomain() != null) {
+ synchronized (this) {
+ try {
+ long count = registerCount.incrementAndGet();
+ RequestInfo rp =
+ processor.getRequest().getRequestProcessor();
+ rp.setGlobalProcessor(global);
+ ObjectName rpName = new ObjectName(
+ getProtocol().getDomain() +
+ ":type=RequestProcessor,worker="
+ + getProtocol().getName() +
+ ",name=" + getProtocol().getProtocolName() +
+ "Request" + count);
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("Register " + rpName);
+ }
+ Registry.getRegistry(null, null).registerComponent(rp,
+ rpName, null);
+ rp.setRpName(rpName);
+ } catch (Exception e) {
+ getLog().warn("Error registering request");
+ }
+ }
+ }
+ }
+
+ protected void unregister(AbstractProcessor processor) {
+ if (getProtocol().getDomain() != null) {
+ synchronized (this) {
+ try {
+ RequestInfo rp =
+ processor.getRequest().getRequestProcessor();
+ rp.setGlobalProcessor(null);
+ ObjectName rpName = rp.getRpName();
+ if (getLog().isDebugEnabled()) {
+ getLog().debug("Unregister " + rpName);
+ }
+ Registry.getRegistry(null, null).unregisterComponent(
+ rpName);
+ rp.setRpName(null);
+ } catch (Exception e) {
+ getLog().warn("Error unregistering request", e);
+ }
+ }
+ }
+ }
+ }
}
StringManager.getManager(Constants.Package);
+ @Override
+ protected String getProtocolName() {
+ return "Ajp";
+ }
+
+
+
// ------------------------------------------------- AJP specific properties
// ------------------------------------------ managed in the ProtocolHandler
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import javax.management.ObjectName;
-
-import org.apache.coyote.RequestGroupInfo;
-import org.apache.coyote.RequestInfo;
+import org.apache.coyote.AbstractProtocol;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AprEndpoint;
import org.apache.tomcat.util.net.AprEndpoint.Handler;
// -------------------------------------- AjpConnectionHandler Inner Class
- protected static class AjpConnectionHandler implements Handler {
+ protected static class AjpConnectionHandler
+ extends AbstractConnectionHandler implements Handler {
protected AjpAprProtocol proto;
- protected AtomicLong registerCount = new AtomicLong(0);
- protected RequestGroupInfo global = new RequestGroupInfo();
protected ConcurrentHashMap<SocketWrapper<Long>, AjpAprProcessor> connections =
new ConcurrentHashMap<SocketWrapper<Long>, AjpAprProcessor>();
}
@Override
- public Object getGlobal() {
- return global;
+ protected AbstractProtocol getProtocol() {
+ return proto;
+ }
+
+ @Override
+ protected Log getLog() {
+ return log;
}
@Override
register(processor);
return processor;
}
-
- protected void register(AjpAprProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- long count = registerCount.incrementAndGet();
- RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(global);
- ObjectName rpName = new ObjectName
- (proto.getDomain() + ":type=RequestProcessor,worker="
- + proto.getName() + ",name=AjpRequest" + count);
- if (log.isDebugEnabled()) {
- log.debug("Register " + rpName);
- }
- Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
- rp.setRpName(rpName);
- } catch (Exception e) {
- log.warn("Error registering request");
- }
- }
- }
- }
-
- protected void unregister(AjpAprProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(null);
- ObjectName rpName = rp.getRpName();
- if (log.isDebugEnabled()) {
- log.debug("Unregister " + rpName);
- }
- Registry.getRegistry(null, null).unregisterComponent(rpName);
- rp.setRpName(null);
- } catch (Exception e) {
- log.warn("Error unregistering request", e);
- }
- }
- }
- }
-
}
-
}
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import javax.management.ObjectName;
-
-import org.apache.coyote.RequestGroupInfo;
-import org.apache.coyote.RequestInfo;
+import org.apache.coyote.AbstractProtocol;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.NioChannel;
import org.apache.tomcat.util.net.NioEndpoint;
// -------------------------------------- AjpConnectionHandler Inner Class
- protected static class AjpConnectionHandler implements Handler {
+ protected static class AjpConnectionHandler
+ extends AbstractConnectionHandler implements Handler {
protected AjpNioProtocol proto;
- protected AtomicLong registerCount = new AtomicLong(0);
- protected RequestGroupInfo global = new RequestGroupInfo();
protected ConcurrentHashMap<NioChannel, AjpNioProcessor> connections =
new ConcurrentHashMap<NioChannel, AjpNioProcessor>();
}
@Override
- public Object getGlobal() {
- return global;
+ protected AbstractProtocol getProtocol() {
+ return proto;
+ }
+
+ @Override
+ protected Log getLog() {
+ return log;
}
@Override
register(processor);
return processor;
}
-
- protected void register(AjpNioProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- long count = registerCount.incrementAndGet();
- RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(global);
- ObjectName rpName = new ObjectName
- (proto.getDomain() + ":type=RequestProcessor,worker="
- + proto.getName() + ",name=AjpRequest" + count);
- if (log.isDebugEnabled()) {
- log.debug("Register " + rpName);
- }
- Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
- rp.setRpName(rpName);
- } catch (Exception e) {
- log.warn("Error registering request");
- }
- }
- }
- }
-
- protected void unregister(AjpNioProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(null);
- ObjectName rpName = rp.getRpName();
- if (log.isDebugEnabled()) {
- log.debug("Unregister " + rpName);
- }
- Registry.getRegistry(null, null).unregisterComponent(rpName);
- rp.setRpName(null);
- } catch (Exception e) {
- log.warn("Error unregistering request", e);
- }
- }
- }
- }
-
}
-
}
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import javax.management.ObjectName;
-
-import org.apache.coyote.RequestGroupInfo;
-import org.apache.coyote.RequestInfo;
+import org.apache.coyote.AbstractProtocol;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.JIoEndpoint;
import org.apache.tomcat.util.net.JIoEndpoint.Handler;
// -------------------------------------- AjpConnectionHandler Inner Class
- protected static class AjpConnectionHandler implements Handler {
+ protected static class AjpConnectionHandler
+ extends AbstractConnectionHandler implements Handler {
protected AjpProtocol proto;
- protected AtomicLong registerCount = new AtomicLong(0);
- protected RequestGroupInfo global = new RequestGroupInfo();
protected ConcurrentHashMap<SocketWrapper<Socket>, AjpProcessor> connections =
new ConcurrentHashMap<SocketWrapper<Socket>, AjpProcessor>();
}
};
+
public AjpConnectionHandler(AjpProtocol proto) {
this.proto = proto;
}
@Override
- public Object getGlobal() {
- return global;
+ protected AbstractProtocol getProtocol() {
+ return proto;
+ }
+
+ @Override
+ protected Log getLog() {
+ return log;
}
@Override
register(processor);
return processor;
}
-
- protected void register(AjpProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- long count = registerCount.incrementAndGet();
- RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(global);
- ObjectName rpName = new ObjectName
- (proto.getDomain() + ":type=RequestProcessor,worker="
- + proto.getName() + ",name=AjpRequest" + count);
- if (log.isDebugEnabled()) {
- log.debug("Register " + rpName);
- }
- Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
- rp.setRpName(rpName);
- } catch (Exception e) {
- log.warn("Error registering request");
- }
- }
- }
- }
-
- protected void unregister(AjpProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(null);
- ObjectName rpName = rp.getRpName();
- if (log.isDebugEnabled()) {
- log.debug("Unregister " + rpName);
- }
- Registry.getRegistry(null, null).unregisterComponent(rpName);
- rp.setRpName(null);
- } catch (Exception e) {
- log.warn("Error unregistering request", e);
- }
- }
- }
- }
}
-
}
StringManager.getManager(Constants.Package);
+ @Override
+ protected String getProtocolName() {
+ return "Http";
+ }
+
+
// ------------------------------------------------ HTTP specific properties
// ------------------------------------------ managed in the ProtocolHandler
package org.apache.coyote.http11;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import javax.management.ObjectName;
-
-import org.apache.coyote.RequestGroupInfo;
-import org.apache.coyote.RequestInfo;
+import org.apache.coyote.AbstractProtocol;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AprEndpoint;
import org.apache.tomcat.util.net.AprEndpoint.Handler;
// -------------------- Connection handler --------------------
- protected static class Http11ConnectionHandler implements Handler {
+ protected static class Http11ConnectionHandler
+ extends AbstractConnectionHandler implements Handler {
protected Http11AprProtocol proto;
- protected AtomicLong registerCount = new AtomicLong(0);
- protected RequestGroupInfo global = new RequestGroupInfo();
protected ConcurrentHashMap<Long, Http11AprProcessor> connections =
new ConcurrentHashMap<Long, Http11AprProcessor>();
}
@Override
- public Object getGlobal() {
- return global;
+ protected AbstractProtocol getProtocol() {
+ return proto;
+ }
+
+ @Override
+ protected Log getLog() {
+ return log;
}
@Override
register(processor);
return processor;
}
-
- protected void register(Http11AprProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- long count = registerCount.incrementAndGet();
- final RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(global);
- final ObjectName rpName = new ObjectName
- (proto.getDomain() + ":type=RequestProcessor,worker="
- + proto.getName() + ",name=HttpRequest" + count);
- if (log.isDebugEnabled()) {
- log.debug("Register " + rpName);
- }
- if (Constants.IS_SECURITY_ENABLED) {
- AccessController.doPrivileged(new PrivilegedAction<Void>() {
- @Override
- public Void run() {
- try {
- Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
- } catch (Exception e) {
- log.warn("Error registering request");
- }
- return null;
- }
- });
- } else {
- Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
- }
- rp.setRpName(rpName);
- } catch (Exception e) {
- log.warn("Error registering request");
- }
- }
- }
- }
-
- protected void unregister(Http11AprProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(null);
- ObjectName rpName = rp.getRpName();
- if (log.isDebugEnabled()) {
- log.debug("Unregister " + rpName);
- }
- Registry.getRegistry(null, null).unregisterComponent(rpName);
- rp.setRpName(null);
- } catch (Exception e) {
- log.warn("Error unregistering request", e);
- }
- }
- }
- }
-
}
}
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import javax.management.ObjectName;
-
-import org.apache.coyote.RequestGroupInfo;
-import org.apache.coyote.RequestInfo;
+import org.apache.coyote.AbstractProtocol;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.NioChannel;
import org.apache.tomcat.util.net.NioEndpoint;
// -------------------- Connection handler --------------------
- protected static class Http11ConnectionHandler implements Handler {
+ protected static class Http11ConnectionHandler
+ extends AbstractConnectionHandler implements Handler {
protected Http11NioProtocol proto;
- protected AtomicLong registerCount = new AtomicLong(0);
- protected RequestGroupInfo global = new RequestGroupInfo();
protected ConcurrentHashMap<NioChannel, Http11NioProcessor> connections =
new ConcurrentHashMap<NioChannel, Http11NioProcessor>();
size.incrementAndGet();
}
}
- if (!result) deregister(processor);
+ if (!result) unregister(processor);
return result;
}
public void clear() {
Http11NioProcessor next = poll();
while ( next != null ) {
- deregister(next);
+ unregister(next);
next = poll();
}
super.clear();
}
@Override
- public Object getGlobal() {
- return global;
+ protected AbstractProtocol getProtocol() {
+ return proto;
}
@Override
+ protected Log getLog() {
+ return log;
+ }
+
+
+ @Override
public SSLImplementation getSslImplementation() {
return proto.sslImplementation;
}
it.remove();
Http11NioProcessor result = entry.getValue();
result.recycle();
- deregister(result);
+ unregister(result);
released = true;
break;
}
register(processor);
return processor;
}
-
- protected void register(Http11NioProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- long count = registerCount.incrementAndGet();
- final RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(global);
- final ObjectName rpName = new ObjectName
- (proto.getDomain() + ":type=RequestProcessor,worker="
- + proto.getName() + ",name=HttpRequest" + count);
- if (log.isDebugEnabled()) {
- log.debug("Register " + rpName);
- }
- if (Constants.IS_SECURITY_ENABLED) {
- AccessController.doPrivileged(new PrivilegedAction<Void>() {
- @Override
- public Void run() {
- try {
- Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
- } catch (Exception e) {
- log.warn("Error registering request");
- }
- return null;
- }
- });
- } else {
- Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
- }
- rp.setRpName(rpName);
- } catch (Exception e) {
- log.warn("Error registering request");
- }
- }
- }
- }
-
- protected void deregister(Http11NioProcessor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(null);
- ObjectName rpName = rp.getRpName();
- if (log.isDebugEnabled()) {
- log.debug("Unregister " + rpName);
- }
- Registry.getRegistry(null, null).unregisterComponent(rpName);
- rp.setRpName(null);
- } catch (Exception e) {
- log.warn("Error unregistering request", e);
- }
- }
- }
- }
}
}
package org.apache.coyote.http11;
import java.net.Socket;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import javax.management.ObjectName;
-
-import org.apache.coyote.RequestGroupInfo;
-import org.apache.coyote.RequestInfo;
+import org.apache.coyote.AbstractProtocol;
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.ExceptionUtils;
-import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.JIoEndpoint;
import org.apache.tomcat.util.net.JIoEndpoint.Handler;
// ----------------------------------- Http11ConnectionHandler Inner Class
- protected static class Http11ConnectionHandler implements Handler {
+ protected static class Http11ConnectionHandler
+ extends AbstractConnectionHandler implements Handler {
protected Http11Protocol proto;
- protected AtomicLong registerCount = new AtomicLong(0);
- protected RequestGroupInfo global = new RequestGroupInfo();
protected ConcurrentHashMap<SocketWrapper<Socket>, Http11Processor> connections =
new ConcurrentHashMap<SocketWrapper<Socket>, Http11Processor>();
}
@Override
- public Object getGlobal() {
- return global;
+ protected AbstractProtocol getProtocol() {
+ return proto;
}
@Override
+ protected Log getLog() {
+ return log;
+ }
+
+ @Override
public SSLImplementation getSslImplementation() {
return proto.sslImplementation;
}
register(processor);
return processor;
}
-
- protected void register(Http11Processor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- long count = registerCount.incrementAndGet();
- final RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(global);
- final ObjectName rpName = new ObjectName
- (proto.getDomain() + ":type=RequestProcessor,worker="
- + proto.getName() + ",name=HttpRequest" + count);
- if (log.isDebugEnabled()) {
- log.debug("Register " + rpName);
- }
- if (Constants.IS_SECURITY_ENABLED) {
- AccessController.doPrivileged(new PrivilegedAction<Void>() {
- @Override
- public Void run() {
- try {
- Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
- } catch (Exception e) {
- log.warn("Error registering request");
- }
- return null;
- }
- });
- } else {
- Registry.getRegistry(null, null).registerComponent(rp, rpName, null);
- }
- rp.setRpName(rpName);
- } catch (Exception e) {
- log.warn("Error registering request");
- }
- }
- }
- }
-
- protected void unregister(Http11Processor processor) {
- if (proto.getDomain() != null) {
- synchronized (this) {
- try {
- RequestInfo rp = processor.getRequest().getRequestProcessor();
- rp.setGlobalProcessor(null);
- ObjectName rpName = rp.getRpName();
- if (log.isDebugEnabled()) {
- log.debug("Unregister " + rpName);
- }
- Registry.getRegistry(null, null).unregisterComponent(rpName);
- rp.setRpName(null);
- } catch (Exception e) {
- log.warn("Error unregistering request", e);
- }
- }
- }
- }
}
}