Õ¾ÄÚËÑË÷: ÇëÊäÈëËÑË÷¹Ø¼ü´Ê

µ±Ç°Ò³Ãæ: ¿ª·¢×ÊÁÏÊ×Ò³ ¡ú Java רÌâ ¡ú »ùÓÚJNDIµÄÓ¦ÓóÌÐò¿ª·¢

»ùÓÚJNDIµÄÓ¦ÓóÌÐò¿ª·¢

ÕªÒª: JNDI(JavaÃüÃûºÍĿ¼½Ó¿Ú)ÊÇÒ»×éÔÚJavaÓ¦ÓÃÖзÃÎÊÃüÃûºÍĿ¼·þÎñµÄAPI
¡¡¡¡JNDI(The Java Naming and Directory Interface£¬JavaÃüÃûºÍĿ¼½Ó¿Ú)ÊÇÒ»×éÔÚJavaÓ¦ÓÃÖзÃÎÊÃüÃûºÍĿ¼·þÎñµÄAPI¡£ÃüÃû·þÎñ½«Ãû³ÆºÍ¶ÔÏóÁªÏµÆðÀ´£¬Ê¹µÃÎÒÃÇ¿ÉÒÔÓÃÃû³Æ·ÃÎʶÔÏó¡£Ä¿Â¼·þÎñÊÇÒ»ÖÖÃüÃû·þÎñ£¬ÔÚÕâÖÖ·þÎñÀ¶ÔÏó²»µ«ÓÐÃû³Æ£¬»¹ÓÐÊôÐÔ¡£

¡¡¡¡ÃüÃû»òĿ¼·þÎñʹÄã¿ÉÒÔ¼¯Öд洢¹²ÓÐÐÅÏ¢£¬ÕâÒ»µãÔÚÍøÂçÓ¦ÓÃÖÐÊÇÖØÒªµÄ£¬ÒòΪÕâʹµÃÕâÑùµÄÓ¦ÓøüЭµ÷¡¢¸üÈÝÒ×¹ÜÀí¡£ÀýÈ磬¿ÉÒÔ½«´òÓ¡»úÉèÖô洢ÔÚĿ¼·þÎñÖУ¬ÒԱ㱻Óë´òÓ¡»úÓйصÄÓ¦ÓÃʹÓá£

¡¡¡¡±¾ÎÄÓôúÂëʾÀýµÄ·½Ê½¸ø³öÁËÒ»¸ö¿ìËٽ̳̣¬Ê¹Äã¿ÉÒÔ¿ªÊ¼Ê¹ÓÃJNDI¡£Ëü£º

¡¡¡¡1¡¢ÌṩÁËJNDI¸ÅÊö

¡¡¡¡2¡¢ÃèÊöÁËJNDIµÄÌصã

¡¡¡¡3¡¢ÌåÑéÁËÒ»ÏÂÓÃJNDI¿ª·¢Ó¦ÓÃ

¡¡¡¡4¡¢±íÃ÷ÁËÈçºÎÀûÓÃJNDI·ÃÎÊLDAP·þÎñÆ÷£¬ÀýÈ磬Sun ONE Ŀ¼·þÎñÆ÷

¡¡¡¡5¡¢±íÃ÷ÁËÈçºÎÀûÓÃJNDI·ÃÎÊJ2EE·þÎñ

¡¡¡¡6¡¢ÌṩÁËʾÀý´úÂ룬Äã¿ÉÒÔ½«Æä¸Ä±àΪ×Ô¼ºµÄÓ¦ÓÃ

¡¡¡¡JNDI¸ÅÊö

¡¡¡¡ÎÒÃÇ´ó¼ÒÿÌ춼²»Öª²»¾õµØʹÓÃÁËÃüÃû·þÎñ¡£ÀýÈ磬µ±ÄãÔÚwebä¯ÀÀÆ÷ÊäÈëURL,http://java.sun.comʱ£¬DNS(Domain Name System,ÓòÃûϵͳ)½«Õâ¸ö·ûºÅURLÃûת»»³ÉͨѶ±êʶ£¨IPµØÖ·£©¡£ÃüÃûϵͳÖеĶÔÏó¿ÉÒÔÊÇDNS¼Ç¼ÖеÄÃû³Æ¡¢Ó¦Ó÷þÎñÆ÷ÖеÄEJB×é¼þ(Enterprise JavaBeans Component)¡¢LDAP(Lightweight Directory Access Protocol)ÖеÄÓû§Profile¡£

