<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    glassfishv2中ejb的定義與調(diào)用

    Posted on 2010-03-06 21:08 terryxue 閱讀(2633) 評(píng)論(2)  編輯  收藏 所屬分類: java
    對(duì)EJB有遠(yuǎn)程調(diào)用和本地調(diào)用兩種模式,本地調(diào)用需要調(diào)用者和布署EJB的容器在同一個(gè)JVM中,遠(yuǎn)程調(diào)用則不管調(diào)用者和布署EJB的容器的分布情況,可能是同一個(gè)JVM,可能是同一臺(tái)電腦上的不同的JVM,也可能是分布在不同的電腦上的JVM。
    下面定義了一個(gè)簡(jiǎn)單的EJB,并嘗試了在不同環(huán)境下的調(diào)用。

    1. 定義遠(yuǎn)程接口,這樣可以讓EJB實(shí)例支持遠(yuǎn)程調(diào)用

    package testEJB;

    import javax.ejb.Remote;

    @Remote
    public interface HelloRemote {
        
    public String hi();
    }
    2. 實(shí)現(xiàn)無(wú)狀態(tài)會(huì)話Bean
    package testEJB;

    import javax.ejb.Stateless;
    @Stateless
    public class Hello implements HelloRemote {
        
    public String hi() {
            
    return "hello";
        }    
    }

    3. 將以上代碼打包到hello.jar中,然后布署到glassfish中

    4. 在javaSE環(huán)境中的調(diào)用:
    在JavaSE中的調(diào)用顯然屬于遠(yuǎn)程調(diào)用,相對(duì)而言比較麻煩。我們需要導(dǎo)入運(yùn)行時(shí)需要的相關(guān)jar包,javaee.jar和appserv-rt.jar,這兩個(gè)包可以在glassfish的lib文件夾中找到。
    測(cè)試代碼如下:
    public static void main(String args[]){
             
    try {
                Properties p 
    = System.getProperties();
                p.setProperty(
    "org.omg.CORBA.ORBInitialHost""glassfish運(yùn)行的IP地址");
                InitialContext ic 
    =new InitialContext();
                HelloRemote sayhello 
    = (HelloRemote) ic.lookup("java:global/hello/Hello");
                String result 
    = sayhello.hi();
                System.out.println(result);
            } 
    catch (NamingException ex) {
                ex.printStackTrace();
            }
        }
    要注意上面lookup方法中的字符串參數(shù)“java:global/hello/Hello”,其中hello為模塊名,在這個(gè)例子中也就是hello.jar文件名的前一部分,Hello為EJB的名稱。

    5. 在glassfish中的調(diào)用:
    a) 假設(shè)存在一個(gè)web應(yīng)用與Hello EJB布署在同一個(gè)glassfish下,web應(yīng)用中有一個(gè)Servlet要訪問Hello EJB,因?yàn)閃eb應(yīng)用和Hello EJB是在一個(gè)JVM中運(yùn)行,所以可以用本地調(diào)用的方式。
    因?yàn)閣eb應(yīng)用中要使用Hello EJB,所以需要導(dǎo)入hello.jar包。在hello.jar包中有Hello ejb的具體實(shí)現(xiàn),我們需要將導(dǎo)入的hello.jar中的Hello.class刪除,如果不刪除則相當(dāng)于在web應(yīng)用中又定義了一個(gè)新的無(wú)狀態(tài)會(huì)話Bean。
    Servlet的代碼如下:
    @WebServlet(name="Test", urlPatterns={"/test"})
    public
     class Test extends HttpServlet {
        @EJB
        
    private HelloRemote hello;
       
        
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        
    throws ServletException, IOException {
            PrintWriter out = response.getWriter();
            out.println(hello.getClass().getName());
            out.flush();
        }
    }
    將此web應(yīng)用打包成web.war后發(fā)布到glassfish中,輸入如下URL:http://localhost:8080/web/test,沒有異常則說明訪問成功。
    注意,如果沒有刪除hello.jar中的Hello.class,web.war將無(wú)法成功布署。
    b) 假設(shè)web應(yīng)用與Hello ejb布署在不同的glassfish中,則還需要做一些簡(jiǎn)單的配置,以告訴servlet容器如何找到ejb實(shí)例。
    修改上面@EJB處的代碼為:
    @EJB(name="hello")
    private HelloRemote hello;
    以上配置了name="hello",這里name的值"hello"為sun-web.xml中配置的ejb引用名。
    修改sun-web.xml,代碼如下:
    <sun-web-app error-url="">
      
    <context-root>/test</context-root>
      
    <ejb-ref>
        
    <ejb-ref-name>hello</ejb-ref-name>
        
    <jndi-name>corbaname:iiop:布署EJB的IP地址:3700#java:global/hello/Hello</jndi-name>
      
    </ejb-ref>
    上面的ejb-ref-name指定了在應(yīng)用中通過什么名字引用這個(gè)ejb。jndi-name指定了ejb的位置,其中最后一段"hello/Hello",指ejb布署在hello.jar中,名稱為Hello。

    6. 其它布署情況
    如果沒有將hello.jar單獨(dú)做為ejb應(yīng)用發(fā)布到glassfish中,而是在web應(yīng)用中通過lib直接引入hello.jar(不刪除其中的Hello.class),那么Hello EJB的全局名稱將與前面討論的不同,假設(shè)web應(yīng)用最終發(fā)布為web.war,那么Hello EJB的全局名為java:global/web/Hello,而不是java:global/hello/Hello


    Feedback

    # re: glassfish中ejb的定義與調(diào)用  回復(fù)  更多評(píng)論   

    2010-09-08 19:04 by sfywyq
    你好,我按你每個(gè)例子的步驟操作了..當(dāng)我j2se的客戶端調(diào)用時(shí)老是報(bào)下面的錯(cuò):


    java.lang.NullPointerException
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.app.test.HelloWorldTest.main(HelloWorldTest.java:17)
    javax.naming.NamingException: Lookup failed for 'java:global/GlassfishEJB/HelloWorldBean' in SerialContext targetHost=localhost,targetPort=3700 [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext targetHost=localhost,targetPort=3700 [Root exception is java.lang.NullPointerException]]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.app.test.HelloWorldTest.main(HelloWorldTest.java:17)
    Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext targetHost=localhost,targetPort=3700 [Root exception is java.lang.NullPointerException]
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
    ... 2 more
    Caused by: java.lang.NullPointerException
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
    ... 3 more

    能幫忙看下不...69487339 這是我QQ,能加下好友不....

    # re: glassfish中ejb的定義與調(diào)用  回復(fù)  更多評(píng)論   

    2010-10-01 09:14 by 創(chuàng)睿軟件
    應(yīng)該是沒有導(dǎo)入需要的包。
    glassfishv2和glassfishv3需要導(dǎo)入的包有所不同,本文是針對(duì)v2的。

    posts - 9, comments - 24, trackbacks - 0, articles - 0

    Copyright © terryxue

    主站蜘蛛池模板: a级毛片在线免费看| 免费观看无遮挡www的小视频| 亚洲av中文无码| 中文字幕一区二区免费| 亚洲精品资源在线| 国产91久久久久久久免费| 国产一区二区免费视频| 一本色道久久88亚洲精品综合| 国产中文在线亚洲精品官网| 57pao一国产成视频永久免费| 亚洲AV日韩AV永久无码色欲| 亚洲AV无码专区国产乱码电影| 岛国大片免费在线观看| 国产男女爽爽爽免费视频 | 亚洲一级毛片视频| 亚洲国产激情一区二区三区| **一级一级毛片免费观看| 日日狠狠久久偷偷色综合免费| 亚洲精品一区二区三区四区乱码 | 免费人妻精品一区二区三区| 亚洲精品影院久久久久久| 亚洲av高清在线观看一区二区| 免费A级毛片无码A∨免费| www在线观看免费视频| 国产人成亚洲第一网站在线播放| 亚洲日韩小电影在线观看| 国产精品四虎在线观看免费 | 亚洲国产精品VA在线看黑人| 真实乱视频国产免费观看| 67194成手机免费观看| aa毛片免费全部播放完整| 亚洲国产精品久久久久秋霞小| 亚洲视频一区二区三区| 亚洲女久久久噜噜噜熟女| 又粗又大又长又爽免费视频 | 国产亚洲人成网站观看| 亚洲av麻豆aⅴ无码电影| 波多野结衣久久高清免费| 国产黄色免费网站| 久久国产乱子伦免费精品| 香蕉免费在线视频|