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

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

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

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    eclipse + JBoss 5 + EJB3開發(fā)指南(1):編寫第一個無狀態(tài)的SessionBean

    本文為原創(chuàng),如需轉(zhuǎn)載,請注明作者和出處,謝謝!

    本系列教程使用的軟件版本如下:
    Eclipse:3.4.2, Eclipse IDE for Java EE Developers
    JBoss :5.0.1,http://www.jboss.org/jbossas/downloads/
    JDK:1.6.0.14,http://java.sun.com/javase/downloads/index.jsp

        在本文中將編寫一個簡單的無狀態(tài)SessionBean。在發(fā)布EJB時,一般需要將EJB程序以jar文件的形式進行發(fā)布。這些jar文件將被放在<JBoss安裝目錄>\server\default\deploy目錄中。如果在Eclipse中開發(fā)EJB程序,需要進行一些配置。首選需要在首選項(Preferences)對話框中設(shè)置JBoss的安裝目錄(如D:\jboss5)。然后在運行配置對話框中添加jboss的運行項。在jboss4.2及以后的版本中,默認(rèn)情況下jboss只接收來自localhost或127.0.0.1的請求,也就是只接收本地的訪問。為了使jboss接收來自其他地址的請求,在啟動jboss時需要使用-b命令行參數(shù)進行設(shè)置。如下面的啟動命令所示:

    run.bat -b 200.200.200.123
    run.bat -b 
    0.0.0.0

        上面的第一行命令表示jboss可以接收來自200.200.200.123的請求。第二條命令表示jboss可以接收來自任意地址的請求。如果不設(shè)置-b參數(shù),以非本機方式訪問EJB時,JBoss會拋出如下異常:

    Exception in thread "main" javax.naming.CommunicationException: Could not obtain connection to any of these urls: 192.168.17.105:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server /192.168.17.105:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server /192.168.17.105:1099 [Root exception is java.net.ConnectException: Connection refused: connect]]]
        at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1725)
        at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:689)
        at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:682)
        at javax.naming.InitialContext.lookup(InitialContext.java:392)
        at test.Client.main(Client.java:29)
        ... ...


    一、配置開發(fā)環(huán)境

        在eclipse中進行開發(fā),也需要設(shè)置-b命令行參數(shù)。在運行配置對話框中可以按著圖1的方式設(shè)置-b命令行參數(shù)。

    圖1

    二、開發(fā)無狀態(tài)Session Bean

        在Eclipse中開發(fā)EJB程序首先需要建立一個EJB Project(工程名為MyEJB)。然后建立一個接口(遠程接口)和一個Session Bean。遠程接口的代碼如下:

    package service;

    import java.util.List;
    import javax.ejb.Remote;
    import entity.Greeting;

    @Remote
    public interface Greeter
    {
        
    public String greet(String message);
        
    public List<Greeting> getAllGreetings();
    }

        在上面的代碼中使用了@Remote注釋將Greeter接口定義為遠程接口,也就是在其他的客戶端機器上可以通過該接口來訪問本地的Session Bean。在Greeter接口中還使用了一個Greeting類,該類的代碼如下:
    package entity;

    import java.io.Serializable;

    public class Greeting implements Serializable
    {
        
    private int id;
        
    private String name;
        
    public int getId()
        {
            
    return id;
        }
        
    public void setId(int id)
        {
            
    this.id = id;
        }
        
    public String getName()
        {
            
    return name;
        }
        
    public void setName(String name)
        {
            
    this.name = name;
        }
    }

        要注意的是,由于Greeting類在實例將被傳輸?shù)娇蛻舳耍虼耍擃愋枰獙崿F(xiàn)java.io.Serializable接口。
        下面來編寫Session Bean,代碼如下:
    package service;

    import java.util.ArrayList;
    import java.util.List;
    import javax.ejb.Stateless;
    import entity.Greeting;

    @Stateless
    public class GreeterBean implements Greeter
    {
        @Override
        
    public List<Greeting> getAllGreetings()
        {
            
            List
    <Greeting> greetings = new ArrayList<Greeting>();
            Greeting greeting 
    = new Greeting();
            greeting.setId(
    12);
            greeting.setName(
    "bill gates");
            greetings.add(greeting);
            greeting 
    = new Greeting();
            greeting.setId(
    334);
            greeting.setName(
    "李寧");
            greetings.add(greeting);
            
    return greetings;
        }

        @Override
        
    public String greet(String message)
        {
            
    return "您好 " + message;
        }

    }

        在上面的代碼中使用了@Stateless注釋將GreeterBean類定義為無狀態(tài)的Session Bean。如果JBoss正處于啟動狀態(tài),并保存上面寫的類和接口,Eclipse會自動將上面的代碼編譯,并生成jar文件,發(fā)布到j(luò)boss的deploy目錄中。該jar文件的目錄結(jié)構(gòu)如下:

    MyEJB.jar
       entity\Greeting.class
       service\Greeter.class
       service\GreeterBean.class
       META-INF\MANIFEST.MF
       META-INF\jboss.xml

         其中META-INF目錄中的兩個文件是Eclipse在建立EJB工程時自動生成的,我們不用去管它。讀者也可以手工去編譯上面的接口和類,并使用jar命令生成jar文件。

    三、編寫客戶端程序

        由于本文使用了遠程接口來訪問Session Bean,因此,在訪問時需要指定EJB所有的機器的IP地址。
    package test;

    import java.util.Properties;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import service.Greeter;

    public class Client
    {

        public static void main(String[] args) throws Exception
        {
            Properties prop 
    = new Properties();

            // 設(shè)置相關(guān)的屬性值

            prop.setProperty(Context.PROVIDER_URL, "192.168.17.105:1099");
            prop.setProperty(Context.INITIAL_CONTEXT_FACTORY,
    "org.jnp.interfaces.NamingContextFactory");
            InitialContext ctx 
    = new InitialContext(prop);

            // 開始調(diào)用Greeter接口的方法

            Greeter greeter = (Greeter) ctx.lookup("GreeterBean/remote");
            System.out.println(greeter.greet(
    "李寧"));
            System.out.println(greeter.getAllGreetings().get(
    0).getName());
        }
    }

        在上面的代碼中,使用了Context.PROVIDER_URL設(shè)置了服務(wù)端的IP和端口號。
        上面積代碼的運行結(jié)果如:

    您好 李寧
    bill gates

        除了在程序中設(shè)置屬性值外,也可以通過jndi.properties文件進行設(shè)置。該文件應(yīng)放在Eclipse工程的src目錄中。該文件的內(nèi)容如下:

    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    java.naming.provider.url
    =192.168.17.105:1099

        如果使用jndi.properties文件,就不需要在客戶端程序中設(shè)置相應(yīng)的屬性值了,因此,可以使用如下的代碼來調(diào)用Session Bean:
    package test;

    import javax.naming.Context;
    import javax.naming.InitialContext;
    import service.Greeter;

    public class Client
    {

        
    public static void main(String[] args) throws Exception
        {
            // 不需要在程序中設(shè)置相應(yīng)的屬性值
            InitialContext ctx = new InitialContext();
            
    // 開始調(diào)用Greeter接口的方法
            Greeter greeter 
    = (Greeter) ctx.lookup("GreeterBean/remote");
            System.out.println(greeter.greet(
    "李寧"));
            System.out.println(greeter.getAllGreetings().get(
    0).getName());
        }
    }

        注意:在編寫客戶端程序時,需要引用<JBoss安裝目錄>\client目錄中的所有jar文件。

    下一篇:eclipse + JBoss 5 + EJB3開發(fā)指南(2):編寫有狀態(tài)的SessionBean




    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-05-01 14:39 銀河使者 閱讀(5290) 評論(3)  編輯  收藏 所屬分類: java 原創(chuàng)ejb3JBoss

    評論

    # re: eclipse + JBoss 5 + EJB3開發(fā)指南(1):編寫第一個無狀態(tài)的SessionBean  回復(fù)  更多評論   

    bill gates...
    2009-05-02 00:01 | Burun Estetigi

    # re: eclipse + JBoss 5 + EJB3開發(fā)指南(1):編寫第一個無狀態(tài)的SessionBean  回復(fù)  更多評論   

    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    2009-05-02 00:01 | Yuz Estetigi

    # re: eclipse + JBoss 5 + EJB3開發(fā)指南(1):編寫第一個無狀態(tài)的SessionBean  回復(fù)  更多評論   

    為什么是GreeterBean notfound。。。。。
    2009-06-14 17:39 | 匿名
    主站蜘蛛池模板: 亚洲国产精品嫩草影院| 亚洲处破女AV日韩精品| 国产免费久久精品| 国产成人免费全部网站 | 亚洲变态另类一区二区三区| 在线观看亚洲AV日韩A∨| 亚洲色偷偷综合亚洲AV伊人蜜桃| 精品丝袜国产自在线拍亚洲| 亚洲人成电影网站久久| 亚洲欧美日韩国产成人| 亚洲精品色播一区二区| 国产成人亚洲综合在线| 成年网站免费入口在线观看| aa级毛片毛片免费观看久| 久久精品免费一区二区三区| 无码av免费一区二区三区试看| 久久久国产精品无码免费专区| 最近最好最新2019中文字幕免费| 最好看的中文字幕2019免费| 免费国产成人高清在线观看网站| 美女视频黄免费亚洲| 日韩一级视频免费观看| 亚洲一区二区视频在线观看| 亚洲国产AV无码专区亚洲AV| 77777_亚洲午夜久久多人| 狠狠色伊人亚洲综合网站色| 美女无遮挡免费视频网站| yellow视频免费在线观看| 日韩视频在线观看免费| 91精品视频免费| 国产精品无码一区二区三区免费 | 亚洲精品免费在线视频| 成年性羞羞视频免费观看无限| 最近中文字幕免费mv视频8| 国产一区二区三区无码免费| 亚洲情XO亚洲色XO无码| 亚洲三级在线播放| 免费精品视频在线| 美丽姑娘免费观看在线观看中文版 | 亚洲激情中文字幕| 亚洲欧洲AV无码专区|