1.4 JNDI

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

JNDI2内容•JNDI基础•JNDIContext•绑定与解析•JNDI与集群•JNDI最佳实践JNDI基础4命名服务和目录服务的基本概念•绑定Binding•解析Resolve•Context–上下文,是一组绑定的集合。如在一个文件命名系统中,一个目录就是一个Context•NamingSystem–是同类Context的集合。如文件系统是一种命名系统。•NameSpace–是指命名系统中所有名字的集合•Subcontext5命名服务•NamingService–命名服务是计算机系统中的一个基本功能。命名服务是将名字和计算机中的一个对象相关联,通过名字可以方便地找到对应的对象。例如,计算机中的文件系统就包含了一个命名服务,你可以通过文件名找到对应的文件对象。–WebLogicJNDI允许任何实现java.io.Serializable接口的类绑定到JNDI树上6目录服务•DirectoryService–目录服务是命名服务的延伸,目录服务不只保存对象和对象名的匹配,而且保存这个对象的各种属性,你可以对这些属性进行查询、修改、增加、删除操作。–LDAP是访问目录并在其中执行查询的标准协议7JNDI•JNDI(JavaNamingandDirectoryInterface)是指通过提供统一的JavaAPI访问不同的命名和目录服务。8JNDI1.2ServiceProviders9WLSJNDI•WLSJNDI实现支持–GiveclientsaccesstotheWLSnamingservices–MakeobjectsavailableintheWLSnamespace–RetrieveobjectformtheWLSnamespace•WLS支持集群范围内的JNDITree复制•其他的WLS服务可以使用由WLS提供的JNDI命名服务•weblogic.jndi.WLInitialContextFactory10JNDI的应用•JNDIisalookupservicefor:–Web应用中环境变量;–EJB以及EJB的环境变量;–数据源;–JMS的ConnectionFactory;•DONOTuseJNDIasaDatabase–JNDIobjectsarestoredin-memory–AccessingJNDIobjectsinvolvesthenetwork11PotentialWebLogicJNDIaccessJNDIusedintheWebLogicServerArchitecture?JavaClientJavaClientCORBAClientCORBAClientClientApplicationsWebLogicServerExternalDirectoryServicesEJBContainerWebContainerOtherServicesServlets,JSPsMBeanHome,JDBC,JTA,JMS,JavaMail,J2EEConnectorRMIObjectRMIObjectJNDIServiceJNDIServiceLDAPNDSOthers…12JNDIusedinaWebLogicServerCluster?PotentialremoteWebLogicJNDIaccessCluster-wideJNDIServiceupdatesWebLogicServerAWebLogicServerBWebLogicServerCJavaorCORBAclientJavaorCORBAclientJNDIServiceJNDIServiceJNDIServiceIPMulticast13JNDIAPI•javax.naming:包含访问命名服务的类和接口•javax.naming.directory:包含访问目录的类和接口•javax.naming.ldap:包含在javax.naming.directory中扩展和支持LDAPv3扩展名的类和接口•javax.naming.event:包含在命名和目录服务中的事件通知和接口•javax.naming.sqi:sun为实现服务提供的SPI14JNDIExceptions•在和JNDI交互时可能发生以下一些异常–AuthenticationException–CommunicationException–InvalidNameException–NameNotFoundException–NoInitialContextException–NoPermissioniExceptionJNDIContext16JNDITree17NamingServiceConceptsClientApplicationServerNamingServiceNamingServiceInitialContextFactoryEnvironmentPropertiesContextcreatesbind(name,object)lookup(name)newInitialContextEnvironmentProperties18JNDIContext•JNDIContext提供在代码与需要使用的JNDI服务提供者之间的编程连接,一个JNDI上下文类似于一个JDBC连接,它是一个管道,通过它,代码的命令流向命名和目录服务,并且通过它接收来自于服务提供者的数据•Context是一系列命名到对象绑定的集合,当获得一个上下文时,代码传送属性到JNDI。19JNDIContext属性…•INITIAL_CONTEXT_FACTORY–用于创建JNDI上下文类的全局限定名(指定命名服务类型)。如weblogic.jndi.WLInitialContextFactory•PROVIDER_URL–用于连接命名和目录提供者的协议、主机和端口。如t3://localhost:7001,仅当连接远程JVM上的名字服务时,才需要设置,在本地可以用newInitialContext()连接本地名字服务•SECURITY_PRINCIPAL–在weblogic与上下文相关的安全领域的用户身份,默认为guest20…JNDIContext属性•SECURITY_CREDENTIALS–通过SECURITY_PRINCIPAL属性定义的用户的口令,默认为guest用户的口令•SECURITY_PORTOCOL–指定使用哪一个安全协议,如SSL•SECURITY_AUTHENTICATION–指定使用的验证级别•AUTHORITATIVE:•REFERRAL:•OBJECT_FACTORIES•STATE_FACTORIES21…JNDIContext属性•CONTROL_FACTORIES•URL_PKG_PREFIXES•DNS_URL:指定使用的DNS主机用于查询与JNDIURL相关的地址•BATCHSIZE•LANGUAGE•APPLET•REPLICATE_BINDINGS:指定是否将绑定对象复制到在集群中的所有JNDI树22IntialContext•对本地客户端(服务器端对象如Servlet),可以直接初始化上下文:•对任意客户端通用实现:Contextctx=newIntialContext();Contextctx=null;Hashtableht=newHashtable();ht.put(Context.INITIAL_CONTEXT_FACTORY,weblogic.jndi.WLInitialContextFactory);ht.put(Context.PROVIDER_URL,t3://cxu01:7001);try{ctx=newInitialContext(ht);}catch(NamingExceptione){}finally{try{ctx.close();}catch(Exceptione){}}23JNDIInitialContext•在WebLogic中默认情况下,InitialContext是由guest用户创建的,创建InitialContext时,客户机可以指定用户名和密码。如果密码不正确,WebLogic会向客户机抛出一个javax.naming.NoPermissioniException的异常24获得WLSContext•使用javax.naming.InitialContext,J2EE方式–{•importjavax.naming.*;•Hashtableht=newHashtable();•ht.put(Context.INITIAL_CONTEXT_FACTORY,weblogic.jndi.WLInitialContextFactory);•ht.put(Context.PORVIDER_URL,t3://localhost:7001);•ht.put(Context.SECURITY_PRINCIPAL,system);•Ht.put(Context.SECURITY_CREDENTIALS,password)•Contextctx=newInitialContext(ht);•Objectobj=ctx.lookup(xch);•…ctx.close();–}25获得WLSContext•使用weblogic.jndi.Environment,Weblogic特有的–{•importweblogic.jndi.*;•Environmentenv=newEnvironment;•env.setSecurityPrincipal(system);•env.setSecurityCredentials(password);•Contextctx=env.getInitialContext();•…•ctx.close();–}26jndi.properties文件•JNDI规范1.2.1定义了可以通过创建jndi.properties文件保存JNDI环境属性,该文件应该在CLASSPATH中或者$JAVAHOME/lib目录下。绑定与解析28bind()与rebind()•可以把一个对象绑定到JNDI上,但Java规定,这个对象必须实现Referencable接口,实际上绑定的不是对象,而是这些对象的Reference对象•bind():要求绑定的名字不能与已有的名字重复•rebind():会覆盖以前的绑定•unbind():删除一个绑定29绑定对象Contextic=null;Propertiesenv=newProperties();env.put(Context.INITIAL_CONTEXT_FACTORY,weblogic.jndi.WLInitialContextFactory);env.put(Context.PROVIDER_URL,t3://127.0.0.1:7001);try{ic=newInitialContext(env);ShoppingCartmyObj=newShoppingCart();ic.rebind(MYShoppingCart,myObj);ic.unbind(MYShoppingCart);}30lookup()•通过JNDI的lookup()方法可以返回被绑定对象。需要注意的是返回对象必须进行强制类型转换。Contextic=null;Propertiesenv=newProperties();env.put(Context.INITIAL_CONTEXT_FACTORY,weblogic.jndi.WLInitialContextFactory);env.put(Context.PROVIDER_URL,t3://127.0.0.1:7001);try{ic=newInitialContext(env);DataSourceds=null;ds=(DataSource)ic.lookup(OraDataSource);}31创建子节点Contextic=n

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功