Devido o REST (Representational State Transfer) ser leve, simples e flexível, muitos desenvolvedores estão construindo e explorando os RESTful Web Services, tornando-o muito popular, hoje em dia. De acrodo com Roy Fielding, REST é um “estilo arquitetônico” que, basicamente, explora a tecnologia e protocolos existentes da Web. RESTful é normalmente usado para se referir a serviços web que implementam a arquitetura REST.
Neste post, você que vai aprender como construir um RESTful Web Service usando o JDeveloper 12c (12.1.3). Faça o download do aplicativo de amostra: JDevRESTApp.zip.
Crie um Custom Application.
Defina o Application Name como JDevRESTApp, Application Package Prefix como br.com.waslleysouza e clique em Avançar.
Nomeie o projeto como Model, selecione EJB e Java como Project Features e clique em Next.
Mude o Default Package para br.com.waslleysouza.model e clique em Finish.
Crie a Entidade Employees.
Na janela Applications, clique com o botão direito no Projeto Model e escolha New > From Gallery.
Na caixa de diálogo New Gallery, escolha Business Tier > EJB > Entities from Tables e clique em OK.
Na etapa 2 do Criar Entidades de diálogo Tabelas, clique em Next.
No Step 3, clique em Next.
No Step 4, selecione a conexão de banco de dados e clique em Next.
No Step 5, selecione a tabela Employees e clique em Next.
No Step 6, clique em Next.
No Step 7, clique em Finish.
Abra o arquivo Employees.java e execute os seguintes passos:
- Anote a classe com @XmlRootElement.
- Eu acho que existe algum bug quando o JDev gera entidades de tabelas, pois a propriedade SALARY não é anotada. Anote-a com @Column(name = “SALARY”).
- Anote as propriedades employeesList e employees com @XmlTransient. Anote os acessores getEmployeesList e getEmployees também.
Crie o Employees Session Bean.
Na janela Applications, clique com o botão direito no Projeto Model e escolha New > From Gallery.
Na caixa de diálogo New Gallery, escolha Business Tier > Session Bean, e clique em OK.
Na caixa de diálogo Create Session Bean, altere o nome do EJB para EmployeesService e clique em Next.
Desmarque todos os métodos e clique em Finish.
Adicione os seguintes métodos para EmployeesService, EmployeesServiceBean e EmployeesServiceLocal.
public Employees persistEmployee(Employees employee) { em.persist(employee); return employee; } public Employees mergeEmployee(Employees employee) { Employees currentEmployee = getEmployee(employee.getEmployeeId()); if (employee.getEmail() != null) currentEmployee.setEmail(employee.getEmail()); if (employee.getFirstName() != null) currentEmployee.setFirstName(employee.getFirstName()); if (employee.getLastName() != null) currentEmployee.setLastName(employee.getLastName()); if (employee.getHireDate() != null) currentEmployee.setHireDate(employee.getHireDate()); if (employee.getJobId() != null) currentEmployee.setJobId(employee.getJobId()); if (employee.getPhoneNumber() != null) currentEmployee.setPhoneNumber(employee.getPhoneNumber()); if (employee.getSalary() != null) currentEmployee.setSalary(employee.getSalary()); if (employee.getCommissionPct() != null) currentEmployee.setCommissionPct(employee.getCommissionPct()); return em.merge(employee); } public void removeEmployee(Employees employee) { employee = em.find(Employees.class, employee.getEmployeeId()); em.remove(employee); } @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public List<Employees> getEmployees() { return em.createNamedQuery("Employees.findAll", Employees.class).getResultList(); } public Employees getEmployee(Integer employeeId) { if (employeeId != null) { return em.find(Employees.class, employeeId); } return null; }
Crie um REST Web Service Project.
No Step 1, clique em Next.
No Step 2, altere o Default Package para br.com.waslleysouza.webservice e clique em Finish.
Clique duas vezes no Projeto WebService, adicione o Projeto Model como Dependent Project, e clique em OK.
Crie o Employees RESTful Service.
Na janela Applications, clique com o botão direito no Projeto Rest e selecione New > From Gallery.
Na caixa de diálogo New Gallery, escolha General > Java Class e clique em OK.
Na caixa de diálogo Create Java Class, altere o nome para EmployeesResource e clique em OK.
Copie o seguinte código dentro de sua classe:
@Stateless public class EmployeesResource { @EJB EmployeesServiceLocal employeesService; public EmployeesResource() { super(); } public void create(Employees employee) { employeesService.persistEmployee(employee); } public void update(Employees employee) { employeesService.mergeEmployee(employee); } public void delete(int id) { Employees employee = getById(id); if (null != employee) { employeesService.removeEmployee(employee); } } public Employees getById(int id) { return employeesService.getEmployee(id); } public List<Employees> findAll() { return employeesService.getEmployees(); } }
Na janela Applications, clique com o botão direito na classe EmployeesResource e escolha Create RESTful Service.
Escolha JAX-RS 2.0 Style e clique em Next.
Configure o RESTful Service e clique em Finish.
Na caixa de diálogo Return Type Warning, clique em OK.
Este é o resultado!
Feito!
Para testar o RESTful Service, clique com o botão direito na classe EmployeesResource e escolha Test Web Service.
Você pode testar cada operação de serviço utilizando o HTTP Analyzer.
Waslley Souza é Oracle ACE Associate e Consultor Oracle com foco em tecnologias Oracle Fusion Middleware e SOA. Certificado Oracle ADF 11g / 12c, WebCenter Portal 11g, SOA Suite 11g e Java.