Ответ 1
Зачем использовать JAX-RS/Джерси?
Короткий ответ
Потому что это облегчает разработку сервисов RESTful.
Длинный ответ
JAX-RS - это стандарт, упрощающий создание службы RESTful, которую можно развернуть на любом сервере приложений Java: GlassFish, WebLogic, WebSphere, JBoss и т.д.
JAX-RS является частью Java EE, и когда JAX-RS используется с другими технологиями Java EE, создание службы RESTful становится еще проще:
- EJB - сессионный компонент используется в качестве реализации службы и также обрабатывает семантику транзакции.
- JAX-RS - используется для представления сессионного компонента в качестве службы RESTful
- JPA - используется для сохранения POJO в базе данных. Обратите внимание, как EntityManager внедряется в сессионный компонент.
- JAXB - используется для преобразования POJO в/из XML (в GlassFish его также можно использовать для преобразования POJO в/из JSON). JAX-RS по умолчанию обрабатывает взаимодействие с реализацией JAXB.
Пример службы JAX-RS
package org.example;
import java.util.List;
import javax.ejb.*;
import javax.persistence.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {
@PersistenceContext(unitName="CustomerService",
type=PersistenceContextType.TRANSACTION)
EntityManager entityManager;
@POST
@Consumes(MediaType.APPLICATION_XML)
public void create(Customer customer) {
entityManager.persist(customer);
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
@PUT
@Consumes(MediaType.APPLICATION_XML)
public void update(Customer customer) {
entityManager.merge(customer);
}
@DELETE
@Path("{id}")
public void delete(@PathParam("id") long id) {
Customer customer = read(id);
if(null != customer) {
entityManager.remove(customer);
}
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("findCustomersByCity/{city}")
public List<Customer> findCustomersByCity(@PathParam("city") String city) {
Query query = entityManager.createNamedQuery("findCustomersByCity");
query.setParameter("city", city);
return query.getResultList();
}
}
Для дополнительной информации: