Observação:

Implantar o Oracle SOA Suite no Oracle Visual Builder Studio

Introdução

O Oracle Visual Builder Studio é a ferramenta Oracle oficial para automatizar processos DevOps com diferentes tecnologias, como:

Este tutorial mostra um exemplo de como implementar as seguintes funcionalidades no Oracle SOA Suite.

Observação Importante: atualmente, só é possível implementar CI/CD com o Oracle SOA Suite por meio do Oracle Visual Builder Studio. Isso ocorre porque somente o Visual Builder Studio tem plug-ins já pré-instalados na máquina virtual para processar e compilar (BUILD) os pacotes necessários. Portanto, ainda não é possível implementar o CI/CD com outras ferramentas de mercado, como o Jenkins.

Objetivos

Implemente um projeto no SOA Suite que possa ser implantado automaticamente por meio do processo DevOps com o Oracle Visual Builder Studio.

Pré-requisitos

Conhecimento do seguinte:

Tarefa 1: Criar sua instância do Oracle Streaming

O Oracle Cloud Streaming é um aplicativo que tem como objetivo servir como fila de mensagens, da mesma forma que a ferramenta Kafka de código-fonte aberto. O Oracle Streaming é uma solução gerenciada, o que significa que você cria uma instância para uso e não precisa se preocupar com a governança da infraestrutura. Pagar somente pelo que usar. A ferramenta também permite que você use a API REST do Kafka, tornando-a compatível com projetos Kafka existentes com as vantagens da "nuvem como serviço".

Neste tutorial, executaremos uma implementação de serviço SOA para produzir e outro serviço para consumir dados em uma fila de mensagens. Portanto, nossa primeira parada provisionará um ambiente do Oracle Streaming.

Tarefa 2: Crie seu projeto do SOA Suite em JDeveloper

Criaremos uma instância do Oracle Cloud Streaming para substituir o Kafka. Crie um projeto com os seguintes objetivos:

O projeto completo está incluído neste tutorial. Você pode alterar as definições para compilar, empacotar e implantar na sua instância do SOA Suite.

