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 }