西元2006年04月09日
@Resource 資源取得 JNDI 的相關資源
在 TheServerside 看到這篇文章
http://www.theserverside.com/news/thread.tss?thread_id=39828
我利用簡單的資料庫連結做說明, Java EE 5.0 如何使用 @Resource 來取得相關資源
1. JDBC direct connect the Database
這是簡單的範例, 我們可以直接利用 DriverManager 去取得 connection, 這種寫法是由 Application 直接驅動連結, 沒有透過 Container, 我認為不是很好的方法 !
// JDBC Driver 的主要 class 名稱
Class.forName("com.mysql.jdbc.Driver");
// 每個 Driver都有標準的連結位置撰寫方式
String url = "jdbc:mysql://host:port/database";
// 將 URL 與登入帳號密碼連結
Connection con = DriverManager.getConnection( url ,"username","password");
//....
con.close();
2. DataSource Connection
透過 JNDI 以及 Context lookup 取得 DataSource, 再用 DataSource.getConnection() 取得 Connection.
Context initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup("jdbc/mysql");
Connection conn = ds.getConnection();
//... use this connection to access the database ...
conn.close();
3. @Resource mapped global JNDI
當開發工程師知道, application server 之中, 已經具備了 jdbc/mysql 這個 JNDI Name, 這樣算是取代了 JNDI context lookup 的方法.
@Resource(name="jdbc/mysql")
private DataSource ds;
Connection conn = ds.getConnection();
//... use this connection to access the database ...
conn.close();
4. @Resource dependency injection
當開發工程師不知道, application server 之中, 到底具備了哪些資源可以利用, 可以利用 Java EE 5.0 Annotation Resource Injection 的特性, 讓組裝部署人員做相關的設定.
@Resource
private DataSource ds;
Connection conn = ds.getConnection();
//... use this connection to access the database ...
conn.close();
web.xml
sun-web.xml
所以, 組裝人員可以在 web.xml , sun-web.xml ( glassfish ) 設定相關的 injection 環境及對應到 application server 的 global 的 jndi 設定, 這樣, 可以輕易地完成 Injection 的實作.
17:20 發表於 *Overview | 永久網址 | 留言 (0) | Email this
西元2006年03月30日
Java EE 5.0 Resource Injections
Java EE 5.0 之中有定義一些可以使用 injection 的 classes
*Servlet
- servlets
- servlet filters
- event listeners
* JSP
- tag handlers
- tag library event listeners
* JSF
- scoped managed beans
* JAX-WS
- service endpoints
- handlers
* EJB
- beans
- interceptors
* Java EE platform
- main class ( static )
- login callback handler
之前沒有看到這個規定, 難怪我嘗試著使用 Struts Action 透過 @Resource, @EJB 取得相關的 Resources, 都是回傳 NULL, 看來 action 之中目前僅能透過 JNDI context.lookup 的方式取得 ejb3 及其他的環境變數.
另外, 曾經當面和 saijones 提到 Deployment Descriptor 與 Annotations 的互補性, 在 spec 中也有定義, 當你在撰寫程式的時候, 使用 @Annotations 可以簡化開發的流程, 基本上, 你就少寫了一個 XML 檔案, 更可以直接設定預設值. 但是當部署人員或應用系統組合人員, 發現你的一些數值需要重新設定, 是不必重新打開原始碼, 修改 @annotations 的部分, 僅僅需要丟一個 xml 檔案放在 /META-INF/ 之中.
不過, 這種方法, 會不會造成 debug 更為艱鉅呢, 如果工程師被告知有 bugs, 可能永遠不知道是 deployer 將初始值修改成另外一個數值 !! 看來, 簡化開發是否能夠簡化 Debug !! 將會是新的 UnitTest 設計考驗 !!
另外, 使用 java EE platform 之中的 annotation 大多是 @Retention 為 RUNTIME 的, 所以並非僅用於 compile-time, annotation 的資料是會封裝在 classes 之中.. 所以使用上要格外留意 :)
21:05 發表於 *Overview | 永久網址 | 留言 (0) | Email this
西元2006年03月15日
該怎麼面對 JSF !
21 世紀初期就是一個很有趣的時代..
如果就拿 Java 來說, 則是一個詭譎多變的時代
無論是 Servlet, JSP, 甚至 JSTL, 幾乎每年都在反對著之前的 java 架構
當大家在嚷嚷著不使用 struts 的時候,
Webwork 的團隊卻和 struts 合作 ?!
當大家放棄 EJB 準備使用 SpringFramework 的時候,
EJB3.0 卻浩浩蕩蕩要統一 Business + Persistence Layer ?!
不過我相信
已經使用 SpringFramework 的人們 ~ 一定不會想要轉換跑道 ..
無論結果如何, MVC Framework 應用在 web 之中,
一定得去面對和實作, 無法逃避的選擇..
除非你是自己寫的 Framework或是直接用 jsp 來玩 ...
當我面對著 JSF 預設在 Java EE 5.0 之中
真的覺得很無力...
畢竟我到目前為止, 還是認為 JSF 不是成熟的規格..
又面對著 Tapestry, Wicket 的侵略與威脅
我實在不知道 JSF 的市場在哪裡 ...
我只能幻想著未來會有越來越多的 JSF components
讓我可以靠著拖拉工作
簡單說.
如果 ( if )
你要挑選一個 component-based mvc framework.學習
並且 ( && )
而且沒有任何根深蒂固的觀念的話 ( 沒有其他 framework 的經驗 )
你再去看 JSF 吧
16:31 發表於 JSF | 永久網址 | 留言 (0) | Email this