¡¡¡¡Ä¿Â¼·þÎñÊÇÃüÃû·þÎñµÄ×ÔÈ»À©Õ¹¡£Á½ÕßÖ®¼äµÄ¹Ø¼ü²î±ðÊÇĿ¼·þÎñÖжÔÏó¿ÉÒÔÓÐÊôÐÔ£¨ÀýÈ磬Óû§ÓÐemailµØÖ·£©£¬¶øÃüÃû·þÎñÖжÔÏóûÓÐÊôÐÔ¡£Òò´Ë£¬ÔÚĿ¼·þÎñÖУ¬Äã¿ÉÒÔ¸ù¾ÝÊôÐÔËÑË÷¶ÔÏó¡£JNDIÔÊÐíÄã·ÃÎÊÎļþϵͳÖеÄÎļþ£¬¶¨Î»Ô¶³ÌRMI×¢²áµÄ¶ÔÏ󣬷ÃÎÊÏóLDAPÕâÑùµÄĿ¼·þÎñ£¬¶¨Î»ÍøÂçÉϵÄEJB×é¼þ¡£

¡¡¡¡¶ÔÓÚÏóLDAP ¿Í»§¶Ë¡¢Ó¦ÓÃlauncher¡¢Ààä¯ÀÀÆ÷¡¢ÍøÂç¹ÜÀíʵÓóÌÐò£¬ÉõÖÁµØÖ·±¡ÕâÑùµÄÓ¦ÓÃÀ´Ëµ£¬JNDIÊÇÒ»¸öºÜºÃµÄÑ¡Ôñ¡£

¡¡¡¡JNDI¼Ü¹¹

¡¡¡¡JNDI¼Ü¹¹ÌṩÁËÒ»×é±ê×¼µÄ¶ÀÁ¢ÓÚÃüÃûϵͳµÄAPI,ÕâЩAPI¹¹½¨ÔÚÓëÃüÃûϵͳÓйصÄÇý¶¯Ö®ÉÏ¡£ÕâÒ»²ãÓÐÖúÓÚ½«Ó¦ÓÃÓëʵ¼ÊÊý¾ÝÔ´·ÖÀ룬Òò´Ë²»¹ÜÓ¦Ó÷ÃÎʵÄÊÇLDAP¡¢RMI¡¢DNS¡¢»¹ÊÇÆäËûµÄĿ¼·þÎñ¡£»»¾ä»°Ëµ£¬JNDI¶ÀÁ¢ÓÚĿ¼·þÎñµÄ¾ßÌåʵÏÖ£¬Ö»ÒªÄãÓÐĿ¼µÄ·þÎñÌṩ½Ó¿Ú£¨»òÇý¶¯£©£¬Äã¾Í¿ÉÒÔʹÓÃĿ¼¡£Èçͼ1Ëùʾ¡£ ͼ1£ºJNDI¼Ü¹¹

¡¡¡¡¹ØÓÚJNDIҪעÒâµÄÖØÒªÒ»µãÊÇ£¬ËüÌṩÁËÓ¦Óñà³Ì½Ó¿Ú(application programming interface,API)ºÍ·þÎñÌṩÕß½Ó¿Ú(service provider interface,SPI)¡£ÕâÒ»µãµÄÕæÕýº¬ÒåÊÇ£¬ÒªÈÃÄãµÄ Ó¦ÓÃÓëÃüÃû·þÎñ»òĿ¼·þÎñ½»»¥£¬±ØÐëÓÐÕâ¸ö·þÎñµÄJNDI·þÎñÌṩÕߣ¬ÕâÕýÊÇJNDI SPI·¢»Ó×÷Óõĵط½¡£·þÎñÌṩÕß»ù±¾ÉÏÊÇÒ»×éÀ࣬ÕâЩÀàΪ¸÷ÖÖ¾ßÌåµÄÃüÃûºÍĿ¼·þÎñʵÏÖÁËJNDI½Ó¿Ú¡ªºÜÏóJDBCÇý¶¯Îª¸÷ÖÖ¾ßÌåµÄÊý¾Ý¿âϵͳʵÏÖÁËJDBC½Ó¿ÚÒ»Ñù¡£×÷Ϊһ¸öÓ¦Óÿª·¢Õߣ¬Äã²»±Ø²ÙÐÄJNDI SPI¡£ÄãÖ»ÐèҪȷÈÏÄãҪʹÓõÄÿһ¸öÃüÃû»òĿ¼·þÎñ¶¼ÓзþÎñÌṩÕß¡£

