jini-jakarta99-blogging
[ 首頁 | 索引 | 登入 | 註冊 ]

2005-01-31

jini 所撰寫。最後修改者是 jini 在 1305 天之前。 已瀏覽 2222 次。
[編輯] [附加]

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.Driver

URL : 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
go

dump tran master with no_log go

sp_dropextendedproc 'xp_jtdsxa' go

dump tran master with no_log go

sp_addextendedproc 'xp_jtdsxa', 'jtdsXA.dll' go

grant execute on xp_jtdsxa to public go

dump tran master with no_log go

checkpoint 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/

目前無回響 | 發表回響
請利用全文檢索或日期來找你想看的文章 ^^~

< August 2008 >
SunMonTueWedThuFriSat
12
3456789
10111213141516
17181920212223
24252627282930
31

歡迎來到 jini(99% jakarta) blogging
如果要加入我的 blogging 網頁
可以抓下面的小圖
jini (99% jakarta) blogging
link 是 www.softleader.com.tw:8668
alt 請寫 jini (99% jakarta) blogging

Blog 精選
>>Jakarta
>>Java Database
>>JAAS
>>Code Style
>>Groovy
>>Self Misc.

不會用 snipsnap 嗎
請查詢 snipsnap-help.

我會發言的討論版
jini in>>jsptw


我發行的電子報(Java Opensource Newspaper)
>>BIG5-Traditional Chinese Version
>>GB-Simplified Chinese Version

Users: (2)
… and 30 Guests


一群Java高手的部落格
>>JiaYun
>>jserv
>>Forth
>>Tempo
>>edwardsayer
>>swanbear
>>jini's JavaEE 5
>>雅加達爪哇咖啡北京分店

其他連結:
XHTML 1.0 validated
CSS validated
RSS 2.0 validated
powered by snipsnap
Attribution-NonCommercial-ShareAlike 1.0
Java b Blog
RSS Feed

Powered by SnipSnap 0.4.2a

snipsnap.org | Copyright 2000-2002 Matthias L. Jugel and Stephan J. Schmidt