gpt4 book ai didi

java - 使用 JAX-RS/Jersey 访问数据库和共享资源?

转载 作者:行者123 更新时间:2023-12-04 05:55:22 26 4
gpt4 key购买 nike

我构建了在嵌入式 Jetty 8.1 中运行的 Jersey 驱动的 Web 服务。该服务必须访问数据库以及由在同一进程中运行的其他线程维护的共享状态。

我的 JAX-RS 注释资源访问 DAO、数据库、服务器状态和其他共享资源的推荐方法是什么?我知道我可以使用单例来提供这样的东西,但我猜肯定有更好的方法。

考虑到几乎每个 JAX-RS/Jersey 应用程序都由数据库支持,我很惊讶我发现的所有示例都没有展示访问数据库的良好模式。

更新:我的印象是我可能想考虑一个依赖注入(inject)框架,但是我想保持这个简单。

最佳答案

我个人会考虑使用 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;
}
}

员工资源
@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"
}
}

关于java - 使用 JAX-RS/Jersey 访问数据库和共享资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com