¡¡¡¡J2SEºÍJNDI

¡¡¡¡Java 2 SDK 1.3¼°ÒÔÉϵİ汾°üº¬ÁËJNDI¡£¶ÔÓÚJDK 1.1ºÍ1.2Ò²ÓÐÒ»¸ö±ê×¼µÄÀ©Õ¹¡£Java 2 SDK 1.4.xµÄ×îа汾°üÀ¨Á˼¸¸öÔöÇ¿ºÍÏÂÃæµÄÃüÃû/Ŀ¼·þÎñÌṩÕߣº

¡¡¡¡1¡¢LDAP(Lightweight Directory Access Protocol)·þÎñÌṩÕß

¡¡¡¡2¡¢CORBA COS£¨Common Object Request Broker Architecture Common Object Services£©ÃüÃû·þÎñÌṩÕß

¡¡¡¡3¡¢RMI(Java Remote Method Invocation)×¢²á·þÎñÌṩÕß l DNS(Domain Name System)·þÎñÌṩÕß

¡¡¡¡¸ü¶àµÄ·þÎñÌṩÕß

¡¡¡¡¿ÉÒÔÔÚÈçÏÂÍøÖ·ÕÒµ½¿ÉÒÔÏÂÔصķþÎñÌṩÕßÁÐ±í£ºhttp://java.sun.com/products/jndi/serviceproviders.html ÌرðÓÐÒâ˼µÄ»òÐíÊÇÈçÏÂÍøÖ·ÌṩµÄWindows ×¢²á±íJNDI·þÎñÌṩÕߣºhttp://cogentlogic.com/cocoon/CogentLogicCorporation/JNDI.xml Õâ¸ö·þÎñÌṩÕßʹÄã¿ÉÒÔ·ÃÎÊWindows XP/2000/NT/Me/9xµÄwindows×¢²á±í¡£Ò²¿ÉÒÔÔÚÈçÏÂÍøÖ·ÏÂÔØJNDI/LDAP Booster Pack£ºhttp://java.sun.com/products/jndi/ Õâ¸öBooster Pack°üº¬Á˶ÔÁ÷ÐеÄLDAP¿ØÖƵÄÖ§³ÖºÍÀ©Õ¹¡£Ëü´úÌæÁËÓëLDAP 1.2.1·þÎñÌṩÕßÀ¦°óÔÚÒ»ÆðµÄbooster pack¡£¹ØÓÚ¿ØÖƺÍÀ©Õ¹µÄ¸ü¶àÐÅÏ¢¿ÉÒÔÔÚÈçÏÂÍøÕ¾¿´µ½£º http://java.sun.com/products/jndi/tutorial/ldap/ext/index.html ÁíÒ»¸öÓÐȤµÄ·þÎñÌṩÕßÊÇSunµÄÖ§³ÖDSML v2.0(Directory Service Markup Language,Ŀ¼·þÎñ±ê¼ÇÓïÑÔ)µÄ·þÎñÌṩÕß¡£DSMLµÄÄ¿µÄÊÇÔÚĿ¼·þÎñºÍXMLÖ®¼ä¼ÜÆðÒ»×ùÇÅÁº¡£

¡¡¡¡JNDI API

¡¡¡¡JNDI APIÓÉ5¸ö°ü×é³É£º

¡¡¡¡1¡¢Javax.naming£º°üº¬ÁË·ÃÎÊÃüÃû·þÎñµÄÀàºÍ½Ó¿Ú¡£ÀýÈ磬Ëü¶¨ÒåÁËContext½Ó¿Ú£¬ÕâÊÇÃüÃû·þÎñÖ´ÐвéѯµÄÈë¿Ú¡£

