ノート:

Oracle Visual Builder StudioでのOracle SOA Suiteのデプロイ

イントロダクション

Oracle Visual Builder Studioは、次のような様々なテクノロジでDevOpsプロセスを自動化するための公式のOracleツールです。

このチュートリアルでは、Oracle SOA Suiteで次の機能を実装する方法の例を示します。

重要なノート: 現在、Oracle Visual Builder Studioを介してOracle SOA SuiteでCI/CDを実装することのみが可能です。これは、必要なパッケージを処理およびコンパイル(BUILD)するためのプラグインが仮想マシンにすでにプリインストールされているのはVisual Builder Studioのみであるためです。そのため、Jenkinsなどの他の市場ツールを使用してCI/CDを実装することはまだできません。

目的

Oracle Visual Builder StudioでDevOpsプロセスを介して自動的にデプロイできるプロジェクトをSOA Suiteに実装します。

前提条件

次の知識:

タスク1: Oracle Streamingインスタンスの作成

Oracle Cloud Streamingは、オープンソースのKafkaツールと同様に、メッセージ・キューとして機能することを目的としたアプリケーションです。Oracle Streamingはマネージド・ソリューションです。使用するインスタンスを作成すれば、インフラ・ガバナンスを気にする必要はありません。使用量に対してのみ支払う。このツールでは、KafkaのREST APIを使用することもでき、これは「cloud as a service」のメリットとともに、既存のKafkaプロジェクトと互換性があります。

このチュートリアルでは、SOAサービス実装を実行して生成し、別のサービスでメッセージ・キューのデータを消費します。そのため、最初の停止はOracle Streaming環境のプロビジョニングです。

タスク2: JDeveloperでのSOA Suiteプロジェクトの作成

Kafkaを置き換えるために、Oracle Cloud Streamingのインスタンスを作成します。次の目的を持つプロジェクトを作成します。

このチュートリアルには、プロジェクト全体が含まれています。設定を変更して、コンパイル、パッケージ化およびSOA Suiteインスタンスにデプロイできます。

