1 87 package org.codehaus.loom.demos.helloworld; 88 89 import java.io.IOException ; 90 import java.net.InetAddress ; 91 import java.net.ServerSocket ; 92 import java.net.UnknownHostException ; 93 import org.apache.avalon.framework.activity.Disposable; 94 import org.apache.avalon.framework.activity.Initializable; 95 import org.apache.avalon.framework.configuration.Configurable; 96 import org.apache.avalon.framework.configuration.Configuration; 97 import org.apache.avalon.framework.configuration.ConfigurationException; 98 import org.apache.avalon.framework.context.Context; 99 import org.apache.avalon.framework.context.Contextualizable; 100 import org.apache.avalon.framework.logger.AbstractLogEnabled; 101 import org.apache.avalon.framework.service.ServiceException; 102 import org.apache.avalon.framework.service.ServiceManager; 103 import org.apache.avalon.framework.service.Serviceable; 104 import org.apache.avalon.phoenix.BlockContext; 105 import org.codehaus.spice.netserve.connection.RequestHandler; 106 import org.codehaus.spice.netserve.connection.SocketAcceptorManager; 107 import org.codehaus.spice.netserve.sockets.ServerSocketFactory; 108 109 117 public final class HelloWorldServerImpl 118 extends AbstractLogEnabled 119 implements HelloWorldServer, Contextualizable, Serviceable, 120 Configurable, Initializable, Disposable 121 { 122 123 private ServerSocketFactory m_socketManager; 124 private SocketAcceptorManager m_socketAcceptorManager; 125 private BlockContext m_context; 126 private String m_greeting = "Hello World!"; 127 private InetAddress m_bindTo; 128 private int m_port; 129 private String m_connectionName = "HelloWorldListener"; 130 private ServerSocket m_serverSocket; 131 private HelloWorldHandler m_helloWorldHandler; 132 133 140 public void setGreeting( final String greeting ) 141 { 142 getLogger().debug( "Setting greeting to [" + greeting + "]."); 143 m_greeting = greeting; 144 } 145 146 152 public String getGreeting() 153 { 154 return m_greeting; 155 } 156 157 162 public void contextualize( final Context context ) 163 { 164 m_context = (BlockContext)context; 165 } 166 167 172 public void configure( final Configuration configuration ) 173 throws ConfigurationException 174 { 175 m_port = configuration.getChild( "port" ).getValueAsInteger( 8000 ); 176 try 177 { 178 final String bindAddress = 179 configuration.getChild( "bind" ).getValue(); 180 m_bindTo = InetAddress.getByName( bindAddress ); 181 } 182 catch( final UnknownHostException unhe ) 183 { 184 throw new ConfigurationException( 185 "Malformed bind parameter", unhe ); 186 } 187 } 188 189 195 public void service( final ServiceManager serviceManager ) 196 throws ServiceException 197 { 198 m_socketManager = 199 (ServerSocketFactory)serviceManager.lookup( 200 ServerSocketFactory.class.getName() ); 201 m_socketAcceptorManager = 202 (SocketAcceptorManager)serviceManager.lookup( 203 SocketAcceptorManager.class.getName() ); 204 } 205 206 209 public void initialize() 210 throws Exception 211 { 212 getLogger().info( "Initializing..." ); 213 m_serverSocket = m_socketManager.createServerSocket( m_port, 214 5, 215 m_bindTo ); 216 m_helloWorldHandler = createHandler(); 217 m_socketAcceptorManager.connect( m_connectionName, 218 m_serverSocket, 219 (RequestHandler)m_helloWorldHandler ); 220 System.out.println( 222 "HelloWorld server running with a greeting of '" + m_greeting 223 + "'. Point your browser to http://" + m_bindTo + ":" + m_port 224 + " to see its page" ); 225 } 226 227 230 public void dispose() 231 { 232 getLogger().info( "Shutting down..." ); 233 try 234 { 235 m_socketAcceptorManager.disconnect( m_connectionName ); 236 } 237 catch( final Exception e ) 238 { 239 getLogger().warn( "Error while disconnecting.", e ); 240 } 241 242 try 243 { 244 m_serverSocket.close(); 245 } 246 catch( final IOException ioe ) 247 { 248 getLogger().warn( "Error while closing server socket.", ioe ); 249 } 250 } 251 252 257 public HelloWorldHandler createHandler() 258 throws Exception 259 { 260 final HelloWorldHandler handler = 261 new HelloWorldHandler( this, m_context ); 262 setupLogger( handler ); 263 return handler; 264 } 265 266 } 267 | Popular Tags |