`

jndi study

    博客分类:
  • jndi
阅读更多
jndi  jave naming and directory interface java命名和目录接口。主要用于远程访问对象(标准)。

naming service: the means by which names are associated with objects and objects are found based their name, 命名服务,通过名字与对象的联系,我们可以根据名字找到相应的对象
directory service: a directory service associated names with the objects and also allow such objects to have attributes.目录服务,可以说是命名服务的扩展,它不仅联系了对象,并且允许对象拥有属性

java应用程序使用jndi api访问不通的命名和目录服务,jndi提供了访问不同jndi服务标准统一的接口。

几个命名/目录服务的提供者
1 LDAP   lightweight directory access protocol     com.sun.jndi.ldap.LdapCtxFactory
2 CORBA COS  Common Object request broker architecture Common object services
3 RMI    java remote method invocation
4 DNS    Domain name system
com.sun.jndi.dns.DnsContextFactory
5 FSSP   file system service provider              com.sun.jndi.fscontext.RefFSContextFactory

图片中更加可以明白jndi的作用

java spi   server provider interface


Naming operations:
read operations and operations for updating the namespace
Look up an object
List the content of a context
Addind,overwriting,and removing a binding
Renaming an object
Creating and destorying subContexts

Directory operations
Reading a object's attributes
Modifying an object's attributes
Searching a directory
Performing hybrid naming and directory operations

代码,Lookup,通过名字找到找到对象,正如new File("H:/summary.txt");提供名字可以获取File对象。
package ldaptest;

import java.io.File;
import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 *
 * @author liuquan
 */
public class LdapLookup {
    
    public void lookupObject(){
        Hashtable ht = new Hashtable();
        ht.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
        ht.put(Context.PROVIDER_URL, "file:/H:");
        try {
            Context context = new InitialContext(ht);
            File file = (File)context.lookup("summary.txt");
            System.out.println(file.getAbsolutePath());
        } catch (NamingException ex) {
            Logger.getLogger(LdapLookup.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        LdapLookup lookup = new LdapLookup();
        lookup.lookupObject();
    }
}

使用的是file system service。Hashtable存放了二个参数,一个是service的提供者,另一个是访问路径。

代码list the content of the context,得到context内所有内容。如你访问文件夹,那么可以得到这个文件夹里面所有的内容。有二个方法,一个只得到object名字和class名字,另一种还会得到object对象。
package ldaptest;

import java.io.File;
import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Binding;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;

/**
 *
 * @author liuquan
 */
public class LdapList {

    public void listObject() {
        try {
            Hashtable ht = new Hashtable();
            ht.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
            ht.put(Context.PROVIDER_URL, "file:/H:");
            Context context = new InitialContext(ht);
            NamingEnumeration list = context.list("summary");
            while (list.hasMore()) {
                NameClassPair ncp = (NameClassPair) list.next();
                System.out.println(ncp);
                System.out.println(ncp.getName());
                System.out.println(ncp.getClassName());

            }
        } catch (NamingException ex) {
            Logger.getLogger(LdapList.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void listBindingObject() {
        try {
            Hashtable ht = new Hashtable();
            ht.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
            ht.put(Context.PROVIDER_URL, "file:/H:");
            Context context = new InitialContext(ht);
            NamingEnumeration list = context.listBindings("summary");
            while (list.hasMore()) {
                Binding b = (Binding) list.next();
                System.out.println(b);
                System.out.println(b.getObject());
                File file = (File) b.getObject();
                System.out.println(file.getAbsolutePath());
            }
        } catch (NamingException ex) {
            Logger.getLogger(LdapList.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String args[]) {
        LdapList ll = new LdapList();
        ll.listObject();
        ll.listBindingObject();
    }
}
  • 大小: 34.6 KB
分享到:
评论

相关推荐

    Sun Certified Enterprise Architect for J2EE Study Guide

    《Sun Certified Enterprise Architect for J2EE Study Guide》是针对Sun Microsystems公司推出的J2EE企业架构师认证考试的一本详尽指南。这本书旨在帮助读者全面掌握Java企业级应用开发的精髓,以便成功通过这个高...

    study-common.zip

    2. **JNDI(Java Naming and Directory Interface)**:在JavaEE中,JNDI提供了一种查找和管理资源的方式,如数据库连接池、EJB等。开发者可以通过名字来查找和绑定对象,实现服务的透明访问。 3. **JMS(Java ...

    SCWCD Exam Study Kit

    10. **JNDI(Java Naming and Directory Interface)**:在企业级应用中,JNDI用于查找和绑定资源,如数据源或EJB。 11. **部署描述符(web.xml)**:这是Web应用的配置文件,包含了Servlet、过滤器、监听器的定义...

    tomcat_study.zip

    5. **Naming**:这部分涉及JNDI(Java Naming and Directory Interface),用于在应用中查找和管理资源。 6. **Cluster**:Tomcat的集群功能,允许多个Tomcat实例之间进行通信,实现负载均衡和会话复制,提升系统的...

    Manning - SCWCD Exam Study Kit(en)

    5. **JNDI(Java Naming and Directory Interface)**:JNDI是Java平台的标准API,用于访问各种命名和目录服务。在Web应用中,它常用于查找和管理资源,如数据源或邮件会话。 6. **JTA(Java Transaction API)和...

    SCEA Study Guide

    2. **模块化设计**:学习如何将大型应用程序分解为可管理和可重用的模块,使用Java命名和目录接口(JNDI)进行服务定位。 3. **企业级组件**:深入理解EJB的三种类型——会话bean、实体bean和消息驱动bean,以及它们...

    springboot-study源码.zip

    - **环境准备**:加载配置文件(application.properties或application.yml),支持命令行参数、系统属性和JNDI变量。 - **Bean定义**:扫描并注册bean定义,包括自动配置的bean。 - **ApplicationContext创建**:...

    j2ee study

    8. **Java Naming and Directory Interface (JNDI)**:JNDI提供了一种标准的方式来查找和绑定资源,如EJB、数据源和邮件服务器,是J2EE应用的基础设施。 9. **容器管理**:了解应用服务器如Tomcat、GlassFish或...

    study-parent.zip

    JNDI提供了一种查找和绑定资源的方式,如EJB、数据源等,增强了系统的可扩展性和可管理性。 7. **JavaMail** JavaMail API用于在Java应用程序中发送和接收电子邮件,支持多种邮件协议如SMTP、POP3和IMAP。 8. **...

    MZ_SCBCD_5_Study_Guide

    - **JNDI与依赖注入**:通过`@EJB`、`@Resource`、`@PersistenceContext`等注解实现; - **规则**:确保资源名称唯一性; - **配置**:在`ejb-jar.xml`或注解中指定资源引用。 **知识点10:定时服务** - **Bean...

    Sun.Certified.Enterprise.Architect.for.Java.EE.Study.Guide.Exam.310-051

    《Sun Certified Enterprise Architect for Java EE Study Guide Exam 310-051》是一本针对Sun Microsystems(现已被Oracle收购)认证的企业架构师考试的重要学习资料。这本书详细介绍了如何准备Java企业版(Java EE...

    网页项目参考例子

    在大型项目中,GoodStudy可能使用JNDI来管理和查找服务。 7. **EJB(Enterprise JavaBeans)**: EJB是Java EE的一部分,用于构建可复用的、分布式的、跨平台的企业级应用。虽然现代Web开发更倾向于轻量级框架,但在...

    sun certified enterprise architect for java ee study guide exam 310-051新版.rar

    该压缩包中的"Sun Certified Enterprise Architect for Java EE Study Guide Exam 310-051新版"文件,是专门为准备310-051考试的学习者设计的。 Java EE(Java Platform, Enterprise Edition),即Java企业版,是...

    JavaWebStudy

    - **JNDI(Java Naming and Directory Interface)**:用于查找和管理网络资源。 - **EJB(Enterprise JavaBeans)**:为企业级应用提供组件模型。 - **JTA(Java Transaction API)**:处理分布式事务的API。 -...

    SCWCD 题库整理

    6. **SCWCD_310-083_题库.pdf**:这个文件同样可能是一个题库,专门针对310-083考试,涵盖了SCWCD认证的所有主题,包括但不限于JSP表达式语言、自定义标签、JNDI(Java Naming and Directory Interface)和JavaMail...

    Sun Certified Enterprise Architect

    2. **Java EE技术**:Java EE平台包含一系列服务和组件,如Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JPA(Java Persistence API)和JNDI(Java Naming and Directory Interface)...

    SCWCD学习笔记(Head First Servlets & JSP)

    JNDI(Java Naming and Directory Interface)常用于DD元素,如ejb-ref、ejb-local-ref、resource-ref,来管理和查找企业级组件。过滤器可以实现请求和响应的包装,应用装饰器模式。Servlet的生命周期包括加载类、...

    9.0.2 keycloak集成到springboot中例子

    <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS"> <connection-url>jdbc:mysql://localhost:3306/keycloak?useSSL=false&serverTimezone=UTC <driver-class>...

Global site tag (gtag.js) - Google Analytics