Java Tutorial/J2EE Application/Context

Материал из Java эксперт
Перейти к: навигация, поиск

Access a specific object by using the lookup or lookupLink methods

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Print {
  public static void main(String[] args) throws Exception {
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
    env.put(Context.PROVIDER_URL, "file:/tmp/marketing");
    Context initCtx = new InitialContext(env);
    File f = (File) initCtx.lookup("reports/report1.txt");
    if (f != null) {
      BufferedReader br = new BufferedReader(new FileReader(f));
      String l = null;
      while ((l = br.readLine()) != null)
        System.out.println(l);
    }
  }
}





Bind class.

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.Referenceable;
import javax.naming.StringRefAddr;
public class Bind {
  public static void main(String[] args) throws Exception {
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
    env.put(Context.PROVIDER_URL, "file:/tmp");
    Context initCtx = new InitialContext(env);
    initCtx.rebind("Susan", new Car("Toyota", "Camry"));
    Car c = (Car) initCtx.lookup("Susan");
    System.out.println(c);
  }
}
class Car implements Referenceable {
  String make;
  String model;
  public Car(String mk, String md) {
    make = mk;
    model = md;
  }
  public Reference getReference() throws NamingException {
    String cName = Car.class.getName();
    StringRefAddr cRef = new StringRefAddr("Car Description", make + ":" + model);
    String cfName = "asdf";
    Reference ref = new Reference(cName, cRef, cfName, null);
    return ref;
  }
  public String toString() {
    return (make + " " + model);
  }
}





Create Context

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingEnumeration;
public class List {
  public static void main(String[] args) throws Exception {
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
    env.put(Context.PROVIDER_URL, "file:/tmp/marketing");
    Object item = null;
    Context initCtx = new InitialContext(env);
    NamingEnumeration nl = initCtx.list("reports");
    if (nl == null)
      System.out.println("\nNo items in name list");
    else
      while (nl.hasMore()) {
        item = nl.next();
        System.out.println("item"s class is " + item.getClass().getName());
        System.out.println(item);
        System.out.println("");
      }
  }
}





Deleting an Object Binding

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Delete {
  public static void main(String[] args) throws Exception {
    String initalContextString = "/tmp/marketing/reports";
    if (args.length < 1) {
      System.out.println("Usage: java Delete filename");
      System.exit(-1);
    }
    System.out.println("This program assumes the context is " + initalContextString);
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
    env.put(Context.PROVIDER_URL, "file:" + initalContextString);
    Context initCtx = new InitialContext(env);
    System.out.println("Attempting to unbind " + args[0]);
    initCtx.unbind(args[0]);
    System.out.println("Done.");
  }
}





Renaming and Moving an Object

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Rename {
  public static void main(String[] args) throws Exception {
    String initialContextString = "/";
    if (args.length < 2) {
      System.out.println("Useage: java Rename filename1 filename2");
      System.exit(-1);
    }
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
    env.put(Context.PROVIDER_URL, "file:" + initialContextString);
    Context initCtx = new InitialContext(env);
    System.out.println("Renaming " + args[0] + " to " + args[1]);
    initCtx.rename(args[0], args[1]);
  }
}





Replacing and Adding Objects

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class Changes {
  public static void main(String[] args) throws Exception {
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
    env.put(Context.PROVIDER_URL, "file:/tmp/marketing");
    Context initCtx = new InitialContext(env);
    initCtx.rename("reports", "oldreports");
    initCtx.createSubcontext("reports");
  }
}





returns a NamingEnumeration of people

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchResult;
public class FilterExample {
  public static void main(String[] argc) throws Exception {
    Hashtable env = new Hashtable(11);
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://MyHost/o=JNDIExample");
    DirContext dctx = new InitialDirContext(env);
    String filter = "(&(cn=E*)(account>1005))";
    NamingEnumeration result = dctx.search("ou=People", filter, null);
    while (result.hasMore()) {
      SearchResult sr = (SearchResult) result.next();
      System.out.println("Result = " + sr.getName());
    }
  }
}





Search Filter Symbols

Symbol   Description   
&       Logical and. All items in the list must be true, as in (&(a=1)(b=2) ).   
|       Logical or. One or more of the items must be true, as in (|(a=1)(b=2) ).   
!       Not. The negated item must be false, as in (!(3=4)) is true.   
=       Checks for equality based on the matching rule of the attribute.   
~=      Checks for approximate equality based on the matching rule of the attribute.   
>=      Checks that the attribute is greater than the value.   
<=      Checks that the attribute is less than the value.   
=*       Checks for existence of the attribute.   
*       In an equality test; represents a wildcard representing zero or more characters at that position, as in (name=Alb*).   
\       Used for escaping *, (, and ) inside an attribute value.





Using a search result, you could you could use the following program to print the results:

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchResult;
public class AttributeExample {
  public static void main(String[] argc) throws Exception {
    Hashtable env = new Hashtable(11);
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://MyHost/o=JNDIExample");
    DirContext dctx = new InitialDirContext(env);
    Attributes attrs = new BasicAttributes(true);
    attrs.put(new BasicAttribute("email"));
    attrs.put(new BasicAttribute("website", "www.pri.ru"));
    NamingEnumeration result = dctx.search("ou=People", attrs);
    while (result.hasMore()) {
      SearchResult sr = (SearchResult) result.next();
      System.out.println("Result = " + sr.getName());
      Attributes srchAttrs = sr.getAttributes();
      NamingEnumeration attributes = srchAttrs.getAll();
      while (attributes.hasMore()) {
        Attribute attr = (Attribute) attributes.next();
        System.out.println("Attribute: " + attr.getID());
        NamingEnumeration values = attr.getAll();
        while (values.hasMore()) {
          Object value = values.next();
          System.out.println("Value = " + value);
        }
      }
    }
  }
}