@Override public Context createSubcontext(String name) throws NamingException { name = trimSlashes(name); if (map.get(name) != null) { throw new NameAlreadyBoundException(name); } InVMContext c = new InVMContext(getNameInNamespace()); map.put(name, c); return c; }
@Override public void destroySubcontext(final Name name) throws NamingException { destroySubcontext(name.toString()); }
@Override public NameParser getNameParser(final Name name) throws NamingException { return getNameParser(name.toString()); }
@Override public NamingEnumeration<Binding> listBindings(String contextName) throws NamingException { contextName = trimSlashes(contextName); if (!"".equals(contextName) && !".".equals(contextName)) { try { return ((InVMContext) lookup(contextName)).listBindings(""); } catch (Throwable t) { throw new NamingException(t.getMessage()); } } List<Binding> l = new ArrayList<>(); for (String name : map.keySet()) { Object object = map.get(name); l.add(new Binding(name, object)); } return new NamingEnumerationImpl(l.iterator()); }
private void internalBind(String name, final Object obj, final boolean rebind) throws NamingException { InVMContext.log.debug("Binding " + name + " obj " + obj + " rebind " + rebind); name = trimSlashes(name); int i = name.lastIndexOf("/"); InVMContext c = this; if (i != -1) { String path = name.substring(0, i); c = (InVMContext) lookup(path); } name = name.substring(i + 1); if (!rebind && c.map.get(name) != null) { throw new NameAlreadyBoundException(name); } c.map.put(name, obj); }
@Override public void unbind(String name) throws NamingException { name = trimSlashes(name); int i = name.indexOf("/"); boolean terminal = i == -1; if (terminal) { map.remove(name); } else { String tok = name.substring(0, i); InVMContext c = (InVMContext) map.get(tok); if (c == null) { throw new NameNotFoundException("Context not found: " + tok); } c.unbind(name.substring(i)); } }
ic = new InVMContext(s); ic.bind("java:/", new InVMContext(s)); InVMInitialContextFactory.initialContexts.put(new Integer(serverIndex), ic);
@Override public void rebind(final String name, final Object obj) throws NamingException { internalBind(name, obj, true); }
@Override public void unbind(final Name name) throws NamingException { unbind(name.toString()); }
@Override public void destroySubcontext(final String name) throws NamingException { map.remove(trimSlashes(name)); }
@Override public Object lookup(String name) throws NamingException { name = trimSlashes(name); int i = name.indexOf("/"); String tok = i == -1 ? name : name.substring(0, i); Object value = map.get(tok); if (value == null) { throw new NameNotFoundException("Name not found: " + tok); } if (value instanceof InVMContext && i != -1) { return ((InVMContext) value).lookup(name.substring(i)); } if (value instanceof Reference) { Reference ref = (Reference) value; RefAddr refAddr = ref.get("nns"); // we only deal with references create by NonSerializableFactory String key = (String) refAddr.getContent(); return NonSerializableFactory.lookup(key); } else { return value; } }
@Override public void bind(final String name, final Object obj) throws NamingException { internalBind(name, obj, false); }