我构建了在嵌入式Jetty 8.1中运行的Jersey服务的Web服务。该服务必须访问数据库以及由在同一进程中运行的其他线程维护的共享状态。
我的JAX-RS注释资源访问DAO,数据库,服务器状态和其他共享资源的推荐方法是什么?我知道我可以使用单身人士提供这样的东西,但我猜测必须有一个更好的方法。
考虑到几乎每个JAX-RS / Jersey应用程序都有数据库支持,我很惊讶我发现的所有示例都没有显示出访问数据库的良好模式。
更新:我得到的印象是我可能想要考虑一个依赖注入框架,但是我想要保持这个简单。
答案 0 :(得分: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"
}
}