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

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

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

    美麗涵涵童裝店--說(shuō)我博客名字,給你們打折!
    隨筆 - 82  文章 - 266  trackbacks - 0
    <2014年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567


    點(diǎn)擊這里給楊?lèi)?ài)友發(fā)消息
    美麗涵涵童裝店
    說(shuō)我博客名字,給你們打折!

    常用鏈接

    留言簿(6)

    隨筆分類(lèi)

    隨筆檔案

    文章檔案

    好友的BLOG

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    來(lái)到互聯(lián)網(wǎng)公司,需要開(kāi)發(fā)EJB程序,用兩天的時(shí)間先學(xué)習(xí)了EJB的開(kāi)發(fā)流程,我用的開(kāi)發(fā)環(huán)境是myeclipse、jboss4.2、ejb3.0、struts1.3.8、jkd6、oracle、JPA,頁(yè)面展現(xiàn)用到velocity。其實(shí)這不是一個(gè)春對(duì)ejb的學(xué)習(xí)文章,因?yàn)槔锩嫔婕傲烁鷈jb無(wú)關(guān)的struts、velocity,如果單純學(xué)習(xí)寫(xiě)ejb的helloword,數(shù)據(jù)庫(kù)都不用連接。下面我描述下helloword程序的實(shí)現(xiàn)過(guò)程。
    1. 在myeclipse下創(chuàng)建工程
        右鍵myeclipse--創(chuàng)建工程,選擇Enterprise java Project,輸入工程名字,如"firstApp",勾選“new web module project”和"new ejb project“兩項(xiàng),eclipse會(huì)自動(dòng)創(chuàng)建出相關(guān)聯(lián)的三個(gè)工程:"firstApp"、"firstAppEJB"、"firstAppWeb";如下圖所示:


    2. 創(chuàng)建數(shù)據(jù)庫(kù)表
       我用的是oracle數(shù)據(jù)庫(kù),創(chuàng)建了一個(gè)名為test_yay_user的數(shù)據(jù)庫(kù)表,里面有三個(gè)字段id、username、password,都是varchar類(lèi)型。
    3. 在jboss里面配置數(shù)據(jù)源(略去)
    4. 在ejb工程META-INF下創(chuàng)建數(shù)據(jù)連接配置文件persistence.xml,內(nèi)容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
     version="1.0">
        
        <persistence-unit name="OracleDS" transaction-type="JTA">
            <jta-data-source>java:OracleDS</jta-data-source>
            <properties>
               <property name="hibernate.show_sql" value="true"></property>
               <property name="hibernate.format_sql" value="true"></property>
               <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"></property>
            </properties>
        </persistence-unit>
    </persistence>

       其中OracleDS是你在jboss里面配置的數(shù)據(jù)源,其他參數(shù)根據(jù)具體起進(jìn)行修改;
    5. 創(chuàng)建持久化類(lèi)
      因?yàn)橛玫絡(luò)pa,需要?jiǎng)?chuàng)建持久化類(lèi),因?yàn)橛昧俗⒔獾姆绞?,沒(méi)有對(duì)應(yīng)的xml文件,文件如下:
    package user;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;

    @Entity
    @Table(name = "test_yay_user")
    public class User implements java.io.Serializable{
        private static final long serialVersionUID = -8692000975878306489L;
        private String id;
        private String username;
        private String password;
        
        public User(){
        }
        public User(String id,String username,String password){
            this.id = id;
            this.username = username;
            this.password = password;
        }
        
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "id", nullable = false, length = 100)
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        
        @Column(name = "username", nullable = false, length = 19)
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        @Column(name = "password", nullable = false, length = 19)
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
    }
      注意:好像必須要有那個(gè)全的構(gòu)造函數(shù),否則可能無(wú)法正確持久化;好像在我調(diào)試過(guò)程中,提示我必須要有個(gè)默認(rèn)的構(gòu)造函數(shù);因?yàn)樯婕暗綄?duì)象序列化,可能必須要有serialVersionUID ;
      GenerationType.AUTO是讓數(shù)據(jù)庫(kù)自己去決定主鍵的生產(chǎn)策略。
    6. 在src根目錄下創(chuàng)建
    jndi.properties
    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    java.naming.provider.url=localhost:1099
    java.naming.factory.url.pkgs=org.jboss.naming\:org.jnp.interfaces
    7. SessionBean的編寫(xiě)
       (1) 編寫(xiě)接口IUserService
               里面聲明增刪改查的方法,接口最上方用@Remote聲明,代碼如下:
    package user;

    import javax.ejb.Remote;
    import util.Page;

    @Remote
    public interface IUserService {
        public void saveOrUpdate (User user);
        
        public void delete (String userId);
        
        public User getUser(String userId);
        
        public Page queryPage(int pageNo,int pageSize);
    }
     (2) 編寫(xiě)實(shí)現(xiàn)類(lèi)UserService
               實(shí)現(xiàn)增刪改查的方法,接口最上方用@Stateless  和 @Remote(IUserService.class)  聲明,類(lèi)第一行代碼是@PersistenceContext(unitName="OracleDS") EntityManager em;
                程序會(huì)尋找OracleDS的數(shù)據(jù)源,然后初始化一個(gè)EntityManager對(duì)象,這個(gè)對(duì)象就是用來(lái)操作數(shù)據(jù)庫(kù),類(lèi)似hibernate里面的hibernateTemplate,跟hibernate操作非常相像,如增加一個(gè)對(duì)象em.persist(obj);。
             特殊說(shuō)明:其實(shí)在初學(xué)把數(shù)據(jù)庫(kù)的增刪改查寫(xiě)在這個(gè)userService里面即可,但因?yàn)轭I(lǐng)導(dǎo)要求,我啰嗦了一層,userService會(huì)調(diào)用DAOFactory里面的方法,而DAOFactory里面的方法才調(diào)用EntityManager 去實(shí)現(xiàn)增刪改查。

    至此EJB工程已經(jīng)開(kāi)發(fā)完成。下面是客戶(hù)端工程firstAppWeb開(kāi)發(fā)。

    1. 對(duì)于struts,velocity的引用就不多說(shuō)了。
        同樣在src下加入jndi.properties配置文件;
    2. 編寫(xiě)UserAction類(lèi),這個(gè)類(lèi)要調(diào)用EJB工程的BEAN來(lái)完成增刪改查操作。
       首先是獲得Context對(duì)象,然后lookup你要調(diào)用的EJB端的bean名稱(chēng),如userService = (IUserService) ctx.lookup("UserService/remote");,這樣就獲取到了EJB工程里面的UserService,就可以向調(diào)用本地方法一樣去調(diào)用了。

    代碼開(kāi)發(fā)完成后,就該部署了。
    我是直接用myeclipse的工具來(lái)發(fā)布的,發(fā)布后在jboss\server\default\deploy下會(huì)出現(xiàn)我們的工程文件夾firstApp.ear,里面包含EJB工程firstAppEJB.jar和WEB工程firstAppWeb.war。
    然后啟動(dòng)jboss,在這里我折磨了五六個(gè)小時(shí),始終報(bào)錯(cuò)”javax.naming.NameNotFoundException:xxxx not bound”,最后看到文章http://blog.163.com/zzk331@126/blog/static/142674599200957111441126/才解決,原來(lái)EJB工程發(fā)布后,必須要以jar形式存在,而不能以文件夾形式存在。


















    jboss正常啟動(dòng)后,運(yùn)行系統(tǒng),界面如下:













    說(shuō)明:網(wǎng)上很多文章都說(shuō)要用ejb-jar配置文件盒jboss.xml配置文件,好像不用也可以,因?yàn)?#64;remote這些注解就完成了配置文件的作用。
    還有很多文章說(shuō)把jboss/client下的所有jar方到web工程里面,再把EJB工程打包,也方到WEB工程里面,這樣放置后,可以直接在web工程里面創(chuàng)建一個(gè)類(lèi),寫(xiě)main函數(shù)來(lái)調(diào)用已發(fā)布的EJB工程,但發(fā)布web工程的時(shí)候不應(yīng)該將這些jar打包進(jìn)去,因?yàn)閖boss里面本來(lái)就有,或許會(huì)沖突;還因?yàn)镋JB工程和我們的WEB工程在同一個(gè)虛擬機(jī)里面,所以也不用把EJB打包方到WEB工程下。

    源代碼下載/Files/yangaiyou/firstApp.rar
    posted on 2014-05-28 15:28 楊?lèi)?ài)友 閱讀(5785) 評(píng)論(4)  編輯  收藏

    FeedBack:
    # 網(wǎng)購(gòu)網(wǎng)站排行 2014-05-28 23:05 網(wǎng)購(gòu)網(wǎng)站排行
    不錯(cuò)  回復(fù)  更多評(píng)論
      
    # re: 初次接觸EJB[未登錄](méi) 2014-05-30 16:51 rocky
    互聯(lián)網(wǎng)公司還要EJB,趕快跳槽吧,這公司沒(méi)譜  回復(fù)  更多評(píng)論
      
    # re: 初次接觸EJB 2014-06-12 20:53 泡菜
    好好學(xué)習(xí),我以后也要做一個(gè)程序員。  回復(fù)  更多評(píng)論
      
    # re: 初次接觸EJB 2015-04-28 17:23 阿斯蒂芬
    早就聽(tīng)說(shuō)EJB被程序員各種拋棄,不明白原因,如今我也被迫使用才知道,EJB確實(shí)應(yīng)該淘汰啦  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    美麗涵涵童裝店
    親,說(shuō)我博客名字,給你們打折!
    主站蜘蛛池模板: 青娱乐在线视频免费观看| 少妇亚洲免费精品| 色爽黄1000部免费软件下载| 亚洲大香人伊一本线| 亚洲三区在线观看无套内射| 国产极品粉嫩泬免费观看| 182tv免费视视频线路一二三 | 中文字幕在线免费观看| 一级特黄特色的免费大片视频| 亚洲国产综合精品中文第一| 久久精品九九亚洲精品| 亚洲国产精品VA在线观看麻豆| 免费一级做a爰片久久毛片潮喷| 福利免费观看午夜体检区| 亚欧免费一级毛片| baoyu777永久免费视频 | 成年女人午夜毛片免费视频 | 国产精品亚洲а∨无码播放| 男人的天堂亚洲一区二区三区 | 亚洲一区二区免费视频| 亚洲av不卡一区二区三区| 亚洲一区二区三区影院| 亚洲av再在线观看| 国产大片51精品免费观看| 毛片网站免费在线观看| 2019中文字幕在线电影免费 | 日韩中文字幕免费| 成人免费无码视频在线网站| 亚州免费一级毛片| 久久ww精品w免费人成| 午夜精品一区二区三区免费视频| 你是我的城池营垒免费观看完整版| 香蕉97碰碰视频免费| 国产精品成人亚洲| 美女免费视频一区二区| 国产精品亚洲综合天堂夜夜| 美女羞羞喷液视频免费| 黄人成a动漫片免费网站| 又粗又长又爽又长黄免费视频| 一进一出60分钟免费视频| 一级有奶水毛片免费看|