ノート: このチュートリアルには、RESTサービスを実装するための詳細なステップは含まれていません。詳細は、Oracle SOA SuiteでのRESTサービスの実装および使用方法を参照してください。

  1. 次のリンクを使用してSOAKafkaProducerAppプロジェクトをダウンロードします: SOAKafkaProducerApp.zip

    • /SOAKafkaProducerApp/SOAKafkaProducerApp/SOAKafkaProducerApp.jwsアプリケーション・ファイルを検索します。

    • JDeveloper (SOAKafkaProducerPrjおよびSOAKafkaConsumerPrj)でプロジェクトを表示できます

  2. アプリケーション・ツリーをクリックしてSOAKakfaConsumerPrjを探し、次の図に示すようにKafkaConsumerをダブルクリックします。

    jdev-soa-1.png

    • これは、Kafkaキューの消費に関するSOAプロジェクトのビジョンです。これは、SOAコンポジット・タイプの一般的な実装です。これはRESTサービス(「公開サービス」レーンに配置されたコンポーネント)であり、SOAサーバーにデプロイする必要があります。サービスにリンクされているコンポーネントは、サービス自体の実装であり、前のイメージに示すように「コンポーネント」スイムレーンに配置されています。KafkaConsumerコンポーネントをダブルクリックすると、次に示すようにサービスの実装に移動します:

      jdev-bpel-1.png

    • 最初の実装ステージは、RESTコールの一般的な初期作業パラメータを受信するReceiveというコンポーネントから始まります。このチュートリアルではパラメータを渡しませんが、このリソースが必要なサービスについてはここに示されています。

      jdeve-receive-1.png

      jdev-receive-detail.png

      jdev-bpel-code.png

    • Java Embeddedコンポーネントは、後でコメントしたKafaExampleというクラスをコールするJavaルーチンをコールします。

      jdev-embedded-code-1.png

    • このJava埋込みでコールされるJavaコードは、KafkaまたはOracle Streamキューの生産および消費ルーチンを担当します(Oracle StreamingのAPIは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. Mavenを使用してコードにJavaパッケージを含めます。

    • このプロジェクトでは、KafkaまたはOracle Cloud Streaming APIを呼び出すJavaコードを注入します。これはJavaコードであるため、フレームワークを使用するためにパッケージ包含が必要になることがよくあります。Mavenは、このような場合に最も使用されるツールであるため、プロジェクトに含める必要があります。次のイメージに示すように、マウスの右ボタンを使用してプロジェクト上のオプションを開き、「ギャラリから」を選択します。

      soa-create-pom-file.png

    • 「Maven POM for Project」オプションを選択します。

      soa-maven - select.png

    これで、必要なフレームワークでパッケージを構成できます。

  4. Mavenでビルドします。

    • 「アプリケーションWindows」オプションをクリックし、「ディレクトリ・ビュー」をクリックして/SOA/SCA-INF/pom.xmlファイルにアクセスします。

      View-maven-pom-xml-file.png

      File-pom-xml-file2.png

    • pom.xmlファイルをダブルクリックしてJDeveloperエディタで開き、「ソース」タブを選択してコードを表示します。

    • これにより、pom.xmlファイルのコードを視覚化できるようになります。

      pom-xml-original.png

    • 次に、DevOpsプロセスに対する重要な変更を示します。自動化のためにこれらの行を含める必要があります

      ノート: このチュートリアルのプロジェクトはすでにDevOps自動化をサポートするように構成されていますが、新しいプロジェクトの場合は、この手順に従ってDevOpsプロセスを自動化します。タグとタグの間に、このコードを含めることができます。これは、後で**Ant**を使用してデプロイするためのソフトウェア・パッケージのアセンブルを担当します。

      DevOps自動化の場合、次の3行を含める必要があります。

      <directory>target</directory>

      <outputDirectory>classes</outputDirectory>

      <sourceDirectory>src</sourceDirectory>

      devops-pom-xml.png

      そのため、完全なコードは次のようになります。

      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. Antを使用して構築およびデプロイします。

    • Antは、Jakartaプロジェクトによって開発された市場でよく知られているツールで、Javaなどのプロジェクトのコンパイル、パッケージ・ビルドおよびアプリケーション・デプロイメントの自動化を担当します。DevOpsプロセスでは、Antは、SOA Suiteパッケージを構築し、このパッケージをリモートのWeblogic SOA Suiteサーバーにデプロイするための基礎となります。

    • build.xmlファイルを作成するには、マウスの右ボタンを使用してプロジェクト上にオプションを開き、次のイメージに示すように「ギャラリから」を選択します。

      soa-create-pom-file.png

    • 左側のメニューで「Ant」オプションを選択し、「プロジェクトからのビルドファイル」をクリックします。

      soa-create-ant.png

    • build.xmlファイルは、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>
      
      
    • build.propertiesファイルは、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. SOA Suite環境をテスト用に初期化します。まず、SOA Suite環境のファイアウォール・ポートを開きます。リリースされるポートは9092で、Oracle StreamingまたはKafkaポートを表します。

  7. JDeveloperの埋込みSOAサーバーを有効にします。

    • JDeveloperには、開発およびテスト用の統合SOA Suiteサーバーがあります。SOAサービスの開発に必要な機能がほとんどすべて備わっているサーバーです。このサーバーを使用するには、サーバーを作成してアクティブ化する必要があります。

    • サーバーをアクティブ化するには、まずアプリケーション・サーバーを表示する必要があります。この場合は、「ウィンドウ」オプションに移動し、次のイメージに示すように「アプリケーション・サーバー」を選択します。

      jdeveloper-select-app-server.png

    • アプリケーション・サーバーのウィンドウが画面の左側に表示されます。ウィンドウにintegratedWeblogicServerがすでに作成されていることを確認します。そうでない場合は、作成してからアクティブ化して使用する必要があります。

    • 「実行」オプションに移動し、次のイメージに示すように「サーバー・インスタンスの起動」を選択します。

      jdev-start-app-server.gif

    • WebLogicインスタンスの作成に必要なデータを入力します。後でテストに必要になるため、値を書き留めます。

      jdev-create-app-server.gif

    • サーバーを作成したか、すでに使用可能になっている場合は、次のイメージに示すようにサーバーを右クリックしてアクティブ化します。

      jdeveloper-start-app-server.png

  8. SOA Suiteで手動デプロイメントを実行します。

    • まず、Kafkaコンシューマ・サービス(SOAKafkaConsumerPrj)のデプロイメントを手動で実行します。これを行うには、次のイメージに示すように、「アプリケーション」タブを見つけて、マウスの右ボタンでメニュー・オプションを開きます。

      soa-deploy-1.png

    • 「デプロイ」オプションを選択し、新しいデプロイメント・プロファイルを作成します。構成画面が表示され、ファイルの生成時にプロファイルのタイプをSOA-SARファイルとして選択する必要があります。

      soa-deploy-2.png

    • これは、次のステップでパッケージをデプロイできる準備です。次の画面で、指定されたオプションを保持し、「OK」をクリックします。

      soa-deploy-3.png

    • 「デプロイ」メニュー・オプションを再度開きます。デプロイメント・オプションが作成され、すぐに使用できます。選択します。

      soa-deploy-4.png

    • 次に、SOAサーバーに直接デプロイするオプションを選択します。次に、次に示すようにオプションを選択します。

      soa-deploy-5.png

    • すべてのオプションを指定したままにし、「同じリビジョンIDを持つ既存のコンポジットを上書きします」を選択します。このオプションの選択を解除し、最初の実行後に連続したデプロイメントを実行しようとすると、エラー・メッセージで中断されます。

      soa-deploy-6.png

    • 次に、IntegratedWeblogicServerオプションを選択します。このオプションは、前の項で説明したJDeveloperの埋込みサーバーを表します(JDeveloperの埋込みSOAサーバーを有効にする方法)。

    • JDeveloper Weblogicサーバーが正常に作成され、起動された場合、次のオプションと、すべてが正常であることを確認する「実行中」ステータスが表示されます。このオプションが表示されない場合は、サーバーがまだ作成されていないか、サーバーを起動していない可能性があります。前のステップを確認します。

      soa-deploy-9.png

    • サマリー画面まで「Next」を確認して、「Finish」をクリックします。

    • 下部中央のウィンドウで、アプリケーションのデプロイメントに従います。成功メッセージとして「デプロイが終了しました」が表示されるまで待ちます。

      soa-deploy-11.png

  9. WeblogicにJKS証明書をインストールします。

    • SSL環境では、WebLogic環境に適したJKS証明書を介して実行されるキー(公開/秘密)を使用してセキュリティを作成する必要があります。キー生成プロセスは、Oracle Cloud Streamingインスタンスの証明書を取得し、この証明書をJKSファイルに追加することで行います。このファイルはDemoTrust (DemoTrust.JKS)をコールします。

      ノート: DemoTrust.jksファイルには、ALIASおよびJavaコードで使用されるパスワードがスタンプされます。

    • JKSファイルを作成した後、このファイルをWebLogicサーバー構造に移動できます。

      1. Oracle Cloudストリーミング証明書を取得します。詳細は、Oracle Cloud Infrastructure Streaming ServiceアダプタとOracle Integration Generation 2の使用を参照してください。

      2. JKSファイルを生成します。

      3. WeblogicにJKSファイルをインストールします。

        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

        たとえば:

        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

        • 別名でキーストアを生成または削除する場合は、次のステップに従います。

          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
          
        • 通常、次のパスを持つwlserverフォルダを見つけます: /wlserver/server/lib。例: cd /u01/app/oracle/middleware/wlserver/server/libcd /User/u01/Oracle/Middleware/Oracle_Home/wlserver/server/lib

        • DemoTrust.jksファイルを、このステップで生成されたファイルに置き換えます。

        • DemoTrust.jksファイルをコピーした後、ファイルをデプロイしたディレクトリを変更する必要があります。両方のプロジェクトの/src/soakafka/KafkaExample.javaファイル(SOAKafkaProducerprjおよびSOAKafkaConsumerprj)を次のように変更します。

          change-truststore-soa-1.png

  10. アプリケーションをテストします。

    • テスト環境をアップロードすると、http://localhost:7101/em.でインスタンスを利用できるようになります

    • ユーザー名とパスワードを記憶します。

    • 「SOA」メニュー項目および「デプロイ済コンポーネント」オプションの下のアプリケーションに移動します。

      soa-test-5.png

    • 実装に従って、サービスに必要なメッセージ・パラメータを入力します。このパラメータはmsgと呼ばれ、前のステップに従ってメッセージ形式はJSONです。

      soa-test-producer-1a.png

    • JSON形式でメッセージを入力したら、「Webサービスのテスト」をクリックして、メッセージ・キューでプロデューサ・サービスを実行します。

      soa-test-producer-2.png

タスク3: Oracle CloudでのSOA Suiteインスタンスの作成

アプリケーションをデプロイするには、Oracle SOA Suiteのアクティブなインスタンスが必要です。このチュートリアルで使用するインスタンスは、Marketplaceで使用可能なイメージであり、サーバーを保護するために要塞で提供されるSOA Suite構造になります。

  1. そのため、インスタンスを作成します。Oracle Cloudコンソールで、メイン・メニュー(画面の左上隅)をクリックし、次に示すように「マーケットプレイス」および「すべてのアプリケーション」を選択します。

    マーケット-place.png

  2. イメージ検索画面で「soa suite」と入力し、正しいイメージを見つけます。

    Marketplace-soa-suite.png

  3. 「Oracle SOA Suite (BYOL)」オプションをクリックして、インスタンスの作成を開始します。選択する必須オプションが表示されます。詳細は、Oracle Cloud InfrastructureでのOracle SOA Suite on Marketplaceの使用を参照してください。

    • SOA Suiteバージョン(12.2.1.4以上)を確認します(このワークショップはバージョン12.2.1.4で開発されました)。

    • SOA Suiteインスタンスを作成するコンパートメントを選択します。

    • ライセンス契約の条件に同意することを確認します。

    • 「スタックの起動」をクリックします。

      soa-suite-creation.png

  4. Oracle Cloudコンソールのメイン・メニューから、「Compute and Instances」に移動します。

    計算-select.png

  5. SOA Suiteインスタンスを作成したコンパートメントを選択すると、2つの仮想マシンが表示されます。

    • SOA Suiteサーバー
    • SOA Suiteサーバーを保護するための要塞として機能するVM

    ノート: VM要塞にはパブリックIPがあり、後で説明したIPトンネルを開くことでインターネット経由でSOA Suiteサーバーにアクセスできます。

    instance-soa-suite-compute.png

  6. Bastion ServerとSOA Suiteインスタンスの間にトンネルを確立するには、次のようにSSHコマンドを使用します。

    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
    
    

    要塞経由で接続を確立した後、http://localhost:7002/em.を使用してWeblogic Enterprise Managerにアクセスできます

タスク4: Oracle Visual Builder Studioを使用したデプロイメントの自動化

ここでは、前のステップで作成したWeblogicサーバーへのSOA実装のデプロイメントを自動化します。そのためには、Oracle Visual Builder Studioのインスタンスが必要です。Oracle Visual Builder Studioはプロジェクトごとに機能するため、プロジェクトを作成し、その実行に参加するユーザーを含めることができます。

操作の詳細は、このドキュメントの最後にある「関連リンク」の項で、Visual Builder Studioでデプロイを検索します。次に、ステップに従って、SOA Suite実装のWeblogicサーバーへの自動ビルドおよびデプロイメントを構成します。

  1. ORACLE SOA SuiteでBUILD用の仮想マシンを構成します。設定を開始する前に、Oracle SOA Suiteプロジェクトのコンパイルのニーズを満たす仮想マシンを構成する必要があります。このため、このVMにインストールする正しいツールを選択する必要があります。

    1. 左側のメニューの「組織」をクリックし、「仮想マシン・テンプレート」をクリックします。

      vbst-create-template.png

    2. 「テンプレートの作成」をクリックして、SOA Suiteプロジェクトのビルドに使用できるツールを構成します。次に、テンプレートの名前を入力し、必要に応じて、このテンプレートについて記述できます。このVMを使用するプラットフォームを忘れずに選択してください。「Oracle Linux」オプションを選択します(このドキュメントの日付までOracle Linux 7でしたが、より新しいオプションを選択することもできます)。

      vbst-create-template-2.png

    3. プロジェクトをビルドするための重要なコンポーネントをすべて選択します。次のようにすべてのオプションを選択します。

      vbst-config-sw.png

      vbst-config-details.png

      TEMPLATEが作成され、プロジェクトでビルドが要求されるとすぐにVMがインスタンス化されます。

    4. Oracle Visual Builder Studioでのプロジェクトのビルド構成。最初に、Oracle Visual Builder Studio内のプロジェクトを開き、次の例でCRISTIANO HOSHIKAWA PROJをクリックします。

      main-visual-builder-studio.png

      • プロジェクト・ページが左側のメニューとともに、使用可能なオプションと、ソース・コード・リポジトリ内のプロジェクトの右側、およびこのプロジェクトの一部であるチーム(プロジェクト・ユーザー)に表示されます。

        ビジュアル・ビルダー・スタジオ- project.png

    5. 左側のメニューの「構築」オプションをクリックしてすべての既存の設定を表示し、プロジェクトの新規ビルドを構成します。「ジョブの作成」をクリックします。

      ビジュアル・ビルダー- スタジオ- 作成-job.png

    6. ジョブの名前を入力し、前のセッションで作成したVMテンプレートも選択します。

      vbst-create-job-details.png

  2. 次に、プロジェクトのビルドを段階的に構成します。構成の最初の部分は、ソース・コードを使用して事前に作成する必要があるOracle SOA Suiteプロジェクトのリポジトリを確立することです。このドキュメントでは、このドキュメントのGitで使用可能なSOAKafkaProducerAppプロジェクトを操作しています。このプロジェクトをOracle Visual Builder StudioインスタンスのGitにクローニングできます。

    1. SOAKafkaProducerAppプロジェクトをVisual Builder Studioにクローニングした後、Gitリポジトリの名前を使用してBUILDを構成し、「SCMコミットでビルドを自動的に実行」オプションを選択します。また、ブランチ名がgitプロジェクトと一致していることも確認します。

      vbst-git.png

    2. 「パラメータ」タブを選択します。右側に「Combobox」メニューの「パラメータの追加」を使用して、3つのパラメータを作成する必要があります。下には、作成する必要がある名前とカッコ内にも、次のタイプがあります。

      • WEBLOGICUSER: Weblogicユーザー(文字列型)

      • WEBLOGICPWD: Weblogicユーザー・パスワード(シークレット/パスワード・タイプ)

      • WEBLOGICURL: WeblogicインスタンスのURL (文字列型)

      • 重要な点は、WEBLOGICURLのURLは、トンネルが要塞サーバーを介して確立されるため、localhostである必要があります

        vbst-parameters.png

    3. 次に、「ビルド前」タブをクリックして、要塞サーバーからWeblogic SOA Suite ServerへのSSHトンネルを構成します。SSHキー(秘密キー)を忘れずに、対応するフィールドに入力してください。トンネルアセンブリのデータを入力します。

      • ユーザー名: opc

      • ローカル・ポート: 11002

      • リモート・ホスト: SOA SuiteインスタンスのプライベートIP

      • リモート・ポート: 11002

      • SSHサーバー: 要塞のパブリックIP

      • 重要な点は、ポート11002がSOA Suiteプロジェクトをデプロイするためのアクセス・ポートになるように事前に構成されていたことです。

        vbst-tunnel.png

    4. 「ステップ」タブをクリックして、SOA SuiteプロジェクトのBUILD (Maven経由)およびDEPLOYMENT (ANT経由)を構成します。次のように入力します。

      • マヴェン
      • 目標: パッケージのコンパイル

      • POMファイル: SOAKafkaProducerApp/SOAKafkaConsumerPrj/SOA/SCA-INF/POM.xml。これは、プロジェクト・パッケージを組み立てるためのMaven pom.xmlファイルです

      • ANT

        • ターゲット: sca-package deploy

        • ビルド・ファイル: SOAKafkaProducerApp/SOAKafkaConsumerPrj/build.xml。これは、ビルド後にアプリケーションをデプロイするためのAnt build.xmlファイルです。

      • プロパティ

        • WEBLOGICUSER=${WEBLOGICUSER}

        • WEBLOGICPWD=${WEBLOGICPWD}

        • WEBLOGICURL=${WEBLOGICURL}

      重要なノート:

      • SOAKafkaProducerAppアプリケーションには、SOAKafkaProducerPrjおよびSOAKafkaConsumerPrjの2つのプロジェクトがあります。

      • ここでは、いずれかのプロジェクトの構成について説明します。他のプロジェクトについても同じステップを実行する必要があります。

      vbst-config-step.png

    5. 次に、BUILD構成を終了します。「作成後」タブを選択します。このステップはオプションですが、Mavenの実行時に前のステップで作成したアーティファクトを生成できます。この場合は、後でダウンロードするためにアーティファクトが生成されるようにこのステップを構成します。

      vbst-after-build.png

  3. Oracle Visual Builder StudioでBUILDを実行します。構成すると、コード・リポジトリにコミットがあるたびに(Visual Builder Studio git)、BUILDが自動的に起動します。BUILDは手動で実行することもできます。この場合は、「BUILD」オプションをクリックするだけで済みます。BUILDを実行してみると、生成されたログを確認できます。

    vbst-log-1.png

    vbst-logs-3.png

    vbst-logs-2.png

謝辞

その他の学習リソース

docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。