Oracle database change notification.

0

Mam problem przy uruchomieniu oracle database change notification. Niby wszystko działa jednak przy jakiejkolwiek zmianie wiersza, onDatabaseChangeNotification zwraca informacje nie raz jak powinno a tyle razy ile akurat mam wierszy w tabeli. Nie mogę dopatrzeć się dlaczego. Np. mam wiersze w sprawdzanej tabeli:

1 aaa bbb
2 ccc ddd
3 eee ffff

Modyfikuje wiersz 2 z ddd na dddd, spodziewam się jednorazowej informacji:

zmieniono wiersz 2, tymczasem dostaje te informacje 3 razy ponieważ mam 3 wiersze w tabeli.

  public void run() throws Exception{

        OracleConnection conn = connect();
        Properties prop = new Properties();
        prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS, "true");
        DatabaseChangeRegistration dcr = conn.registerDatabaseChangeNotification(prop);
         
        try{
                 dcr.addListener(new DatabaseChangeListener() {
 
                    public void onDatabaseChangeNotification(DatabaseChangeEvent dce) {
                        
                        String affectedRow = dce.getTableChangeDescription()[0].getRowChangeDescription()[0].getRowid().stringValue();
                        RowOperation ro = dce.getTableChangeDescription()[0].getRowChangeDescription()[0].getRowOperation();  
                        
                        
                        System.out.println("Wiersz: "+affectedRow);
                        System.out.println("Operacja: "+ro);            
                    }
                });
             
                Statement stmt = conn.createStatement();
                ((OracleStatement) stmt).setDatabaseChangeRegistration(dcr);
                
                ResultSet rs = stmt.executeQuery("select * from ZLECENIA where ID=1");      
                while (rs.next()) {}
                
                rs.close();
                stmt.close();}
        catch(SQLException ex){
                if (conn != null){
                conn.unregisterDatabaseChangeNotification(dcr);
                conn.close();}

            throw ex;}
    }

Rezultat:

Wiersz: AAAFIGAAEAAAAENAAD
Operacja: UPDATE
Wiersz: AAAFIGAAEAAAAENAAD
Operacja: UPDATE
Wiersz: AAAFIGAAEAAAAENAAD
Operacja: UPDATE
Wiersz: AAAFIGAAEAAAAENAAD
Operacja: UPDATE
Wiersz: AAAFIGAAEAAAAENAAD
Operacja: UPDATE
Wiersz: AAAFIGAAEAAAAENAAD
Operacja: UPDATE
Wiersz: AAAFIGAAEAAAAENAAD
Operacja: UPDATE
Wiersz: AAAFIGAAEAAAAENAAD
Operacja: UPDATE
Wiersz: AAAFIGAAEAAAAENAAD

Nie wiem dlaczego zwraca to tyle razy

0

NIe widze w tym kodzie update'a. Moża zapinasz tyle razy listenera

1 użytkowników online, w tym zalogowanych: 0, gości: 1