domingo, 16 de julho de 2017

CRUD com Oracle Rest Data Service - ORDS

Neste post vou mostrar como instalar e gerar um CRUD com o ORDS. Irei rodar em modo standalone.

Instalação:


Certifique que possua instalado o OracleXE e tenha o SQL Developer.

Passos:

1-) Baixe o ORDS em link. (No momento deste post a ultima versão disponível é a 3.0.11)

2-) Descompacte o arquivo zip


3-) Abra um terminal e execute o comando:

java -jar ords.war

Siga as instruções.
No caso deste exemplo escolhi para pular a etapa:
"Caso esteja usando o Oracle Application Express ou migrando de mod_plsql" escolhendo 2.


Obs: No caso do exemplo, um erro ocorreu ao executar o JETTY por conta que a porta 8080 está em uso.

4-) Alterando a porta default 8080
Abra o arquivo "<DIR_CONF>/ords/standalone/standalone.properties" e altere a propriedade "jetty.port".


Rode o comando abaixo novamente e o ORDS estará rodando.

java -jar ords.war




Criação do schema e tabela para o teste:


1-) Execute os seguintes comando com o usuário "SYS":

CREATE USER ordsschema IDENTIFIED BY ords;
GRANT "CONNECT" TO ordsschema;
GRANT "RESOURCE" TO ordsschema;
GRANT UNLIMITED TABLESPACE TO ordsschema;

2-) Logue o schema gerado e execute os seguintes comandos:

CREATE TABLE CONTACT (
  CONTACTID NUMBER(5,0), 
  FIRSTNAME VARCHAR2(20 BYTE),
  LASTNAME VARCHAR2(20 BYTE), 
  EMAIL VARCHAR2(50 BYTE),  
  CONSTRAINT CONTACT_PK PRIMARY KEY (CONTACTID)
  );

insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (1,'Leonardo','Sugahara','leonardosugahara@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (2,'Christy','Reeve','Christy.Reeve@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (3,'Vashti','Legge','Vashti.Legge@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (4,'Carla','Norman','Carla.Norman@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (5,'Karla','Hooper','Karla.Hooper@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (6,'Tracy','Holman','Tracy.Holman@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (7,'Marinda','Connolly','Marinda.Connolly@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (8,'Clementine','Almond','Clementine.Almond@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (9,'Kiley','Wells','Kiley.Wells@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (10,'Tamika','Harper','Tamika.Harper@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (11,'Syreeta','Mcmahon','Syreeta.Mcmahon@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (12,'Delinda','Dunkley','Delinda.Dunkley@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (13,'Shellie','Coles','Shellie.Coles@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (14,'Shemeka','Hirst','Shemeka.Hirst@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (15,'Gerri','Kerr','Gerri.Kerr@mydomain.com');
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values (16,'Rory','Muir','Rory.Muir@mydomain.com');

Gerando o CRUD da tabela "CONTACT":


1-) No SQL Developer, clique com o botão direito na sua conexão "ordsschema", vá em "Serviço Rest" -> "Ativar Serviço Rest"


2-) Deixe as configurações conforme a seguir:


3-) Clique em "Próximo" depois em finalizar.



4-) Vá em "Exibir" -> "Serviços de Dados Rest" e selecione "Desenvolvimento"


5-) Vamos criar um user com a role "SQL Developer" para poder executar o serviço. Execute o comando abaixo no dir de instalação do ORDS:

java -jar ords.war user ordsDeveloper "SQL Developer"


6-) Voltando ao SQL Developer, vamos criar uma conexão na view que abrimos, clique em "conexão", no sina de "+" e depois preencha conforme a imagem:



7-) Com a conexão estabelecida, clique com o botão direito em "Módulos" e depois em "Novo Modulo".


Preencha os campos conforme imagem e clique em "Próximo":


8-) Em "Padrão URI" preencha com "contact/" e clique em "Próximo":

9-) Neste primeiro item vamos gerar o método "GET", deixe as opções como estão clique em "Próximo" e na tela seguinte "Finalizar".



10-) Com o módulo gerado, navegue até "GET" e inclua a query abaixo na "Planilha SQL":

SELECT
    contact.contactid,
    contact.firstname,
    contact.lastname,
    contact.email
FROM
    contact
WHERE 
    contact.contactid = NVL(:contactid,contact.contactid)



