Доступ к БД и общим ресурсам с JAX-RS / Джерси? - PullRequest
2 голосов
/ 05 марта 2012

Я создаю веб-сервис на базе Джерси, работающий на встроенном Jetty 8.1.Служба должна получать доступ к базе данных, а также к общему состоянию, поддерживаемому другими потоками, работающими в том же процессе.

Какой рекомендуемый подход для моих аннотированных ресурсов JAX-RS для доступа к DAO, БД, состоянию сервера и др.общие ресурсы?Я знаю, что мог бы использовать синглтон для таких целей, но я предполагаю, что должен быть лучший подход.

Учитывая, что почти каждое приложение JAX-RS / Jersey поддерживается базой данных, я 'Я удивлен, что ни один из примеров, которые я нашел, не демонстрирует хороший образец для доступа к БД.

Обновление: у меня складывается впечатление, что я, возможно, захочу рассмотреть инфраструктуру внедрения зависимостей, однако я хочучтобы это было просто.

1 Ответ

3 голосов
/ 07 марта 2012

Лично я хотел бы рассмотреть возможность использования 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 response

{
  "employees":{
    "createdOn":"1330915130163",
    "empId":"10150"
  }
}
...