code: public synchronized void initialize() throws StorageException {
          checkState(!running);
          checkState(!initialized);
          checkState(setupConversion);
  
          // start up the snapshots subsystem
          snapshotStore.initialize();
          // check that the snapshot metadata and the filesystem agree
          // FIXME (AG): this _may_ be expensive, especially if the user never bothers to clean out snapshots!
          // FIXME (AG): warning, warning - this is upfront work - probably a very, very bad idea
          snapshotStore.reconcileSnapshots();
  
          // initialize the log and store
          jdbcLog.initialize();
          jdbcStore.initialize();
  
          // initialize the various thread pools
          nonIoExecutorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
          ioExecutorService = Executors.newCachedThreadPool();
          serverBossPool = new NioServerBossPool(ioExecutorService, 1);
          clientBossPool = new NioClientBossPool(ioExecutorService, 1);
          workerPool = new NioWorkerPool(ioExecutorService, 3);
  
          // TODO (AG): avoid creating threads in the initialize() method
          // initialize the networking subsystem
          sharedWorkerPool = new ShareableWorkerPool<NioWorker>(workerPool);
          ServerSocketChannelFactory serverChannelFactory = new NioServerSocketChannelFactory(serverBossPool, sharedWorkerPool);
          ClientSocketChannelFactory clientChannelFactory = new NioClientSocketChannelFactory(clientBossPool, sharedWorkerPool);
          raftNetworkClient.initialize(nonIoExecutorService, serverChannelFactory, clientChannelFactory, raftAlgorithm);
  
          raftAlgorithm.initialize();
  
          initialized = true;
      }
docs: Initialize the local Raft server.
  <p/>
  Sets up the service implementation classes, creates database
  tables and starts any thread pools necessary. Following this
  call all service classes are <strong>fully initialized</strong>.
  Even though various threads are started they <strong>will not</strong>
  use or interact with the service implementation classes. Callers
  still have exclusive access to the system.
  <p/>
  This method should <strong>only</strong> be called once before {@link RaftAgent#start()}.
  
  @throws StorageException if the persistence components cannot be initialized
  @throws IllegalStateException if this method is called multiple times