org.apache.activemq.artemis.jndi

## Class ReadOnlyContext

- java.lang.Object
- - org.apache.activemq.artemis.jndi.ReadOnlyContext

- All Implemented Interfaces:
    Serializable, Context
  Direct Known Subclasses:
    LazyCreateContext

      public class ReadOnlyContext
      extends Object
      implements Context, Serializable

  A read-only Context

  This version assumes it and all its subcontext are read-only and any attempt to modify (e.g. through bind) will result in an OperationNotSupportedException. Each Context in the tree builds a cache of the entries in all sub-contexts to optimise the performance of lookup.

  This implementation is intended to optimise the performance of lookup(String) to about the level of a HashMap get. It has been observed that the scheme resolution phase performed by the JVM takes considerably longer, so for optimum performance lookups should be coded like:

  `Context componentContext = (Context)new InitialContext().lookup("java:comp"); String envEntry = (String) componentContext.lookup("env/myEntry"); String envEntry2 = (String) componentContext.lookup("env/myEntry2");`
  See Also:
    Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Map<String,Object>` | `bindings`
    `protected Hashtable<String,Object>` | `environment`
    `protected static NameParser` | `NAME_PARSER`
    `static String` | `SEPARATOR`
    `protected Map<String,Object>` | `treeBindings`

    - ### Fields inherited from interface javax.naming.Context

      `APPLET, AUTHORITATIVE, BATCHSIZE, DNS_URL, INITIAL_CONTEXT_FACTORY, LANGUAGE, OBJECT_FACTORIES, PROVIDER_URL, REFERRAL, SECURITY_AUTHENTICATION, SECURITY_CREDENTIALS, SECURITY_PRINCIPAL, SECURITY_PROTOCOL, STATE_FACTORIES, URL_PKG_PREFIXES`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `` | `ReadOnlyContext()`
    `` | `ReadOnlyContext(Hashtable env)`
    `` | `ReadOnlyContext(Hashtable environment, Map<String,Object> bindings)`
    `` | `ReadOnlyContext(Hashtable environment, Map<String,Object> bindings, String nameInNamespace)`
    `protected` | `ReadOnlyContext(ReadOnlyContext clone, Hashtable env)`
    `protected` | `ReadOnlyContext(ReadOnlyContext clone, Hashtable<String,Object> env, String nameInNamespace)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `Object` | `addToEnvironment(String propName, Object propVal)`
    `void` | `bind(Name name, Object obj)`
    `void` | `bind(String name, Object obj)`
    `void` | `close()`
    `Name` | `composeName(Name name, Name prefix)`
    `String` | `composeName(String name, String prefix)`
    `Context` | `createSubcontext(Name name)`
    `Context` | `createSubcontext(String name)`
    `void` | `destroySubcontext(Name name)`
    `void` | `destroySubcontext(String name)`
    `void` | `freeze()`
    `Hashtable<String,Object>` | `getEnvironment()`
    `String` | `getNameInNamespace()`
    `NameParser` | `getNameParser(Name name)`
    `NameParser` | `getNameParser(String name)`
    `protected Map<String,Object>` | `internalBind(String name, Object value)` internalBind is intended for use only during setup or possibly by suitably synchronized superclasses.
    `NamingEnumeration<NameClassPair>` | `list(Name name)`
    `NamingEnumeration<NameClassPair>` | `list(String name)`
    `NamingEnumeration<Binding>` | `listBindings(Name name)`
    `NamingEnumeration<Binding>` | `listBindings(String name)`
    `Object` | `lookup(Name name)`
    `Object` | `lookup(String name)`
    `Object` | `lookupLink(Name name)`
    `Object` | `lookupLink(String name)`
    `protected ReadOnlyContext` | `newContext()`
    `void` | `rebind(Name name, Object obj)`
    `void` | `rebind(String name, Object obj)`
    `Object` | `removeFromEnvironment(String propName)`
    `void` | `rename(Name oldName, Name newName)`
    `void` | `rename(String oldName, String newName)`
    `void` | `unbind(Name name)`
    `void` | `unbind(String name)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### SEPARATOR

          public static final String SEPARATOR

      See Also:
        Constant Field Values

    - #### NAME_PARSER

          protected static final NameParser NAME_PARSER

    - #### environment

          protected final Hashtable<String,Object> environment

    - #### bindings

          protected final Map<String,Object> bindings

    - #### treeBindings

          protected final Map<String,Object> treeBindings

  - ### Constructor Detail

    - #### ReadOnlyContext

          public ReadOnlyContext()

    - #### ReadOnlyContext

          public ReadOnlyContext(Hashtable env)

    - #### ReadOnlyContext

          public ReadOnlyContext(Hashtable environment,
                                 Map<String,Object> bindings)

    - #### ReadOnlyContext

          public ReadOnlyContext(Hashtable environment,
                                 Map<String,Object> bindings,
                                 String nameInNamespace)

    - #### ReadOnlyContext

          protected ReadOnlyContext(ReadOnlyContext clone,
                                    Hashtable env)

    - #### ReadOnlyContext

          protected ReadOnlyContext(ReadOnlyContext clone,
                                    Hashtable<String,Object> env,
                                    String nameInNamespace)

  - ### Method Detail

    - #### freeze

          public void freeze()

    - #### internalBind

          protected Map<String,Object> internalBind(String name,
                                                    Object value)
                                             throws NamingException

      internalBind is intended for use only during setup or possibly by suitably synchronized superclasses. It binds every possible lookup into a map in each context. To do this, each context strips off one name segment and if necessary creates a new context for it. Then it asks that context to bind the remaining name. It returns a map containing all the bindings from the next context, plus the context it just created (if it in fact created it). (the names are suitably extended by the segment originally lopped off).
      Parameters:
        `name` -
        `value` -
      Returns:
      Throws:
        `NamingException`

    - #### newContext

          protected ReadOnlyContext newContext()

    - #### addToEnvironment

          public Object addToEnvironment(String propName,
                                         Object propVal)
                                  throws NamingException

      Specified by:
        `addToEnvironment` in interface `Context`
      Throws:
        `NamingException`

    - #### getEnvironment

          public Hashtable<String,Object> getEnvironment()
                                                  throws NamingException

      Specified by:
        `getEnvironment` in interface `Context`
      Throws:
        `NamingException`

    - #### removeFromEnvironment

          public Object removeFromEnvironment(String propName)
                                       throws NamingException

      Specified by:
        `removeFromEnvironment` in interface `Context`
      Throws:
        `NamingException`

    - #### lookup

          public Object lookup(String name)
                        throws NamingException

      Specified by:
        `lookup` in interface `Context`
      Throws:
        `NamingException`

    - #### lookup

          public Object lookup(Name name)
                        throws NamingException

      Specified by:
        `lookup` in interface `Context`
      Throws:
        `NamingException`

    - #### lookupLink

          public Object lookupLink(String name)
                            throws NamingException

      Specified by:
        `lookupLink` in interface `Context`
      Throws:
        `NamingException`

    - #### composeName

          public Name composeName(Name name,
                                  Name prefix)
                           throws NamingException

      Specified by:
        `composeName` in interface `Context`
      Throws:
        `NamingException`

    - #### composeName

          public String composeName(String name,
                                    String prefix)
                             throws NamingException

      Specified by:
        `composeName` in interface `Context`
      Throws:
        `NamingException`

    - #### list

          public NamingEnumeration<NameClassPair> list(String name)
                                                throws NamingException

      Specified by:
        `list` in interface `Context`
      Throws:
        `NamingException`

    - #### listBindings

          public NamingEnumeration<Binding> listBindings(String name)
                                                  throws NamingException

      Specified by:
        `listBindings` in interface `Context`
      Throws:
        `NamingException`

    - #### lookupLink

          public Object lookupLink(Name name)
                            throws NamingException

      Specified by:
        `lookupLink` in interface `Context`
      Throws:
        `NamingException`

    - #### list

          public NamingEnumeration<NameClassPair> list(Name name)
                                                throws NamingException

      Specified by:
        `list` in interface `Context`
      Throws:
        `NamingException`

    - #### listBindings

          public NamingEnumeration<Binding> listBindings(Name name)
                                                  throws NamingException

      Specified by:
        `listBindings` in interface `Context`
      Throws:
        `NamingException`

    - #### bind

          public void bind(Name name,
                           Object obj)
                    throws NamingException

      Specified by:
        `bind` in interface `Context`
      Throws:
        `NamingException`

    - #### bind

          public void bind(String name,
                           Object obj)
                    throws NamingException

      Specified by:
        `bind` in interface `Context`
      Throws:
        `NamingException`

    - #### close

          public void close()
                     throws NamingException

      Specified by:
        `close` in interface `Context`
      Throws:
        `NamingException`

    - #### createSubcontext

          public Context createSubcontext(Name name)
                                   throws NamingException

      Specified by:
        `createSubcontext` in interface `Context`
      Throws:
        `NamingException`

    - #### createSubcontext

          public Context createSubcontext(String name)
                                   throws NamingException

      Specified by:
        `createSubcontext` in interface `Context`
      Throws:
        `NamingException`

    - #### destroySubcontext

          public void destroySubcontext(Name name)
                                 throws NamingException

      Specified by:
        `destroySubcontext` in interface `Context`
      Throws:
        `NamingException`

    - #### destroySubcontext

          public void destroySubcontext(String name)
                                 throws NamingException

      Specified by:
        `destroySubcontext` in interface `Context`
      Throws:
        `NamingException`

    - #### getNameInNamespace

          public String getNameInNamespace()
                                    throws NamingException

      Specified by:
        `getNameInNamespace` in interface `Context`
      Throws:
        `NamingException`

    - #### getNameParser

          public NameParser getNameParser(Name name)
                                   throws NamingException

      Specified by:
        `getNameParser` in interface `Context`
      Throws:
        `NamingException`

    - #### getNameParser

          public NameParser getNameParser(String name)
                                   throws NamingException

      Specified by:
        `getNameParser` in interface `Context`
      Throws:
        `NamingException`

    - #### rebind

          public void rebind(Name name,
                             Object obj)
                      throws NamingException

      Specified by:
        `rebind` in interface `Context`
      Throws:
        `NamingException`

    - #### rebind

          public void rebind(String name,
                             Object obj)
                      throws NamingException

      Specified by:
        `rebind` in interface `Context`
      Throws:
        `NamingException`

    - #### rename

          public void rename(Name oldName,
                             Name newName)
                      throws NamingException

      Specified by:
        `rename` in interface `Context`
      Throws:
        `NamingException`

    - #### rename

          public void rename(String oldName,
                             String newName)
                      throws NamingException

      Specified by:
        `rename` in interface `Context`
      Throws:
        `NamingException`

    - #### unbind

          public void unbind(Name name)
                      throws NamingException

      Specified by:
        `unbind` in interface `Context`
      Throws:
        `NamingException`

    - #### unbind

          public void unbind(String name)
                      throws NamingException

      Specified by:
        `unbind` in interface `Context`
      Throws:
        `NamingException`

Copyright © 2020 The Apache Software Foundation. All rights reserved.