Remarque :

Déployer Oracle SOA Suite dans Oracle Visual Builder Studio

Introduction

Oracle Visual Builder Studio est l'outil officiel Oracle permettant d'automatiser les processus DevOps avec différentes technologies telles que :

Ce tutoriel présente un exemple d'implémentation des fonctionnalités suivantes dans Oracle SOA Suite.

Remarque importante : pour l'instant, il est uniquement possible d'implémenter l'intégration continue et le déploiement continu avec Oracle SOA Suite via Oracle Visual Builder Studio. En effet, seul Visual Builder Studio dispose de modules d'extension déjà préinstallés dans la machine virtuelle pour traiter et compiler les packages nécessaires. Par conséquent, il n'est pas encore possible de mettre en œuvre CI/CD avec d'autres outils du marché tels que Jenkins.

Objectifs

Implémentez dans SOA Suite un projet qui peut être déployé automatiquement via le processus DevOps avec Oracle Visual Builder Studio.

Prérequis

Connaissance des éléments suivants :

Tâche 1 : création de l'instance Oracle Streaming

Oracle Cloud Streaming est une application qui vise à faire office de file d'attente de messages, tout comme l'outil open source Kafka. Oracle Streaming est une solution gérée qui vous permet de créer une instance à utiliser sans vous soucier de la gouvernance de l'infrastructure. Payer uniquement selon votre utilisation. L'outil vous permet également d'utiliser l'API REST de Kafka, ce qui la rend compatible avec les projets Kafka existants avec les avantages du " cloud en tant que service ".

Dans ce tutoriel, nous allons exécuter une implémentation de service SOA pour produire et un autre service pour consommer des données dans une file d'attente de messages. Par conséquent, notre premier arrêt consiste à provisionner un environnement Oracle Streaming.

Tâche 2 : créez votre projet SOA Suite dans JDeveloper

Nous allons créer une instance Oracle Cloud Streaming afin de remplacer Kafka. Créez un projet avec les objectifs suivants :

Le projet complet est inclus dans ce tutoriel. Vous pouvez modifier les paramètres pour les compiler, les packager et les déployer vers votre instance SOA Suite.

