OpenSource-050131-第41期-jtds
05:04
Java in 2004 Review
http://www.onjava.com/pub/a/onjava/2004/12/22/2004-yearender-1.html這篇文章娓娓道來 2004 年, Java 界主要的大事紀 ~
首先以 Hibernate is Hot 作為主題, 因為 EJB 2.x 過於重量級,
導致 Java 開發人員不願意去使用笨重的 Enitity Bean 去處理 OR-Mapping ,
也造就了 Gavin King 的 Hibernate 變成大紅大紫,
同時間, JBoss 納入了 Hibernate 加入 JBoss.org,
讓 JBoss 成為了 Java Opensource King. 把 Hibernate 稱為 J2EE 開發人員必修課程,
我相信國內外很多開發廠商的技術總監, 應該都會揚棄 EJB 而轉投向 Hibernate,
但是.. hibernate 的版本相容性真的不夠好, 所以, 請多測試多嘗試,
而且要讀懂他的 Exception Message 也不是一件容易的事情,
因此, 如果在 EJB 3.x lightweight 的設計規範下,
Hibernate 3 應該會有更好更優越的發展, 不然, 就會被 EJB3 所擠壓生存空間了.
另外最ㄏㄤ的就是 IDE, Eclipse, 由 IBM 所捐贈出來的 eclipse,
因為不使用 Swing 改用 SWT, 加上 Plugins Framework 容易延伸開發,
讓 Java Opensource 界工程師紛紛改用 Eclipse ,
目前在 sourceforge.net 上面配合 eclipse 的 plugins 琳瑯滿目,
不過 j2ee 的開發, 我覺得 bug 仍然是很多, 如果當成簡單的 compile 工具還不差..
Jiayun 妹子也早已揚棄 Netbeans 轉投 Eclipse. 畢竟, Eclipse 真的比較友善點, SUN 加油吧, 你的 Netbeans 4 看來還是無法挽回容易善變的使用大眾 ~~
jakarta commons 項目的相關的 plugins 可以利用 Jiayun 的 Commons4e (
http://commons4e.berlios.de ).
J2SE1.5 改名為 J2SE 5.0 , 這隻 Tiger 的出現到底會對於整個 Java 界有什麼影響, 新增了 enum, 泛型等等的開發,
相關的新特性可查閱
http://www.javaworld.com.tw/jute/post/view?bid=5&id=7558&tpg=1&ppg=1&sty=1&age=0#7558 .
Tomcat 5.5 也支援了 JSP2.0 及 Servlet 2.4, 更採用了 SWT 增進他的效能,
我想, Java 在 2005 已經不再是技術的發展了, 未來 IoC 及 AOP 等等的觀念導入了 Java Development 之中,
會讓開發人員更輕鬆容易地掌控大型系統, 希望 Java 2005 , 將會是擊敗 .NET 的一年 ~
本週主題 JTDS Section 01 JDBC Driver
關聯式資料庫對於現在的系統來說, 可以算是牢不可分的情況,
無論是大型主機甚至到 PDA 的環境, 往往系統中都會結合資料庫來進行相關的處理,
簡單來說, 我們就是利用資料庫來進行一些資料的存放,
甚至利用 SQL 指令進行選雜性的查詢或是排序, 總和等等的資料庫相關作業.
在 Java 平台開發之中, java.sql.* 就是為了讓程式可以輕易地呼叫資料庫.
所開發的基礎架構. 然而, 除了 java.sql.* 的設定及存取功能提供之外,
我們還需要 JDBC Driver 去連結資料庫.
不同廠商, 不同規格, 不同版本的資料庫可能需要不同的 JDBC Driver,
而 JDBC Driver 也分為了幾種.
詳細可見 (
http://java.sun.com/products/jdbc/driverdesc.html )
Type1:JDBC-ODBC bridge
Type2:native-API partly Java technology-enabled driver converts
Type3:net-protocol fully Java technology-enabled driver(Database Middleware)
Type4:native-protocol fully Java technology-enabled driver
如果你有其他 Database 需要連結, 可以透過 java.sun.com 的搜尋找到相關的 JDBC Driver ( 商業用或是免費下載 )
http://servlet.java.sun.com/products/jdbc/drivers
然而我這次要介紹的 JTDS 則是支援 MS SQL Server 與 Sybase Database 的 JDBC Driver Type IV,
為何 JTDS 可以同時連結 MSSQL 與 Sybase 呢 ?
這就要話說當年, Microsoft 還沒有自己的資料庫, 就重金挖角了 Sybase 的核心開發團隊,
自此, Sybase 一厥不振 ~
我個人蠻討厭 Sybase 在台灣的業務 … 這又是另話了 ~~
Section 02 下載 jtds
下載位置 :
http://sourceforge.net/project/showfiles.php?group_id=33291最新版本 : 1.0
版權宣告 : LGPL
我是建議大家下載 source code 來研究, 畢竟這是比較少可以見到的 opensource jdbc driver,
另一方面, 可以透過 jtds 來了解 JDBC Driver 實作的方式與 JDBC 的觀念.
目前 JDBC 的規格書已經到了 3.0 版, jtds 1.0 也是完成了 JDBC 3.0 的實作.
(
http://sourceforge.net/project/showfiles.php?group_id=33291 )
Spec download (
http://java.sun.com/products/jdbc/download.html#corespec30 )
主要來說 JDBC 3.0 最足以稱道的是支援 SQL99 , Connection Pooling 的機制,
取得更多的 ResultSet , Boolean 的 DataType ( 對應到某些資料庫是 bit ), Metadata 支援度更齊全,
關於 Metadata 的應用, 我就留到 isql (
http://isql.sourceforge.net/ ) 的介紹再行解說吧.
Section 03 jtds 的使用
其實只需要查閱一下 FAQ 中的 Getting Started (
http://jtds.sourceforge.net/faq.html#driverImplementation ) ,
就可以清楚地知道如何使用 jtds.
主要來說, 利用 DriverManager 呼叫 JDBC Driver 需要設定 DBURL 與 DBDriver. 例如 :
Driver :
net.sourceforge.jtds.jdbc.DriverURL :
jdbc:jtds:sqlserver://localhost:1433/xxxx;tds=8.0;lastupdatecount=true
你也可以利用 Datasource 進行相關的資料存取動作. 對於 jtds 來說,
他利用了 net.sourceforge.jtds.jdbcx.JtdsDataSource 實作了 Datasource, XADatasource 等機制.
所以直接使用也是可以的. 例如 :
Datasoruce :
net.sourceforge.jtds.jdbcx.JtdsDataSource
Section 04 開發 JDBC Driver
開發 JDBC Driver, 首先就是要研讀相關的 Specification 資料,
在 Driver 的開發上, 首先要 implements java.sql.Driver ,
接著利用 DriverManager.registerDriver 去註冊你的 JDBC driver.
public class MyJdbcDriver implements java.sql.Driver
static {
java.sql.DriverManager.registerDriver(new MyJdbcDriver());
}因為你 implements java.sql.Driver 所以也一定要實作
boolean acceptsURL(String url) { .... }
Connection connect(String url, Properties info) { .... }
int getMajorVersion() { .... } // 版本主序號 1 (v1.0)
int getMinorVersion() { .... } // 版本次序號 0 (v1.0)
DriverPropertyInfo[] getPropertyInfo(String url, Properties info) { .... }
boolean jdbcCompliant() { .... }主要來說, 還是以 connect 最重要, 你必須讓 url 及相關 info 讓 JDBC Driver 了解,
讓他知道要和哪一台資料庫溝通, 以及設定相關 info, 讓他真正了解相關的規則.
當 Connection 建立與資料庫溝通的程式碼 , 這必須先了解 JTDS 的演進.
JTDS 的前身其實是取自
http://www.freetds.org/tds.html . 真正和資料庫溝通的是 TDSCore 等java檔,
可以對照的規格去了解這個程式開發的邏輯.
Section 05 使用 XADatasource
在分散式系統中, 部分情況當你在同一個 transaction , 且必須存取兩個以上資料庫時,
那麼 JDBC Driver 就不足以讓你使用了, 你必須利用 XADatasource 進行相關的處理作業,
在 jtds 之中, net.sourceforge.jtds.jdbcx.JtdsDataSource 是繼承 PooledConnection 且實作 XAConnection ,
然而, 大多現存的資料庫預設都沒有支援 XADatasource 的型態,
拿 MS SQL Server 來說,
先將 JtdsXA.dll 放到 MSSQL 的 binn 目錄之下.
接著你必須利用 INSTJTDS.SQL 設定 相關的 store procedure.
use master
godump tran master with no_log
gosp_dropextendedproc 'xp_jtdsxa'
godump tran master with no_log
gosp_addextendedproc 'xp_jtdsxa', 'jtdsXA.dll'
gogrant execute on xp_jtdsxa to public
godump tran master with no_log
gocheckpoint
go
之後, 才可以利用相關的 XADatasource 功能.
Section 06 同類型 JDBC 比較
http://jtds.sourceforge.net/benchTest.html看了這個, i-net JDBC Drvier 是必須收費的, 另外則是 M$ 所提供的 JDBC Driver.
看過了, 真搞不懂 Microsoft 幹麻這麼好心提供一個這麼差的效能 JDBC Driver 給大家使用..
難道就是要讓大家認定 Java 就是慢 >"< ~
---
相關連結JTDS Site :
http://jtds.sourceforge.net/