2012-03-05 2 views
2

임베디드 Jetty 8.1에서 실행되는 저지 구동 웹 서비스를 구축합니다. 서비스는 동일한 프로세스에서 실행중인 다른 스레드가 유지하는 공유 상태는 물론 데이터베이스에 액세스해야합니다.JAX-RS/Jersey에서 DB 및 공유 리소스에 액세스 하시겠습니까?

DAO, DB, 서버 상태 및 기타 공유 리소스에 액세스하기 위해 내 JAX-RS 주석 첨부 리소스에 대해 권장되는 접근 방식은 무엇입니까? 나는 그런 것들을 제공하기 위해 싱글 톤을 사용할 수 있다는 것을 알고 있지만 더 나은 접근법이 있어야한다고 생각합니다.

거의 모든 JAX-RS/Jersey 애플리케이션이 데이터베이스를 지원한다는 점을 감안할 때 발견 한 예제 중 DB에 액세스하기위한 좋은 패턴을 보여주지 못했습니다.

업데이트 : 나는 의존성 주입 프레임 워크를 고려하고 싶다는 인상을 받고 있지만, 나는 이것을 간단하게하고 싶다.

+0

이 버전을 어떤 환경을 알고 도움이 될 것입니다 너의 것들 e 타겟팅. JEE? 봄? 글래스 피시 또는 다른 용기? 필자는 글래스 피쉬 2에서 개인적으로 JEE 5를 사용하고 있으며 원격 인터페이스를 찾는 데 의존해 왔지만 다른 많은 옵션이 있습니다. – Jim

+0

감사합니다 !! 내 서버 프로세스는 임베디드 Jetty 8.1을 사용하고있다. 봄이나 JEE 없음. – HolySamosa

+0

그렇다면, 오버 헤드의 가치가 있다면 의존성 주입 프레임 워크를 조사해 볼 수 있습니다. 나는 이것을 매우 간단하게하고 싶었다. – HolySamosa

답변

3

개인적으로 JPA 및/또는 Hibernate 사용을 고려할 것입니다. 일단 엔티티를 설립하면 훨씬 간단하고 명확 해집니다. 이미 구축 한 DAO를 사용하는 것에 비해 약간의 학습 곡선이 있지만 장기적으로는 가치있는 것으로 나타났습니다. 여기

은 예입니다 ...

엔티티 클래스

@Entity 
@javax.xml.bind.annotation.XmlRootElement 
@XmlType(propOrder={"createdOn","empId"}) 
public class Employee implements Serializable { 
    private Date createdOn; 
    private Integer empId; 

    @Column(nullable=false) 
    @Temporal(TemporalType.TIMESTAMP) 
    @XmlJavaTypeAdapter(DateAdapter.class) 
    public Date getCreatedOn() { 
     return createdOn; 
    } 
    public void setCreatedOn(Date createdOn) { 
     this.createdOn = createdOn; 
    } 

    @Id 
    @XmlID 
    public Integer getEmpId() { 
     return empId; 
    } 
    public void setEmpId(Integer empId) { 
     this.empId = empId; 
    } 
} 

EmployeeResource

@Path("/Employees") 
@javax.xml.bind.annotation.XmlRootElement 
public class EmployeeResource { 
    List<Employee> employees; 

    public List<Employee> getEmployees() { 
     return employees; 
    } 
    public void setEmployees(List<Employee> employees) { 
     this.employees = employees; 
    } 
    @GET 
    @Path("/{id}") 
    @Produces("application/json") 
    public Response getEmployee(@Context UriInfo ui, @PathParam("id") Integer id) { 
     Session session = HibernateUtil.getSession(); 
     session.beginTransaction(); 
     Criteria criteria=session.createCriteria(Employee.class); 
     criteria.add(Restrictions.eq("empId", new Integer(10150))); 
     this.employees = criteria.list(); 
     return Response.ok(this).build(); 
    } 
} 

JSON 응답

{ 
    "employees":{ 
    "createdOn":"1330915130163", 
    "empId":"10150" 
    } 
} 
+1

또한 Jersey의 목표가 RESTful API 인 경우 최소한의 중복성으로 HATEOAS의 원칙을 준수하기 위해 위의 아키텍처를 어떻게 활용할 수 있는지에 대한 예제를 제공 할 수 있습니다. – hypno7oad

+1

귀하의 답변은 영구 객체를 잘 매핑하는 방법을 다루지 만 OP가 요구하는 것 같지는 않습니다. 짧은 수명의 요청 인스턴스에서 영구적 인 중앙 리소스를 공유하는 가장 좋은 방법에 중점을 둡니다. –

관련 문제