Verificar se programa já está em execução

Eu tenho um programa que inicia um servidor Derby, e preciso verificar se ele já está aberto para que não possa ser aberta um nova instancia, penso que a maneira mais simples seja verificando se o servidor Derby está online, mas não sei como fazer essa verificação, alguém pode me dar uma luz?

eu uso o seguinte codigo pra iniciar o servidor derby

public void iniciaServidor(String ip, int porta) {
        try {
            //Seta a variável DERBY_HOME para o local que ficarão os bancos de dados
            File file = new File("database");
            System.setProperty("derby.system.home", file.getAbsolutePath());
            //cria o objeto de controle do servidor
            //libera todos os acessos-> InetAddress.getByName("0.0.0.0"), 1527
            //libera só acesso externo -> InetAddress.getByName("192.168.25.100"), 1527
            //vazio só libera localhost            
            server = new NetworkServerControlImpl(InetAddress.getByName(ip), porta);
            //inicia o servidor
            server.start(new PrintWriter(System.out));
        } catch (Exception ex) {
            Logger logger = new Logger();
            logger.add("Servidor.iniciaServidor()", ex);
        }
    }

Um jeito “pog” de fazer é criar um trecho de código que abra um SocketServer em uma porta qualquer (tipo 9999). Apenas uma instância poderá ser aberta, caso contrário, a nova tentará abrir um socket server na mesma porta e isso resultará em exceção.

Eu até cheguei a ver este método mas tem a desvantagem (mesmo que remota) de eu usar uma porta que outro programa está usando, fora possíveis problemas com firewall…

Quando eu tento iniciar o servidor com os mesmos parâmetros ele mostra que já tem uma instancia e imprime na tela uma bindException mas ela já veio tratada e eu não consigo capturar essa exceção, se eu conseguisse resolveria meu problema.

defina um diretorio e crie um arquivo de lock.

se o arquivo ja existir vc aborta. ao termino do seu programa vc remove.

se alguem apagar o arquivo de lock vc vai poder rodar de novo, mas ai vc vai la e da um tapa na mão q a pessoa não faz mais isso

Mais fácil uma tabela no banco de dados contendo start e stop…