PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

सुनो/सूचित करें pgconnection जावा नीचे चला जाता है?

अधिसूचना श्रोताओं को आंतरिक रूप से उस पुस्तकालय द्वारा कमजोर संदर्भों के रूप में बनाए रखा जाता है जिसका अर्थ है कि आपको बाहरी रूप से एक कठिन संदर्भ रखना होगा ताकि वे कचरा एकत्र न हों। बेसिक कॉन्टेक्स्ट क्लास लाइन 642 - 655 देखें:

public void addNotificationListener(String name, String channelNameFilter, NotificationListener listener) {

    name = nullToEmpty(name);
    channelNameFilter = channelNameFilter != null ? channelNameFilter : ".*";

    Pattern channelNameFilterPattern = Pattern.compile(channelNameFilter);

    NotificationKey key = new NotificationKey(name, channelNameFilterPattern);

    synchronized (notificationListeners) {
      notificationListeners.put(key, new WeakReference<NotificationListener>(listener));
    }

}

यदि जीसी आपके श्रोता को उठाता है, तो कमजोर संदर्भ पर "प्राप्त" करने के लिए कॉल शून्य वापस आ जाएगी और 690 - 710 की पंक्तियों से दिखाई देने वाली आग नहीं लगेगी।

  @Override
  public synchronized void reportNotification(int processId, String channelName, String payload) {

    Iterator<Map.Entry<NotificationKey, WeakReference<NotificationListener>>> iter = notificationListeners.entrySet().iterator();
    while (iter.hasNext()) {

      Map.Entry<NotificationKey, WeakReference<NotificationListener>> entry = iter.next();

      NotificationListener listener = entry.getValue().get();
      if (listener == null) {

        iter.remove();
      }
      else if (entry.getKey().channelNameFilter.matcher(channelName).matches()) {

        listener.notification(processId, channelName, payload);
      }

    }

}

इसे ठीक करने के लिए, अपने सूचना श्रोताओं को इस प्रकार जोड़ें:

/// Do not let this reference go out of scope!
    PGNotificationListener listener = new PGNotificationListener() {

    @Override
    public void notification(int processId, String channelName, String payload) {
        // interesting code
    };
};
    pgConnection.addNotificationListener(listener);

मेरी राय में कमजोर संदर्भों के लिए काफी अजीब उपयोग-मामला...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. AWS-Postgres सर्वर को हरोकू होस्टिंग के साथ स्प्रिंग बूट एप्लिकेशन से कनेक्ट करने में विफल

  2. डेबियन/उबंटू पर एक पोस्टग्रेएसक्यूएल प्रतिकृति सेटअप बनाना

  3. PostgreSQL में टेबल पर DELETE अक्षम करें?

  4. असंगत पोस्टग्रेएसक्यूएल दास का पुनर्निर्माण कैसे करें

  5. बिंदु से बहुभुज तक की न्यूनतम दूरी कैसे ज्ञात करें?