資源描述:
《Java持久API課堂》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、基于JavaEE的高級程序設計濟南大學信息學院劉鹍liukun@ujn.edu.cn1回顧:EJBJAR、WAR和EAREJB:3?2+1會話BeanSLSBSFSB會話Bean部署2回顧:EJBJNDI編程:JNDI類設置JNDI訪問環(huán)境信息Javax.naming.Context(interface)其中INITIAL_CONTEXT_FACTORY和PROVIDER_URL。Javax.naming.Naming(interface)Javax.naming.InitialContext(class)其中l(wèi)ookup()、list()、
2、bind()、createSubcontext()、unbind()Java.util.Propertes(class)其中setProperties()和getProperties()、list()在進行JNDI查找前,我們必須設置應用服務器的上下文信息,主要是設置JNDI驅(qū)動的類名(java.naming.factory.initial)和命名服務提供者的URL(java.naming.provider.url)。java.naming.factory.initial或Context.INITIAL_CONTEXT_FACTORY:環(huán)境屬
3、性名,用于指定InitialContext工廠(作者稱它為JNDI驅(qū)動更容易理解),它類似于JDBC指定數(shù)據(jù)庫驅(qū)動類。因為本例子連接的是JbossNS(命名服務的實現(xiàn)者),所以使用Jboss提供的驅(qū)動類:org.jnp.interfaces.NamingContextFactory。java.naming.provider.url或Context.PROVIDER_URL:環(huán)境屬性名,包含提供命名服務的主機地址和端口號。它類似于JDBC指定數(shù)據(jù)庫的連接URL。連接到JbossNS的URL格式為:jnp://host:port,該URL的“jn
4、p:”部分是指使用的協(xié)議,JBoss使用的是基于Socket/RMI的協(xié)議。host為主機的地址,port為JNDI服務的端口。除了host之外,其他部分都是可以不寫的。3回顧:EJBJNDI編程:編程過程//設置初始化上下文的參數(shù),主要是設置JNDI驅(qū)動的類名//Java.naming.factory.initial和提供命名服務的的URL-Java.naming.provider.url,//Java.naming.factory.initial的值因提供JNDI服務器的不同而不同,//Java.naming.provider.url的值
5、包括提供命名服務的主機地址和端口號。Propertiesp=newProperties();p.setProperty("Java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");p.setProperty("Java.naming.provider.url","localhost:1099");//初始化上下文環(huán)境,生成一個上下文實例InitialContextjndiContext=newInitialContext(p);ObjectlookupObj
6、ect=jndiContext.lookup(“jndiname”);4回顧:EJB著重說一下JbossEJBJNDI名稱默認的命名規(guī)則:1)如果EJB打包進后綴為*.ear的JavaEE發(fā)布文件,默認的JNDI路徑名稱是訪問本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local訪問遠程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote例:EJBHelloEjb打包進名為HelloEjb.ear的JavaEE應用,訪問它遠程接口的JNDI名是:HelloEjb/HelloE
7、jbBean/remote2)如果EJB應用打包成后綴為*.jar的發(fā)布文件,默認的JNDI路徑名稱是訪問本地接口:EJB-CLASS-NAME/local訪問遠程接口:EJB-CLASS-NAME/remote例:HelloEjb應用打包成HelloEjb.jar文件,訪問它遠程接口的JNDI名稱是:HelloEjbBean/remote另外有一點要注意:EJB-CLASS-NAME是不帶包名的,如cn.edu.ujn.test.HelloEjbBean只需取HelloEjbBean。5問題:使用注釋改變SessionBean的JNDI名稱
8、如果我們沒有指定EJB的JNDI名稱,當EJB發(fā)布到應用服務器時,應用服務器會按默認規(guī)則為EJB生成全局JNDI名稱。當我們需要自定義JNDI名稱時,可以自定義JN