A static utility class for common JNDI operations : Context « JNDI LDAP « Java

Java
1. 2D Graphics GUI
2. 3D
3. Advanced Graphics
4. Ant
5. Apache Common
6. Chart
7. Class
8. Collections Data Structure
9. Data Type
10. Database SQL JDBC
11. Design Pattern
12. Development Class
13. EJB3
14. Email
15. Event
16. File Input Output
17. Game
18. Generics
19. GWT
20. Hibernate
21. I18N
22. J2EE
23. J2ME
24. JDK 6
25. JNDI LDAP
26. JPA
27. JSP
28. JSTL
29. Language Basics
30. Network Protocol
31. PDF RTF
32. Reflection
33. Regular Expressions
34. Scripting
35. Security
36. Servlets
37. Spring
38. Swing Components
39. Swing JFC
40. SWT JFace Eclipse
41. Threads
42. Tiny Application
43. Velocity
44. Web Services SOA
45. XML
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java » JNDI LDAP » ContextScreenshots 
A static utility class for common JNDI operations
  

/*
 * JBoss, Home of Professional Open Source
 * Copyright 2005, JBoss Inc., and individual contributors as indicated
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.LinkRef;
import javax.naming.Name;
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;

/**
 * A static utility class for common JNDI operations.
 
 @author Scott.Stark@jboss.org
 @author adrian@jboss.com
 @version $Revision: 2787 $
 */
