Nota:

Despliegue de Oracle SOA Suite en Oracle Visual Builder Studio

Introducción

Oracle Visual Builder Studio es la herramienta oficial de Oracle para automatizar procesos DevOps con diferentes tecnologías como:

En este tutorial se muestra un ejemplo de cómo implantar las siguientes funcionalidades en Oracle SOA Suite.

Nota importante: actualmente, solo es posible implantar la integración y el despliegue continuos con Oracle SOA Suite mediante Oracle Visual Builder Studio. Esto se debe a que solo Visual Builder Studio tiene plugins ya preinstalados en la máquina virtual para procesar y compilar (BUILD) los paquetes necesarios. Por lo tanto, aún no es posible implantar la integración y el despliegue continuos con otras herramientas de mercado como Jenkins.

Objetivos

Implante un proyecto en SOA Suite que se pueda desplegar automáticamente mediante el proceso DevOps con Oracle Visual Builder Studio.

Requisitos

Conocimiento de lo siguiente:

Tarea 1: Crear la instancia de Oracle Streaming

Oracle Cloud Streaming es una aplicación cuyo objetivo es servir como cola de mensajes, al igual que la herramienta de código abierto Kafka. Oracle Streaming es una solución gestionada, lo que significa que crea una instancia para su uso y no tiene que preocuparse por el control de la infraestructura. Pague solo por lo que utiliza. La herramienta también le permite utilizar la API de REST de Kafka, lo que la hace compatible con los proyectos de Kafka existentes con las ventajas de "nube como servicio".

En este tutorial, ejecutaremos una implantación del servicio SOA para producir y otro servicio para consumir datos en una cola de mensajes. Por lo tanto, nuestra primera parada será aprovisionar un entorno de Oracle Streaming.

Tarea 2: Cree el proyecto de SOA Suite en JDeveloper

Crearemos una instancia de Oracle Cloud Streaming para sustituir a Kafka. Cree un proyecto con los siguientes objetivos:

El proyecto completo se incluye en este tutorial. Puede cambiar la configuración para compilar, empaquetar y desplegar en la instancia de SOA Suite.

