if (started)
try
   public synchronized void start() throws Exception   {      if (started)      {         return;      }            loadClientAOPConfig();            loadServerAOPConfig();            log.info(this + " starting");            mbeanServer = findMBeanServer();      JDBCPersistenceManager jpm = new JDBCPersistenceManager();      jpm.start();      pm = jpm;            txRepository = new TransactionRepository(pm);           // TODO: is should be possible to share this with other peers      ms = new PersistentMessageStore(serverPeerID, pm);      clientManager = new ClientManagerImpl(this);            destinationManager = new DestinationManagerImpl(this);                  JDBCStateManager jdbcStateManager = new JDBCStateManager(this);      jdbcStateManager.start();      stateManager = jdbcStateManager;            //This pooled executor controls how threads are allocated to deliver messges      //to consumers.      //The buffer(queue) of the pool must be unbounded to avoid potential distributed deadlock      //Since the buffer is unbounded, the minimum pool size has to be the same as the maximum.      //Otherwise, we will never have more than getMinimumPoolSize threads running.                        threadPool = new PooledExecutor(new LinkedQueue(), 10);      threadPool.setMinimumPoolSize(10);       initializeRemoting();      mbeanServer.registerMBean(destinationManager, DESTINATION_MANAGER_OBJECT_NAME);            mbeanServer.registerMBean(stateManager, STATE_MANAGER_OBJECT_NAME);            securityManager.init();            setupConnectionFactories();            started = true;      log.info("JMS " + this + " started");   }