Remarque : ce tutoriel n'inclut pas les étapes détaillées d'implémentation des services REST. Pour plus d'informations, reportez-vous à Implémentation et utilisation de services REST avec Oracle SOA Suite.

  1. Téléchargez le projet SOAKafkaProducerApp à l'aide de ce lien : SOAKafkaProducerApp.zip.

    • Recherchez le fichier d'application /SOAKafkaProducerApp/SOAKafkaProducerApp/SOAKafkaProducerApp.jws.

    • Vous pouvez afficher les projets dans JDeveloper : SOAKafkaProducerPrj et SOAKafkaConsumerPrj

  2. Cliquez sur l'arborescence de l'application et recherchez SOAKakfaConsumerPrj et cliquez deux fois sur KafkaConsumer comme indiqué dans l'image suivante.

    jdev-soa-1.png

    • Voici la vision du projet SOA pour la consommation de files d'attente Kafka. Il s'agit d'une implémentation type de composite SOA. Il s'agit d'un service REST (composant défini dans la zone Services exposés) qui doit être déployé sur le serveur SOA. Le composant lié au service est l'implémentation du service lui-même et est organisé dans le couloir d'activités Components comme illustré dans l'image précédente. En cliquant deux fois sur le composant KafkaConsumer, vous serez redirigé vers l'implémentation du service, comme indiqué ci-dessous :

      jdev-bpel-1.png

    • La première phase d'implémentation commence par un composant appelé Receive, responsable de la réception des paramètres de travail initiaux, typiques d'un appel REST. Dans ce tutoriel, nous ne transmettrons pas les paramètres, mais il est illustré ici pour les services qui ont besoin de cette ressource.

      jdeve-receive-1.png

      jdev-receive-detail.png

      jdev-bpel-code.png

    • Le composant Java Embedded est responsable de l'appel d'une routine Java qui, dans ce cas, appellera une classe appelée KafaExample commentée ultérieurement.

      jdev-embedded-code-1.png

    • Le code Java appelé dans cette incorporation Java est responsable des routines de production et de consommation des files d'attente Kafka ou Oracle Stream (n'oubliez pas que l'API pour Oracle Streaming est compatible 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. Incluez des packages Java dans votre code avec Maven.

    • Dans ce projet, nous injectons du code Java pour appeler l'API Kafka ou Oracle Cloud Streaming. Etant donné qu'il s'agit de code Java, les inclusions de packages sont souvent nécessaires pour utiliser des structures. Maven est l'outil le plus utilisé dans ces cas et, pour cela, vous devez l'inclure dans votre projet. Avec le bouton droit de la souris, ouvrez l'option sur votre projet et sélectionnez A partir de la galerie comme indiqué dans l'image suivante.

      soa-create-pom-file.png

    • Sélectionnez l'option Maven POM for Project.

      soa-maven-select.png

    Vous pouvez maintenant configurer votre package avec les structures nécessaires.

  4. Créez avec Maven.

    • Cliquez sur les options Application Windows, puis sur Directory View pour accéder au fichier /SOA/SCA-INF/pom.xml.

      Visualiser-maven-pom-xml-file.png

      Module de fichiers-xml-file2.png

    • Cliquez deux fois sur le fichier pom.xml pour l'ouvrir dans l'éditeur JDeveloper et sélectionnez l'onglet Source pour afficher le code.

    • Vous pourrez ainsi visualiser le code du fichier pom.xml.

      pom-xml-original.png

    • Voici une modification très importante du processus DevOps. Vous DEVEZ inclure ces lignes pour l'automatisation.

      Remarque : le projet de ce tutoriel est déjà configuré pour prendre en charge l'automatisation DevOps, mais pour les nouveaux projets, suivez cette procédure pour automatiser le processus DevOps. Entre la balise et la balise , vous pouvez inclure ce code, qui sera chargé d'assembler votre package logiciel pour un déploiement ultérieur avec **Ant**.

      Pour l'automatisation DevOps, vous devez inclure les 3 lignes suivantes.

      <directory>target</directory>

      <outputDirectory>classes</outputDirectory>

      <sourceDirectory>src</sourceDirectory>

      devops-pom-xml.png

      Votre code complet ressemblera donc à ce qui suit :

      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. Créer et déployer avec Ant.

    • Ant est un outil bien connu du marché, développé par le projet Jakarta, responsable de l'automatisation des compilations, des builds de package et des déploiements d'application pour des projets tels que Java. Dans le processus DevOps, Ant est fondamental pour la création du package SOA Suite et pour le déploiement de ce package sur le serveur Weblogic SOA Suite distant.

    • Pour créer votre fichier build.xml, avec le bouton droit de la souris, ouvrez l'option sur votre projet et sélectionnez A partir de la galerie comme indiqué dans l'image suivante.

      soa-create-pom-file.png

    • Sélectionnez l'option Ant dans le menu de gauche, puis cliquez sur Créer un fichier à partir d'un projet.

      créer-soa-ant.png

    • Le fichier build.xml est un fichier de configuration très courant à utiliser avec 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>
      
      
    • Le fichier build.properties détermine les propriétés qui seront utilisées dans le fichier de configuration 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. Initialisez l'environnement SOA Suite pour le test. Ouvrez d'abord le port de pare-feu de votre environnement SOA Suite. Le port à libérer est 9092, qui représente le port Oracle Streaming ou Kafka.

  7. Activez le serveur SOA intégré dans JDeveloper.

    • JDeveloper dispose d'un serveur SOA Suite intégré pour le développement et les tests. Il s'agit d'un serveur avec pratiquement toutes les fonctionnalités nécessaires au développement de vos services SOA. Pour utiliser ce serveur, vous devez le créer et l'activer.

    • Pour activer le serveur, vous devez d'abord afficher les serveurs d'applications. Pour cela, accédez à l'option "Window" et sélectionnez Application Servers comme indiqué dans l'image suivante.

      jdeveloper-select-app-server.png

    • La fenêtre des serveurs d'applications s'affiche sur le côté gauche de l'écran. Assurez-vous que integratedWeblogicServer est déjà créé dans votre fenêtre. Si ce n'est pas le cas, vous devrez le créer, puis l'activer pour l'utiliser.

    • Accédez à l'option Run et sélectionnez Start Server Instance comme indiqué dans l'image suivante.

      jdev-start-app-server.gif

    • Entrez les données requises pour créer l'instance WebLogic. Notez les valeurs comme vous en aurez besoin ultérieurement pour les tester.

      jdev-create-app-server.gif

    • Si vous avez créé le serveur ou s'il était déjà disponible, cliquez avec le bouton droit de la souris sur le serveur et activez-le comme indiqué dans l'image suivante.

      jdeveloper-start-app-server.png

  8. Exécuter un déploiement manuel dans SOA Suite.

    • Tout d'abord, effectuons le déploiement de votre service client Kafka (SOAKafkaConsumerPrj) manuellement. Pour ce faire, localisez l'onglet Applications et ouvrez les options de menu à l'aide du bouton droit de la souris, comme indiqué dans l'image suivante.

      soa-deploy-1.png

    • Sélectionnez l'option Déployer, puis créez un profil de déploiement. Un écran de configuration s'affiche et vous devez choisir le type de profil Fichier SOA-SAR car nous allons générer un fichier.

      soa-deploy-2.png

    • Cette préparation nous permet de déployer votre package à l'étape suivante. Sur l'écran suivant, conservez les options indiquées et cliquez sur OK.

      soa-deploy-3.png

    • Ouvrez à nouveau l'option de menu Déployer. L'option de déploiement est créée et prête à être utilisée. Sélectionnez-le.

      soa-deploy-4.png

    • Choisissez maintenant l'option de déploiement direct sur votre serveur SOA. Choisissez ensuite l'option comme indiqué ci-dessous.

      soa-deploy-5.png

    • Conservez toutes les options fournies et sélectionnez Overwrite any existing composites with the same revision ID. Si cette option n'est pas cochée et que vous essayez d'effectuer des déploiements consécutifs après votre première exécution, un message d'erreur s'affiche.

      soa-deploy-6.png

    • Sélectionnez ensuite l'option IntegratedWeblogicServer. Cette option représente le serveur intégré de JDeveloper expliqué dans la section précédente (Activation du serveur SOA intégré dans JDeveloper).

    • Si votre serveur Weblogic JDeveloper a été créé et démarré avec succès, vous verrez l'option ci-dessous et le statut "RUNNING" confirmant que tout va bien. Si cette option n'apparaît pas, vous n'avez probablement pas encore créé le serveur ou ne l'avez pas démarré. Passez en revue les étapes précédentes.

      soa-deploy-9.png

    • Confirmez avec Next jusqu'à l'écran récapitulatif et cliquez sur Finish.

    • Dans la fenêtre centrale du bas, vous pouvez suivre le déploiement de votre application. Attendez que le message Deploy completed s'affiche.

      soa-deploy-11.png

  9. Installez le certificat JKS dans Weblogic.

    • Dans les environnements SSL, il sera nécessaire de créer une sécurité via des clés (publiques/privées) qui seront effectuées via des certificats JKS, adaptés à l'environnement WebLogic. Le processus de génération de clé se fait en obtenant le certificat de votre instance Oracle Cloud Streaming et en ajoutant ce certificat à un fichier JKS, que nous appelons DemoTrust (DemoTrust.jks).

      Remarque : le fichier DemoTrust.jks sera horodaté avec un ALIAS ainsi qu'un mot de passe qui sera utilisé dans votre code Java.

    • Après avoir créé le fichier JKS, vous pouvez le déplacer dans votre structure de serveur WebLogic.

      1. Obtenez le certificat Oracle Cloud Streaming. Pour plus d'informations, reportez-vous à Utilisation de l'adaptateur de service Oracle Cloud Infrastructure Streaming avec Oracle Integration Generation 2.

      2. Générez le fichier JKS.

      3. Installez le fichier JKS dans 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

        Par exemple :

        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

        • Pour générer ou supprimer des fichiers de clés par alias, procédez comme suit :

          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
          
        • Recherchez votre dossier wlserver qui possède généralement le chemin suivant : /wlserver/server/lib. Par exemple : cd /u01/app/oracle/middleware/wlserver/server/lib, cd /User/u01/Oracle/Middleware/Oracle_Home/wlserver/server/lib

        • Remplacez le fichier DemoTrust.jks par celui généré à cette étape.

        • Après avoir copié le fichier DemoTrust.jks, vous devez modifier le répertoire dans lequel vous avez déployé le fichier. Modifiez les fichiers /src/soakafka/KafkaExample.java des deux projets (SOAKafkaProducerprj et SOAKafkaConsumerprj) lors de la création de la classe comme suit :

          change-truststore-soa-1.png

  10. Testez l'application.

    • Une fois l'environnement de test téléchargé, l'instance est disponible à l'adresse suivante : http://localhost:7101/em.

    • Conservez votre nom utilisateur et votre mot de passe.

    • Accédez à votre application sous l'option de menu SOA et l'option Composants déployés.

      soa-test-5.png

    • Indiquez le paramètre de message requis par le service, conformément à l'implémentation. Ce paramètre a été appelé "msg" et le format de message est JSON selon les étapes précédentes.

      test-soa-producer-1a.png

    • Après avoir saisi votre message au format JSON, cliquez sur "Test Web Service" pour exécuter votre service de fournisseur de portlets dans la file d'attente des messages.

      test-soa-producer-2.png