Nota: En este tutorial no se incluyen pasos detallados para implantar servicios REST. Para obtener más información, consulte Cómo implantar y consumir servicios REST con Oracle SOA Suite.

  1. Descargue el proyecto SOAKafkaProducerApp mediante este enlace: SOAKafkaProducerApp.zip.

    • Busque el archivo de aplicación /SOAKafkaProducerApp/SOAKafkaProducerApp/SOAKafkaProducerApp.jws.

    • Puede ver los proyectos en JDeveloper: SOAKafkaProducerPrj y SOAKafkaConsumerPrj

  2. Haga clic en el árbol de aplicaciones y busque SOAKakfaConsumerPrj y haga doble clic en KafkaConsumer como se muestra en la siguiente imagen.

    jdev-soa-1.png

    • Esta es la visión del proyecto SOA para el consumo de colas de Kafka. Esta es una implementación típica del tipo Compuesto de SOA. Se trata de un servicio REST (componente establecido en la vía Servicios expuestos) y se debe desplegar en el servidor SOA. El componente enlazado al servicio es la implementación del servicio en sí y está dispuesto en el carril de Componentes, como se muestra en la imagen anterior. Al hacer doble clic en el componente KafkaConsumer, se le dirigirá a la implantación del servicio, como se muestra a continuación:

      jdev-bpel-1.png

    • La primera etapa de implantación comienza con un componente denominado Recibir, responsable de recibir los parámetros de trabajo iniciales, típicos de una llamada REST. En este tutorial, no transferiremos parámetros, pero se ilustra aquí para los servicios que necesitan este recurso.

      jdeve-receive-1.png

      jdev-receive-detail.png

      jdev-bpel-code.png

    • El componente embebido de Java es responsable de llamar a una rutina de Java que, en este caso, llamará a una clase denominada KafaExample comentada posteriormente.

      jdev-embedded-code-1.png

    • El código Java que se llama en este embebido Java es responsable de las rutinas de producción y consumo de colas de Kafka u Oracle Stream (tenga en cuenta que la API para Oracle Streaming es compatible con 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-assign-details.png

      jdev-reply-1.png

      jdev-reply-details.png

  3. Incluya paquetes Java en su código con Maven.

    • En este proyecto, se inyecta código Java para llamar a Kafka u Oracle Cloud Streaming API. Debido a que es código Java, las inclusiones de paquetes suelen ser necesarias para utilizar marcos. Maven es la herramienta más utilizada en estos casos y, para ello, debe incluirla en su proyecto. Con el botón derecho del mouse, abra la opción sobre el proyecto y seleccione Desde galería como se muestra en la siguiente imagen.

      soa-create-pom-file.png

    • Seleccione la opción POM de Maven para Proyecto.

      soa-maven-select.png

    Ahora podrá configurar su paquete con los marcos necesarios.

  4. Cree con Maven.

    • Haga clic en las opciones de Windows de aplicación y, a continuación, haga clic en la vista de directorio para acceder al archivo /SOA/SCA-INF/pom.xml.

      Ver-maven-pom-xml-file.png

      Nombre de archivo xml-file2.png

    • Haga doble clic en el archivo pom.xml para abrirlo en el editor JDeveloper y seleccione el separador Origen para ver el código.

    • De esta manera, podrá visualizar el código del archivo pom.xml.

      pom-xml-original.png

    • Este es un cambio muy importante en el proceso DevOps. Debe incluir estas líneas para la automatización.

      Nota: El proyecto de este tutorial ya está configurado para soportar la automatización de DevOps, pero para nuevos proyectos, siga este procedimiento para automatizar el proceso DevOps. Entre la etiqueta y la etiqueta puede incluir este código, que será el responsable de ensamblar el paquete de software para su posterior despliegue con **Ant**.

      Para la automatización DevOps, debe incluir las siguientes 3 líneas.

      <directory>target</directory>

      <outputDirectory>classes</outputDirectory>

      <sourceDirectory>src</sourceDirectory>

      devops-pom-xml.png

      Así que el código completo se verá así:

      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. Crear y desplegar con Ant.

    • Ant es una herramienta conocida del mercado, desarrollada por el proyecto Jakarta, responsable de automatizar las compilaciones, las creaciones de paquetes y los despliegues de aplicaciones para proyectos como Java. En el proceso DevOps, Ant será fundamental para crear el paquete de SOA Suite y también para desplegar este paquete en el servidor remoto de Weblogic SOA Suite.

    • Para crear el archivo build.xml, con el botón derecho del mouse, abra la opción sobre el proyecto y seleccione Desde galería como se muestra en la siguiente imagen.

      soa-create-pom-file.png

    • Seleccione la opción Ant en el menú de la izquierda y, a continuación, haga clic en Archivo de creación de proyecto.

      soa-create-ant.png

    • El archivo build.xml es un archivo de configuración muy común para su uso con 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>
      
      
    • El archivo build.properties determina las propiedades que se utilizarán en el archivo de configuración 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. Inicialice el entorno de SOA Suite para la prueba. Primero abra el puerto de firewall del entorno de SOA Suite. El puerto que se va a liberar es 9092, que representa el puerto de Oracle Streaming o Kafka.

  7. Active el servidor SOA embebido en JDeveloper.

    • JDeveloper tiene un servidor de SOA Suite integrado para desarrollo y prueba. Se trata de un servidor con prácticamente todas las funciones necesarias para desarrollar los servicios SOA. Para utilizar este servidor, debe crearlo y activarlo.

    • Para activar el servidor, primero debe ver los servidores de aplicaciones. Para ello, vaya a la opción "Window" (Ventana) y seleccione Application Servers (Servidores de aplicaciones) como se muestra en la siguiente imagen.

      jdeveloper-select-app-server.png

    • La ventana de servidores de aplicaciones aparecerá en el lado izquierdo de la pantalla. Asegúrese de que integratedWeblogicServer ya se ha creado en la ventana. Si no es así, deberá crearla y activarla para su uso.

    • Vaya a la opción Ejecutar y seleccione Iniciar instancia de servidor como se muestra en la siguiente imagen.

      jdev-start-app-server.gif

    • Introduzca los datos necesarios para crear la instancia de WebLogic. Anote los valores, ya que los necesitará más adelante para realizar pruebas.

      jdev-create-app-server.gif

    • Si ha creado el servidor o si ya estaba disponible, haga clic con el botón derecho en el servidor y actívelo como se muestra en la siguiente imagen.

      jdeveloper-start-app-server.png

  8. Ejecute un despliegue manual en SOA Suite.

    • En primer lugar, realice manualmente el despliegue del servicio de consumidor de Kafka (SOAKafkaConsumerPrj). Para ello, busque el separador Aplicaciones y abra las opciones de menú con el botón derecho del mouse, como se muestra en la siguiente imagen.

      soa-deploy-1.png

    • Seleccione la opción Desplegar y, a continuación, cree un nuevo perfil de despliegue. Verá una pantalla de configuración y debe seleccionar el tipo de perfil como Archivo SOA-SAR, ya que generaremos un archivo.

      soa-deploy-2.png

    • Esto está preparado para que podamos desplegar su paquete en el siguiente paso. En la siguiente pantalla, mantenga las opciones proporcionadas y haga clic en OK (Aceptar).

      soa-deploy-3.png

    • Vuelva a abrir la opción de menú Desplegar. La opción de despliegue se crea y está lista para su uso. Selecciónelo.

      soa-deploy-4.png

    • Ahora vamos a elegir la opción para desplegar directamente en su servidor SOA. A continuación, seleccione la opción como se muestra a continuación.

      soa-deploy-5.png

    • Deje todas las opciones proporcionadas y seleccione Sobrescribir los compuestos existentes con el mismo identificador de revisión. Si esta opción no está activada e intenta realizar despliegues consecutivos después de la primera ejecución, se interrumpirá con un mensaje de error.

      soa-deploy-6.png

    • A continuación, seleccione la opción IntegratedWeblogicServer. Esta opción representa el servidor embebido de JDeveloper explicado en la sección anterior (Cómo activar el servidor SOA embebido en JDeveloper).

    • Si el servidor JDeveloper de Weblogic se ha creado e iniciado correctamente, verá la siguiente opción y el estado "EN EJECUCIÓN" confirmando que todo está bien. Si no ve esta opción, probablemente no haya creado el servidor todavía o no lo haya iniciado. Revise los pasos anteriores.

      soa-deploy-9.png

    • Confirme con Next (Siguiente) hasta la pantalla de resumen y haga clic en Finish (Finalizar).

    • En la ventana inferior central, puede seguir el despliegue de la aplicación. Espere hasta que vea Desplegar terminado como mensaje correcto.

      soa-deploy-11.png

  9. Instale el certificado JKS en Weblogic.

    • En entornos SSL, será necesario crear seguridad a través de claves (públicas/privadas) que se realizará a través de certificados JKS, adecuados para el entorno WebLogic. El proceso de generación de claves se realiza obteniendo el certificado de la instancia de Oracle Cloud Streaming y agregando este certificado a un archivo JKS, al que llamaremos DemoTrust (DemoTrust.jks).

      Nota: El archivo DemoTrust.jks se indicará con una ALIAS, así como una contraseña que se utilizará en el código Java.

    • Después de crear el archivo JKS, puede mover este archivo a la estructura del servidor WebLogic.

      1. Obtenga el certificado de transmisión de Oracle Cloud. Para obtener más información, consulte Uso del adaptador de servicio de Oracle Cloud Infrastructure Streaming con Oracle Integration Generation 2.

      2. Genere el archivo JKS.

      3. Instale el archivo JKS en 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 ejemplo:

        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

        • Si desea generar o suprimir almacenes de claves por alias, siga estos pasos:

          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
          
        • Busque la carpeta wlserver que normalmente tiene esta ruta: /wlserver/server/lib. Por ejemplo: cd /u01/app/oracle/middleware/wlserver/server/lib, cd /User/u01/Oracle/Middleware/Oracle_Home/wlserver/server/lib

        • Sustituya el archivo DemoTrust.jks por el generado en este paso.

        • Después de copiar el archivo DemoTrust.jks, debe cambiar el directorio en el que ha desplegado el archivo. Cambie los archivos /src/soakafka/KafkaExample.java de ambos proyectos (SOAKafkaProducerprj y SOAKafkaConsumerprj) al crear la clase de la siguiente manera:

          cambiar-truststore-soa-1.png

  10. Pruebe la aplicación.

    • Después de cargar el entorno de prueba, la instancia estará disponible en: http://localhost:7101/em.

    • Recuerde su nombre de usuario y contraseña.

    • Vaya a la aplicación en la opción de menú SOA y en la opción Componentes desplegados.

      soa-test-5.png

    • Rellene el parámetro de mensaje requerido por el servicio, según la implementación. Este parámetro se denominó "msg" y el formato del mensaje es JSON según los pasos anteriores.

      prueba de soa-producer-1a.png

    • Después de introducir el mensaje en formato JSON, haga clic en "Probar servicio web" para ejecutar el servicio de productor en la cola de mensajes.

      prueba de soa-producer-2.png

Tarea 3: Creación de una instancia de SOA Suite en Oracle Cloud

Debe tener una instancia activa de Oracle SOA Suite para que se despliegue la aplicación. La instancia que se utilizará en este tutorial será la imagen disponible en nuestro Marketplace y tendrá una estructura de SOA Suite servida por un bastión para proteger el servidor.

  1. Para ello, vamos a crear una instancia. En la consola de Oracle Cloud, haga clic en el menú principal (en la esquina superior izquierda de la pantalla), en la opción "Marketplace" y en "Todas las aplicaciones", como se muestra a continuación:

    mercado-place.png

  2. En la pantalla de búsqueda de imágenes, escriba "soa suite" para encontrar la imagen correcta:

    marketplace-soa-suite.png

  3. Haga clic en la opción "Oracle SOA Suite (BYOL)" para empezar a crear la instancia. Verá algunas opciones obligatorias para seleccionar. Para obtener más información, consulte Uso de Oracle SOA Suite en Marketplace en Oracle Cloud Infrastructure.

    • Confirme la versión de SOA Suite: 12.2.1.4 o superior (este taller se ha desarrollado con la versión 12.2.1.4).

    • Seleccione el compartimento en el que desea crear la instancia de SOA Suite.

    • Confirme la aceptación de los términos y condiciones del acuerdo de licencia.

    • Haga clic en Iniciar pila.

      soa-suite-creation.png

  4. En el menú principal de la consola de Oracle Cloud, vaya a Compute e Instances.

    Recursos informáticos: select.png

  5. Seleccione el compartimento en el que ha creado la instancia de SOA Suite y, al seleccionarla, verá 2 máquinas virtuales.

    • Servidor de SOA Suite
    • La máquina virtual que actuará como bastión para proteger el servidor de SOA Suite

    Nota: El bastión de VM tendrá una IP pública a la que podrá acceder a través de Internet para acceder al servidor de SOA Suite abriendo un túnel IP, explicado más adelante.

    instancia-soa-suite-compute.png

  6. Para establecer un túnel entre el servidor Bastion y la instancia de SOA Suite, puede hacerlo mediante el comando SSH de la siguiente manera:

    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
    
    

    Después de establecer la conexión mediante Bastion, puede acceder a Weblogic Enterprise Manager con http://localhost:7002/em.

Tarea 4: Automatización del despliegue con Oracle Visual Builder Studio

Ahora automatizaremos el despliegue de implantaciones de SOA en el servidor de Weblogic creado en el paso anterior. Para ello necesitará una instancia de Oracle Visual Builder Studio. Oracle Visual Builder Studio funciona por proyectos, por lo que puede crear un proyecto e incluir los usuarios que participarán en su ejecución.

Puede encontrar más información sobre la operación en la sección Enlaces relacionados al final de este documento, busque Desplegar con Visual Builder Studio. A continuación, siga los pasos para configurar una creación y despliegue automatizados de las implantaciones de SOA Suite en el servidor de Weblogic.

  1. Configure una máquina virtual para BUILD en ORACLE SOA Suite. Antes de iniciar la configuración, deberá configurar una máquina virtual que satisfaga las necesidades de compilación de un proyecto de Oracle SOA Suite. Para ello, deberá seleccionar las herramientas correctas que se instalarán en esta máquina virtual.

    1. Haga clic en Organización en el menú de la izquierda y, a continuación, haga clic en Plantillas de máquina virtual.

      vbst-create-template.png

    2. Haga clic en Crear plantilla para configurar las herramientas que estarán disponibles para crear los proyectos de SOA Suite. A continuación, escriba un nombre para la plantilla y, si lo desea, puede describir esta plantilla. No olvide seleccionar la plataforma en la que estará esta máquina virtual. Seleccione la opción Oracle Linux (hasta la fecha de este documento, teníamos Oracle Linux 7, pero puede seleccionar otra opción más reciente.

      vbst-create-template-2.png

    3. Seleccione todos los componentes importantes para crear los proyectos. Seleccione todas las opciones como a continuación.

      vbst-config-sw.png

      vbst-config-details.png

      Se crea TEMPLATE y se crea una instancia de su máquina virtual tan pronto como un proyecto solicite una creación.

    4. Configuración CONSTRUIDA de un proyecto en Oracle Visual Builder Studio. En primer lugar, abra un proyecto en Oracle Visual Builder Studio, en el siguiente ejemplo, haga clic en CRISTIANO HOSHIKAWA PROJ.

      constructor visual principal-studio.png

      • Verá la página del proyecto, junto con un menú de la izquierda con las opciones disponibles y de la derecha los proyectos en el repositorio de código fuente y también el equipo que forma parte de este proyecto (usuarios de proyecto).

        visual-creador-estudio-project.png

    5. Haga clic en la opción BUILD del menú de la izquierda para ver todos los valores existentes y, a continuación, configuremos un nuevo BUILD para su proyecto. Haga clic en Crear trabajo.

      visual-builder-studio-create-job.png

    6. Introduzca un nombre para el trabajo y seleccione también la plantilla de VM (creada en la sesión anterior).

      vbst-create-job-details.png

  2. Ahora vamos a configurar la creación de su proyecto paso a paso. La primera parte de la configuración será establecer el repositorio del proyecto de Oracle SOA Suite que se debe crear previamente con el código de origen. En este documento, estamos trabajando con el proyecto SOAKafkaProducerApp disponible en el git de este documento. Podrá clonar este proyecto en el git de la instancia de Oracle Visual Builder Studio.

    1. Después de clonar el proyecto SOAKafkaProducerApp en Visual Builder Studio, configure el BUILD con el nombre del repositorio de git y seleccione la opción "Realizar creación automática en confirmación de SCM". Compruebe también que el nombre de la rama coincide con su proyecto de Git.

      vbst-git.png

    2. A continuación, seleccione el separador "Parameters". Tendrá que crear 3 parámetros con el menú Combobox "Agregar parámetros" en el lado derecho. A continuación, los nombres que se deben crear y también entre paréntesis, el tipo:

      • WEBLOGICUSER: Usuario de Weblogic (tipo de cadena)

      • WEBLOGICPWD: contraseña de usuario de Weblogic (escriba Secreto/Contraseña)

      • WEBLOGICURL: URL de su instancia de Weblogic (tipo de cadena)

      • Una observación importante es que la URL en WEBLOGICURL debe ser localhost ya que se establecerá un túnel a través del servidor Bastion

        vbst-parameters.png

    3. A continuación, haga clic en el separador "Before Build" para configurar el túnel SSH desde Bastion Server hasta Weblogic SOA Suite Server. Recuerde tener su clave SSH (clave privada) y rellene el campo correspondiente. Rellene los datos del conjunto de túneles.

      • Usuario: opc

      • Puerto local: 11002

      • Host remoto: IP privada de la instancia de SOA Suite

      • Puerto Remoto: 11002

      • Servidor SSH: IP pública de su bastión

      • Una observación importante es que el puerto 11002 se ha configurado previamente para que sea exactamente el puerto de acceso para desplegar los proyectos de SOA Suite.

        vbst-tunnel.png

    4. Haga clic en el separador "Pasos" para configurar BUILD (a través de Maven) y DEPLOYMENT (a través de ANT) de su proyecto de SOA Suite. Rellene la siguiente información:

      • MAVEN
      • Objetivos: compilar paquete

      • Archivo POM: SOAKafkaProducerApp/SOAKafkaConsumerPrj/SOA/SCA-INF/pom.xml. Este es el archivo pom.xml de Maven para ensamblar el paquete de proyecto

      • ANT

        • Destinos: despliegue de sca-package

        • Archivo de construcción: SOAKafkaProducerApp/SOAKafkaConsumerPrj/build.xml. Este es el archivo Ant build.xml para desplegar la aplicación después de la creación.

      • Propiedades

        • WEBLOGICUSER=${WEBLOGICUSER}

        • WEBLOGICPWD=${WEBLOGICPWD}

        • WEBLOGICURL=${WEBLOGICURL}

      Nota Importante:

      • La aplicación SOAKafkaProducerApp tiene 2 proyectos: SOAKafkaProducerPrj y SOAKafkaConsumerPrj.

      • Estamos ilustrando la configuración de uno de los proyectos. Se deben realizar los mismos pasos para el otro proyecto.

      vbst-config-step.png

    5. Ahora terminemos la configuración BUILD. Seleccione el separador "After Build". Este paso es opcional, pero puede que desee generar el artefacto creado por el paso anterior al ejecutar Maven. Para ello, configure este paso para que el artefacto se genere para su posterior descarga.

      vbst-after-build.png

  3. Ejecute BUILD en Oracle Visual Builder Studio. Una vez configurado, cada vez que haya una confirmación en el repositorio de código (Visual Builder Studio git), el BUILD se iniciará automáticamente. También puede ejecutar el BUILD manualmente, por lo que solo tiene que hacer clic en la opción BUILD. Intente ejecutar BUILD y podrá comprobar los logs generados.

    vbst-log-1.png

    vbst-logs-3.png

    vbst-logs-2.png

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre los productos, visite Oracle Help Center.