Záznamy, které jste uchovali v user_change_notification_regs
tabulka musí být explicitně odstraněna, protože DBMS nesleduje toto 'Připojení JDBC, které připravilo toto připojení, je stále živé' což vyžaduje mechanismus srdečního tepu. Proto, když se váš server restartuje, musíte tyto záznamy explicitně smazat (zrušit registraci). Zde je příklad.
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);
}
Tento kód můžete jednoduše vložit do statického bloku třídy nebo inicializační metody, která bude provedena pouze jednou. Pokud nastavíte časový limit pro posluchač, ovladač na straně serveru Oracle aktivuje mechanismus srdečního tepu pro vaše připojení, což může mírně snížit výkon aplikace.