1. 程式人生 > >@Resource 資源取得 JNDI 的相關資源

@Resource 資源取得 JNDI 的相關資源

我利用簡單的資料庫連結做說明, 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;


4. @Resource dependency injection
當開發工程師不知道, application server 之中, 到底具備了哪些資源可以利用, 可以利用 Java EE 5.0 Annotation Resource Injection 的特性, 讓組裝部署人員做相關的設定.

web.xml

   
        packageName.ClassName/ds
        javax.sql.DataSource
        Container
        Shareable
   


sun-web.xml 
 
    DSResourceInjectionServlet/ds
    jdbc/__default
 

所以, 組裝人員可以在 web.xml , sun-web.xml ( glassfish ) 設定相關的 injection 環境及對應到 application server 的 global 的 jndi 設定, 這樣, 可以輕易地完成 Injection 的實作.

Connection conn = ds.getConnection();
//... use this connection to access the database ...
conn.close();

@Resource
private DataSource ds;

Connection conn = ds.getConnection();
//... use this connection to access the database ...
conn.close();