11-) Vamos criar o método "POST", clique com o botão direito em "contact/", vá em "Adicionar Handler" -> "POST".
Clique no sinal de "+" em "Tipos de MIME" e preencha com "application/json".



12-) Inclua o SQL abaixo na "Planilha SQL":

begin
insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values ((select max(CONTACTID) + 1 from contact),:firstname,:lastname,:email);
commit;
end;

13-)  Para o método "PUT", faça os mesmos procedimentos do passa anterior escolhendo o "Handler" "PUT", e acrescente o SQL abaixo:

begin
    if :contactid is null then
        insert into contact (CONTACTID,FIRSTNAME,LASTNAME,EMAIL) values ((select max(CONTACTID) + 1 from contact),:firstname,:lastname,:email);
    else 
        update contact set FIRSTNAME = firstname, LASTNAME = :lastname, EMAIL = :email where  CONTACTID = :contactid;
    end if;
commit;
end;

13-) Para o método "DELETE", faça os mesmos procedimentos do passa anterior escolhendo o "Handler" "DELETE", e acrescente o SQL abaixo:

begin
    delete from CONTACT where CONTACTID = :id;
    commit;
end;

14-) Com os métodos gerados, vamos fazer o upload do módulo. Clique com o botão direito em cima do módulo "mymodule" e selecione "Upload"


15-) Testes:

http://localhost:8081/ords/ordsschema/mymodule/contact/
GET:

GET de um único elemento:

http://localhost:8081/ords/ordsschema/mymodule/contact/?contactid=5


POST:


PUT:


DELETE:



quinta-feira, 6 de julho de 2017

Building soa projects with Maven

Vou mostrar neste post como gerar um "sar" do projeto SOA via Maven. Irei demonstrar como criar o pom.xml e compilar via JDeveloper e via linha de comando.

Passos:

1-) Vamos instalar o "Oracle Maven Synchronization Plug-In".
Execute os comandos abaixo:

. $ORACLE_HOME/wlserver/server/bin/setWLSEnv.sh
cd $ORACLE_HOME/oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.2.1
mvn install:install-file -DpomFile=oracle-maven-sync-12.2.1.pom -Dfile=oracle-maven-sync-12.2.1.jar
mvn com.oracle.maven:oracle-maven-sync:push -DoracleHome=$ORACLE_HOME


2-) Vamos atualizar o catálogo archetype, execute o comando abaixo:

mvn archetype:crawl -Dcatalog=$HOME/.m2/archetype-catalog.xml

3-) Baixe a lib do wagon-http neste link, e copie a lib em '$ORACLE_HOME/oracle_common/modules/org.apache.maven_3.2.5/lib/ext'.

Obs: estou usando o maven que vem na instalação do SOA Suite, caso esteja usando o outra versão copie para '$MAVEN_HOME/lib/ext'

4-) Configure o server no arquivo settings.xml (preencha em username e password com seu user da OTN):

<server>
    <id>maven.oracle.com</id>
    <username>OTN_USERNAME</username>
    <password>OTN_PASSWORD</password>
    <configuration>
      <basicAuthScope>
        <host>ANY</host>
        <port>ANY</port>
        <realm>OAM 11g</realm>
      </basicAuthScope>
      <httpConfiguration>
        <all>
          <params>
            <property>
              <name>http.protocol.allow-circular-redirects</name>
              <value>%b,true</value>
            </property>
          </params>
        </all>
      </httpConfiguration>
    </configuration>
  </server>


5-) Agora vamos gerar o arquivo pom.xml, com o cursor em cima do seu projeto SOA, clique com o botão direito, selecione "New" -> "Maven POM for project".



6-) Certifique que em "Packaging" está com a opção "sar". Clique em "OK".


7-) Clique em "Repositories" no arquivo pom.xml e preencha os campos conforme descritivo abaixo:

ID: maven.oracle.com
URL: https://maven.oracle.com
Repositories: true
Plugin Repositories: true


8-) Vamos gerar o composite via JDeveloper, clique com o botão direito no arquivo pom.xml, vá em "Run Maven" -> "package"


 9-) Vamos gerar o composite via linha de comando, execute o comando abaixo:

mvn package


Referencias: Configuring the Oracle Maven Repository
Installing and Configuring Maven for Build Automation and Dependency Management