INCOMPATIBLE CHANGES

--
Make names of properties consistent.
"java." prefix. Each word separated by ".".

jndi.initialContextFactory -> java.naming.factory.initial
jndi.objectFactories -> java.naming.factory.object
jndi.urlfactory.pkgs -> java.naming.factory.url.pkgs
jndi.service.url -> java.naming.provider.url
jndi.dns.url -> java.naming.dns.url
jndi.service.authoritative -> java.naming.authoritative
jndi.service.batchsize -> java.naming.batchsize
jndi.service.followReferrals -> java.naming.referral (ignore, throw, follow)
jndi.service.security.* -> java.naming.security.*
jndi.service.language -> java.naming.language

-- 
Rename	DSContext to DirContext
	InitialDSContext to InitialDirContext
--
Rename AttributeSet to Attributes 
	InvalidAttributeSetException -> InvalidAttributesException
Use of 'Set' conflicts with Collections Framework's meaning of 'Set'.
--
Make Attributes's method names look like Map's
	getAttributeCount() -> size()

	void add(String, Object) throws AttributeInUseException
	void add(Attribute) throws AttributeInUseException
	void replace(String, Object)
	void replace(Attribute)
replaced by
	Object put(String, Object) 
	Object put(Attribute) 

which overwrites existing attribute if already in set and return it;
Returns null if not previously in set.	

	void remove(String) -> Object remove(String) (returns bound Attribute)

	getAttributeIds() -> getIDs()
	getAttributes() -> getAll()

Add Attributes constructors:
    public Attributes(String attrId, Object val); 
    public Attributes(String attrId, Object val, boolean ignoreCase);
--
Make Attribute's method names look like Set's
	attrId -> attrID
	getAttributeId() -> getID()

	getValues() -> getAll()
	getValue() -> get()
	getValueCount() -> size()

	void addValue(Object)
	void replaceValue(Object) -> boolean add(Object)
	void removeValue(Object) -> boolean remove(Object)
	void removeAllValues() -> void clear()

Add Attribute.get() for retrieving a single value from an attribute.
Throws NoSuchElementException if no values.

Added protected Attribute.Attribute() so that subclasses can
avoid allocation Vector.
--	
Make Name, CompositeName, CompoundName, Reference, methods look like List's

Name, CompositseName, CompoundName:
	getComponentCount() -> size()
	getComponents() -> Enumeration getAll() 
	getComponent(int) -> get(int)
	isPrefix(Name n) -> startsWith(Name n)
	isSuffix(Name n) -> endsWith(Name n)

	prependName(Name) -> boolean addAll(0, Name)
	appendName(Name) -> boolean addAll(Name)
	insertName(int, Name) -> boolean addAll(int, Name)

	prependComponent -> add(0, String)
	appendComponent -> add(String)
	insertComponent -> add(int, String)

	deleteComponent -> Object remove(int)

Reference
	getAddress(String) -> get(String)
	getAddress(int) -> get(int)
	getAddressCount() -> size()
	prependAddr(RefAddr) -> add(0, RefAddr)
	appendAddr(RefAddr) -> add(RefAddr)
	insertAddr(int, RefAddr) -> add(int, RefAddr)
	deleteAddr(int) -> Object remove(int)
	deleteAllAddress() -> clear()
--
Add throws NamingException clause to Attribute schema calls:
    public DirContext getAttributeSyntaxDefinition() throws NamingException;
    public DirContext getAttributeDefinition() throws NamingException;
--
Use Hashtable instead of Properties for environment properties.
This allows a simpler interface for updating them.

In Context, replace:
    public Properties addToEnvironment(Properties additions) 
	throws NamingException;
    public Properties removeFromEnvironment(Properties deletions) 
	throws NamingException;
with
    public Object addToEnvironment(String prop, Object value)
	throws NamingException;
    public Object removeFromEnvironment(String prop)
	throws NamingException;

Related changes
    Context.getEnvironment() returns Hashtable
    CannotProceedException.environment now a Hashtable
    CannotProceedException.getEnvironment() returns Hashtable
    CannotProceedException.setEnvironment(Hashtable env);

    InitialContext(Properties env) ->InitialContext(Hashtable env)
    InitialContext.myProps now a Hashtable
    InitialDSContext(Properties env) ->InitialDSContext(Hashtable env)

    InitialContextFactory.getInitialContext(Hashtable env)
    InitialContextFactoryBuilder.createInitialContextFactory(Hashtable env)
    NamingManager.getObjectInstance(Object, Hashtable env)
    NamingManager.getURLContext(String, Hashtable env)
    NamingManager.getInitialContext(Hashtable env)
    ObjectFactory.getObjectInstance(Object, Hashtable env)
    ObjectFactoryBuilder.createObjectInstance(Object, Hashtable env)
------
Rename DSContext.DELETE_ATTRIBUTE -> DSContext.REMOVE_ATTRIBUTE
-----
Replace ModificationEnumeration with ModificationItem[].
	AttributeModificationException.setUnexecutedModifications(ModificationItem[])
	AttributeModificationException.getUnexecutedModifications() returns 
		ModificationItem[]
	DSContext.modifyAttributes(Name, ModificationItem[])
	DSContext.modifyAttributes(String, ModificationItem[])
	InitialDSContext.modifyAttributes(Name, ModificationItem[])
	InitialDSContext.modifyAttributes(String, ModificationItem[])
--
Remove 
	RefAddrEnumeration (just use Enumeration)
	StringEnumeration  (just use Enumeration) 

	Reference.clone() made public
	Reference.getAddresses() returns Enumeration
	Delete Reference(String, RefAddrEnumeration) 
	Delete Reference(String, String, String, RefAddrEnumeration) 

	CompositeName(Enumeration)
	CompositeName.getComponents() -> CompositeName.getAll() returns Enumeration
	CompoundName(Enumeration)
	CompoundName.getComponents() -> CompoundName.getAll() returns Enumeration
	Name.getComponents() ->	Name.getAll() returns Enumeration
--
Replace
	AttributeEnumeration
	NameClassEnumeration
	BindingEnumeration
	SearchEnumeration
with 
	NamingEnumeration
to allow generic means of enumerating JNDI enumerations and get rid of classes.

	Attributes.getIDs() returns NamingEnumeration
	Attributes.getAll() returns NamingEnumeration
	Context.list() returns NamingEnumeration
	Context.listBindings() returns NamingEnumeration
	DirContext.search() returns NamingEnumeration

	InitialContext.list() returns NamingEnumeration
	InitialContext.listBindings() returns NamingEnumeration
	InitialDirContext.search() returns NamingEnumeration
--
Attribute.getAll() returns a NamingEnumeration instead of an Enumeration.
That way, you can get exceptions as you're enumerating the values.
--
Rename SearchConstraints to SearchControls
Rename InvalidSearchConstraints to InvalidSearchControlsException
-- 
LinkRef.getLinkName() returns String instead of Name
--
BinaryRefAddr.buf: protected -> private
StringRefAddr.contents: protected -> private
--
Remove DSException.

Eliminate most all constructors from NamingException and its subclasses
except for 2 per class (null constructor, and one that takes explanation).
--
NamingManager constants made package-private.
ObjectFactoryProperty
InitialContextFactoryProperty
PkgPathProperty 
--
Removed throws NamingException clause from hasInitialContextFactoryBuilder.
--
delete BinaryRefAddr.getAddressBytes()
delete StringRefAddr.getAddressString()
delete BinaryRefAddr.size()
RefAddr.getAddressContents() -> getContent()
--
Constructors for RefAddr and ReferralException made protected
instead of public because these are abstract classes.

=============================================
Delete 
	Name.toString()
	Name.equals()
	Name.hashCode()
These are already defined by Object and there's no need to re-specify
them here.
--
Make java.naming.provider.url a system property in addition to being available
as an envirionment property.
--
Add InterruptedNamingException to allow for interrupt handling.
--
Add Context.close() for releasing resources immediately instead
of waiting for them to be released automatically.
--
NamingManager.getObjectInstance() and ObjectFactory.getObjectInstance()
accepts 2 new optional arguments: name and nameCtx that provides
additional information for the object factory to use when creating
the object. Related fields and access methods were added to
CannotProceedException.
