JNDI的簡單理解

轉自:http://melphi9.iteye.com/blog/39950

 

看了JNDI的實現,我感有點驚訝和一點迷惑,驚訝的是系統編程比應用編程就難度來說還真不好說,比如就象
實現JNDI,SUN已經定好了Interface,你要做的就是弄清楚整個功能的原理,然後去實現他,然而應用編程則沒有
人爲你定好Interface,你只能根據需求分析自己定好Interface,自己定好框架,但是這個框架能不能滿足需求那就
不好說了,但是SUN定的規範可是肯定可以實現功能的,並且一般情況下你必須全部實現接口中的每一個函數,要不然,
人家說你又不符合他的規範,不能通過他的認證。好了下面我講講我讀JNDI的經過。
JNDI的規範我大概的看了一下,大概知道了JNDI是幹什麼用的,實際上我的理解就是JNDI是一種服務,什麼樣的服務呢
,就是你給我一個字符串,我就給出對應字符串所對應的對象。那這東西有什麼用呢?那我們不是經常在客戶端寫代碼的
時候不是經常寫 Context ctx = new InitialContext();Object obj = ctx.lookup("/ejb/LotteryEJB");這樣類似的代碼,
如果說"/ejb/LotteryEJB"是你剛纔所說的字符串的話,那obj就應該是對應的對象,夷,這怎麼好象有點象EJB的調用啊,
哈,哥哥你真是冰雪聰明,這就是EJB調用開始的時候調用JNDI服務的代碼。原來就是這樣啊,那實現這玩意不是太容易了,
弄一個HashMap的實例hm,把你要部署的字符和對象通過hm.put("/cs",對象)放進去,如果誰要查的時候就是把要查的字符
傳過來,Object cs = hm.get("/cs"),CS就是要你要找的對象。CS?好啊,AK,M4,暴頭....,我想暴頭想了很久了,但是
這CS到底是我要暴頭的人,還是和我一起暴頭的人,還是已被我暴頭的人呢?哈,告訴你吧,都是。根據JNDI的規範,這CS可以代表
對象,設備都可以,當然只要你願意連MM都可以代表,真的,哪裏有啊!我機子上好多啊---100多M的美女圖片,哦我差點忘了,
文件也可以是JNDI服務所返回的東東。對了要是你問我MM圖片怎麼傳到你的機子上面去,我只能告訴你,你可以通過socket傳啊,
你傳一個"/cs",我回傳一個cs給你,就這麼簡單。好了,如果到目前爲止你只對我的100M圖片感興趣的話呢,那你就不要往下看了,
你給我發E-MAIL,我告訴你哪裏還有好多。
org.huihoo.jfox.jndi下面的ContextImpl是實現Context接口,但是很這個類不是實現真正JNDI功能的類,真正實現該功能就是
NamingServiceImpl類,NamingService不是SUN規範所規定的接口,但是他的函數和Context接口差不多,也就是說完成的是和
Context接口的功能差不多。也就是說NamingServiceImpl纔是JNDI服務的提供者,而Context是客戶端去調用JNDI服務的接口,那提起
服務的實現那大家都自然都想起了多線程,就想起了一個孤獨的socket的實例fox在不停的listen,listen啊,但是他怎麼等不到
"我要嫁給你"的字符串!fox不止一次的懷疑自己的實現的Runnable接口是否爲倒版,並且還懷疑對方是不是找對了IP而發錯了端口。
所以說爲了能更好提供JNDI服務,NamingServiceImpl決定把自己交給ServiceWrapper包裝一下,然後再對外發布,要知道ServiceWrapper
專門爲守侯線程所設計,面對各種各樣的的請求,都能抓住處理掉,並且面對各種請求都能一一滿足。現在我只希望ServiceWrapper能夠
滿足我一種請求那就是--有沒有吃的,我好餓!有沒有人請吃飯啊!我餓死了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章