Kamis, 01 November 2012

Check internet connection using UTL_TCP

Pertanyaan yang muncul pertama kali kenapa kita harus melakukan cek ini di level database? well..anda tahu bahwa APEX adalah aplikasi database. Jadi kebutuhan ini sangat memungkinkan.
Contoh : saat kita memakai item plugin google recaptcha jelas hal tersebut membutuhkan koneksi internet ke google untuk mengaktifkan plugin tersebut bukan?.

Jadi kita bisa gunakan solusi UTL_TCP untuk digunakan dalam pengecekan kondisi apakah aplikasi sekarang sedang bisa akses internet atau tidak.
  1. Pastikan anda memberi akses ACL google.co.id (contoh) jika memakai 11g.
  2. Grant akses UTL_TCP ke schema ybs.
  3. Buatlah sebuah function seperti berikut :
  4. CREATE OR REPLACE FUNCTION PING_INTERNET(P_HOST_NAME VARCHAR2, P_PORT NUMBER DEFAULT 1000) RETURN VARCHAR2
      IS  
        tcpConnection  UTL_TCP.CONNECTION;  --TCP/IP connection to the server    
        C_PING_OK           CONSTANT VARCHAR2(10)  := 'OK';
        C_PING_ERROR        CONSTANT VARCHAR2(10)  := 'ERROR';
      BEGIN
        tcpConnection := UTL_TCP.open_connection(remote_host => p_HOST_NAME, 
                                                 remote_port => p_PORT,tx_timeout=> 5);
        UTL_TCP.close_connection(tcpConnection);    
        
        RETURN C_PING_OK;    
      EXCEPTION 
        WHEN UTL_TCP.NETWORK_ERROR THEN
          IF( UPPER(SQLERRM) LIKE '%HOST%' )THEN 
            RETURN C_PING_ERROR;        
          ELSIF(UPPER(SQLERRM) LIKE '%LISTENER%' )THEN
            RETURN C_PING_OK;        
          ELSE
            RAISE;
          END IF;            
      END PING_INTERNET;
    /
    
  5. Gunakan dalam condition di aplikasi APEX untuk me-check apakah jaringan terkoneksi ke internet:
  6. select ping_internet('google.co.id', 80) from dual; 

Tidak ada komentar :

Posting Komentar