Example usage for com.google.common.base FinalizablePhantomReference FinalizablePhantomReference

List of usage examples for com.google.common.base FinalizablePhantomReference FinalizablePhantomReference

Introduction

In this page you can find the example usage for com.google.common.base FinalizablePhantomReference FinalizablePhantomReference.

Prototype

protected FinalizablePhantomReference(T referent, FinalizableReferenceQueue queue) 

Source Link

Document

Constructs a new finalizable phantom reference.

Usage

From source file:eu.esdihumboldt.hale.common.instance.orient.storage.DatabaseHandle.java

/**
 * Create a database handle/*ww  w  . ja va 2 s  .c  om*/
 * 
 * @param database the database connection
 */
public DatabaseHandle(final ODatabaseDocumentTx database) {
    super();

    this.database = database;

    handleReferences.add(new FinalizablePhantomReference<DatabaseHandle>(this, referenceQueue) {

        @Override
        public void finalizeReferent() {
            handleReferences.remove(this);
            try {
                if (!database.isClosed()) {
                    database.close();
                }
            } catch (Exception e) {
                // ignore
            }
            log.info("Closed garbage collected database handle");
        }
    });
}

From source file:org.opendaylight.yangtools.yang.model.repo.util.InMemorySchemaSourceCache.java

@Override
protected void offer(final T source) {
    final T present = cache.getIfPresent(source.getIdentifier());
    if (present == null) {
        cache.put(source.getIdentifier(), source);

        final SchemaSourceRegistration<T> reg = register(source.getIdentifier());
        final FinalizablePhantomReference<T> ref = new FinalizablePhantomReference<T>(source, queue) {
            @Override/*from w w w  . j a v  a2 s  .  c  om*/
            public void finalizeReferent() {
                reg.close();
                regs.remove(this);
            }
        };

        regs.add(ref);
    }
}

From source file:eu.esdihumboldt.hale.common.instance.orient.storage.DatabaseHandle.java

/**
 * Add an object that references the database connection.
 * /*  w  w  w. j a  va 2 s  .  c  o m*/
 * It is preferred to use {@link #addInstance(Instance)} or
 * {@link #addGroup(Group)} instead.
 * 
 * @param object the object referencing the database
 */
public synchronized void addReference(Object object) {
    FinalizablePhantomReference<?> ref = new FinalizablePhantomReference<Object>(object, referenceQueue) {

        @Override
        public void finalizeReferent() {
            references.remove(this);
            removeReference();
        }
    };
    references.add(ref);
    count++;
}