摘 要 本文討論的是在多種異構數據庫下,如何進行多數據庫的訪問,並分析了使用Java技術下的各種方法進行多種異構數據庫下的數據交換。
要害詞 異構數據庫;EJB;Servlet
引言 現在的各種數據庫應用,由於技術、歷史等因素,往往在一個大的部門中並存有多個應用系統。這些應用系統可能分散於不同的網絡節點、基於不同的操作平台、使用不同的數據庫治理系統,且各子系統封閉運行,自成一體,這樣給不同部門的信息資源共享帶來困難。如何在不改變原來系統的內部信息的前提下,完成不同數據庫系統間的數據訪問和交換是值得研究的問題。
多數據庫系統的Java解決方案 多數據庫系統的構成有多種方式,在這些方式中,我們考察這些多數據庫的不同點,其主要表現在以下幾個方面的異構:
(1)數據庫邏輯數據模型的異構:有層次、網狀、關系、對象-關系和對象五種數據庫。
(2)數據庫物理數據模型的異構:物理數據模型反映數據庫存儲結構,例如物理塊、指針、索引等,即使邏輯數據模型相同,如關系數據庫的Oracle、SYBASE、DB2等,其物理數據模型也存在差異。
(3)操作系統的異構:UNIX、WINDOWS系列、MacOS、OS/2、DOS等。
(4)計算機平台的異構:從巨、大、中、小型機到工作站,微機以及手持機。
(5)網絡的異構:LAN、WAN、以太總線結構與令牌環結構等。
在這些異構中,有些是數據庫歷史所造成的,如層次、網狀類型的數據庫;有些是不同的數據庫開發商開發的不同的數據庫治理系統造成的;有些是計算機操作系統的不同;而有些是網絡結構和計算機平台的原因。對於這些不同,從目前來看,我們認為當前應該著重解決的在關系模式下的不同的操作系統和不同數據庫治理系統。
眾所周知,Java技術是全新的編程技術,它具有平台無關性、面向對象、安全、高性能、分布式,多線程等特點,使Java成為當前最為類型的編程語言和平台。對於多數據庫系統聯合訪問和數據交換,使用Java技術可以解決不同的操作系統和不同的數據庫治理系統之間的數據處理。
1)使用Java Bean技術實現多數據庫的訪問
Java Bean是一個Java模型組件,它為使用Java類提供了一種標准的格式,在用戶程序和可視化治理工具中可以自動獲得這種具有標准格式的類的信息,並能夠創建和治理這些類。
基於Web的多數據庫訪問是電子商務和電子政務迅速發展而出現的一種多數據庫聯合應用的形式。在數據庫異構,操作系統異構的條件下,對於數據量很大的這種多數據庫應用問題,只有Java 技術才有能力解決。
對於在Web下的多數據庫訪問,Java的新技術是Servlet。Java Servlet是在服務器端運行的Java程序。現在隨著Servlet API2.3版的引入,服務器的Servlet將把Java Web軟件開發帶向更高的層次。Servlet提供了快捷、強大、靈活的開發環境。開發出來的Servlet可以在服務器的進程空間裡運行,並能同時處理多個請求。當然,最值得稱道的是Servlet的平台無關性。
對於基於Web的多數據庫訪問,Java Bean技術可以提供一個比較強大、靈活的解決方案。首先構造多個Java Bean,在這些模型組件裡,我們要處理數據庫的連接、定義,查找、插入、刪除操作等方法,並要實現多線程,然後構造編寫調用Java Bean的Servlet,這樣可以實現對多數據庫的訪問。Java Bean的結構如下:
public class DatabaseConnectBean
{
定義數據庫連接的成員;
定義連接的方法{ }
……
}
在Servlet中調用Java Bean的過程為:
public class UsedatabaseBean extends HttpServlet
{
public void doGet(httpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
{
……
}
public void doPost(httpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
{
……
//創建Java Bean的對象
DatabaseConnectBean conBean=new DatabaseConnectBean(……);
//使用conBean進行數據庫的操作
……
}
}
從上述的過程和語句我們可以發現,使用Servlet技術可以訪問各種不同類型的數據庫,但是使用Servlet技術下的Java Bean技術要保證數據庫數據的一致性,應在Java Bean中我們可以使用Java的線程技術中的同步等方法來實現對數據庫的連接、操作,但這樣將加大程序員的編程實現。所以使用Servlet技術下的Java Bean能同時對多個數據庫實體的訪問,但實現起來不方便。
2)使用EJB技術實現多數據庫的訪問
EJB是Sun定義的一組標准的Java擴展的開發接口,稱為Enterprise Java Bean API。這些應用程序編程接口(API)為各種各樣的中間件實現了不依靠供給商的編程接口,Enterprise Java Bean技術把Java組件的概念從客戶機域擴展到了服務器域,它使Java技術發展成為一種強健的、可伸縮的環境,能夠支持以任務為要害的企業信息系統。
Enterprise Bean運行在EJB容器中。EJB容器在運行時治理Enterprise Bean的各個方面,包括遠程訪問Bean、安全性、持續、事物、並行性和資源的訪問與合用等。
EJB容器不答應客戶機應用程序直接訪問Enterprise Bean。當客戶機應用程序調用Enterprise Bean上的遠程方法時,容器首先攔截調用,以確保持續、事物和安全性都正確應用於客戶機對EJB執行的每一個操作。EJB容器的結構圖如圖1所示。
圖1 EJB容器結構示意圖
EJB組件分為3種主要類型:會話Bean(Session Bean)、實體Bean(Entity Bean)和消息驅動Bean(Message-Driven Bean)。會話Bean實現某些在服務器上運行的業務邏輯。會話Bean對象不在多台客戶機之間共享。其特點是(1)它代表單個客戶機執行。(2)會話Bean包含事物處理。(3)可以使用會話Bean更新共享數據庫中的數據。(4)會話Bean的生存期就是客戶機的生存期。EJB依靠EJB容器來獲取它的需求。EJB通過容器來訪問JDBC連接,調用其他EJB和獲得它自身的引用或訪問特性等。EJB通過回調方法、EJBContext和Java命名和目錄接口(JNDI)與容器交互。(5)會話Bean的數據會在EJB服務器運行失敗時被刪除。實體Bean代表一個存儲在持久性存儲器中的實體的對象視圖。消息驅動Bean,使得EJB容器能夠異步地接收消息。
對於多數據庫訪問,EJB技術可以提供一個比較強大、靈活的解決方案。首先構造多個會話Bean,在這些模型組件裡,我們要處理數據庫的連接、定義,查找、插入、刪除操作等方法,然後創建和部署EJB,這樣可以實現對多數據庫的訪問。會話Bean的結構如下:
public class DatabaseConnectSessionBean implements javax.ejb.SessionBean
{
……
public int checkUserLogin(String userid,String passWord)
throw NameingException,SQLException
{
……
//得到初始上下文
InitialContext ic=new InitialContext();
//獲得數據源
DataSource ds=(DataSource) ic.lookup(數據庫JDNI名字);
//建立數據庫連接
Connection conn=null;
try{
conn ds.getConnection(數據庫用戶名,數據庫用戶密碼);
//進行數據庫數據的操作
}
}
}
從上述的過程和語句我們可以發現,使用EJB技術可以訪問各種不同類型的數據庫,而且支持數據庫的“事務”的機制,這樣使對數據的處理能夠保證數據的一致性。所以使用EJB技術能實現對多個數據庫的訪問,而且安全性、持續、事物、並行性和資源的治理由容器來治理,這樣使編程具有簡單性。
結束語 EJB技術是解決異構數據庫環境下的多數據庫信息處理一種有效的方法。它不但可以解決數據庫異構的問題,更是解決操作系統異構的最有效的方法。這樣可以達到不同信息資源的共享及信息的綜合統計查詢,這也是企事業單位迫切要解決的實際問題。我們認為EJB技術能更好的解決異構數據庫環境下的電子商務和電子政務方面的信息交換問題。