Amazon Ads

2014年12月1日 星期一

【筆記】一個簡單的JAX-RS應用程式範例

這裡使用GlassFish 4來當伺服器,使用它的好處在於在GlassFish的函式庫( <glassfish安裝目錄>/glassfish/modules)中,已經內含支援JAX-RS的函式庫(如:jersey-container-servlet-core.jar等),我不用再另外下載,而且日後可以和其他Java EE元件搭配應用。


這裡使用Eclipse來進行開發。

先在Eclipse新建一個名為「jaxrs-example」的【Dynamic Web Project】專案。

再來在idv.jk.jaxrs套件下,新增一個名為「UserService.java」的類別:
package idv.jk.jaxrs;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/user")
public class UserService
{
 @GET
 @Path("/{name}")
 public Response sayHello(@PathParam("name") String name)
 {
  String message = "Hello, " + name;
  return Response.status(200).entity(message).build();
 }
}
其中,宣告在UserService類別上的這個@Path("/user")是跟容器講,若是/userURL,就交給我負責。

而在sayHello上面的@Path("/{param}")是說在/user後面接的URL可視為一個參數,在@PathParam("name")可以將此參數補捉下來,傳入方法使用,如客戶端使用/user/bio來做請求,則在sayHello傳入的name參數值就會是bio

再來在web.xml中加入下面程式片段,來設定servlet-mapping

    jaxrs-servlet
    org.glassfish.jersey.servlet.ServletContainer
    
      jersey.config.server.provider.packages
      idv.jk.jaxrs
    
    1


    jaxrs-servlet
    /service/*

這段設定用白話文來講,就是/service開頭的請求,都是用org.glassfish.jersey.servlet.ServletContainer這個類別來負責,而它會去idv.jk.jaxrs這個套件下去找,有沒有可以負責特定URL的類別,如上列的UserService類別就會是被設定為負責處理/service/user的請求,如:http://localhost:8080/jaxrs-example/service/user/bio,而前列URL中的bio,就會被捉出來當做傳入sayHello的參數。

一個簡單的JAX-RS應用程式只要上列兩個檔案的設定即可,再來啟動GlassFish並部署程式,成功之後,開啟瀏覽器,並在網址列輸入:http://localhost:8080/jaxrs-example/service/user/bio,網頁應為回應下列訊息:


參考來源:

2014年11月27日 星期四

【分享】Oralce認證:Oracle Certified Expert, Java EE 6 Java Persistence API Developer(1Z0-898)的考取心得

今天以98%的分數,考過了1Z0-898,取得Oracle Certified Expert, Java EE 6 Java Persistence API Developer的證照。


一開始在準備的時候,看它過的分數比較低,以為比較難,但這次過的分數是歷次來最高的,感到非常幸運。

其實,想想,要取得這張證照,除了對Java Persistence API要有一定程度的認識外,對EJB在交易(Transaction)的控制與例外(ex. EJBException)的處,以資料表間的設計,也要有一定認識,應該是這個關係,分數門檻才設在61%。

這次考試準備的參考書是先看下列這本:


這本是國外在準備認證的網友必推的一本,我一共看了兩遍,看第一次時,真的似懂非懂,看第二遍就會比較有感覺,現在回想,如果在閱讀時,搭配作者提供的範例程式碼,吸收應該會更快一點,理解也會更透徹一點,上面這一版內容有包含到JPA2.1的部份,作者在內文都會有說明,若只是要準備1Z0-898,考試內容只會包含JPA2.0,JPA2.1的部份可以先跳過。

再來,就是「必讀的聖經」:Java Persistence Specification,這我看了三次,相較於EJB的Spec,JPA的Spec好念多了,其中還滿多以程式碼來說明的,我覺得有助於以實作的角度來理解某些觀念。

我覺得範例程式碼一定要自己打一遍,而且要能看到執行結果,對於了解一些Annotation或其他設定很有幫助。

最後,要考認證,一定免不了模擬考題,經由國外網友的推薦,我這次依然使用Enthuware出的模擬考題,他的優點是在每個題目都會有說明,真的能補足閱讀時的盲點,就如大多數的網友說的一樣:不管題目答對或答錯,一定要把它對題目的說明背起來,這樣做,對考試很有助益的

2014年11月20日 星期四

【雜志】今天天氣真是他媽媽的好

今天出大太陽,聽說會有幾天的好天氣。

像這樣的陽光,應該是騎著車浸濡其中的。


2014年11月19日 星期三

【雜志】有時我們需要的只是...

今日小小創作...XD


【筆記】在Servlet中直接存取EntityManager的建議方式

因為Servlet是預設在多執行緒環境中運行的,所以若在Servlet使用下列方式來注入EntityManager物件,是違反執行安全的(NOT thread-safe):
@PersistenceContext(unitName="QueryPaging")
private EntityManager em;
所以,若要在Servlet若要直接存取EntityManager的話,應該用本文(context)查找(lookup)的方式來取得EntityManager,再做相關的操作
package examples.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import examples.model.Employee;

@PersistenceContext(unitName="QueryPaging",name="myapp/QueryPaging")
@WebServlet("/EmAccessServlet")
public class EmAccessServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doPost(request, response);
 }

 @SuppressWarnings("unchecked")
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  PrintWriter pw = response.getWriter();
  try
  {
   EntityManager em = (EntityManager)new InitialContext()
                                        .lookup("java:comp/env/myapp/QueryPaging");
   List empList = em.createQuery("select e from Employee e").getResultList();
   for(Employee e : empList)
   {
    pw.println(e);
   }
  } catch (NamingException e)
  {
   e.printStackTrace();
  }
 }
}
使用上面的方式,對每個請求(request)都查找一個EntityManager,應用程式容器(container)會確保不會有相同的要求共享這些EntityManager

2014年11月10日 星期一

【筆記】使用Freemake Video Converter來編輯、旋轉影片

有時使用手機或DV拍攝回來的影片會因拍攝時,手拿角度不同,造成某些播放軟體在播放影片時,會轉90度或整個倒過來,如:


若要能正確地播放,可以使用Freemake Video Converter來編輯影片,Freemake Video Converter中有可以旋轉影片的功能,可以用來矯正影片的角度。

首先點這裡來下載Freemake Video Converter,在安裝過程中,會問你要不要安裝一些功能,下列是我的選項:

選擇不安裝「Optimizer Pro」:


在安裝「Linkey」步驟時,選擇自訂安裝,並取消勾選下列選項:


安裝完成後,開啟Freemake Video Converter,開啟後的執行畫面如下:


點按【視訊】按鈕加入要編輯的影像檔:


再來在要編輯的影像檔上,點按滑鼠左鍵兩下,以開啟編輯視窗:


點按下方的「Rotate」,旋轉影像到你要的方向後,再按下【OK】按鈕:


再來選擇要轉換的影像格式:


這裡選擇「AVI」格式後,按下【轉換】按鈕:


轉換完成後,按下【確定】鈕離開: