Package org.apache.activemq.artemis.jndi

## Class ReadOnlyContext

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

- All Implemented Interfaces:
    `java.io.Serializable`, `javax.naming.Context`
  Direct Known Subclasses:
    `LazyCreateContext`

      public class ReadOnlyContext
      extends java.lang.Object
      implements javax.naming.Context, java.io.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 | Description
    --- | --- | ---
    `protected java.util.Map<java.lang.String,​java.lang.Object>` | `bindings` |
    `protected java.util.Hashtable<java.lang.String,​java.lang.Object>` | `environment` |
    `protected static javax.naming.NameParser` | `NAME_PARSER` |
    `static java.lang.String` | `SEPARATOR` |
    `protected java.util.Map<java.lang.String,​java.lang.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 | Description
    --- | --- | ---
    `` | `ReadOnlyContext()` |
    `` | `ReadOnlyContext​(java.util.Hashtable env)` |
    `` | `ReadOnlyContext​(java.util.Hashtable environment, java.util.Map<java.lang.String,​java.lang.Object> bindings)` |
    `` | `ReadOnlyContext​(java.util.Hashtable environment, java.util.Map<java.lang.String,​java.lang.Object> bindings, java.lang.String nameInNamespace)` |
    `protected` | `ReadOnlyContext​(ReadOnlyContext clone, java.util.Hashtable env)` |
    `protected` | `ReadOnlyContext​(ReadOnlyContext clone, java.util.Hashtable<java.lang.String,​java.lang.Object> env, java.lang.String nameInNamespace)` |

  - ### Method Summary

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

      See Also:
        Constant Field Values

    - #### NAME_PARSER

          protected static final javax.naming.NameParser NAME_PARSER

    - #### environment

          protected final java.util.Hashtable<java.lang.String,​java.lang.Object> environment

    - #### bindings

          protected final java.util.Map<java.lang.String,​java.lang.Object> bindings

    - #### treeBindings

          protected final java.util.Map<java.lang.String,​java.lang.Object> treeBindings

  - ### Constructor Detail

    - #### ReadOnlyContext

          public ReadOnlyContext()

    - #### ReadOnlyContext

          public ReadOnlyContext​(java.util.Hashtable env)

    - #### ReadOnlyContext

          public ReadOnlyContext​(java.util.Hashtable environment,
                                 java.util.Map<java.lang.String,​java.lang.Object> bindings)

    - #### ReadOnlyContext

          public ReadOnlyContext​(java.util.Hashtable environment,
                                 java.util.Map<java.lang.String,​java.lang.Object> bindings,
                                 java.lang.String nameInNamespace)

    - #### ReadOnlyContext

          protected ReadOnlyContext​(ReadOnlyContext clone,
                                    java.util.Hashtable env)

    - #### ReadOnlyContext

          protected ReadOnlyContext​(ReadOnlyContext clone,
                                    java.util.Hashtable<java.lang.String,​java.lang.Object> env,
                                    java.lang.String nameInNamespace)

  - ### Method Detail

    - #### freeze

          public void freeze()

    - #### internalBind

          protected java.util.Map<java.lang.String,​java.lang.Object> internalBind​(java.lang.String name,
                                                                                        java.lang.Object value)
                                                                                 throws javax.naming.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:
        `javax.naming.NamingException`

    - #### newContext

          protected ReadOnlyContext newContext()

    - #### addToEnvironment

          public java.lang.Object addToEnvironment​(java.lang.String propName,
                                                   java.lang.Object propVal)
                                            throws javax.naming.NamingException

      Specified by:
        `addToEnvironment` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### getEnvironment

          public java.util.Hashtable<java.lang.String,​java.lang.Object> getEnvironment()
                                                                                      throws javax.naming.NamingException

      Specified by:
        `getEnvironment` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### removeFromEnvironment

          public java.lang.Object removeFromEnvironment​(java.lang.String propName)
                                                 throws javax.naming.NamingException

      Specified by:
        `removeFromEnvironment` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### lookup

          public java.lang.Object lookup​(java.lang.String name)
                                  throws javax.naming.NamingException

      Specified by:
        `lookup` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### lookup

          public java.lang.Object lookup​(javax.naming.Name name)
                                  throws javax.naming.NamingException

      Specified by:
        `lookup` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### lookupLink

          public java.lang.Object lookupLink​(java.lang.String name)
                                      throws javax.naming.NamingException

      Specified by:
        `lookupLink` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### composeName

          public javax.naming.Name composeName​(javax.naming.Name name,
                                               javax.naming.Name prefix)
                                        throws javax.naming.NamingException

      Specified by:
        `composeName` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### composeName

          public java.lang.String composeName​(java.lang.String name,
                                              java.lang.String prefix)
                                       throws javax.naming.NamingException

      Specified by:
        `composeName` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### list

          public javax.naming.NamingEnumeration<javax.naming.NameClassPair> list​(java.lang.String name)
                                                                          throws javax.naming.NamingException

      Specified by:
        `list` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### listBindings

          public javax.naming.NamingEnumeration<javax.naming.Binding> listBindings​(java.lang.String name)
                                                                            throws javax.naming.NamingException

      Specified by:
        `listBindings` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### lookupLink

          public java.lang.Object lookupLink​(javax.naming.Name name)
                                      throws javax.naming.NamingException

      Specified by:
        `lookupLink` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### list

          public javax.naming.NamingEnumeration<javax.naming.NameClassPair> list​(javax.naming.Name name)
                                                                          throws javax.naming.NamingException

      Specified by:
        `list` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### listBindings

          public javax.naming.NamingEnumeration<javax.naming.Binding> listBindings​(javax.naming.Name name)
                                                                            throws javax.naming.NamingException

      Specified by:
        `listBindings` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### bind

          public void bind​(javax.naming.Name name,
                           java.lang.Object obj)
                    throws javax.naming.NamingException

      Specified by:
        `bind` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### bind

          public void bind​(java.lang.String name,
                           java.lang.Object obj)
                    throws javax.naming.NamingException

      Specified by:
        `bind` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### close

          public void close()
                     throws javax.naming.NamingException

      Specified by:
        `close` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### createSubcontext

          public javax.naming.Context createSubcontext​(javax.naming.Name name)
                                                throws javax.naming.NamingException

      Specified by:
        `createSubcontext` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### createSubcontext

          public javax.naming.Context createSubcontext​(java.lang.String name)
                                                throws javax.naming.NamingException

      Specified by:
        `createSubcontext` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### destroySubcontext

          public void destroySubcontext​(javax.naming.Name name)
                                 throws javax.naming.NamingException

      Specified by:
        `destroySubcontext` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### destroySubcontext

          public void destroySubcontext​(java.lang.String name)
                                 throws javax.naming.NamingException

      Specified by:
        `destroySubcontext` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### getNameInNamespace

          public java.lang.String getNameInNamespace()
                                              throws javax.naming.NamingException

      Specified by:
        `getNameInNamespace` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### getNameParser

          public javax.naming.NameParser getNameParser​(javax.naming.Name name)
                                                throws javax.naming.NamingException

      Specified by:
        `getNameParser` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### getNameParser

          public javax.naming.NameParser getNameParser​(java.lang.String name)
                                                throws javax.naming.NamingException

      Specified by:
        `getNameParser` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### rebind

          public void rebind​(javax.naming.Name name,
                             java.lang.Object obj)
                      throws javax.naming.NamingException

      Specified by:
        `rebind` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### rebind

          public void rebind​(java.lang.String name,
                             java.lang.Object obj)
                      throws javax.naming.NamingException

      Specified by:
        `rebind` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### rename

          public void rename​(javax.naming.Name oldName,
                             javax.naming.Name newName)
                      throws javax.naming.NamingException

      Specified by:
        `rename` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### rename

          public void rename​(java.lang.String oldName,
                             java.lang.String newName)
                      throws javax.naming.NamingException

      Specified by:
        `rename` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### unbind

          public void unbind​(javax.naming.Name name)
                      throws javax.naming.NamingException

      Specified by:
        `unbind` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`

    - #### unbind

          public void unbind​(java.lang.String name)
                      throws javax.naming.NamingException

      Specified by:
        `unbind` in interface `javax.naming.Context`
      Throws:
        `javax.naming.NamingException`