Что такое драйвер Типа 4 XA?

В ссылочном графике существует цикл. Ссылки B и ссылки B A. Сборщик "мусора" будет обнаруживать циклы и видеть, когда не будет никаких внешних ссылок на A и B, и тогда не соберут обоих.

Попытка использовать финализатор здесь является неправильной. Если B уничтожается, ссылка на A также удаляется.

<час>

оператор: "Предположите, что экземпляр будет совместно использован с некоторыми другими объектами также и переживет экземпляр B". является неправильным. Единственный путь, который произойдет, состоит в том, если слушатель явно удален из куда-нибудь кроме финализатора. Если ссылки на A розданы, который будет подразумевать ссылку на B, и B не будет собран "мусор", потому что существуют внешние ссылки на цикл A-B.

<час>

Дальнейшее обновление:

, Если Вы хотите повредить цикл и не потребовать, чтобы B явно удалил слушателя, можно использовать WeakReference. Что-то вроде этого:

class A {
    void addListener(Listener obj);
    void removeListener(Listener obj);
}

class B {
    private static class InnerListener implements Listener {
        private WeakReference m_owner;
        private WeakReference m_source;

        InnerListener(B owner, A source) {
            m_owner = new WeakReference(owner);
            m_source = new WeakReference(source);
        }

        void listen() {
            // Handling reentrancy on this function left as an excercise.
            B b = (B)m_owner.get();
            if (b == null) {
                if (m_source != null) {
                    A a = (A) m_source.get();
                    if (a != null) {
                        a.removeListener(this);
                        m_source = null;
                    }
                }

                return;
            }
            ...
        }
    }

    private A a;

    B() {
        a = new A();
        a.addListener(new InnerListener(this, a));
    }
}

Мог быть далее обобщен в случае необходимости через несколько классов.

8
задан Rakesh Juyal 3 November 2009 в 17:17
поделиться

3 ответа

From this blog entry.

An XA transaction, in the most general terms, is a "global transaction" that may span multiple resources.

That is, a transaction running across (say) 2 databases. So, for example, insertions can be managed across those 2 databases and committed/rolled back atomically.

The "type 4" refers to a native Java JDBC driver converting directly into the database protocol. See here for more details

15
ответ дан 5 December 2019 в 06:38
поделиться
  • Type 4: All Native Java

  • XA: stands for Extensible Architecture which is refered mostly for a 2-phase-commit protocol - see wikipedia. Short: A standard protocol for a global transaction between one transaction coordinator and several transaction managers. Sometimes they are also called transaction monitors. It's pretty slow so should avoid it if you don't really need it. But well, at our customer we mostly need it :(

8
ответ дан 5 December 2019 в 06:38
поделиться

Основным преимуществом XA является то, что он может получить доступ к нескольким базам данных за одно соединение / транзакцию.

2
ответ дан 5 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: