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

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

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

    美麗涵涵童裝店--說我博客名字,給你們打折!
    隨筆 - 82  文章 - 266  trackbacks - 0
    <2015年4月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789


    點擊這里給楊愛友發消息
    美麗涵涵童裝店
    說我博客名字,給你們打折!

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案

    文章檔案

    好友的BLOG

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    來到互聯網公司,需要開發EJB程序,用兩天的時間先學習了EJB的開發流程,我用的開發環境是myeclipse、jboss4.2、ejb3.0、struts1.3.8、jkd6、oracle、JPA,頁面展現用到velocity。其實這不是一個春對ejb的學習文章,因為里面涉及了跟ejb無關的struts、velocity,如果單純學習寫ejb的helloword,數據庫都不用連接。下面我描述下helloword程序的實現過程。
    1. 在myeclipse下創建工程
        右鍵myeclipse--創建工程,選擇Enterprise java Project,輸入工程名字,如"firstApp",勾選“new web module project”和"new ejb project“兩項,eclipse會自動創建出相關聯的三個工程:"firstApp"、"firstAppEJB"、"firstAppWeb";如下圖所示:


    2. 創建數據庫表
       我用的是oracle數據庫,創建了一個名為test_yay_user的數據庫表,里面有三個字段id、username、password,都是varchar類型。
    3. 在jboss里面配置數據源(略去)
    4. 在ejb工程META-INF下創建數據連接配置文件persistence.xml,內容如下:
    <?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里面配置的數據源,其他參數根據具體起進行修改;
    5. 創建持久化類
      因為用到jpa,需要創建持久化類,因為用了注解的方式,沒有對應的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;
        }
    }
      注意:好像必須要有那個全的構造函數,否則可能無法正確持久化;好像在我調試過程中,提示我必須要有個默認的構造函數;因為涉及到對象序列化,可能必須要有serialVersionUID ;
      GenerationType.AUTO是讓數據庫自己去決定主鍵的生產策略。
    6. 在src根目錄下創建
    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的編寫
       (1) 編寫接口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) 編寫實現類UserService
               實現增刪改查的方法,接口最上方用@Stateless  和 @Remote(IUserService.class)  聲明,類第一行代碼是@PersistenceContext(unitName="OracleDS") EntityManager em;
                程序會尋找OracleDS的數據源,然后初始化一個EntityManager對象,這個對象就是用來操作數據庫,類似hibernate里面的hibernateTemplate,跟hibernate操作非常相像,如增加一個對象em.persist(obj);。
             特殊說明:其實在初學把數據庫的增刪改查寫在這個userService里面即可,但因為領導要求,我啰嗦了一層,userService會調用DAOFactory里面的方法,而DAOFactory里面的方法才調用EntityManager 去實現增刪改查。

    至此EJB工程已經開發完成。下面是客戶端工程firstAppWeb開發。

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

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


















    jboss正常啟動后,運行系統,界面如下:













    說明:網上很多文章都說要用ejb-jar配置文件盒jboss.xml配置文件,好像不用也可以,因為@remote這些注解就完成了配置文件的作用。
    還有很多文章說把jboss/client下的所有jar方到web工程里面,再把EJB工程打包,也方到WEB工程里面,這樣放置后,可以直接在web工程里面創建一個類,寫main函數來調用已發布的EJB工程,但發布web工程的時候不應該將這些jar打包進去,因為jboss里面本來就有,或許會沖突;還因為EJB工程和我們的WEB工程在同一個虛擬機里面,所以也不用把EJB打包方到WEB工程下。

    源代碼下載/Files/yangaiyou/firstApp.rar
    posted on 2014-05-28 15:28 楊愛友 閱讀(5798) 評論(4)  編輯  收藏

    FeedBack:
    # 網購網站排行 2014-05-28 23:05 網購網站排行
    不錯  回復  更多評論
      
    # re: 初次接觸EJB[未登錄] 2014-05-30 16:51 rocky
    互聯網公司還要EJB,趕快跳槽吧,這公司沒譜  回復  更多評論
      
    # re: 初次接觸EJB 2014-06-12 20:53 泡菜
    好好學習,我以后也要做一個程序員。  回復  更多評論
      
    # re: 初次接觸EJB 2015-04-28 17:23 阿斯蒂芬
    早就聽說EJB被程序員各種拋棄,不明白原因,如今我也被迫使用才知道,EJB確實應該淘汰啦  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    美麗涵涵童裝店
    親,說我博客名字,給你們打折!
    主站蜘蛛池模板: 亚洲国产系列一区二区三区 | a毛片全部免费播放| 四虎免费在线观看| 亚洲人成高清在线播放| 120秒男女动态视频免费| 在线电影你懂的亚洲| 精品免费久久久久久久| 2022年亚洲午夜一区二区福利 | 在线免费一区二区| 亚洲Aⅴ在线无码播放毛片一线天| 在线免费观看色片| 国产亚洲视频在线观看网址| 亚洲欧洲自拍拍偷精品 美利坚 | 亚洲国产成人精品不卡青青草原| 青青草原1769久久免费播放| 亚洲人成电影在线天堂| 国产人成免费视频网站| 亚洲依依成人亚洲社区| 免费国产人做人视频在线观看| 日本激情猛烈在线看免费观看 | 亚洲爽爽一区二区三区| a级大片免费观看| 久久久久se色偷偷亚洲精品av| 在线播放高清国语自产拍免费| 免费国产va视频永久在线观看| 亚洲精品无码mv在线观看网站| 日本一区二区免费看| 中国亚洲呦女专区| www.91亚洲| 久操免费在线观看| 亚洲欧美乱色情图片| 亚洲一区二区精品视频| 67194国产精品免费观看| 亚洲AV无码成人网站在线观看| 最新国产AV无码专区亚洲| 亚洲美女免费视频| 日本一区二区在线免费观看| 久久久亚洲欧洲日产国码二区| 免费看少妇作爱视频| 男人都懂www深夜免费网站| 亚洲GV天堂GV无码男同|