Catatan yang Anda simpan di user_change_notification_regs
tabel harus dihapus secara eksplisit karena DBMS tidak melacak 'Koneksi JDBC yang menyiapkan koneksi ini masih hidup' yang membutuhkan mekanisme detak jantung. Oleh karena itu ketika server Anda restart, Anda harus secara eksplisit menghapus (membatalkan pendaftaran) catatan tersebut. Ini contohnya.
try (Connection conn = ConnManager.getConnection();) {
if (conn.isWrapperFor(OracleConnection.class)) {
try (OracleConnection oracleConnection = conn.unwrap(OracleConnection.class);
Statement stmt = oracleConnection.createStatement()) {
ResultSet rs = stmt.executeQuery("select regid,callback from USER_CHANGE_NOTIFICATION_REGS");
while (rs.next()) {
long regid = rs.getLong(1);
String callback = rs.getString(2);
((OracleConnection) stmt.getConnection()).unregisterDatabaseChangeNotification(regid, callback);
}
}
}
} catch (SQLException ex) {
Logger.getLogger(TableBase.class.getName()).log(Level.SEVERE, null, ex);
}
Anda cukup meletakkan kode ini di blok statis kelas atau metode inisialisasi yang akan dieksekusi hanya sekali. Jika Anda menyetel batas waktu untuk pendengar, driver sisi server Oracle mengaktifkan mekanisme detak jantung untuk koneksi Anda yang dapat sedikit menurunkan kinerja aplikasi.