RESTful Web Service no JDeveloper 12c

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.

restful-web-service-in-jdeveloper-12c1

No Step 3, clique em Next.

restful-web-service-in-jdeveloper-12c2

No Step 4, selecione a conexão de banco de dados e clique em Next.

restful-web-service-in-jdeveloper-12c3

No Step 5, selecione a tabela Employees e clique em Next.

restful-web-service-in-jdeveloper-12c4

No Step 6, clique em Next.

restful-web-service-in-jdeveloper-12c5

No Step 7, clique em Finish.

restful-web-service-in-jdeveloper-12c6

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.

restful-web-service-in-jdeveloper-12c7

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.

restful-web-service-in-jdeveloper-12c8

Desmarque todos os métodos e clique em Finish.

restful-web-service-in-jdeveloper-12c9

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 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.

restful-web-service-in-jdeveloper-12c10

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 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.

restful-web-service-in-jdeveloper-12c11

Na caixa de diálogo Return Type Warning, clique em OK.

restful-web-service-in-jdeveloper-12c12

Este é o resultado!

restful-web-service-in-jdeveloper-12c13

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.

restful-web-service-in-jdeveloper-12c14

restful-web-service-in-jdeveloper-12c15

Waslley Souza

Autor: Waslley Souza

Consultor Oracle com foco em tecnologias Oracle Fusion Middleware e SOA. Certificado Oracle WebCenter Portal, Oracle ADF e Java.

2 pensamentos em “RESTful Web Service no JDeveloper 12c”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *