JBuilder+WebLogic實現教材管理系統

來源:互聯網
上載者:User

  摘 要 這篇文章研究了在校園網環境下合理利用原有異構資料庫建立相關的部門管理系統的方法,介紹了基於WebLogic應用伺服器進行教材綜合管理系統的設計和實現的過程。

  關鍵詞 資料庫;J2EE; EJB;WebLogic
  引 言

  隨著科學技術的不斷提高,電腦網路的功能已為人們深刻認識,它已進入人類社會的各個領域並發揮著越來越重要的作用。同樣各類學校的校園網也運行了多個年頭,但還有不少學校的管理系統缺少統一規劃,單機啟動並執行資訊孤島還為數不少,所以有必要進一步研究在校園網環境下合理利用原有異構資料庫建立相關部門的管理系統的方法。

  在某高校中教務和教材倉庫都已經有了各自獨立的資料庫管理系統,但教材選訂等工作都是人工進行,工作人員的勞動量,效率很低。校園網環境下利用現有的資源建立教材綜合管理系統之必要性是不言而喻的!本文介紹基於WebLogic應用伺服器進行教材綜合管理系統的設計和實現的過程。

  系統結構

  系統包含教材選取、查詢、修改、訂購子系統,系統所需的教務資訊和教材庫存資訊來自網上原有資料庫,1所示。其中,教研室通過B/S模式可以進行教材選取、查詢、修改等工作,教材管理在教材委員會通過C/S模式本地完成,主要是教材訂購及系統管理工作。

    教材綜合管理系統的設計與實現

  1、資料庫設計

  其中資料庫系統中包含教務處資料庫(舊)、倉庫資料庫(舊)和教材委員會資料庫(新),充分利用了原有的資源達到共用資料的目的,用到的表有教務處的課程安排表、專業人數表,倉庫的庫存量表。

  教務處專業人數表:

列名 資料類型 長度 允許為空白
id Bigint 8
num int 4

  教務處課程安排表:

列名 資料類型 長度 允許為空白
id Bigint 8
cid Int 4
cname Varchar 50
teachunit Varchar 50
sname Varchar 50

  倉庫庫存量表:

列名 資料類型 長度 允許為空白
bid Int 4
bname Varchar 50
bnote Varchar 50
bauthor Varchar 50
bpublisher Varchar 50
bprice Float 8
bnum Int 4

  教材委員會對教材的選定、訂購進行統一管理,它擁有一個本機資料庫即教材委員會資料庫,在這個新進的資料庫中有三張表,一張用於教材選定後的資料的儲存,一張用於訂單的內容的儲存,第三張是教研室登陸密碼的資訊儲存。

  選教材表:

列名 資料類型 長度 允許為空白
cid Int 4
bid Int 4
cname Varchar 50
bname Varchar 50
teachunit Varchar 50

  訂單表:

列名 資料類型 長度 允許為空白
id Bigint 8
bname Varchar 50
numneed Int 4

  密碼錶:

列名 資料類型 長度 允許為空白
teachunit Varchar 50
pw Char 10

  它們都是J2EE中的底層結構,WebLogic應用伺服器層把底層資料庫連接起來需要配置資料池和資料來源。

  2、資料池和資料來源配置   

  由於資料庫系統中有三個資料庫,所以進行WebLogic串連池配置時需要配置三個串連池,這裡進入WebLogic的控制台頁面,以配置的第一個串連池,教務資料庫連接池(2)為例。其中最為關鍵的是在URL和Driver中運用對應資料庫類別的驅動,並填寫要訪問的資料庫名稱,資料庫伺服器的地址和連接埠。


圖2 串連池配置

  倉庫資料庫的URL為:“jdbc:oracle:CK:@localhost:1521”
  Driver為:“oracle.jdbc.drive.OracleDriver”

  教材委員會的URL為:“jdbc:weblogic:mssqlserver4:Teachingmanagement@10.10.11.81:1057”
  Driver為:“weblogic.jdbc.mssqlserver4.Driver”

  然後配置資料來源,根據資料池名,定義資料來源的JNDI名。這樣就把分布在不同地區的三個資料庫在WebLogic中串連起來,並成功屏蔽了資料庫軟體的類別、版本、地區等差別,其中教務處資料來源配置3:


圖3 資料來源配置

  3、建立實體EJB

  系統要對三個異地資料庫共六張表,進行操作,因此要逐個引進並建立相應的實體Bean,這裡將三個資料庫中本系統要用到的的表都引進到同一個EJB Module中。

  在JBuilder中產生的實體Bean中會自動識別並產生對應表的名稱,資料區段的名稱、屬性,根據程式員設定的本地或遠端home介面檔案,封裝了操作資料庫的基本動作,如通過主鍵尋找記錄的功能,在尋找到的記錄中得到和設定資料項目的函數等,為了後面子系統的需要還要添加一些函數:

  在課程安排表Entity Bean中添加兩個Finder:

  一個finder名為findall,功能是得到教務資料庫課程安排表的所有資訊。將要在往選教材表中寫入所有課程資訊時使用。

  另一個名為findbycid,功能是根據輸入的課程資訊找到選了這些課程的專業。

  在選教材表中添加兩個Finder:

  一個名為findall,為了得到所有的選教材表的資訊。

  另一個名為findbybid,功能是得到輸入教材號所對應的專業好。

  在Baobiao中添加一個Finder為 findall,得到所有訂單表裡的資訊。

  這樣就完成了本系統實體bean的建立。

  4、建立會話EJB

  使用會話bean 可對某一客戶的處理或控制對象建模,對工作流程、任務和管理活動等建模,協調多個實體bean,控制實體bean之間的互動將業務應用邏輯從用戶端轉移到伺服器端,本系統考慮到資料不是特別龐大。僅用了具有遠程介面的一個無狀態會話EJB(connectEJBs)完成所有與實體EJB打交道的任務。

  為了系統功能的需要,在其中添加了6個私人變數,6個公有變數,初始化後用以訪問六張表對應的實體EJB。初始化代碼為:

try{
 Context context=new InitialContext();
 Object ref=context.lookup("java:/comp/env/Coursearrangement");
 crthome=(CoursearrangementHome) ref;
 ref=context.lookup("java:/comp/env/Xk");
 xkhome=(XkHome) ref;
 ref=context.lookup("java:/comp/env/Tp");
 tphome=(TpHome) ref;
 ref=context.lookup("java:/comp/env/Number");
 numberhome=(NumberHome) ref;
 ref=context.lookup("java:/comp/env/Ck");
 ckhome=(CkHome) ref;
 ref=context.lookup("java:/comp/env/Baobiao");
 baobiaohome=(BaobiaoHome) ref;
}catch(Exception e){e.printStackTrace();}

  這樣就能通過會話EJB的遠程介面訪問實體EJB裡自動產生的和自己添加的方法或函數了,前提是這個方法或函數包含在實體EJB的home介面裡。

  還添加了一些本地公有函數和多個遠程公有函數,用來修改或訪問實體EJB並作初步的處理。增加的函數必須在JBuilder中先右擊代表會話Bean的圖形添加方法(add method),設定各項參數後方可右擊會話Bean選擇View Bean Sourse菜單,進入代碼區編輯方法主體,否則工程將產生編譯錯誤。這裡提供了整個系統所需的與資料庫打交道的函數,這些介面在後文中都有用到。

  3個本地公有函數:為瞭解決不能連續在同一個函數裡多次寫入資訊而獨立出來的函數

  ①public void writecidcname(Integer cid, String cname, String teachunit)

   這是往選教材表寫課程資訊。

  ②public void writebook(Integer bid, String bname)

   這時保教材資訊寫入訂單表。
 
  ③public void writealltp(String unit, String pw)

   同理,為了往密碼錶裡寫入密碼資訊而編寫。

  遠程公有函數:以下的函數是訂單子系統要用到的介面

  ⑴public java.util.Collection couinfo()

   這個函數是負責從教務處得到開設課程的資訊。傳回值是Collection對象。

  ⑵public boolean writexk(java.util.Collection rst)

   這個函數在運行訂單子系統自動調用。它負責在初始化系統時將從教務處得到的課程資訊寫進選教材表中,保證既使新增了新的教研室也能即時地獲得。它的參數就是函數zhuanyi()的傳回值,在程式主體調用了本地函數①。

  ⑶public java.util.Collection selectunit()

   這個函數是為了從選教材表中得到所有開設了課程的教研室的名稱。既為了在B/S的登入介面上得到教研室名下拉框的需要,又為了在密碼錶中得到教研室名而編寫。注意這裡有重複資訊,需要再調用它的函數中過濾掉。

  ⑷public boolean writetp(Collection rst, String pw)

   這是為了建立教研室密碼錶而編寫,在函數⑵後調用,當表中沒有教研室或是有了新的教研室的時候,它會自動加到密碼錶中並分配原始密碼。是教員能登陸再現的教材錄入子系統。

  ⑸public boolean reflushbaobiao()

   這是C/S介面使用者重新整理訂單資訊時,將選教材表中的已經選了的教材資訊寫進訂單表中。它在獲得相應教材應定的數量之前調用。

  ●這以下是為了獲得訂單中所需要訂購的書的數目而寫的函數,因為不能在一個函數中操作多個資料庫,所以用了下面多個函數以實現。

  得到訂單表裡所有的教材號:

public Collection readbaobiaoforgetnum()

 
  從選教材表中得到已經選好的課本對應的課程號:

public Integer readxkforgetnum(Integer bid)

 
  再從教務處課程安排表中得到開了這個課程號所代表的課程的專業,可能不止一個:

public Collection readcouforgetnum(Integer cid)

  然後從教務處人數表中查到這些專業的人數:

public Integer readnumforgetnum(Long id)

  再找出倉庫裡這本書的庫存量,如果所需數量大於庫存量,就要在訂單中顯示出定購量:

