    001    /*****************************************************************************
    002     * Copyright (c) PicoContainer Organization. All rights reserved.            *
    003     * ------------------------------------------------------------------------- *
    004     * The software in this package is published under the terms of the BSD      *
    005     * style license a copy of which has been included with this distribution in *
    006     * the LICENSE.txt file.                                                     *
    007     *                                                                           *
    008     *****************************************************************************/
    009    package org.picocontainer.gems.jndi;
    010
    011    import javax.naming.InitialContext;
    012    import javax.naming.NamingException;
    013
    014    import org.picocontainer.ComponentAdapter;
    015    import org.picocontainer.behaviors.Stored;
    016
    017    /**
    018     * exposes component to JNDI basically does same thing as cached, but uses JNDI
    019     * reference instead. Maybe Cached shall be refactored? as there is little new
    020     * functionality.
    021     *
    022     * @author k.pribluda
    023     *
    024     */
    025    @SuppressWarnings("serial")
    026    public class JNDIExposed<T> extends Stored<T> {
    027
    028
    029            /**
    030             * construct reference itself using vanilla initial context.
    031             * JNDI name is stringified component key
    032             * @param delegate
    033             *            delegate adapter
    034
    035             * @throws NamingException
    036             */
    037            public JNDIExposed(final ComponentAdapter<T> delegate) throws NamingException {
    038                    super(delegate, new JNDIObjectReference<Stored.Instance<T>>(delegate.getComponentKey()
    039                                    .toString(), new InitialContext()));
    040            }
    041
    042            /**
    043             * create with provided reference
    044             *
    045             * @param delegate
    046             * @param instanceReference
    047             */
    048            public JNDIExposed(final ComponentAdapter<T> delegate,
    049                            final JNDIObjectReference<Stored.Instance<T>> instanceReference) {
    050                    super(delegate, instanceReference);
    051            }
    052
    053            /**
    054             * create adapter with desired name
    055             * @param delegate
    056             * @param name
    057             * @throws NamingException
    058             */
    059            public JNDIExposed(final ComponentAdapter<T> delegate, final String name) throws NamingException {
    060                    super(delegate, new JNDIObjectReference<Stored.Instance<T>>(name, new InitialContext()));
    061            }
    062
    063            @Override
    064            public String toString() {
    065                    return "JNDI" + getDelegate().toString();
    066            }
    067    }