1 50 package org.apache.avalon.excalibur.naming.rmi.server; 51 52 import java.io.IOException ; 53 import java.io.ObjectOutputStream ; 54 import java.net.ServerSocket ; 55 import java.net.Socket ; 56 import java.rmi.MarshalledObject ; 57 import java.rmi.server.UnicastRemoteObject ; 58 59 import org.apache.avalon.excalibur.naming.DefaultNameParser; 60 import org.apache.avalon.excalibur.naming.DefaultNamespace; 61 import org.apache.avalon.excalibur.naming.memory.MemoryContext; 62 63 67 public class Main 68 implements Runnable 69 { 70 public static void main( final String [] args ) 71 throws Exception 72 { 73 boolean debug = true; 74 75 if( args.length > 0 ) 76 { 77 if( "-q".equals( args[ 0 ] ) ) 78 { 79 debug = false; 80 } 81 } 82 83 final Main main = new Main( debug ); 84 main.start(); 85 main.accept(); 86 } 87 88 private final boolean m_debug; 89 private RMINamingProviderImpl m_server; 90 private ServerSocket m_serverSocket; 91 private MarshalledObject m_serverStub; 92 private boolean m_running; 93 private boolean m_initialized; 94 95 public Main( boolean debug ) 96 { 97 m_debug = debug; 98 } 99 100 public Main() 101 { 102 this( true ); 103 } 104 105 public void init() 106 throws Exception 107 { 108 if( m_initialized ) return; 109 110 try 111 { 112 if( m_debug ) System.out.println( "Starting server on port " + 1977 ); 113 m_serverSocket = new ServerSocket ( 1977 ); 114 m_initialized = true; 115 } 116 catch( final IOException ioe ) 117 { 118 if( m_debug ) System.out.println( "Failed starting server" ); 119 throw ioe; 120 } 121 } 122 123 public void start() 124 throws Exception 125 { 126 init(); 127 export(); 128 } 129 130 public void export() 131 throws Exception 132 { 133 final DefaultNameParser parser = new DefaultNameParser(); 134 final DefaultNamespace namespace = new DefaultNamespace( parser ); 135 final MemoryContext context = new MemoryContext( namespace, null, null ); 136 m_server = new RMINamingProviderImpl( context ); 137 138 try 140 { 141 if( m_debug ) System.out.println( "Exporting RMI object on port " + 1099 ); 143 m_serverStub = 144 new MarshalledObject ( UnicastRemoteObject.exportObject( m_server, 1099 ) ); 145 } 146 catch( final IOException ioe ) 147 { 148 if( m_debug ) System.out.println( "Failed exporting object" ); 149 throw ioe; 150 } 151 } 152 153 public void dispose() 154 throws Exception 155 { 156 if( m_debug ) System.out.println( "Shutting down server" ); 157 m_running = false; 158 final ServerSocket serverSocket = m_serverSocket; 159 m_serverSocket = null; 160 serverSocket.close(); 161 if( m_debug ) System.out.println( "Server shutdown" ); 162 } 163 164 public void stop() 165 throws Exception 166 { 167 if( m_debug ) System.out.println( "Stopping" ); 168 m_running = false; 169 if( m_debug ) System.out.println( "Unexporting object" ); 170 UnicastRemoteObject.unexportObject( m_server, true ); 171 m_serverStub = null; 172 if( m_debug ) System.out.println( "Server stopped" ); 173 } 174 175 public void accept() 176 { 177 m_running = true; 178 while( m_running ) 179 { 180 try 182 { 183 final Socket socket = m_serverSocket.accept(); 184 if( m_debug ) System.out.println( "Accepted Connection" ); 185 final ObjectOutputStream output = 186 new ObjectOutputStream ( socket.getOutputStream() ); 187 188 output.writeObject( m_serverStub ); 189 190 socket.close(); 191 } 192 catch( final IOException ioe ) 193 { 194 if( !m_running ) break; 195 ioe.printStackTrace(); 196 } 197 } 198 } 199 200 public void run() 201 { 202 accept(); 203 } 204 } 205 | Popular Tags |