Author: costin Date: Tue May 23 19:50:33 2006 New Revision: 409041 URL: http://svn.apache.org/viewvc?rev=409041&view=rev Log: Remove dead code - refactoring of the connector.
Since having a common base is not likely - I'm using same approach as apr, i.e. separate connector, duplicate some code ( but this may allow better cleanup ) Added: tomcat/sandbox/java/org/apache/tomcat/util/net/simple/ tomcat/sandbox/java/org/apache/tomcat/util/net/simple/SimpleEndpoint.java - copied, changed from r408800, tomcat/sandbox/java/org/apache/tomcat/util/net/SimpleEndpoint.java Removed: tomcat/sandbox/java/org/apache/tomcat/util/net/PoolTcpEndpoint.java tomcat/sandbox/java/org/apache/tomcat/util/net/SimpleEndpoint.java tomcat/sandbox/java/org/apache/tomcat/util/net/TcpConnection.java tomcat/sandbox/java/org/apache/tomcat/util/net/TcpConnectionHandler.java tomcat/sandbox/java/org/apache/tomcat/util/net/URL.java tomcat/sandbox/java/org/apache/tomcat/util/net/javaio/DefaultServerSocketFactory.java tomcat/sandbox/java/org/apache/tomcat/util/net/javaio/LeaderFollowerEndpoint.java tomcat/sandbox/java/org/apache/tomcat/util/net/javaio/LeaderFollowerWorkerThread.java tomcat/sandbox/java/org/apache/tomcat/util/net/javaio/MasterSlaveEndpoint.java tomcat/sandbox/java/org/apache/tomcat/util/net/javaio/MasterSlaveWorkerThread.java tomcat/sandbox/java/org/apache/tomcat/util/net/javaio/SSLImplementation.java tomcat/sandbox/java/org/apache/tomcat/util/net/javaio/SSLSupport.java tomcat/sandbox/java/org/apache/tomcat/util/net/javaio/ServerSocketFactory.java tomcat/sandbox/java/org/apache/tomcat/util/net/res/LocalStrings.properties tomcat/sandbox/java/org/apache/tomcat/util/net/res/LocalStrings_es.properties tomcat/sandbox/java/org/apache/tomcat/util/net/res/LocalStrings_fr.properties tomcat/sandbox/java/org/apache/tomcat/util/net/res/LocalStrings_ja.properties Modified: tomcat/sandbox/java/org/apache/tomcat/util/net/nio/NioEndpoint.java Modified: tomcat/sandbox/java/org/apache/tomcat/util/net/nio/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/java/org/apache/tomcat/util/net/nio/NioEndpoint.java?rev=409041&r1=409040&r2=409041&view=diff ============================================================================== --- tomcat/sandbox/java/org/apache/tomcat/util/net/nio/NioEndpoint.java (original) +++ tomcat/sandbox/java/org/apache/tomcat/util/net/nio/NioEndpoint.java Tue May 23 19:50:33 2006 @@ -22,16 +22,18 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.SocketAddress; +import java.nio.channels.Channel; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; +import java.nio.channels.spi.SelectorProvider; import java.util.Iterator; import java.util.Set; -import org.apache.tomcat.util.net.SimpleEndpoint; import org.apache.tomcat.util.net.TcpConnection; +import org.apache.tomcat.util.net.simple.SimpleEndpoint; import org.apache.tomcat.util.threads.ThreadPool; import org.apache.tomcat.util.threads.ThreadPoolRunnable; @@ -181,6 +183,25 @@ // nothing } + /** + */ + public ServerSocketChannel getInetdChannel() { + SelectorProvider sp=SelectorProvider.provider(); + + try { + Channel ch=sp.inheritedChannel(); + if(ch!=null ) { + System.err.println("Inherited: " + ch.getClass().getName()); + ServerSocketChannel ssc=(ServerSocketChannel)ch; + return ssc; + //proto.getEndpoint().setServerSocketFactory(new InetdServerSocketFactory(ssc.socket())); + } + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + public void addSocketRead(Socket s, Object o) throws IOException { s.getChannel().register( selector, SelectionKey.OP_READ, o); @@ -204,8 +225,8 @@ public Object[] getInitData() { // no synchronization overhead, but 2 array access Object obj[]=new Object[2]; - obj[1]= getConnectionHandler().init(); - obj[0]=new TcpConnection(); + obj[1]= null;//getConnectionHandler().init(); + obj[0]= null; // new TcpConnection(); return obj; } @@ -246,7 +267,7 @@ // TODO: customize this if needed tp.runIt( this ); // now process the socket. - processSocket(sockC.socket(), (TcpConnection) perThrData[0], + processSocket(sockC.socket(), (Object[]) perThrData[1]); continue; } Copied: tomcat/sandbox/java/org/apache/tomcat/util/net/simple/SimpleEndpoint.java (from r408800, tomcat/sandbox/java/org/apache/tomcat/util/net/SimpleEndpoint.java) URL: http://svn.apache.org/viewvc/tomcat/sandbox/java/org/apache/tomcat/util/net/simple/SimpleEndpoint.java?p2=tomcat/sandbox/java/org/apache/tomcat/util/net/simple/SimpleEndpoint.java&p1=tomcat/sandbox/java/org/apache/tomcat/util/net/SimpleEndpoint.java&r1=408800&r2=409041&rev=409041&view=diff ============================================================================== --- tomcat/sandbox/java/org/apache/tomcat/util/net/SimpleEndpoint.java (original) +++ tomcat/sandbox/java/org/apache/tomcat/util/net/simple/SimpleEndpoint.java Tue May 23 19:50:33 2006 @@ -14,18 +14,22 @@ * limitations under the License. */ -package org.apache.tomcat.util.net; +package org.apache.tomcat.util.net.simple; import java.io.IOException; import java.io.InterruptedIOException; import java.net.BindException; +import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; import java.security.AccessControlException; +import java.util.ArrayList; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.tomcat.util.net.TcpConnectionHandler; +import org.apache.tomcat.util.res.StringManager; import org.apache.tomcat.util.threads.ThreadWithAttributes; @@ -43,7 +47,7 @@ * * @author Costin Manolache ( [EMAIL PROTECTED] ) */ -public class SimpleEndpoint extends PoolTcpEndpoint { +public class SimpleEndpoint { static Log log=LogFactory.getLog(SimpleEndpoint.class ); @@ -52,12 +56,293 @@ // active acceptors private int acceptors=0; + protected static final int BACKLOG = 100; + protected static final int TIMEOUT = 1000; + + protected int backlog = BACKLOG; + protected int serverTimeout = TIMEOUT; + + protected InetAddress inet; + protected int port; + + protected ServerSocket serverSocket; + + protected volatile boolean running = false; + protected volatile boolean paused = false; + protected boolean initialized = false; + protected boolean reinitializing = false; + + protected boolean tcpNoDelay=false; + protected int linger=100; + protected int socketTimeout=-1; + + + // ------ Leader follower fields + public interface Handler { + public boolean process(Socket socket); + } + + Handler handler; + // ------ Master slave fields + + protected int curThreads = 0; + protected int maxThreads = 20; + protected int maxSpareThreads = 20; + protected int minSpareThreads = 20; + protected String type = "default"; + // to name the threads and get an idea how many threads were closed + protected int threadId = 0; + + protected String name = "EP"; // base name for threads + + protected int threadPriority; + + protected boolean daemon = true; + + private ArrayList listeners = new ArrayList(); + + private boolean polling; + public SimpleEndpoint() { maxSpareThreads = 4; minSpareThreads = 2; } + // --- From PoolTcpEndpoint + + public static interface EndpointListener { + public void threadStart(SimpleEndpoint ep, Thread t); + + public void threadEnd( SimpleEndpoint ep, Thread t); + + } + + + protected void threadEnd(Thread t) { + for( int i=0; i<listeners.size(); i++ ) { + EndpointListener tpl=(EndpointListener)listeners.get(i); + tpl.threadStart(this, t); + } + } + + protected void threadStart(Thread t) { + for( int i=0; i<listeners.size(); i++ ) { + EndpointListener tpl=(EndpointListener)listeners.get(i); + tpl.threadStart(this, t); + } + } + + protected void unlockAccept() { + Socket s = null; + try { + // Need to create a connection to unlock the accept(); + if (inet == null) { + s = new Socket("127.0.0.1", port); + } else { + s = new Socket(inet, port); + // setting soLinger to a small value will help shutdown the + // connection quicker + s.setSoLinger(true, 0); + } + } catch(Exception e) { + if (log.isDebugEnabled()) { + log.debug("Error unlocking: " + port, e); + } + } finally { + if (s != null) { + try { + s.close(); + } catch (Exception e) { + // Ignore + } + } + } + } + + protected void setSocketOptions(Socket socket) + throws SocketException { + if(linger >= 0 ) + socket.setSoLinger( true, linger); + if( tcpNoDelay ) + socket.setTcpNoDelay(tcpNoDelay); + if( socketTimeout > 0 ) + socket.setSoTimeout( socketTimeout ); + } + + // --- PoolTcpEndpoint - getters and setters + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + public void setMaxThreads(int maxThreads) { + this.maxThreads = maxThreads; + } + + public int getMaxThreads() { + return maxThreads; + } + + public void setMaxSpareThreads(int maxThreads) { + this.maxSpareThreads = maxThreads; + } + + public int getMaxSpareThreads() { + return maxSpareThreads; + } + + public void setMinSpareThreads(int minThreads) { + this.minSpareThreads = minThreads; + } + + public int getMinSpareThreads() { + return minSpareThreads; + } + + public void setThreadPriority(int threadPriority) { + this.threadPriority = threadPriority; + } + + public int getThreadPriority() { + return threadPriority; + } + + public int getPort() { + return port; + } + + public void setPort(int port ) { + this.port=port; + } + + public InetAddress getAddress() { + return inet; + } + + public void setAddress(InetAddress inet) { + this.inet=inet; + } + + public void setServerSocket(ServerSocket ss) { + serverSocket = ss; + } + + public ServerSocket getServerSocket() { + return serverSocket; + } + + public void setConnectionHandler( Handler handler ) { + this.handler=handler; + } + + public Handler getConnectionHandler() { + return handler; + } + + public boolean isRunning() { + return running; + } + + public boolean isPaused() { + return paused; + } + + /** + * Allows the server developer to specify the backlog that + * should be used for server sockets. By default, this value + * is 100. + */ + public void setBacklog(int backlog) { + if( backlog>0) + this.backlog = backlog; + } + + public int getBacklog() { + return backlog; + } + + /** + * Sets the timeout in ms of the server sockets created by this + * server. This method allows the developer to make servers + * more or less responsive to having their server sockets + * shut down. + * + * <p>By default this value is 1000ms. + */ + public void setServerTimeout(int timeout) { + this.serverTimeout = timeout; + } + + public boolean getTcpNoDelay() { + return tcpNoDelay; + } + + public void setTcpNoDelay( boolean b ) { + tcpNoDelay=b; + } + + public int getSoLinger() { + return linger; + } + + public void setSoLinger( int i ) { + linger=i; + } + + public int getSoTimeout() { + return socketTimeout; + } + + public void setSoTimeout( int i ) { + socketTimeout=i; + } + + public int getServerSoTimeout() { + return serverTimeout; + } + + public void setServerSoTimeout( int i ) { + serverTimeout=i; + } + + public String getStrategy() { + return type; + } + + public void setStrategy(String strategy) { + // shouldn't be used. + } + + public int getCurrentThreadCount() { + return curThreads; + } + + public int getCurrentThreadsBusy() { + return curThreads; + } + + public boolean getPolling() { + return polling; + } + + public void setPolling( boolean b ) { + polling = b; + } + + public void setDaemon(boolean b) { + daemon=b; + } + + public boolean getDaemon() { + return daemon; + } + // -------------------- Public methods -------------------- @@ -165,7 +450,7 @@ if( serverSocket!=null) serverSocket.close(); } catch(Exception e) { - log.error(sm.getString("endpoint.err.close"), e); + log.error("Exception", e); } serverSocket = null; } @@ -180,7 +465,7 @@ try { accepted = serverSocket.accept(); if (null == accepted) { - log.warn(sm.getString("endpoint.warn.nullSocket")); + log.warn("Accepted null socket"); } else { if (!running) { accepted.close(); // rude, but unlikely! @@ -198,27 +483,21 @@ // can be thrown if you are restricting access to the // socket with SocketPermission's. // Log the unauthorized access and continue - String msg = sm.getString("endpoint.warn.security", - serverSocket, ace); - log.warn(msg); + log.warn("AccessControlException", ace); } catch (IOException e) { String msg = null; if (running) { - msg = sm.getString("endpoint.err.nonfatal", - serverSocket, e); - log.error(msg, e); + log.error("IOException", e); } if (accepted != null) { try { accepted.close(); } catch(Throwable ex) { - msg = sm.getString("endpoint.err.nonfatal", - accepted, ex); - log.warn(msg, ex); + log.warn("IOException in close()", ex); } accepted = null; } @@ -234,26 +513,20 @@ initialized = false; // 2) Reinit endpoint (recreate server socket) try { - msg = sm.getString("endpoint.warn.reinit"); - log.warn(msg); + log.warn("Reinit endpoint"); initEndpoint(); } catch (Throwable t) { - msg = sm.getString("endpoint.err.nonfatal", - serverSocket, t); - log.error(msg, t); + log.error("Error in reinit", t); } // 3) If failed, attempt to restart endpoint if (!initialized) { - msg = sm.getString("endpoint.warn.restart"); - log.warn(msg); + log.warn("Restart endpoint"); try { stopEndpoint(); initEndpoint(); startEndpoint(); } catch (Throwable t) { - msg = sm.getString("endpoint.err.fatal", - serverSocket, t); - log.error(msg, t); + log.error("Error in restart", t); } // Current thread is now invalid: kill it throw new ThreadDeath(); @@ -266,7 +539,7 @@ return accepted; } - public void processSocket(Socket s, TcpConnection con, Object[] threadData) { + public void processSocket(Socket s, Object[] threadData) { // Process the connection int step = 1; try { @@ -279,13 +552,10 @@ // 3: Process the connection step = 3; - con.setEndpoint(this); - con.setSocket(s); - getConnectionHandler().processConnection(con, threadData); + handler.process(s); } catch (SocketException se) { - log.error(sm.getString("endpoint.err.socket", s.getInetAddress()), - se); + log.error("Socket error " + s.getInetAddress(), se); // Try to close the socket try { s.close(); @@ -294,10 +564,10 @@ } catch (Throwable t) { if (step == 2) { if (log.isDebugEnabled()) { - log.debug(sm.getString("endpoint.err.handshake"), t); + log.debug("Error in handshake", t); } } else { - log.error(sm.getString("endpoint.err.unexpected"), t); + log.error("Unexpected error", t); } // Try to close the socket try { @@ -305,9 +575,6 @@ } catch (IOException e) { } } finally { - if (con != null) { - con.recycle(); - } } } @@ -316,7 +583,7 @@ } class AcceptorRunnable implements Runnable { - private TcpConnection con = new TcpConnection(); + //private TcpConnection con = new TcpConnection(); /** @@ -331,7 +598,7 @@ * thread models in a new TP interface. */ public void run() { - Object[] threadData = getConnectionHandler().init(); + Object[] threadData = null; //getConnectionHandler().init(); while( running ) { // Loop if endpoint is paused if( checkSpares() ) { @@ -351,7 +618,7 @@ curThreads++; // Process the request from this socket - processSocket(socket, con, threadData); + processSocket(socket, threadData); // Finish up this request curThreads--; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]