Observação: este tutorial não inclui etapas detalhadas para implementar serviços REST. Para obter mais informações, consulte Como Implementar e Consumir Serviços REST com o Oracle SOA Suite.

  1. Faça download do projeto SOAKafkaProducerApp usando este link: SOAKafkaProducerApp.zip.

    • Localize o arquivo do aplicativo /SOAKafkaProducerApp/SOAKafkaProducerApp/SOAKafkaProducerApp.jws.

    • Você pode exibir os projetos em JDeveloper: SOAKafkaProducerPrj e SOAKafkaConsumerPrj

  2. Clique na árvore do aplicativo e procure SOAKakfaConsumerPrj e clique duas vezes em KafkaConsumer, conforme mostrado na imagem a seguir.

    jdev-soa-1.png

    • Esta é a visão do projeto SOA para consumo de fila Kafka. Esta é uma implementação típica do tipo Composto SOA. Este é um serviço REST (componente estabelecido na faixa de Serviços Expostos) e deve ser implantado no SOA Server. O componente vinculado ao serviço é a implementação do próprio serviço e é organizado na faixa de nado Componentes, conforme mostrado na imagem anterior. Ao clicar duas vezes no componente KafkaConsumer, você será direcionado à implementação do serviço, conforme mostrado abaixo:

      jdev-bpel-1.png

    • O primeiro estágio de implementação começa com um componente chamado Recebimento, responsável por receber parâmetros de trabalho iniciais, típicos de uma chamada REST. Neste tutorial, não passaremos por parâmetros, mas ele é ilustrado aqui para serviços que precisam desse recurso.

      jdeve-receive-1.png

      jdev-receive-detail.png

      jdev-bpel-code.png

    • O componente Java Embedded é responsável por chamar uma rotina Java que, nesse caso, chamará uma classe chamada KafaExample comentada posteriormente.

      jdev-embedded-code-1.png

    • O código Java chamado neste Java Embedding é responsável pelas rotinas de produção e consumo da fila do Kafka ou do Oracle Stream (lembre-se de que a API do Oracle Streaming é compatível com o Kakfa).

      java
      		package soakafka;
      
      		import org.apache.kafka.clients.consumer.ConsumerRecord;
      		import org.apache.kafka.clients.consumer.ConsumerRecords;
      		import org.apache.kafka.clients.consumer.KafkaConsumer;
      		import org.apache.kafka.clients.producer.KafkaProducer;
      		import org.apache.kafka.clients.producer.Producer;
      		import org.apache.kafka.clients.producer.ProducerRecord;
      		import org.apache.kafka.common.serialization.StringSerializer;
      		import org.apache.kafka.common.serialization.StringDeserializer;
      
      		import java.util.Arrays;
      		import java.util.Date;
      		import java.util.Properties;
      
      		import java.util.concurrent.ExecutionException;
      
      		import org.apache.kafka.clients.producer.Callback;
      		import org.apache.kafka.common.errors.WakeupException;
      
      		public class KafkaExample {
      		    private final String topic;
      		    private final Properties props;
      
      		    public KafkaExample(String brokers, String username, String password) {
      		        this.topic = "kafka_like";
      
      		        String jaasTemplate = "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"%s\" password=\"%s\";";
      		        String jaasCfg = String.format(jaasTemplate, username, password);
      
      		        String serializer = StringSerializer.class.getName();
      		        String deserializer = StringDeserializer.class.getName();
      		        //Propriedades
      		        props = new Properties();
      		        props.put("bootstrap.servers", brokers);
      		        props.put("group.id", "kafka-hoshikawa");
      		        props.put("enable.auto.commit", "false");
      		        props.put("max.poll.records", "10");
      		        props.put("auto.offset.reset", "earliest");
      		        props.put("key.deserializer", deserializer);
      		        props.put("value.deserializer", deserializer);
      		        props.put("security.protocol", "SASL_SSL");
      		        props.put("sasl.mechanism", "PLAIN");
      		        props.put("sasl.jaas.config", jaasCfg);
      		        //props.put("ssl.client.auth", "requested");
      		    }
      
      		    public String consume() {
      		        String ret = "";
      		        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
      		        consumer.subscribe(Arrays.asList(topic));
      
      		        try {
      		          while (true) {
      		            ConsumerRecords<String, String> records = consumer.poll(100);
      		            for (ConsumerRecord<String, String> record : records)
      		            {
      		              System.out.println(record.offset() + ": " + record.value());
      		              ret = ret + record.value();
      		            }
      		              if (ret != "")
      		                break;
      		          }
      		        } catch (Exception e) {
      		          // ignore for shutdown
      		        } finally {
      		          consumer.commitAsync();
      		          consumer.close();
      		        }
      		        return ret;
      		    };
      
      		    public void produce(String message) {
      		        Producer<String, String> producer = new KafkaProducer<String, String>(props);
      		        ProducerRecord record = new ProducerRecord<String, String>(topic, "msg", message);
      
      		        Callback callback = (data, ex) -> {
      		            if (ex != null) {
      		                ex.printStackTrace();
      		                return;
      		            }
      		            System.out.println(
      		                "Mensagem enviada com sucesso para: " + data.topic() + " | partition " + data.partition() + "| offset " + data.offset() + "| tempo " + data
      		                    .timestamp());
      		        };
      		        try {
      		            producer.send(record, callback).get();
      		        } catch (ExecutionException | InterruptedException e) {
      		        }
      		        finally {
      		            producer.close();
      		        }
      		    }
      
      		    public static void main(String[] args) {
      		                /*
      				String brokers = System.getenv("CLOUDKARAFKA_BROKERS");
      				String username = System.getenv("CLOUDKARAFKA_USERNAME");
      				String password = System.getenv("CLOUDKARAFKA_PASSWORD");
      		                */
      		                String brokers = "cell-1.streaming.us-ashburn-1.oci.oraclecloud.com:9092";
      		                String username = "hoshikawaoraclecloud/oracleidentitycloudservice/hoshikawa2@hotmail.com/ocid1.streampool.oc1.iad.amaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkgztajzakb5a";
      		                String password = "Wxxxxxxxxxxxxxxxxxxxxxxk";
      				KafkaExample c = new KafkaExample(brokers, username, password);
      		        c.consume();
      		    }
      		}
      
      		    public static void main(String[] args) {
      		                /*
      				String brokers = System.getenv("CLOUDKARAFKA_BROKERS");
      				String username = System.getenv("CLOUDKARAFKA_USERNAME");
      				String password = System.getenv("CLOUDKARAFKA_PASSWORD");
      		                */
      		                String brokers = "cell-1.streaming.us-ashburn-1.oci.oraclecloud.com:9092";
      		                String username = "hoshikawaoraclecloud/oracleidentitycloudservice/zzzzzzzzz2@zzzzzzil.com/ocid1.streampool.oc1.iad.amaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkgztajzakb5a";
      		                String password = "Wxxxxxxxxxxxxxxxxxxxxxxk";
      				KafkaExample c = new KafkaExample(brokers, username, password);
      		        c.consume();
      		    }
      		}
      
      
      

      jdev-assign-1.png

      jdev-atribuição-details.png

      jdev-reply-1.png

      jdev-resposta-details.png

  3. Inclua pacotes Java no seu código com o Maven.

    • Neste projeto, injetamos código Java para chamar a API Kafka ou Oracle Cloud Streaming. Por se tratar de código Java, as inclusões de pacote geralmente são necessárias para usar estruturas. O Maven é a ferramenta mais usada nesses casos e, para isso, você deve incluí-lo em seu projeto. Com o botão direito do mouse, abra a opção sobre seu projeto e selecione Da Galeria, conforme mostrado na imagem a seguir.

      soa-create-pom-file.png

    • Selecione a opção Maven POM for Project.

      soa-maven-select.png

    Agora você poderá configurar seu pacote com as estruturas necessárias.

  4. Construa com o Maven.

    • Clique nas opções do Application Windows e, em seguida, clique em View de Diretório para acessar o arquivo /SOA/SCA-INF/pom.xml.

      View-maven-pom-xml-file.png

      File-pom-xml-file2.png

    • Clique duas vezes no arquivo pom.xml para abri-lo no editor JDeveloper e selecione a guia Origem para exibir o código.

    • Dessa forma, você poderá visualizar o código do arquivo pom.xml.

      pom-xml-original.png

    • Aqui está uma alteração muito importante no processo DevOps. Você VE incluir essas linhas para automação.

      Observação: O projeto neste tutorial já está configurado para oferecer suporte à automação DevOps, mas para novos projetos, siga este procedimento para automatizar o processo DevOps. Entre a tag e a tag, você pode incluir esse código, que será responsável pela montagem do seu pacote de software para implantação posterior com **Ant**.

      Para a automação DevOps, inclua as 3 linhas a seguir.

      <directory>target</directory>

      <outputDirectory>classes</outputDirectory>

      <sourceDirectory>src</sourceDirectory>

      devops-pom-xml.png

      Portanto, seu código completo terá esta aparência:

      xml
          pom.xml
      
          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
      
            <groupId>soakafka</groupId>
            <artifactId>kafka</artifactId>
            <version>1.0-SNAPSHOT</version>
      
            <dependencies>
              <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>kafka-clients</artifactId>
                <version>1.0.0</version>
              </dependency>
            </dependencies>
      
            <build>
      
              <!-- For DevOps automation, you need to include the 3 lines below - Cristiano Hoshikawa - 2020-11-28 -->        
              <directory>target</directory>
              <outputDirectory>classes</outputDirectory>
              <sourceDirectory>src</sourceDirectory>
      
              <plugins>
                <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.1</version>
                  <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                  </configuration>
                </plugin>
                <plugin>
                  <artifactId>maven-assembly-plugin</artifactId>
                  <configuration>
                    <archive>
                      <manifest>
                        <mainClass>KafkaExample</mainClass>
                      </manifest>
                    </archive>
                    <descriptorRefs>
                      <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                  </configuration>
                  <executions>
                    <execution>
                      <id>make-assembly</id> <!-- this is used for inheritance merges -->
                      <phase>package</phase> <!-- bind to the packaging phase -->
                      <goals>
                        <goal>single</goal>
                      </goals>
                    </execution>
                  </executions>
                </plugin>
                <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-jar-plugin</artifactId>
                  <version>3.0.2</version>
                  <configuration>
                    <archive>
                      <manifest>
                        <mainClass>KafkaExample</mainClass>
                        <addClasspath>true</addClasspath>
                      </manifest>
                    </archive>
                  </configuration>
                </plugin>
              </plugins>
            </build>  
          </project>
      
      
  5. Crie e Implante com o Ant.

    • Ant é uma ferramenta bem conhecida no mercado, desenvolvida pelo projeto Jakarta, responsável por automatizar compilações, compilações de pacotes e implantações de aplicativos para projetos como Java. No processo DevOps, Ant será fundamental para criar o pacote SOA Suite e também para implantar esse pacote no servidor Weblogic SOA Suite remoto.

    • Para criar o arquivo build.xml, com o botão direito do mouse, abra a opção sobre o projeto e selecione Da Galeria conforme mostrado na imagem a seguir.

      soa-create-pom-file.png

    • Selecione a opção Ant no menu esquerdo e clique em Criar Arquivo do Projeto.

      soa-create-ant.png

    • O arquivo build.xml é um arquivo de configuração muito comum para uso com Ant.

      xml
          build.xml
      
          <?xml version="1.0" encoding="UTF-8" ?>
          <!--Ant buildfile generated by Oracle JDeveloper-->
          <!--Generated Oct 12, 2020 11:35:33 PM-->
          <project xmlns="antlib:org.apache.tools.ant" name="SOAKafkaProducerPrj" default="all" basedir=".">
            <property environment="env" />
            <property file="build.properties"/>
            <path id="library.SOA.Designtime">
              <pathelement location="${install.dir}/soa/plugins/jdeveloper/extensions/oracle.sca.modeler.jar"/>
            </path>
            <path id="library.SOA.Runtime">
              <pathelement location="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/fabric-runtime.jar"/>
              <pathelement location="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/tracking-api.jar"/>
              <pathelement location="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/tracking-core.jar"/>
              <pathelement location="${install.dir}/soa/soa/modules/oracle.soa.fabric_11.1.1/edn.jar"/>
              <pathelement location="${install.dir}/soa/soa/modules/oracle.soa.mgmt_11.1.1/soa-infra-mgmt.jar"/>
              <pathelement location="${oracle.commons}/modules/com.oracle.webservices.fabric-common-api.jar"/>
            </path>
            <path id="library.BPEL.Runtime">
              <pathelement location="${install.dir}/soa/soa/modules/oracle.soa.bpel_11.1.1/orabpel.jar"/>
            </path>
            <path id="library.Mediator.Runtime">
              <pathelement location="${install.dir}/soa/soa/modules/oracle.soa.mediator_11.1.1/mediator_client.jar"/>
            </path>
            <path id="library.MDS.Runtime">
              <pathelement location="${oracle.commons}/modules/oracle.mds/mdsrt.jar"/>
            </path>
            <path id="library.BC4J.Service.Runtime">
              <pathelement location="${oracle.commons}/modules/oracle.adf.model/adfbcsvc.jar"/>
              <pathelement location="${oracle.commons}/modules/oracle.adf.model/adfbcsvc-share.jar"/>
              <pathelement location="${oracle.commons}/modules/commonj.sdo.backward.jar"/>
              <pathelement location="${oracle.commons}/modules/commonj.sdo.jar"/>
              <pathelement location="${oracle.commons}/modules/oracle.toplink/eclipselink.jar"/>
              <pathelement location="${oracle.commons}/modules/com.oracle.webservices.fmw.wsclient-impl.jar"/>
              <pathelement location="${oracle.commons}/modules/com.oracle.webservices.fmw.jrf-ws-api.jar"/>
              <pathelement location="${oracle.commons}/modules/com.oracle.webservices.fmw.web-common-schemas-impl.jar"/>
            </path>
            <path id="classpath">
              <path refid="library.SOA.Designtime"/>
              <path refid="library.SOA.Runtime"/>
              <path refid="library.BPEL.Runtime"/>
              <path refid="library.Mediator.Runtime"/>
              <path refid="library.MDS.Runtime"/>
              <path refid="library.BC4J.Service.Runtime"/>
            </path>
            <target name="init">
              <tstamp/>
              <mkdir dir="${workspace}/SOAKafkaProducerApp/SOAKafkaProducerPrj/SOA/SCA-INF/classes"/>
            </target>
            <target name="all" description="Build the project" depends="deploy,copy"/>
            <target name="clean" description="Clean the project">
              <delete includeemptydirs="true" quiet="true">
                <fileset dir="${output.dir}" includes="**/*"/>
              </delete>
            </target>
            <target name="compile" depends="init">
                <javac
                         srcdir="${workspace}/SOAKafkaProducerApp/SOAKafkaProducerPrj/SOA/SCA-INF/src/soakafka"
                         destdir="${workspace}/SOAKafkaProducerApp/SOAKafkaProducerPrj/SOA/SCA-INF/classes"
                     includeantruntime="false">
                     <include name="${workspace}/SOAKafkaProducerApp/SOAKafkaProducerPrj/SOA/SCA-INF/lib/**"/>
              </javac>
            </target>
            <target name="sca-compile" depends="compile">
                <ant antfile="${middleware.home}/soa/bin/ant-sca-compile.xml" inheritAll="false">
                     <property name="scac.input" value="${workspace}/SOAKafkaProducerApp/SOAKafkaProducerPrj/SOA/composite.xml"/>
                </ant>
            </target>
      
            <target name="sca-package" depends="sca-compile">
                <ant antfile="/${middleware.home}/soa/bin/ant-sca-package.xml" inheritAll="false">
                     <property name="compositeDir" value="${workspace}/SOAKafkaProducerApp/SOAKafkaProducerPrj/SOA"/>
                    <property name="compositeName" value="SOAKafkaProducerPrj"/>
                    <property name="revision" value="${revision}"/>
                    <property name="sca.application.home" value="${workspace}/SOAKafkaProducerApp/SOAKafkaProducerPrj"/>
                </ant>
            </target>
      
            <target name="deploy" description="Deploy JDeveloper profiles" depends="sca-package">
              <taskdef name="ojdeploy" classname="oracle.jdeveloper.deploy.ant.OJDeployAntTask" uri="oraclelib:OJDeployAntTask"
                       classpath="${oracle.jdeveloper.ant.library}"/>
              <ora:ojdeploy xmlns:ora="oraclelib:OJDeployAntTask" executable="${oracle.jdeveloper.ojdeploy.path}"
                            ora:buildscript="${oracle.jdeveloper.deploy.dir}/ojdeploy-build.xml"
                            ora:statuslog="${oracle.jdeveloper.deploy.dir}/ojdeploy-statuslog.xml">
                <ora:deploy>
                  <ora:parameter name="workspace" value="${oracle.jdeveloper.workspace.path}"/>
                  <ora:parameter name="project" value="${oracle.jdeveloper.project.name}"/>
                  <ora:parameter name="profile" value="${oracle.jdeveloper.deploy.profile.name}"/>
                  <ora:parameter name="nocompile" value="false"/>
                  <ora:parameter name="outputfile" value="${oracle.jdeveloper.deploy.outputfile}"/>
                </ora:deploy>
              </ora:ojdeploy>
      
               <!-- Deployment SOA Suite Composite -->
              <ant antfile="/${middleware.home}/soa/bin/ant-sca-deploy.xml" target="deploy" inheritall="false">
                <property name="user"      value="${WEBLOGICUSER}"/>
                <property name="password"  value="${WEBLOGICPWD}"/>
                <property name="serverURL"     value="${WEBLOGICURL}"/>
                <property name="sarLocation"   value="${workspace}/SOAKafkaProducerApp/SOAKafkaProducerPrj/SOA/deploy/sca_SOAKafkaProducerPrj_rev${revision}.jar"/>
                <property name="overwrite"     value="true"/>
              </ant>
      
            </target>
            <target name="copy" description="Copy files to output directory" depends="init">
              <patternset id="copy.patterns">
                <include name="**/*.GIF"/>
                <include name="**/*.JPEG"/>
                <include name="**/*.JPG"/>
                <include name="**/*.PNG"/>
                <include name="**/*.cpx"/>
                <include name="**/*.dcx"/>
                <include name="**/*.ejx"/>
                <include name="**/*.gif"/>
                <include name="**/*.ini"/>
                <include name="**/*.jpeg"/>
                <include name="**/*.jpg"/>
                <include name="**/*.png"/>
                <include name="**/*.properties"/>
                <include name="**/*.sva"/>
                <include name="**/*.tag"/>
                <include name="**/*.tld"/>
                <include name="**/*.wsdl"/>
                <include name="**/*.xcfg"/>
                <include name="**/*.xlf"/>
                <include name="**/*.xml"/>
                <include name="**/*.xsd"/>
                <include name="**/*.xsl"/>
                <include name="**/*.exm"/>
                <include name="**/*.xml"/>
                <exclude name="build.xml"/>
              </patternset>
              <copy todir="${output.dir}">
                <fileset dir="SOA/SCA-INF/src">
                  <patternset refid="copy.patterns"/>
                </fileset>
                <fileset dir=".">
                  <patternset refid="copy.patterns"/>
                </fileset>
              </copy>
            </target>
          </project>
      
      
    • O arquivo build.properties determina as propriedades que serão usadas no arquivo de configuração build.xml.

      build.properties
      
      oracle.commons=../../../../oracle_common/
      install.dir=../../../..
      oracle.home=${env.ORACLE_HOME_SOA_12_2_1}
      oracle.jdeveloper.workspace.path=${env.WORKSPACE}/SOAKafkaProducerApp/SOAKafkaProducerApp.jws
      middleware.home=${env.MIDDLEWARE_HOME_SOA_12_2_1}
      workspace=${env.WORKSPACE}
      oracle.jdeveloper.ant.library=${env.ORACLE_HOME_SOA_12_2_1}/jdev/lib/ant-jdeveloper.jar
      oracle.jdeveloper.deploy.dir=${env.WORKSPACE}/SOAKafkaProducerApp/SOAKafkaProducerPrj/deploy
      oracle.jdeveloper.ojdeploy.path=${oracle.home}/jdev/bin/ojdeploy
      javac.nowarn=off
      oracle.jdeveloper.project.name=SOAKafkaProducerPrj
      revision=1.0
      oracle.jdeveloper.deploy.outputfile=${env.WORKSPACE}/SOAKafkaProducerApp/SOAKafkaProducerPrj/deploy/sca_${profile.name}_rev{$revision}
      output.dir=classes
      javac.deprecation=off
      oracle.jdeveloper.deploy.profile.name=*
      javac.debug=on
      WEBLOGICPWD=${env.WEBLOGICPWD}
      WEBLOGICURL=${env.WEBLOGICURL}
      WEBLOGICUSER=${env.WEBLOGICUSER}
      
      
  6. Inicialize o ambiente do SOA Suite para teste. Primeiro, abra a porta de firewall do seu ambiente SOA Suite. A porta a ser liberada é 9092, que representa a porta do Oracle Streaming ou Kafka.

  7. Ative o Servidor SOA Incorporado em JDeveloper.

    • O JDeveloper tem um servidor SOA Suite integrado para desenvolvimento e teste. É um servidor com praticamente todas as funcionalidades necessárias para que você desenvolva seus serviços SOA. Para usar este servidor, você deve criá-lo e ativá-lo.

    • Para ativar o servidor, primeiro você precisa exibir os servidores de aplicativos. Para isso, vá para a opção "Janela" e selecione Servidores de Aplicativos, conforme mostrado na imagem a seguir.

      jdeveloper-select-app-server.png

    • A janela dos servidores de aplicativos aparecerá no lado esquerdo da tela. Verifique se o integratedWeblogicServer já foi criado na janela. Caso contrário, será necessário criá-lo e ativá-lo para uso.

    • Vá para a opção Executar e selecione Iniciar Instância do Servidor, conforme mostrado na imagem a seguir.

      jdev-start-app-server.gif

    • Insira os dados necessários para criar a instância do weblogic. Anote os valores, pois você precisará deles mais tarde para testar.

      jdev-create-app-server.gif

    • Se você criou o servidor ou se ele já estava disponível, clique com o botão direito do mouse no servidor e ative-o conforme mostrado na imagem a seguir.

      jdeveloper-start-app-server.png

  8. Execute uma Implantação Manual no SOA Suite.

    • Primeiro, vamos executar a implantação do seu serviço de consumidor Kafka (SOAKafkaConsumerPrj) manualmente. Para fazer isso, localize sua guia Aplicativos e abra as opções de menu com o botão direito do mouse, conforme mostrado na imagem a seguir.

      soa-deploy-1.png

    • Selecione a opção Implantar e, em seguida, crie um novo perfil de implantação. Você verá uma tela de configuração e deverá escolher o tipo de perfil como Arquivo SOA-SAR, pois geraremos um arquivo.

      soa-deploy-2.png

    • Esta é a preparação para que possamos implantar o seu pacote na próxima etapa. Na próxima tela, mantenha as opções fornecidas e clique em OK.

      soa-deploy-3.png

    • Abra a opção de menu Implantar novamente. A opção de implantação é criada e está pronta para uso. Selecione-o.

      soa-deploy-4.png

    • Agora vamos escolher a opção de implantar diretamente no servidor SOA. Em seguida, escolha a opção conforme mostrado abaixo.

      soa-deploy-5.png

    • Deixe todas as opções fornecidas e selecione Substituir quaisquer compostos existentes pelo mesmo ID da revisão. Se essa opção estiver desmarcada e você tentar executar implantações consecutivas após sua primeira execução, será interrompido com uma mensagem de erro.

      soa-deploy-6.png

    • Em seguida, selecione a opção IntegratedWeblogicServer. Esta opção representa o servidor incorporado do JDeveloper explicado na seção anterior (Como ativar o Servidor SOA Incorporado em JDeveloper).

    • Se o servidor Weblogic JDeveloper tiver sido criado e iniciado com sucesso, você verá a opção abaixo e o status "RUNNING" confirmando que tudo está OK. Se você não vir esta opção, provavelmente ainda não criou o servidor ou não o iniciou. Revise as etapas anteriores.

      soa-deploy-9.png

    • Confirme com Próximo até a tela de resumo e clique em Finalizar.

    • Na janela central inferior, você pode seguir a implantação do seu aplicativo. Aguarde até que você veja Implantação concluída como mensagem de sucesso.

      soa-deploy-11.png

  9. Instale o certificado JKS no Weblogic.

    • Em ambientes SSL, será necessário criar a segurança por meio de chaves (públicas/privadas) que serão executadas por meio de certificados JKS, adequados ao ambiente WebLogic. O processo de geração de chaves é feito obtendo o certificado da sua instância do Oracle Cloud Streaming e adicionando esse certificado a um arquivo JKS, que chamaremos DemoTrust (DemoTrust.jks).

      Observação: O arquivo DemoTrust.jks será carimbado com uma ALIAS, bem como uma senha que será usada no código Java.

    • Depois de criar seu arquivo JKS, você poderá mover esse arquivo para a estrutura do servidor WebLogic.

      1. Obtenha o Certificado de Streaming do Oracle Cloud. Para obter mais informações, consulte Usando o Oracle Cloud Infrastructure Streaming Service Adapter com o Oracle Integration Generation 2.

      2. Gere o arquivo JKS.

      3. Instale o arquivo JKS no Weblogic.

        echo -n | openssl s_client -connect cell-1.streaming.us-ashburn-1.oci.oraclecloud.com:9092 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ociStreaming.cert keytool -keystore Streaming_truststore.jks -alias OSSStream -import -file ociStreaming.cert

        sudo keytool -importcert -file ociStreaming.cert -keystore DemoTrust.jks -alias "kafka" -storepass DemoTrustKeyStorePassPhrase

        Por exemplo:

        echo -n | openssl s_client -connect cell-1.streaming.us-ashburn-1.oci.oraclecloud.com:9092 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ociStreaming.cert keytool -keystore Streaming_truststore.jks -alias OSSStream -import -file ociStreaming.cert

        sudo keytool -importcert -file ociStreaming.cert -keystore DemoTrust.jks -alias "kafka" -storepass DemoTrustKeyStorePassPhrase

        • Se quiser gerar ou excluir armazenamentos de chaves por alias, siga estas etapas:

          shell
              sudo keytool -import -v -file streaming.us-ashburn-1.oci.oraclecloud.com.cer -storepass changeit -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/jre/lib/security/cacerts -alias "kafka"
          
              sudo keytool -delete -alias kafka -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit
          
              sudo keytool -import -v -file streaming.us-ashburn-1.oci.oraclecloud.com.cer -keystore DemoTrust.jks -alias "kafka" -storepass DemoTrustKeyStorePassPhrase
          
              sudo keytool -delete -alias kafka -keystore DemoTrust.jks -storepass DemoTrustKeyStorePassPhrase
          
        • Localize sua pasta wlserver que geralmente tem este caminho: /wlserver/server/lib. Por exemplo: cd /u01/app/oracle/middleware/wlserver/server/lib, cd /User/u01/Oracle/Middleware/Oracle_Home/wlserver/server/lib

        • Substitua o arquivo DemoTrust.jks pelo gerado nesta etapa.

        • Depois de copiar o arquivo DemoTrust.jks, você deve alterar o diretório em que implantou o arquivo. Altere os arquivos /src/soakafka/KafkaExample.java dos dois projetos (SOAKafkaProducerprj e SOAKafkaConsumerprj) ao criar a classe da seguinte forma:

          change-truststore-soa-1.png

  10. Teste o aplicativo.

    • Após fazer upload do ambiente de teste, sua instância estará disponível em: http://localhost:7101/em.

    • Lembre-se do seu nome de usuário e senha.

    • Vá para seu aplicativo no item de menu SOA e na opção Componentes Implantados.

      soa-test-5.png

    • Preencha o parâmetro de mensagem exigido pelo serviço, de acordo com a implementação. Este parâmetro foi chamado de "msg" e o formato da mensagem é JSON de acordo com as etapas anteriores.

      teste de soa-producer-1a.png

    • Depois de inserir sua mensagem no formato JSON, clique em "Testar Web Service" para executar seu serviço de Produtor na fila de mensagens.

      teste de soa-producer-2.png

