注:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于云环境的那些值。
在 Oracle Visual Builder Studio 中部署 Oracle SOA Suite
简介
Oracle Visual Builder Studio is the official Oracle tool for automating DevOps processes with different technologies like:
- Kubernetes/Docker
- 函数
- 应用服务器,例如 Oracle Weblogic、IIS、JBoss、Tomcat
- Oracle Forms
- Oracle SOA Suite
- Oracle Integration (OIC)
本教程举例说明如何在 Oracle SOA Suite 中实施以下功能。
- 公开 REST 服务
- 通过与 Kafka 兼容的 REST API 处理 Kafka(或 Oracle Cloud 流处理)主题
- 实施嵌入式 Java 调用
- 自动将 SOA Suite 程序包部署到 SOA 服务器
重要说明:当前,只能通过 Oracle Visual Builder Studio 使用 Oracle SOA Suite 实施 CI/CD。这是因为只有 Visual Builder Studio 才具有已预安装在虚拟机中的插件来处理和编译 (BUILD) 所需的软件包。因此,目前还无法使用 Jenkins 等其他市场工具实施 CI/CD。
目标
在 SOA Suite 中实施项目,可以通过 Oracle Visual Builder Studio 的 DevOps 流程自动部署该项目。
先决条件
了解以下内容:
- SOA Suite 概念和组件
- Kafka 的概念和使用
- 基于 JDeveloper IDE 的开发
任务 1:创建 Oracle 流处理实例
Oracle Cloud Streaming 是一个应用程序,旨在像开源 Kafka 工具一样充当消息队列。Oracle 流处理是一个托管解决方案,这意味着您可以创建一个实例供使用,而不必担心基础设施治理问题。仅为您使用的容量付费。该工具还允许您使用 Kafka 的 REST API,使其与现有 Kafka 项目兼容,具有“云即服务”的优势。
在本教程中,我们将执行 SOA 服务实施来生成,而另一个服务用于使用消息队列中的数据。因此,我们的第一站将预配 Oracle 流处理环境。
-
创建流处理的用户组并启用此组中的用户。完成此操作后,我们可以通过策略确定对此组的访问。请参阅以下示例,了解如何确定使用 Oracle Cloud Streaming 的访问权限。
-
创建 Oracle Cloud 流处理实例。在主菜单中,选择分析和 AI 、流处理,如下图中所示。
-
完成此操作后,您将看到包含 Oracle Cloud Streaming 实例的控制台。要创建实例,请选择区间并单击创建流。
-
提供实例数据,例如名称和区间。此外,请求创建新的流池并提供池的名称。单击创建。
-
等待流创建完成。流按下图中所示创建。
-
通过单击 Kafka 连接配置链接从与 Kafka 兼容的 REST API 获取设置,如下图中所示。
-
通过选择区间并单击创建 Kafka 连接配置选项来创建配置。
-
输入您的配置的区间和名称,如下图中所示。通过单击创建 Kafka 连接配置来创建配置。
-
获取配置参数以连接到 Oracle Cloud Stream。从左侧的链接转至流选项。
-
单击之前创建的池。
-
单击 Kafka Connection Settings 。
-
复制要在 Java 代码中使用的参数。
任务 2:在 JDeveloper 中创建 SOA Suite 项目
我们将创建 Oracle Cloud 流处理实例以替换 Kafka。创建具有以下目标的项目:
- 生成和使用像 Kafka 这样的流处理队列的项目
- 用于测试两个服务的 REST 服务
本教程包含完整项目。您可以更改设置以编译、打包并部署到 SOA Suite 实例。
注:本教程不包括实施 REST 服务的详细步骤。有关详细信息,请参阅如何通过 Oracle SOA Suite 实施和使用 REST 服务。
-
使用此链接下载 SOAKafkaProducerApp 项目:SOAKafkaProducerApp.zip 。
-
查找
/SOAKafkaProducerApp/SOAKafkaProducerApp/SOAKafkaProducerApp.jws
应用程序文件。 -
您可以在 JDeveloper 中查看项目:
SOAKafkaProducerPrj
和SOAKafkaConsumerPrj
-
-
单击应用程序树并查找 SOAKakfaConsumerPrj ,然后双击
KafkaConsumer
,如下图所示。-
这是 SOA 项目对 Kafka 队列使用量的愿景。这是 SOA 组合类型的典型实施。这是 REST 服务(在公开服务通道中列出的组件),必须部署在 SOA 服务器上。链接到服务的组件是服务本身的实现,并按照上一个映像中所示排列在组件泳道中。通过双击
KafkaConsumer
组件,您将转到服务的实施,如下所示: -
第一个实施阶段从名为“接收”的组件开始,该组件负责接收初始工作参数(通常是 REST 调用)。在本教程中,我们将不传递参数,但此处针对需要此资源的服务进行了说明。
-
Java 嵌入式组件负责调用 Java 例程,在本例中,该例程稍后将调用名为
KafaExample
的类。 -
此 Java 嵌入中调用的 Java 代码负责 Kafka 或 Oracle 流队列的生产和使用例程(请记住,适用于 Oracle 流处理的 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(); } }
-
-
使用 Maven 将 Java 程序包包含在代码中。
-
在此项目中,我们注入 Java 代码来调用 Kafka 或 Oracle Cloud 流处理 API。由于是 Java 代码,因此通常需要包含程序包才能使用框架。在这些情况下,Maven 是最常用的工具,为此,您必须将其包含在项目中。使用鼠标右键,打开项目上的选项,然后选择从图库,如下图所示。
-
选择 Maven POM for Project 选项。
现在,您可以使用必要的框架配置软件包。
-
-
使用 Maven 进行构建。
-
单击 "Application Windows"(应用程序 Windows)选项,然后单击 "Directory View"(目录视图)以访问 /SOA/SCA-INF/pom.xml 文件。
-
双击 pom.xml 文件以在 JDeveloper 编辑器中将其打开,然后选择源选项卡以查看代码。
-
这样,您将能够可视化 pom.xml 文件的代码。
-
下面是对 DevOps 进程的重要更改。您必须包括这些用于自动化的行。
注:本教程中的项目已配置为支持 DevOps 自动化,但对于新项目,请按照以下过程自动执行 DevOps 进程。在
标记和 标记之间,可以包含此代码,这将负责将软件包汇编为以后使用 **Ant** 进行部署。 对于 DevOps 自动化,需要包括以下 3 行。
<directory>target</directory>
<outputDirectory>classes</outputDirectory>
<sourceDirectory>src</sourceDirectory>
因此,完整的代码如下所示:
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>
-
-
使用 Ant 进行构建和部署。
-
Ant 是市场中的知名工具,由 Jakarta 项目开发,负责为 Java 等项目自动执行编译、程序包构建和应用程序部署。在 DevOps 过程中, Ant 对于构建 SOA Suite 软件包以及在远程 Weblogic SOA Suite 服务器上部署此软件包至关重要。
-
要创建 build.xml 文件,请使用鼠标右键打开项目上的选项,然后选择从图库,如下图所示。
-
在左侧菜单上选择未选项,然后单击从项目构建文件。
-
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}
-
-
初始化要测试的 SOA Suite 环境。首先打开 SOA Suite 环境的防火墙端口。要发布的端口为 9092,表示 Oracle 流处理或 Kafka 端口。
-
在 JDeveloper 中启用嵌入式 SOA 服务器。
-
JDeveloper 具有用于开发和测试的集成 SOA Suite 服务器。它是一个服务器,具有开发 SOA 服务所需的几乎所有功能。要使用此服务器,必须创建并激活它。
-
要激活服务器,首先需要查看应用程序服务器。为此,请转至“窗口”选项,然后选择应用程序服务器,如下图所示。
-
应用程序服务器窗口将显示在屏幕的左侧。确保已在窗口中创建
integratedWeblogicServer
。否则,您需要创建它,然后激活它以供使用。 -
转到运行选项并选择启动服务器实例,如下图中所示。
-
输入必需的数据以创建 Weblogic 实例。写下这些值,因为以后需要它们进行测试。
-
如果您创建了服务器或者服务器已可用,请右键单击服务器并激活它,如下图中所示。
-
-
在 SOA Suite 中运行手动部署。
-
首先,让我们手动部署 Kafka 使用者服务 (
SOAKafkaConsumerPrj
)。为此,请定位应用程序选项卡,然后使用鼠标右键打开菜单选项,如下图所示。 -
选择部署选项,然后创建新的部署概要文件。您将看到一个配置屏幕,并且必须在生成文件时选择配置文件类型作为 SOA-SAR 文件。
-
为我们做好准备,以便在下一步中部署程序包。在下一个屏幕上,保留给定的选项并单击确定。
-
再次打开部署菜单选项。部署选项已创建并可供使用。选中它。
-
现在,让我们选择直接部署到 SOA 服务器的选项。然后选择如下所示的选项。
-
保留提供的所有选项,然后选择覆盖具有相同修订 ID 的任何现有组合。如果取消选中此选项,并且在首次运行后尝试执行连续部署,则会中断并显示错误消息。
-
然后选择 IntegratedWeblogicServer 选项。此选项表示上一节中介绍的 JDeveloper 的嵌入式服务器(如何在 JDeveloper 中启用嵌入式 SOA 服务器)。
-
如果 JDeveloper Weblogic 服务器已成功创建并启动,您将会看到下面的选项和 "RUNNING" 状态,确认所有内容都正常。如果未看到此选项,您可能尚未创建服务器或尚未启动服务器。查看以前的步骤。
-
使用下一步确认,直到摘要屏幕并单击完成。
-
在底部中心窗口中,您可以按照应用程序的部署操作进行操作。等待您将部署完成视为成功消息。
-
-
在 Weblogic 中安装 JKS 证书。
-
在 SSL 环境中,必须通过密钥(公共/专用)创建安全性,这些密钥将通过适合 WebLogic 环境的 JKS 证书来完成。密钥生成过程通过获取 Oracle Cloud 流处理实例的证书并将此证书添加到 JKS 文件来完成,我们称之为 DemoTrust (
DemoTrust.jks
)。注:DemoTrust.jks 文件将使用 ALIAS 以及将在 Java 代码中使用的口令进行标记。
-
创建 JKS 文件后,可以将此文件移动到 WebLogic 服务器结构中。
-
获取 Oracle Cloud 流处理证书。有关详细信息,请参阅将 Oracle Cloud Infrastructure Streaming Service Adapter 与 Oracle Integration 第 2 代结合使用。
-
生成 JKS 文件。
-
在 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/lib
、cd /User/u01/Oracle/Middleware/Oracle_Home/wlserver/server/lib
-
将
DemoTrust.jks
文件替换为此步骤中生成的文件。 -
复制
DemoTrust.jks
文件后,必须更改部署文件的目录。创建类时,请更改这两个项目的 /src/soakafka/KafkaExample.java 文件(SOAKafkaProducerprj
和SOAKafkaConsumerprj
),如下所示:
-
-
-
-
测试应用程序。
-
上载测试环境后,您的实例将位于:http://localhost:7101/em.
-
记住您的用户名和密码。
-
在 SOA 菜单项和部署的组件选项下转至您的应用程序。
-
根据实施情况填写服务所需的消息参数。此参数称为“msg”,根据前面的步骤,消息格式为 JSON。
-
以 JSON 格式输入消息后,单击“测试 Web 服务”以在消息队列上运行生成器服务。
-
任务 3:在 Oracle Cloud 上创建 SOA Suite 实例
要部署应用程序,必须具有 Oracle SOA Suite 的活动实例。要在此教程中使用的实例将是市场上提供的映像,并且将具有堡垒为 SOA Suite 结构来保护服务器。
-
为此,我们来创建一个实例。在 Oracle Cloud 控制台中,单击主菜单(在屏幕的左上角)、选项“Marketplace”和“所有应用程序”,如下所示:
-
在图像搜索屏幕中,键入“soa suite”以查找正确的图像:
-
单击“Oracle SOA Suite (BYOL)”选项可开始创建实例。您将看到一些要选择的必需选项。有关详细信息,请参阅在 Oracle Cloud Infrastructure 中使用 Oracle SOA Suite on Marketplace 。
-
确认 SOA Suite 版本:12.2.1.4 或更高版本(此研讨会是使用版本 12.2.1.4 开发的)。
-
选择要在其中创建 SOA Suite 实例的区间。
-
确认接受许可协议的条款和条件。
-
单击启动堆栈。
-
-
从 Oracle Cloud 控制台主菜单中,转至“计算和实例”。
-
选择在其中创建 SOA Suite 实例的区间,选择该区间时,您将看到 2 个虚拟机。
- SOA Suite 服务器
- 将充当保护 SOA Suite 服务器的堡垒的 VM
注:VM 堡垒将有一个公共 IP,通过打开 IP 隧道(稍后介绍)可以通过 Internet 访问 SOA Suite 服务器。
-
要在堡垒服务器与 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 自动执行部署
现在,让我们自动将 SOA 实施部署到上一步中创建的 Weblogic 服务器。为此,您需要一个 Oracle Visual Builder Studio 实例。Oracle Visual Builder Studio 按项目工作,因此您可以创建项目并包括将参与其执行的用户。
您可以在本文档结尾的“相关链接”部分中找到有关该操作的更多信息,请使用 Visual Builder Studio 搜索部署。接下来,按照步骤配置 SOA Suite 实施的自动构建和部署到 Weblogic 服务器。
-
在 ORACLE SOA Suite 中为 BUILD 配置虚拟机。在开始设置之前,您需要配置满足编译 Oracle SOA Suite 项目需求的虚拟机,为此,您需要选择要安装在此 VM 中的正确工具。
-
单击左侧菜单上的 Organization(组织),然后单击 Virtual Machine Templates(虚拟机模板)。
-
单击创建模板可配置哪些工具可用于构建 SOA Suite 项目。然后键入模板的名称,如果需要,可以根据需要描述此模板。不要忘记选择此 VM 将启用哪个平台。选择 Oracle Linux 选项(在此文档的日期之前,我们有 Oracle Linux 7 ,但您可以选择另一个较新的选项。
-
选择用于构建项目的所有重要组件。按如下所示选择所有选项。
您的 TEMPLATE 已创建,一旦项目要求构建,您的 VM 将立即实例化。
-
Oracle Visual Builder Studio 中项目的构建配置。首先,在 Oracle Visual Builder Studio 中打开项目,在下面的示例中,单击 CRISTIANO HOSHIKAWA PROJ 。
-
您将看到您的项目页面以及带有可用选项的左侧菜单,并在源代码存储库和属于此项目(项目用户)的团队的右侧看到您的项目。
-
-
单击左侧菜单上的“BUILD(构建)”选项可查看所有现有设置,然后让我们为您的项目配置一个新的“BUILD(构建)”。单击创建作业。
-
输入作业的名称并同时选择 VM 模板(在上一个会话中创建)。
-
-
现在,让我们逐步配置项目构建。配置的第一部分是建立以前必须使用源代码创建的 Oracle SOA Suite 项目的资料档案库。在本文档中,我们正在处理本文档的 git 中提供的 SOAKafkaProducerApp 项目。您将能够将此项目克隆到 Oracle Visual Builder Studio 实例的 git 中。
-
将
SOAKafkaProducerApp
项目克隆到 Visual Builder Studio 后,使用 git 系统信息库的名称配置 BUILD,然后选择选项“Automatically Perform build on SCM commit”。同时检查分支名称是否与您的 git 项目匹配。 -
现在选择“Parameters(参数)”选项卡。您必须使用右侧的组合框菜单“添加参数”创建 3 个参数。下面是必须创建的名称以及括号中的类型:
-
WEBLOGICUSER:Weblogic 用户(字符串类型)
-
WEBLOGICPWD:您的 Weblogic 用户密码(类型密钥/密码)
-
WEBLOGICURL:您的 Weblogic 实例的 URL(字符串类型)
-
一个重要的观察是,WEBLOGICURL 中的 URL 必须是 localhost,因为隧道将通过堡垒服务器建立
-
-
现在单击“Before Build(构建前)”选项卡,配置从堡垒服务器到 Weblogic SOA Suite 服务器的 SSH 隧道。请记住,使用 SSH 密钥(私有密钥)并填写相应的字段。填写隧道组件的数据。
-
用户名:opc
-
本地端口: 11002
-
远程主机:SOA Suite 实例的专用 IP
-
远程端口: 11002
-
SSH 服务器:堡垒的公共 IP
-
一个重要的观察点是,端口 11002 以前已配置为部署 SOA Suite 项目的访问端口。
-
-
单击“Steps(步骤)”选项卡,配置 SOA Suite 项目的 BUILD(通过 Maven)和 DEPLOYMENT(通过 ANT)。按如下方式填写:
- 马夫
-
目标:编译包
-
POM 文件:SOAKafkaProducerApp/SOAKafkaConsumerPrj/SOA/SCA-INF/pom.xml。这是用于汇编项目包的 Maven pom.xml 文件
-
ANT
-
目标:sca-package 部署
-
构建文件:SOAKafkaProducerApp/SOAKafkaConsumerPrj/build.xml。这是用于在构建后部署应用程序的 Ant build.xml 文件。
-
-
属性
-
WEBLOGICUSER=${WEBLOGICUSER}
-
WEBLOGICPWD=${WEBLOGICPWD}
-
WEBLOGICURL=${WEBLOGICURL}
-
重要提示:
-
SOAKafkaProducerApp 应用程序有 2 个项目:SOAKafkaProducerPrj 和 SOAKafkaConsumerPrj。
-
我们正在说明其中一个项目的配置。必须为其他项目执行相同的步骤。
-
现在,让我们完成 BUILD 配置。选择“After Build(构建后)”选项卡。此步骤是可选的,但是您可能需要生成由上一步在运行 Maven 时创建的构件。为此,请配置此步骤,以便生成构件供以后下载。
-
-
在 Oracle Visual Builder Studio 中执行构建。配置后,每次在代码资料档案库 (Visual Builder Studio git) 中进行提交时,都会自动启动 BUILD。您也可以手动运行“构建”,因为这只需单击“构建”选项即可。尝试运行 BUILD,您将能够检查生成的日志。
相关链接
-
将 Oracle Cloud Infrastructure Streaming Service 适配器与 Oracle Integration 一起使用
-
将 Oracle Cloud Infrastructure Streaming Service 适配器与 Oracle Integration 一起使用
确认
- 作者 - Cristiano Hoshikawa(Oracle LAD A-Team 解决方案工程师)
更多学习资源
探索 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 频道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Deploy Oracle SOA Suite in Oracle Visual Builder Studio
F79404-01
March 2023
Copyright © 2023, Oracle and/or its affiliates.