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


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

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章檔案

          好友的BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

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


          2. 創(chuàng)建數(shù)據(jù)庫表
             我用的是oracle數(shù)據(jù)庫,創(chuàng)建了一個名為test_yay_user的數(shù)據(jù)庫表,里面有三個字段id、username、password,都是varchar類型。
          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ù)具體起進行修改;
          5. 創(chuàng)建持久化類
            因為用到jpa,需要創(chuà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òu)造函數(shù),否則可能無法正確持久化;好像在我調(diào)試過程中,提示我必須要有個默認的構(gòu)造函數(shù);因為涉及到對象序列化,可能必須要有serialVersionUID ;
            GenerationType.AUTO是讓數(shù)據(jù)庫自己去決定主鍵的生產(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的編寫
             (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) 編寫實現(xiàn)類UserService
                     實現(xiàn)增刪改查的方法,接口最上方用@Stateless  和 @Remote(IUserService.class)  聲明,類第一行代碼是@PersistenceContext(unitName="OracleDS") EntityManager em;
                      程序會尋找OracleDS的數(shù)據(jù)源,然后初始化一個EntityManager對象,這個對象就是用來操作數(shù)據(jù)庫,類似hibernate里面的hibernateTemplate,跟hibernate操作非常相像,如增加一個對象em.persist(obj);。
                   特殊說明:其實在初學把數(shù)據(jù)庫的增刪改查寫在這個userService里面即可,但因為領(lǐng)導要求,我啰嗦了一層,userService會調(diào)用DAOFactory里面的方法,而DAOFactory里面的方法才調(diào)用EntityManager 去實現(xiàn)增刪改查。

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

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

          代碼開發(fā)完成后,就該部署了。
          我是直接用myeclipse的工具來發(fā)布的,發(fā)布后在jboss\server\default\deploy下會出現(xiàn)我們的工程文件夾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工程發(fā)布后,必須要以jar形式存在,而不能以文件夾形式存在。


















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













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

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

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

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


          網(wǎng)站導航:
           
          美麗涵涵童裝店
          親,說我博客名字,給你們打折!
          主站蜘蛛池模板: 宁远县| 哈巴河县| 广安市| 大石桥市| 丰城市| 明光市| 娱乐| 惠安县| 安平县| 永福县| 左云县| 绥滨县| 安溪县| 横峰县| 洛宁县| 祁东县| 白玉县| 青海省| 措美县| 达孜县| 罗江县| 登封市| 都昌县| 平泉县| 神木县| 巨野县| 普兰店市| 佛坪县| 金溪县| 徐州市| 三台县| 石家庄市| 遂宁市| 阜城县| 聊城市| 琼海市| 建平县| 东宁县| 安义县| 栖霞市| 南昌市|