Tarefa 3: Criar uma Instância do SOA Suite no Oracle Cloud

Você deve ter uma instância ativa do Oracle SOA Suite para que seu aplicativo seja implantado. A instância a ser usada neste tutorial será a imagem disponível em nosso Marketplace e terá uma estrutura do SOA Suite servida por um bastion para proteger o servidor.

  1. Para isso, vamos criar uma instância. Na console do Oracle Cloud, clique no menu principal (no canto superior esquerdo da tela), opção "Marketplace" e "Todos os Aplicativos", conforme abaixo:

    mercado-place.png

  2. Na tela de pesquisa de imagem, digite "soa suite" para localizar a imagem correta:

    marketplace-soa-suite.png

  3. Clique na opção "Oracle SOA Suite (BYOL)" para começar a criar a instância. Você verá algumas opções obrigatórias a serem selecionadas. Para obter mais informações, consulte Usando o Oracle SOA Suite on Marketplace no Oracle Cloud Infrastructure.

    • Confirme a versão do SOA Suite: 12.2.1.4 ou posterior (este workshop foi desenvolvido com a versão 12.2.1.4).

    • Selecione o compartimento no qual você deseja que a instância do SOA Suite seja criada.

    • Confirme a aceitação dos termos e condições do acordo de licenciamento.

    • Clique em Iniciar Pilha.

      soa-suite-creation.png

  4. No menu principal da console do Oracle Cloud, vá para Computação e Instâncias.

    computação-select.png

  5. Selecione o compartimento no qual você criou sua instância do SOA Suite e, quando selecioná-la, verá 2 máquinas virtuais.

    • O Servidor do SOA Suite
    • A VM que servirá como bastion para proteger o servidor do SOA Suite

    Observação: O bastion da VM terá um IP público, que será possível acessar pela Internet para acessar o servidor do SOA Suite abrindo um túnel IP, explicado posteriormente.

    instância-soa-suite-compute.png

  6. Para estabelecer um túnel entre o Bastion Server e a instância do SOA Suite, você pode fazer isso por meio do comando SSH, conforme abaixo:

    shell
        ssh -Y -i <Arq.Chave SSH> -L <Port SOA>:<IP Instance SOA Suite>:<Port External> opc@<IP Public Bastion>
    
        Example:
        ssh -Y -i keyrvbastion.pem -L 7002:10.253.128.9:7002 opc@152.67.55.11
    
    

    Depois de estabelecer a conexão via Bastion, você poderá acessar o Weblogic Enterprise Manager com http://localhost:7002/em.