public Integer readckforgetnum(Integer bid, int numall)

  ○●○此以下的函數為教員線上教材選取和相關單位查詢要用到的函數。

  ⑴public String login(String unit)

   這在使用者登陸時系統檢查密碼是否匹配時使用,就是根據使用者名稱查詢到相應的密碼並返回。在使用者修改密碼時驗證是否為登陸使用者也用到了它。

  ⑵public String login(String unit)

   這個函數從名字得知,是使用者登陸時系統檢查密碼是否匹配時使用的,就是根據使用者名稱查詢到相應的密碼並返回。在使用者修改密碼時驗證是否為登陸使用者也用到了它。

  ⑶public boolean writein(Integer cid, Integer bid, String name)

   這個函數是使用者填寫了課程資訊後將這些資訊寫入到相應的資料庫記錄中。

  ⑷public boolean setpw(String unit, String pw)

   此函數在使用者修改密碼時使用的。

  ⑸public boolean isbooksame(Integer bid)

   此函數是使用者填寫教材資訊是否重複輸入,或是輸入了別的課程已經選取的教材時判斷用的,防止資料庫主鍵重複插入。

  ⑹public Object getbidname(Integer cid)

   這是為了教研室查詢已選教材準備的介面,為選取教材提供參考。

 5、訂單子系統

  為了實現教材委員會對整個教材選取系統的控制,得到教材訂單報表,本系統在 C/S端達到上述目的。它是不發布的,是教材委員會的本地用戶端,其中的訂單介面4。


圖4 訂單子系統中的訂單介面

  系統啟動時,將自動從教務處資料庫取得將要開設的課程資訊,添入教材委員會資料庫的選教材表中,空出與之對應的教材資訊等待教研室教員理用B/S端加進去。核心代碼:

conhome= (connectEJBsHome) PortableRemoteObject.narrow(ref, connectEJBsHome.class);
try
{
 con=conhome.create();
 if(con.writexk(con.zhuanyi()))
 {
  System.err.print("你已成功轉移了資料!");
 }
}catch(Exception ex)
 {
  ex.printStackTrace();
  System.err.print("資料轉移失敗!");
 }

  它得到會話Bean的home介面,將會話Bean的方法couinfo()得到的課程資訊再調用writexk()寫入到選教材表中,等待教研室選取教材,然後為教研室分配原始密碼888888。核心代碼:

try
{
 con=conhome.create();
 if(con.writetp(con.zhuanyi(),”888888”)
 {
  System.err.print("密碼分配成功!");
 }
}catch(Exception ex)
{
 ex.printStackTrace();
 System.err.print("密碼分配失敗!");
}

  當按下“重新整理訂單”按鈕之後,下面的列表框將呈現需要訂購的教材的資訊,包括書名和書的ISBN號和訂購數量。實現代碼為:

conhome= (connectEJBsHome) PortableRemoteObject.narrow(ref, connectEJBsHome.class);
try {
 con=conhome.create();
 if(con.writebaobiao())
 {
  System.err.print("得到報表資料!");
  if(this.getnum())
  {
   System.err.print("取到了書的數目!");
  }
 }
}
catch(Exception ex)
{
 ex.printStackTrace();
 System.err.print("產生報表失敗!");
}

  其中writebaobiao()將用到會話EJB中的專門為得到訂購書本數目而寫的一系列函數,這裡不贅述。

  6、教材選取系統

  教材選取是一個線上系統。核心部分全部用JSP製作,藉助Dreamweavre4開發JSP將會十分便利。本系統沒選擇applet做介面是考慮到安全性需要,applet需要將程式下再到用戶端執行,它實際上是一種可用網頁開啟的C/S,破壞了三層結構瘦用戶端的優點,但在實現不涉及安全性的部分可以考慮使用。本系統的選取介面5所示。


圖5教材選取系統的選取介面

  這裡共有五張JSP頁面是線上教材選取系統的主要部分。一些jsp頁面直接使用同一個JavaBean,增強了代碼的複用性,如登陸頁面與密碼修改頁面同用pwbean的Javaean。為了使大多數邏輯在會話EJB中實現,JavaBean作為JSP的一部分要短小精幹。login.jsp為登入介面,可自動獲得教務處所有教研室名稱,通過教材委員會分配的密碼登陸select.jsp,選擇教材。到了select.jsp後,網頁自動獲得登陸教研室所負責的課程,這裡給了兩個文字框,讓教員輸入他認為合適的書本的統一編號和名稱,當然這裡是以編號為唯一標識的,成功後會出現成功頁面success.jsp。在這裡還有教研室可以修改密碼的導覽按鈕, 轉換到修改密碼的介面pwchange.jsp,這裡需要輸入原來的登陸密碼,輸入兩次新密碼才能真正修改密碼。修改成功後會出現成功介面。密碼在教材委員會資料庫裡,在這裡完完全全體現了JSP的安全性。
至此,核心功能已實現,其他單位的查詢瀏覽等功能略去。

  利用JBuilder開發系統的好處是許多功能由系統自動完成。上述工作完成後,只需工程部分打包成EAR(Enterprise Archive)。在JBuilder中將Tools->Enterprise Deploy配置好伺服器位址、連接埠,使用者名稱密碼,系統自動將web應用部署資訊寫進部署描述檔案web.xml中,要做的只是右擊工程發布即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.