자바·JSP2012. 9. 25. 20:52

Java Application은 각각 별도의 jvm process로 동작하므로 상호 통신 및 정보를 주고받기에 여러가지 에로사항이 있다. 그로 인해 현재 동일한 프로그램이 실행되고 있는지를 체크하는 방법이 여러가지가 편법(?)으로 사용되고 있는데, 그 중 몇 가지를 나열해 보자면

1. Database Flag 값 변경.
2. 환경설정 파일 변경 혹은 파일 생성 후 락.
3. 임의의 사용하지 않는 port 할당.

 우선 2번은

      // lock 을 시도합니다.
      lock = channel.tryLock();

      // lock이 null이라는 것은 다른 JVM에서 이미 파일의 lock을 획득했다는 것입니다. 따라서 채널을 종료하고
      // 예외를 발생시켜 runnable의 값을 false로 유지시킵니다.
      if (lock == null) {
        channel.close();
        throw new Exception();
      }

이런 식으로 사용이 가능하다.

 

또 3번은

        try {
            isRun = new DatagramSocket(1103);
        } catch (SocketException e) {
            throw new MonitoringException();
        }

이런 식으로 사용이 가능하겠다.

Posted by 미랭군