Tarefa 4: Automatizar a implantação com o Oracle Visual Builder Studio

Agora, vamos automatizar a implantação de implementações SOA no servidor Weblogic criado na etapa anterior. Para isso, você precisará de uma instância do Oracle Visual Builder Studio. O Oracle Visual Builder Studio funciona por projetos, para que você possa criar um projeto e incluir os usuários que participarão de sua execução.

Você pode encontrar mais informações sobre a operação na seção Links Relacionados no fim deste documento, procure Implantar com o Visual Builder Studio. Em seguida, siga as etapas para configurar uma criação e implantação automatizadas de suas implementações do SOA Suite no servidor Weblogic.

  1. Configure uma máquina virtual para BUILD no ORACLE SOA Suite. Antes de iniciar as definições, você precisará configurar uma máquina virtual que atenda às necessidades de compilação de um projeto do Oracle SOA Suite. Para isso, será necessário selecionar as ferramentas corretas a serem instaladas nesta VM.

    1. Clique em Organização no menu esquerdo e, em seguida, clique em Modelos de Máquina Virtual.

      vbst-create-template.png

    2. Clique em Criar Modelo para configurar quais ferramentas estarão disponíveis para criar seus projetos do SOA Suite. Em seguida, digite um nome para seu Modelo e, se desejar, opcionalmente, você pode descrever sobre esse modelo. Não se esqueça de selecionar em qual plataforma esta VM estará ativada. Escolha a opção Oracle Linux (até a data deste documento, tivemos o Oracle Linux 7, mas você pode selecionar outra opção mais recente.

      vbst-create-template-2.png

    3. Selecione todos os componentes importantes para criar seus projetos. Escolha todas as opções abaixo.

      vbst-config-sw.png

      vbst-config-details.png

      Seu TEMPLATE é criado e sua VM será instanciada assim que um projeto solicitar uma criação.

    4. Configuração de BUILD de um projeto no Oracle Visual Builder Studio. Primeiro, abra um projeto no Oracle Visual Builder Studio, no exemplo abaixo, clique em CRISTIANO HOSHIKAWA PROJ.

      construtor visual principal-studio.png

      • Você verá a página do seu projeto, junto com um menu esquerdo com as opções disponíveis e no lado direito seus projetos no repositório de código-fonte e também a equipe que faz parte desse projeto (usuários do projeto).

        visual-construtor-áudio-project.png

    5. Clique na opção BUILD no menu esquerdo para exibir todas as definições existentes e, em seguida, vamos configurar um novo BUILD para o seu projeto. Clique em Criar Job.

      visual-builder-studio-create-job.png

    6. Informe um nome para seu Job e selecione também o Modelo de VM (criado na sessão anterior).

      vbst-create-job-details.png

  2. Agora vamos configurar a criação do seu projeto passo a passo. A primeira parte da configuração será estabelecer o repositório do projeto do Oracle SOA Suite que deve ser criado anteriormente com o código-fonte. Neste documento, estamos trabalhando com o projeto SOAKafkaProducerApp disponível no git deste documento. Você poderá clonar esse projeto com o git da sua instância do Oracle Visual Builder Studio.

    1. Após clonar o projeto SOAKafkaProducerApp no Visual Builder Studio, configure seu BUILD com o nome do repositório git e selecione a opção "Executar automaticamente o build no commit do SCM". Verifique também se o nome da ramificação corresponde ao seu projeto git.

      vbst-git.png

    2. Agora selecione a guia "Parâmetros". Você precisará criar 3 parâmetros com o menu Combobox "Adicionar Parâmetros" no lado direito. Abaixo, os nomes que devem ser criados e também entre parênteses, o tipo:

      • WEBLOGICUSER: o usuário do Weblogic (Tipo de string)

      • WEBLOGICPWD: sua senha de usuário do Weblogic (digite Segredo/Senha)

      • WEBLOGICURL: o URL da instância do Weblogic (Tipo de string)

      • Uma observação importante é que o URL em WEBLOGICURL deve ser localhost como um túnel será estabelecido através do Servidor Bastion

        vbst-parameters.png

    3. Agora clique na guia "Antes da Criação" para configurar o túnel SSH do Bastion Server para o Weblogic SOA Suite Server. Lembre-se de ter sua chave SSH (Chave Privada) e preencha o campo correspondente. Preencha os dados da montagem do túnel.

      • Nome do Usuário: opc

      • Porta Local: 11002

      • Host Remoto: IP Privado da sua instância do SOA Suite

      • Porta Remota: 11002

      • Servidor SSH: IP Público do seu Bastion

      • Uma observação importante é que a porta 11002 foi configurada anteriormente para que seja exatamente a porta de acesso para implantar seus projetos do SOA Suite.

        vbst-tunnel.png

    4. Clique na guia "Etapas" para configurar BUILD (via Maven) e DEPLOYMENT (via ANT) do seu projeto do SOA Suite. Preencha como segue:

      • MAVENÇÃO
      • Metas: compilar pacote

      • Arquivo POM: SOAKafkaProducerApp/SOAKafkaConsumerPrj/SOA/SCA-INF/pom.xml. Este é o arquivo pom.xml do Maven para montar seu pacote de projetos

      • ANT

        • Destinos: implantação do pacote sca

        • Arquivo de Construção: SOAKafkaProducerApp/SOAKafkaConsumerPrj/build.xml. Este é o arquivo Ant build.xml para implantar seu aplicativo após o build.

      • Propriedades

        • WEBLOGICUSER=${WEBLOGICUSER}

        • WEBLOGICPWD=${WEBLOGICPWD}

        • WEBLOGICURL=${WEBLOGICURL}

      Observação Importante:

      • O aplicativo SOAKafkaProducerApp tem 2 projetos: SOAKafkaProducerPrj e SOAKafkaConsumerPrj.

      • Estamos ilustrando a configuração de um dos projetos. As mesmas etapas devem ser executadas para o outro projeto.

      vbst-config-step.png

    5. Agora vamos concluir a configuração BUILD. Selecione a guia "Após a Criação". Essa etapa é opcional, mas talvez você queira gerar o artefato criado pela etapa anterior ao executar o Maven. Para isso, configure esta etapa para que o artefato seja gerado para download posterior.

      vbst-after-build.png

  3. Execute o BUILD no Oracle Visual Builder Studio. Uma vez configurado, cada vez que houver um commit no repositório de código (Visual Builder Studio git), o BUILD será iniciado automaticamente. Você também pode executar o BUILD manualmente, para isso basta clicar na opção BUILD. Tente executar BUILD e você poderá verificar os Logs gerados.

    vbst-log-1.png

    vbst-logs-3.png

    vbst-logs-2.png

Aquisições

Mais Recursos de Aprendizagem

Explore outros laboratórios no site docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.