¡¡¡¡2¡¢Javax.naming.directory£º¶ÔÃüÃû°üµÄÀ©³ä£¬ÌṩÁË·ÃÎÊĿ¼·þÎñµÄÀàºÍ½Ó¿Ú¡£ÀýÈ磬ËüΪÊôÐÔÔö¼ÓÁËеÄÀ࣬ÌṩÁ˱íʾĿ¼ÉÏÏÂÎĵÄDirContext½Ó¿Ú£¬¶¨ÒåÁ˼ì²éºÍ¸üÐÂĿ¼¶ÔÏóµÄÊôÐԵķ½·¨¡£

¡¡¡¡3¡¢Javax.naming.event£ºÌṩÁ˶ԷÃÎÊÃüÃûºÍĿ¼·þÎñʱµÄʱ¼ä֪ͨµÄÖ§³Ö¡£ÀýÈ磬¶¨ÒåÁËNamingEventÀ࣬Õâ¸öÀàÓÃÀ´±íʾÃüÃû/Ŀ¼·þÎñ² úÉúµÄʼþ£¬¶¨ÒåÁËÕìÌýNamingEventsµÄNamingListener½Ó¿Ú¡£

¡¡¡¡4¡¢Javax.naming.ldap£ºÕâ¸ö°üÌṩÁ˶ÔLDAP °æ±¾3À©³äµÄ²Ù×÷ºÍ¿ØÖƵÄÖ§³Ö£¬Í¨Óðüjavax.naming.directoryûÓаüº¬ÕâЩ²Ù×÷ºÍ¿ØÖÆ¡£

¡¡¡¡5¡¢Javax.naming.spi£ºÕâ¸ö°üÌṩÁËÒ»¸ö·½·¨£¬Í¨¹ýjavax.namingºÍÓйذü¶¯Ì¬Ôö¼Ó¶Ô·ÃÎÊÃüÃûºÍĿ¼·þÎñµÄÖ§³Ö¡£Õâ¸ö°üÊÇΪÓÐÐËȤ´´½¨·þÎñÌṩÕߵĿª·¢ÕßÌṩµÄ¡£

¡¡¡¡JNDI ÉÏÏÂÎÄ

¡¡¡¡ÕýÈçÔÚÇ°ÃæÌáµ½µÄ£¬ÃüÃû·þÎñ½«Ãû³ÆºÍ¶ÔÏóÁªÏµÆðÀ´¡£ÕâÖÖÁªÏµ³Æ֮Ϊ°ó¶¨(binding)¡£Ò»×éÕâÑùµÄ°ó¶¨³Æ֮ΪÉÏÏÂÎÄ£¨context£©,ÉÏÏÂÎÄÌṩÁ˽âÎö£¨¼´·µ»Ø¶ÔÏóµÄ²éÕÒ²Ù×÷£©¡£ÆäËû²Ù×÷°üÀ¨£ºÃû³ÆµÄ°ó¶¨ºÍÈ¡Ïû°ó¶¨£¬Áгö°ó¶¨µÄÃû³Æ¡£×¢Òâµ½Ò»¸öÉÏÏÂÎĶÔÏóµÄÃû³Æ¿ÉÒ԰󶨵½ÓÐͬÑùµÄÃüÃûÔ¼¶¨µÄÁíÒ»¸öÉÏÏÂÎĶÔÏó¡£Õâ³Æ֮Ϊ×ÓÉÏÏÂÎÄ¡£ÀýÈ磬Èç¹ûUNIXÖÐĿ¼/homeÊÇÒ»¸öÉÏÏÂÎÄ£¬ÄÇôÏà¶ÔÓÚÕâ¸öĿ¼µÄ×ÓĿ¼¾ÍÊÇ×ÓÉÏÏÂÎÄ¡ªÀýÈ磬/home/guestsÖÐguests¾ÍÊÇhomeµÄ×ÓÉÏÏÂÎÄ¡£ÔÚJNDIÖУ¬ÉÏÏÂÎÄÓýӿÚjavax.naming.Context±íʾ£¬Õâ¸ö½Ó¿ÚÊÇÓëÃüÃû·þÎñ½»»¥µÄ¹Ø¼ü½Ó¿Ú¡£ÔÚContext(»òÉÔºóÌÖÂÛµÄ

¡¡¡¡DirContext)½Ó¿ÚÖеÄÿһ¸öÃüÃû·½·¨¶¼ÓÐÁ½ÖÖÖØÔØÐÎʽ£º

