城市獵人

          在一網情深的日子里,誰能說得清是苦是甜,只知道確定了就義無反顧
          posts - 1, comments - 7, trackbacks - 0, articles - 89

          EJB3.0的各應用服務器提供的JNDI接口(轉)

          Posted on 2008-07-11 23:27 sailor 閱讀(761) 評論(0)  編輯  收藏 所屬分類: EJB3
          來源:http://blog.163.com/e_adon/blog/static/338840452007721831904/

                  在分布式開發中,JAVA客戶端程序是通過JNDI去查詢EJB的,而JNDI的全名是:The Java Naming and Directory Interface。因為JNDI 是一組接口,所以我們只需根據接口規范編程就可以。要通過JNDI 進行資源訪問,我們必須設置初始化上下文的參數,主要是設置JNDI 驅動的類名(java.naming.factory.initial)和提供命名服務的URL
          (java.naming.provider.url)。因為Jndi 的實現產品有很多。所以java.naming.factory.initial 的值因提供JNDI 服務器
          的不同而不同,java.naming.provider.url 的值包括提供命名服務的主機地址和端口號。

                  大家在編程時,最令人氣憤的就是EJB程序寫好了,而客戶端卻不知道如何去調用它,一般書上只是介紹一種應用服務器的訪問代碼其它的不會提到,找這方面資料又比較麻煩,當誤大家許多時間和精力,因此我就把已經找到的代碼貼出來,方便大家查找。

                  暫且提供以下三種服務器的代碼,今后再慢慢補充吧。

                  下面是訪問Jboss 服務器的
                  
                  例子代碼:

          1Properties props = new Properties();
          2props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
          3props.setProperty("java.naming.provider.url", "localhost:1099");
          4InitialContext = new InitialContext(props);
          5HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
          6

                  
                  下面是訪問Sun ApplicationServer 及glassfish 應用服務器的例子代碼:
                  

          1Properties props = new Properties();
          2props.setProperty("java.naming.factory.initial",
          3"com.sun.enterprise.naming.SerialInitContextFactory");
          4props.setProperty("java.naming.provider.url", "localhost:3700");
          5InitialContext = new InitialContext(props);
          6HelloWorld helloworld = (HelloWorld) ctx.lookup("com.0735jb.ejb3.HelloWorld");


                  下面是訪問Weblogic10 應用服務器的例子代碼:

          1Properties props = new Properties();
          2props.setProperty("java.naming.factory.initial", "weblogic.jndi.WLInitialContextFactory");
          3props.setProperty("java.naming.provider.url", "t3://localhost:7001");
          4InitialContext = new InitialContext(props);
          5HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean
          6#com.0735jb.ejb3.HelloWorld");

           

                  上面是服務器默認的JNDI命名規則,那么如何修改它呢.

                  在Jboss 中要自定義JNDI 名稱,可以使
                  用@LocalBinding 和@RemoteBinding 注釋,@LocalBinding 注釋指定Session Bean 的Local 接口的JNDI 名稱,
                  @RemoteBinding 注釋指定Session Bean 的Remote 接口的JNDI 名稱,下面的代碼展示了如何自定義JNDI 名:

           

          1@Stateless
          2@Remote ({Operation.class})
          3@RemoteBinding (jndiBinding="0735jb/RemoteOperation")
          4@Local ({LocalOperation.class})
          5@LocalBinding (jndiBinding="0735jb/LocalOperation")

           

                  在JSP 客戶端調用上面EJB 的代碼片斷如下:

          1InitialContext ctx = new InitialContext(props);
          2Operation operation = (Operation) ctx.lookup("0735jb/RemoteOperation");
          3在weblogic10 中,你可以通過@Stateless.mappedName()設置全局JNDI 名稱,如:
          4@Stateless(mappedName="OperationBeanRemote")
          5public class OperationBean implements Operation, LocalOperation {
          6


                  客戶端調用EJB 的代碼片斷如下:

          1InitialContext ctx = new InitialContext(props);
          2Operation operation = (Operation) ctx.lookup("OperationBeanRemote#com.0735jb.ejb3.Operation");
          主站蜘蛛池模板: 五莲县| 仙桃市| 甘孜县| 清涧县| 湘乡市| 海原县| 额济纳旗| 泸水县| 巴彦淖尔市| 开封市| 郓城县| 西华县| 定远县| 武汉市| 广饶县| 崇义县| 依兰县| 神池县| 武定县| 宁远县| 太谷县| 莎车县| 米易县| 瓦房店市| 宁强县| 邵武市| 阳原县| 北海市| 涞水县| 莱芜市| 松潘县| 红桥区| 武平县| 宁陵县| 乃东县| 永昌县| 甘泉县| 屯门区| 西宁市| 临沧市| 观塘区|