Tâche 3 : création d'une instance SOA Suite sur Oracle Cloud

Vous devez disposer d'une instance active d'Oracle SOA Suite pour que votre application soit déployée. L'instance à utiliser dans ce tutoriel sera l'image disponible sur notre Marketplace et aura une structure SOA Suite desservie par un bastion pour protéger le serveur.

  1. Pour ce faire, créons une instance. Dans la console Oracle Cloud, cliquez sur le menu principal (dans l'angle supérieur gauche de l'écran), les options "Marketplace" et "All Applications" comme suit :

    marché-place.png

  2. Dans l'écran de recherche d'image, tapez "soa suite" pour trouver l'image correcte :

    Marketplace-soa-suite.png

  3. Cliquez sur l'option "Oracle SOA Suite (BYOL)" pour commencer à créer l'instance. Vous verrez certaines options obligatoires à sélectionner. Pour plus d'informations, reportez-vous à Utilisation d'Oracle SOA Suite on Marketplace dans Oracle Cloud Infrastructure.

    • Confirmez la version de SOA Suite : 12.2.1.4 ou supérieure (ce atelier a été développé avec la version 12.2.1.4).

    • Sélectionnez le compartiment dans lequel créer l'instance SOA Suite.

    • Confirmez l'acceptation des conditions générales de l'accord de licence.

    • Cliquez sur Lancer la pile.

      soa-suite-creation.png

  4. Dans le menu principal de la console Oracle Cloud, accédez à Compute et aux instances.

    calcul-select.png

  5. Sélectionnez le compartiment dans lequel vous avez créé l'instance SOA Suite. Lorsque vous la sélectionnez, vous verrez 2 machines virtuelles.

    • Serveur SOA Suite
    • Machine virtuelle qui servira de bastion pour la protection du serveur SOA Suite

    Remarque : le bastion de machine virtuelle dispose d'une adresse IP publique à laquelle il sera possible d'accéder via Internet pour accéder au serveur SOA Suite en ouvrant un tunnel IP, expliqué plus loin.

    instance-soa-suite-compute.png

  6. Pour établir un tunnel entre le serveur Bastion et l'instance SOA Suite, vous pouvez le faire via la commande SSH comme suit :

    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
    
    

    Après avoir établi la connexion via Bastion, vous pouvez accéder à Weblogic Enterprise Manager à l'aide de http://localhost:7002/em.