@SuppressWarnings("unchecked")
public class Util {
  /**
   * Create a subcontext including any intermediate contexts.
   
   @param ctx
   *          the parent JNDI Context under which value will be bound
   @param name
   *          the name relative to ctx of the subcontext.
   @return The new or existing JNDI subcontext
   @throws javax.naming.NamingException
   *           on any JNDI failure
   */
  public static Context createSubcontext(Context ctx, String namethrows NamingException {
    Name n = ctx.getNameParser("").parse(name);
    return createSubcontext(ctx, n);
  }

  /**
   * Create a subcontext including any intermediate contexts.
   
   @param ctx
   *          the parent JNDI Context under which value will be bound
   @param name
   *          the name relative to ctx of the subcontext.
   @return The new or existing JNDI subcontext
   @throws NamingException
   *           on any JNDI failure
   */
  public static Context createSubcontext(Context ctx, Name namethrows NamingException {
    Context subctx = ctx;
    for (int pos = 0; pos < name.size(); pos++) {
      String ctxName = name.get(pos);
      try {
        subctx = (Contextctx.lookup(ctxName);
      catch (NameNotFoundException e) {
        subctx = ctx.createSubcontext(ctxName);
      }
      // The current subctx will be the ctx for the next name component
      ctx = subctx;
    }
    return subctx;
  }

  /**
   * Bind val to name in ctx, and make sure that all intermediate contexts exist
   
   @param ctx
   *          the parent JNDI Context under which value will be bound
   @param name
   *          the name relative to ctx where value will be bound
   @param value
   *          the value to bind.
   @throws NamingException
   *           for any error
   */
  public static void bind(Context ctx, String name, Object valuethrows NamingException {
    Name n = ctx.getNameParser("").parse(name);
    bind(ctx, n, value);
  }

  /**
   * Bind val to name in ctx, and make sure that all intermediate contexts exist
   
   @param ctx
   *          the parent JNDI Context under which value will be bound
   @param name
   *          the name relative to ctx where value will be bound
   @param value
   *          the value to bind.
   @throws NamingException
   *           for any error
   */
  public static void bind(Context ctx, Name name, Object valuethrows NamingException {
    int size = name.size();
    String atom = name.get(size - 1);
    Context parentCtx = createSubcontext(ctx, name.getPrefix(size - 1));
    parentCtx.bind(atom, value);
  }

  /**
   * Rebind val to name in ctx, and make sure that all intermediate contexts
   * exist
   
   @param ctx
   *          the parent JNDI Context under which value will be bound
   @param name
   *          the name relative to ctx where value will be bound
   @param value
   *          the value to bind.
   @throws NamingException
   *           for any error
   */
  public static void rebind(Context ctx, String name, Object valuethrows NamingException {
    Name n = ctx.getNameParser("").parse(name);
    rebind(ctx, n, value);
  }

  /**
   * Rebind val to name in ctx, and make sure that all intermediate contexts
   * exist
   
   @param ctx
   *          the parent JNDI Context under which value will be bound
   @param name
   *          the name relative to ctx where value will be bound
   @param value
   *          the value to bind.
   @throws NamingException
   *           for any error
   */
  public static void rebind(Context ctx, Name name, Object valuethrows NamingException {
    int size = name.size();
    String atom = name.get(size - 1);
    Context parentCtx = createSubcontext(ctx, name.getPrefix(size - 1));
    parentCtx.rebind(atom, value);
  }

  /**
   * Unbinds a name from ctx, and removes parents if they are empty
   
   @param ctx
   *          the parent JNDI Context under which the name will be unbound
   @param name
   *          The name to unbind
   @throws NamingException
   *           for any error
   */
  public static void unbind(Context ctx, String namethrows NamingException {
    unbind(ctx, ctx.getNameParser("").parse(name));
  }

  /**
   * Unbinds a name from ctx, and removes parents if they are empty
   
   @param ctx
   *          the parent JNDI Context under which the name will be unbound
   @param name
   *          The name to unbind
   @throws NamingException
   *           for any error
   */
  public static void unbind(Context ctx, Name namethrows NamingException {
    ctx.unbind(name)// unbind the end node in the name
    int sz = name.size();
    // walk the tree backwards, stopping at the domain
    while (--sz > 0) {
      Name pname = name.getPrefix(sz);
      try {
        ctx.destroySubcontext(pname);
      catch (NamingException e) {
        System.out.println("Unable to remove context " + pname + e);
        break;
      }
    }
  }

  /**
   * Lookup an object in the default initial context
   
   @param name
   *          the name to lookup
   @param clazz
   *          the expected type
   @return the object
   @throws Exception
   *           for any error
   */
  public static Object lookup(String name, Class<?> clazzthrows Exception {
    InitialContext ctx = new InitialContext();
    try {
      return lookup(ctx, name, clazz);
    finally {
      ctx.close();
    }
  }

  /**
   * Lookup an object in the default initial context
   
   @param name
   *          the name to lookup
   @param clazz
   *          the expected type
   @return the object
   @throws Exception
   *           for any error
   */
  public static Object lookup(Name name, Class<?> clazzthrows Exception {
    InitialContext ctx = new InitialContext();
    try {
      return lookup(ctx, name, clazz);
    finally {
      ctx.close();
    }
  }

  /**
   * Lookup an object in the given context
   
   @param context
   *          the context
   @param name
   *          the name to lookup
   @param clazz
   *          the expected type
   @return the object
   @throws Exception
   *           for any error
   */
  public static Object lookup(Context context, String name, Class clazzthrows Exception {
    Object result = context.lookup(name);
    checkObject(context, name, result, clazz);
    return result;
  }

  /**
   * Lookup an object in the given context
   
   @param context
   *          the context
   @param name
   *          the name to lookup
   @param clazz
   *          the expected type
   @return the object
   @throws Exception
   *           for any error
   */
  public static Object lookup(Context context, Name name, Class clazzthrows Exception {
    Object result = context.lookup(name);
    checkObject(context, name.toString(), result, clazz);
    return result;
  }

  /**
   * Create a link
   
   @param fromName
   *          the from name
   @param toName
   *          the to name
   @throws NamingException
   *           for any error
   */
  public static void createLinkRef(String fromName, String toNamethrows NamingException {
    InitialContext ctx = new InitialContext();
    createLinkRef(ctx, fromName, toName);
  }

  /**
   * Create a link
   
   @param ctx
   *          the context
   @param fromName
   *          the from name
   @param toName
   *          the to name
   @throws NamingException
   *           for any error
   */
  public static void createLinkRef(Context ctx, String fromName, String toName)
      throws NamingException {
    LinkRef link = new LinkRef(toName);
    Context fromCtx = ctx;
    Name name = ctx.getNameParser("").parse(fromName);
    String atom = name.get(name.size() 1);
    for (int n = 0; n < name.size() 1; n++) {
      String comp = name.get(n);
      try {
        fromCtx = (ContextfromCtx.lookup(comp);
      catch (NameNotFoundException e) {
        fromCtx = fromCtx.createSubcontext(comp);
      }
    }

    System.out.println("atom: " + atom);
    System.out.println("link: " + link);

    fromCtx.rebind(atom, link);

    System.out.println("Bound link " + fromName + " to " + toName);
  }

  /**
   * Remove the link ref
   
   @param name
   *          the name of the link binding
   @throws NamingException
   *           for any error
   */
  public static void removeLinkRef(String namethrows NamingException {
    InitialContext ctx = new InitialContext();
    removeLinkRef(ctx, name);
  }

  /**
   * Remove the link ref
   
   @param ctx
   *          the context
   @param name
   *          the name of the link binding
   @throws NamingException
   *           for any error
   */
  public static void removeLinkRef(Context ctx, String namethrows NamingException {
    System.out.println("Unbinding link " + name);
    ctx.unbind(name);
  }

  /**
   * Checks an object implements the given class
   
   @param context
   *          the context
   @param name
   *          the name to lookup
   @param object
   *          the object
   @param clazz
   *          the expected type
   @throws Exception
   *           for any error
   */
  protected static void checkObject(Context context, String name, Object object, Class clazz)
      throws Exception {
    Class objectClass = object.getClass();
    if (clazz.isAssignableFrom(objectClass== false) {
      StringBuffer buffer = new StringBuffer(100);
      buffer.append("Object at '").append(name);
      buffer.append("' in context ").append(context.getEnvironment());
      buffer.append(" is not an instance of ");
      appendClassInfo(buffer, clazz);
      buffer.append(" object class is ");
      appendClassInfo(buffer, object.getClass());
      throw new ClassCastException(buffer.toString());
    }
  }

  /**
   * Append Class Info
   
   @param buffer
   *          the buffer to append to
   @param clazz
   *          the class to describe
   */
  protected static void appendClassInfo(StringBuffer buffer, Class clazz) {
    buffer.append("[class=").append(clazz.getName());
    buffer.append(" classloader=").append(clazz.getClassLoader());
    buffer.append(" interfaces={");
    Class[] interfaces = clazz.getInterfaces();
    for (int i = 0; i < interfaces.length; ++i) {
      if (i > 0)
        buffer.append(", ");
      buffer.append("interface=").append(interfaces[i].getName());
      buffer.append(" classloader=").append(interfaces[i].getClassLoader());
    }
    buffer.append("}]");
  }
}

   
    
  
Related examples in the same category
1. how to list the name and class of objects in a context
2. how to create a new subcontext called "ou=NewOu" with some attributes
3. how to destroy a subcontext called "ou=NewOu"
4. Listing a Context in the Naming Service
5. Creating and Destroying a Subcontext in the Naming Service
6. Deleting an entry
7. rebind Context
8. tearDown Context Recursively
9. Create a context path recursively.
10. A JNDI context wrapper implementation that delegates read-only methods to its delegate Context, and throws OperationNotSupportedException for any method with a side-effect
11. JNDI utilities
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.