¡¡¡¡1¡¢Lookup(String name)£º½ÓÊÜ´®Ãû

¡¡¡¡2¡¢Lookup(javax.naming.Name)£º½ÓÊܽṹÃû£¬ÀýÈ磬CompositeName(¿çÔ½Á˶à¸öÃüÃûϵͳµÄÃû³Æ)»òCompondName(µ¥¸öÃüÃûϵͳÖеÄÃû³Æ)£»ËüÃǶ¼ÊµÏÖÁËName½Ó¿Ú¡£Compound nameµÄÒ»¸öÀý×ÓÊÇ£ºcn=mydir,cn=Q Mahmoud,ou=People,composite nameµÄÒ»¸öÀý×ÓÊÇ£ºcn=mydir,cn=Q Mahmoud,ou=People/myfiles/max.txt(ÕâÀmyfiles/max.txtÊDZíʾµÚ¶þ²¿·ÖµÄÎļþÃû) Javax.naming.InitialContextÊÇʵÏÖÁËContext½Ó¿ÚµÄÀà¡£ÓÃÕâ¸öÀà×÷ΪÃüÃû·þÎñµÄÈë¿Ú¡£ÎªÁË´´½¨InitialContext¶ÔÏ󣬹¹ÔìÆ÷ÒÔjava.util.Hashtable»òÕßÊÇÆä×ÓÀࣨÀýÈ磬Properties£©µÄÐÎʽÉèÖÃÒ»×éÊôÐÔ¡£ÏÂÃæ¸ø³öÁËÒ»¸öÀý×Ó£º

Hashtable env = new Hashtable(); // select a service provider factory env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContext"); // create the initial context Context contxt = new InitialContext(env);

¡¡¡¡INITIAL_CONTEXT_FACTORYÖ¸¶¨ÁËJNDI·þÎñÌṩÕßÖй¤³§Àࣨfactory class£©µÄÃû³Æ¡£Factory¸ºÔðΪÆä·þÎñ´´½¨Êʵ±µÄInitialContext¶ÔÏó¡£ÔÚÉÏÃæµÄ´úÂëƬ¶ÏÖУ¬ÎªÎļþϵͳ·þÎñÌṩÕßÖ¸¶¨Á˹¤³§Àà¡£±í1¸ø³öÁËËùÖ§³ÖµÄ·þÎñÌṩÕߵŤ³§ÀࡣҪעÒâµÄÊÇÎļþÏ µÍ³·þÎñÌṩÕߵŤ³§ÀàÐèÒª´ÓSun¹«Ë¾µ¥¶ÀÏÂÔØ£¬J2SE 1.4.xûÓаüº¬ÕâЩÀà¡£

¡¡¡¡±í1£ºÉÏÏÂÎÄINITIAL_CONTEXT_FACTORYµÄÖµ

Name Service Provider Factory File System com.sun.jndi.fscontext.RefFSContextFactory LDAP com.sun.jndi.ldap.LdapCtxFactory RMI com.sun.jndi.rmi.registry.RegistryContextFactory CORBA com.sun.jndi.cosnaming.CNCtxFactory DNS com.sun.jndi.dns.DnsContextFactory

¡¡¡¡ÎªÁËÓÃÃû³Æ´ÓÃüÃû·þÎñ»òĿ¼ÖÐÈ¡µÃ»ò½âÎö¶ÔÏó£¬Ê¹ÓÃContextµÄlookup·½·¨£ºObject obj=contxt.lookup(name)¡£Lookup·½·¨·µ»ØÒ»¸ö¶ÔÏó£¬Õâ¸ö¶ÔÏó±íʾµÄÊÇÄãÏëÒªÕÒµÄÉÏÏÂÎĵĶù×Ó¡£



¡ü·µ»ØĿ¼
ǰһƪ: ´ÓXMLµ½Java´úÂëµÄÊý¾Ý°ó¶¨Ö®¶ÔÏó
ºóһƪ: JavaÓïÑÔÖÐÁ´±íºÍË«ÏòÁ´±íµÄʵÏÖ