Tâche 4 : Automatiser le déploiement avec Oracle Visual Builder Studio

Automatisez maintenant le déploiement des implémentations SOA sur le serveur Weblogic créé à l'étape précédente. Pour cela, vous aurez besoin d'une instance d'Oracle Visual Builder Studio. Oracle Visual Builder Studio fonctionne par projets. Vous pouvez donc créer un projet et inclure les utilisateurs qui participeront à son exécution.

Pour plus d'informations sur l'opération, reportez-vous à la section Liens connexes à la fin de ce document et recherchez Déployer avec Visual Builder Studio. Suivez ensuite les étapes pour configurer la création et le déploiement automatisés de vos implémentations SOA Suite sur le serveur Weblogic.

  1. Configurez une machine virtuelle pour BUILD dans ORACLE SOA Suite. Avant de commencer les paramètres, vous devez configurer une machine virtuelle qui répond aux besoins de compilation d'un projet Oracle SOA Suite. Pour cela, vous devez sélectionner les outils à installer dans cette machine virtuelle.

    1. Cliquez sur Organisation dans le menu latéral de gauche, puis sur Modèles de machine virtuelle.

      vbst-create-template.png

    2. Cliquez sur Créer un modèle pour configurer les outils qui seront disponibles pour la création de vos projets SOA Suite. Saisissez ensuite le nom de votre modèle et, si vous le souhaitez, vous pouvez éventuellement décrire ce modèle. N'oubliez pas de sélectionner la plate-forme sur laquelle cette machine virtuelle sera activée. Choisissez l'option Oracle Linux (jusqu'à la date de ce document, nous avions Oracle Linux 7, mais vous pouvez sélectionner une autre option plus récente.

      vbst-create-template-2.png

    3. Sélectionnez tous les composants importants pour la création de vos projets. Choisissez toutes les options comme ci-dessous.

      vbst-config-sw.png

      vbst-config-details.png

      Votre modèle TEMPLATE est créé et votre machine virtuelle sera instanciée dès qu'un projet demande un build.

    4. CONSTRUIRE la configuration d'un projet dans Oracle Visual Builder Studio. Commencez par ouvrir un projet dans Oracle Visual Builder Studio, dans l'exemple ci-dessous, cliquez sur CRISTIANO HOSHIKAWA PROJ.

      constructeur principal-visuel-studio.png

      • La page de votre projet s'affiche, avec un menu latéral gauche avec les options disponibles et à droite vos projets dans le référentiel de code source ainsi que l'équipe qui fait partie de ce projet (utilisateurs de projet).

        générateur visuel-studio-project.png

    5. Cliquez sur l'option BUILD (Bâtiment) dans le menu de gauche pour afficher tous les paramètres existants, puis configurez une nouvelle configuration pour votre projet. Cliquez sur Créer un travail.

      visual-builder-studio-create-job.png

    6. Entrez le nom du travail et sélectionnez également le modèle de machine virtuelle (créé dans la session précédente).

      vbst-create-job-details.png

  2. Configurez la construction de votre projet étape par étape. La première partie de la configuration consiste à établir le référentiel du projet Oracle SOA Suite qui doit être créé précédemment avec le code source. Dans ce document, nous travaillons avec le projet SOAKafkaProducerApp disponible dans le git de ce document. Vous pourrez cloner ce projet dans le cadre de votre instance Oracle Visual Builder Studio.

    1. Après avoir cloné le projet SOAKafkaProducerApp dans Visual Builder Studio, configurez BUILD avec le nom du référentiel Git et sélectionnez l'option "Automatically perform build on SCM commit". Vérifiez également que le nom du branchement correspond à votre projet git.

      vbst-git.png

    2. A présent, sélectionnez l'onglet "Paramètres". Vous devrez créer 3 paramètres avec le menu Combobox "Ajouter des paramètres" sur le côté droit. Ci-dessous, les noms qui doivent être créés et également entre parenthèses, le type :

      • WEBLOGICUSER : l'utilisateur Weblogic (type de chaîne)

      • WEBLOGICPWD : votre mot de passe utilisateur Weblogic (type Secret/Password)

      • WEBLOGICURL : URL de votre instance Weblogic (type de chaîne)

      • Une observation importante est que l'URL de WEBLOGICURL doit être localhost car un tunnel sera établi via le serveur Bastion

        vbst-parameters.png

    3. Cliquez maintenant sur l'onglet "Avant de créer" pour configurer le tunnel SSH du serveur Bastion vers le serveur Weblogic SOA Suite. N'oubliez pas d'avoir votre clé SSH (clé privée) et de remplir le champ correspondant. Renseignez les données de l'assemblage de tunnel.

      • Nom utilisateur : opc

      • Port local: 11002

      • Hôte distant : adresse IP privée de votre instance SOA Suite

      • Port distant: 11002

      • Serveur SSH : adresse IP publique de votre bastion

      • Une observation importante est que le port 11002 a été précédemment configuré de sorte qu'il s'agisse exactement du port d'accès pour le déploiement de vos projets SOA Suite.

        vbst-tunnel.png

    4. Cliquez sur l'onglet "Etapes" pour configurer BUILD (via Maven) et DEPLOYMENT (via ANT) de votre projet SOA Suite. Remplissez comme suit :

      • MAVEN
      • Objectifs : compiler le package

      • Fichier POM : SOAKafkaProducerApp/SOAKafkaConsumerPrj/SOA/SCA-INF/pom.xml. Il s'agit du fichier pom.xml Maven permettant d'assembler votre package de projet.

      • ANT

        • Cibles : déploiement sca-package

        • Fichier de build : SOAKafkaProducerApp/SOAKafkaConsumerPrj/build.xml. Il s'agit du fichier Ant build.xml permettant de déployer votre application après la création.

      • Propriétés

        • WEBLOGICUSER=${WEBLOGICUSER}

        • WEBLOGICPWD=${WEBLOGICPWD}

        • WEBLOGICURL=${WEBLOGICURL}

      Remarque importante:

      • L'application SOAKafkaProducerApp comporte 2 projets : SOAKafkaProducerPrj et SOAKafkaConsumerPrj.

      • Nous illustrons la configuration d'un des projets. Les mêmes étapes doivent être effectuées pour l'autre projet.

      vbst-config-step.png

    5. Terminons maintenant la configuration BUILD. Sélectionnez l'onglet "After Build". Cette étape est facultative, mais vous pouvez générer l'artefact créé à l'étape précédente lors de l'exécution de Maven. Pour cela, configurez cette étape de sorte que l'artefact soit généré pour un téléchargement ultérieur.

      vbst-after-build.png

  3. Exécutez BUILD dans Oracle Visual Builder Studio. Une fois configuré, chaque fois qu'une validation est effectuée dans votre référentiel de code (git Visual Builder Studio), BUILD démarre automatiquement. Vous pouvez également exécuter le BUILD manuellement, pour cela, il vous suffit de cliquer sur l'option BUILD. Essayez d'exécuter BUILD et vous pourrez consulter les journaux générés.

    vbst-log-1.png

    vbst-logs-3.png

    vbst-logs-2.png

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation produit, consultez Oracle Help Center.