All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.jersey.server.impl.application.CloseableServiceFactory Maven / Gradle / Ivy

There is a newer version: 1.19.4
Show newest version
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.sun.jersey.server.impl.application;

import com.sun.jersey.spi.CloseableService;
import com.sun.jersey.api.core.HttpContext;
import com.sun.jersey.core.spi.component.ComponentContext;
import com.sun.jersey.core.spi.component.ComponentScope;
import com.sun.jersey.spi.inject.Injectable;
import com.sun.jersey.spi.inject.InjectableProvider;
import java.io.Closeable;
import java.lang.reflect.Type;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ws.rs.core.Context;

/**
 *
 * @author paulsandoz
 */
public class CloseableServiceFactory implements
        InjectableProvider, Injectable, CloseableService {
    private static final Logger LOGGER = Logger.getLogger(CloseableServiceFactory.class.getName());

    private final HttpContext context;

    public CloseableServiceFactory(@Context HttpContext context) {
        this.context = context;
    }

    // InjectableProvider

    public ComponentScope getScope() {
        return ComponentScope.Singleton;
    }

    public Injectable getInjectable(ComponentContext ic, Context a, Type c) {
        if (c != CloseableService.class)
           return null;

        return this;
    }

    // Injectable

    public CloseableService getValue() {
        return this;
    }

    // CloseableService
    
    public void add(Closeable c) {
        Set s = (Set)context.getProperties().
                get(CloseableServiceFactory.class.getName());
        if (s == null) {
            s = new HashSet();
            context.getProperties().put(CloseableServiceFactory.class.getName(), s);
        }

        s.add(c);
    }

    public void close(HttpContext context) {
        Set s = (Set)context.getProperties().
                get(CloseableServiceFactory.class.getName());
        if (s != null) {
            for (Closeable c : s) {
                try {
                    c.close();
                } catch (Exception ex) {
                    LOGGER.log(Level.SEVERE, "Unable to close", ex);
                }
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy