tag:blogger.com,1999:blog-57058186696126056662024-03-24T03:10:16.863-04:00Sathya's Tech NotesSathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.comBlogger111125tag:blogger.com,1999:blog-5705818669612605666.post-70151789894260209802022-06-07T10:05:00.000-04:002022-06-07T10:05:14.560-04:00Explore Machine Learning Models with Explainable AI - Hands-on Workshop<p> </p>
<iframe src="https://www.linkedin.com/embed/feed/update/urn:li:share:6939934088074076160" height="680" width="504" frameborder="0" allowfullscreen="" title="Embedded post"></iframe>Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-86777175171364312022022-04-06T21:56:00.010-04:002022-04-06T23:07:40.438-04:00Protect Sensitive Data based on Role Based Access Control in BigQuery<p><br /><span style="caret-color: rgb(41, 41, 41); color: #292929; font-family: charter, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 20px; font-style: italic; letter-spacing: -0.05999999865889549px;">Leverage policy tags and row/column level security in BigQuery datasets to secure sensitive data. With role based access controls, BigQuery users will only be able to see and access data (specific rows / columns) that they are privileged with. This works seamlessly with Google Cloud Data Catalog service.</span></p><p><span style="caret-color: rgb(41, 41, 41); color: #292929; font-family: charter, Georgia, Cambria, "Times New Roman", Times, serif; font-size: 20px; font-style: italic; letter-spacing: -0.05999999865889549px;">To know more visit my blog <a href="https://medium.com/@agsathya/classify-protect-sensitive-data-based-on-role-based-access-control-in-bigquery-ce10dadb8c50" target="_blank">here</a>:</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-9dc_hYg23SNIajhmXF-Sni4xhym9h-U5vgrIWjbQYAWab-rzN5CEQ8rt1oW2Xhf6XIgxIx2F3lRdtlexp59gwxXTVokeZV-dQutUy5HBa3ckGBJxplNVihGZQ9QKfbq7YwciIe0GFYFo0q0-gvZGjtRj1HDdovvWv0HJ7eC25NqKnJmRD7vn0dbn0Q/s2142/Screen%20Shot%202022-04-06%20at%209.59.58%20PM.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1020" data-original-width="2142" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-9dc_hYg23SNIajhmXF-Sni4xhym9h-U5vgrIWjbQYAWab-rzN5CEQ8rt1oW2Xhf6XIgxIx2F3lRdtlexp59gwxXTVokeZV-dQutUy5HBa3ckGBJxplNVihGZQ9QKfbq7YwciIe0GFYFo0q0-gvZGjtRj1HDdovvWv0HJ7eC25NqKnJmRD7vn0dbn0Q/w640-h304/Screen%20Shot%202022-04-06%20at%209.59.58%20PM.png" width="640" /></a></div><p></p><p><br /></p><p><br /></p><p><br /></p>Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-87760925752753024282022-02-19T22:37:00.000-05:002022-02-19T22:37:02.358-05:00Developing a ML model with Google BigQuery to predict solar coverage<p> Google BigQuery lets users develop and operationalize advanced ML models with just SQL skills. You don't have to be a Tensorflow or Keras expert or a data scientist to train ML models. Follow along with this article if you are interested to see how to develop a linear regression ML model in BigQuery to predict the solar coverage percentage for US states.</p><p><br /></p><p>https://medium.com/@agsathya/develop-and-operationalize-ml-models-using-plain-sql-on-google-bigquery-462bc2bbe441</p><p><br /></p>Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-47632309364698104212021-10-21T10:34:00.002-04:002022-04-06T23:07:48.284-04:00Achieve higher levels of cloud maturity with socially responsible IT<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1HkEyLoEOeVj_LQoybDwKrS9hyphenhyphenavRv6tEka8M3zwCPSygex0KchPOvM9Q6jz57vU5bJfhN3ksydDvdJuvfdIy5jts-oJfyobFkffVfi_d_bF92M7PBOe-BsFxbDlfXINS_XN9_n7iqoM0/s2048/pexels-joey-kyber-129743.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1152" data-original-width="2048" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1HkEyLoEOeVj_LQoybDwKrS9hyphenhyphenavRv6tEka8M3zwCPSygex0KchPOvM9Q6jz57vU5bJfhN3ksydDvdJuvfdIy5jts-oJfyobFkffVfi_d_bF92M7PBOe-BsFxbDlfXINS_XN9_n7iqoM0/w640-h360/pexels-joey-kyber-129743.jpg" width="640" /></a></div><br /><span color="rgba(0, 0, 0, 0.6)" face="-apple-system, system-ui, system-ui, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif" style="background-color: white; font-size: 12px; orphans: 2; text-align: center; widows: 2;">Photo by Joey Kyber from Pexels</span><p></p><p><span style="font-size: medium;">What is the highest level of cloud maturity in an organization? In my opinion, it is delivering capabilities that are environmentally & socially responsible.</span></p><p><span style="font-size: medium;">As a visionary, we at Google can help you develop applications and services that are not just cool but also economically and socially responsible. Google has been carbon neutral since 2007 and has committed to operating on 100% carbon-free energy (CFE) 24x7 by 2030. Google data centers are architected to use much less energy than a typical data center - read more about it <a href="https://blog.google/outreach-initiatives/sustainability/data-centers-energy-efficient/" target="_blank">here</a>.</span></p><p><span style="font-size: medium;">If you missed the Next ‘21 session on ways to reduce your carbon footprint, you can still catch up on it <a href="https://youtu.be/78cGDCGdajE" target="_blank">here</a>.</span></p><p><span style="font-size: medium;">Just by running your workloads on Google Cloud, you can have a positive impact on the planet. However, it doesn’t have to stop there. Google Cloud offers several metrics, tools and dashboards to help you understand and reduce your carbon footprint including the ability to adhere to GHG Scope 3 standard reporting requirements.</span></p><p><span style="font-size: medium;">Here are 3 strategies that you can employ to reduce your carbon footprint;</span></p><p><span style="font-size: medium;">1. Choose the most eco-friendly cloud region</span></p><p><span style="font-size: medium;">Google publishes <a href="https://cloud.google.com/sustainability/region-carbon" target="_blank">carbon data</a> for all its cloud regions and you can see the CFE% and the local electricity grid’s carbon intensity. This will help you pick cleaner cloud regions (if you can) to run your workloads.</span></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">CFE % - This metric is updated hourly and it represents the average percentage of carbon-free energy consumed in that particular region. In simple terms, you can think of this as the percentage of time your application would run on carbon-free energy. Higher the % the better it is.</span></li></ul><p></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">Grid Carbon Intensity - This metric indicates the gross carbon emissions from the grid per unit of energy. In layman terms, the lower this value, the better.</span></li></ul><p></p><p></p><p><span style="font-size: medium;">On the Google Cloud console, some cloud regions may have the Low CO2 marker against them. This means that the region has a <b>Google CFE% of at least 75% and/or a grid carbon intensity of 200 gCO2eq/kWh or less.</b></span></p><p><span style="font-size: medium;">Using a combination of the CFE% and the grid carbon intensity indicators, you now have the choice to run your workloads that are eco-friendly.</span></p><p><span style="font-size: medium;">2. Leverage fully managed services where possible</span></p><p><span style="font-size: medium;">Fully managed offerings inherently are typically more efficient than manually operated ones. For instance, consider the following scenarios;</span></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">Running an application on Google Compute Engine (GCE) with auto scaling capabilities is more efficient than running it on a static size server farm on-premise</span></li></ul><p></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">An application that can be containerized (GKE) can offer higher server density resulting in reduced resource usage</span></li></ul><p></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">On the far end of the spectrum, if your workloads can leverage fully managed serverless offerings such as Cloud Run (for containerized workloads) / Cloud Functions (based on FaaS) / BigQuery (serverless data warehouse), these can provide greater efficiencies not just with economies of scale but also can reduce idle resources through smart resource allocation and scaling based on demand.</span></li></ul><p></p><p><span style="font-size: medium;">This may tie directly to your organization’s cloud maturity level and adoption. In a hybrid environment you may still have some monoliths that warrant the use of larger machines/VMs but still having this understanding will help you with your longer term “socially responsible” goals.</span></p><p><span style="font-size: medium;">3. Optimize resource needs and utilization</span></p><p><span style="font-size: medium;">This may sound like a cliche. </span></p><p><span style="font-size: medium;">But, just having the ability to track, monitor and report on CFE metrics is a great starting point. Solutions like <a href="https://cloud.google.com/solutions/active-assist" target="_blank">Active Assist</a> can offer insights and recommendations to optimize your cloud usage. Here are some things to ponder upon;</span></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">Carrying on-premise mindset to cloud - Over-provisioning of VMs / server resources result not just in increased costs, but worse, negative CFE scores</span></li></ul><p></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;"><i>Forgot to close the faucet</i> - Unused, running VMs are just bad practice. Having a governance model in place would go a long way in reducing emissions. For VMs that are only needed at certain times try leveraging <a href="https://cloud.google.com/compute/docs/instances/schedule-instance-start-stop" target="_blank">Scheduled VMs</a> option. The <a href="https://cloud.google.com/compute/docs/instances/viewing-and-applying-idle-vm-recommendations" target="_blank">Idle VM recommendation</a> option can be handy to identify and turn down idle VM resources.</span></li></ul><p></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">Try refactoring your monolith applications into microservices. Microservices are nimble, scale independently and can offer higher efficiencies and lower TCO - in stark contrast to monoliths with a significantly larger carbon footprint</span></li></ul><p></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">Lifting & Shifting workloads? This is not a bad option especially if you are just embarking on your cloud journey. Oftentimes, this may be the only option. However, think of creative ways to optimize it for the cloud. Can you separate the analytics capabilities? Containerize peripheral applications / services?</span></li></ul><p></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">Leverage cloud solutions wherever possible - <a href="https://cloud.google.com/blog/topics/hybrid-cloud/introducing-anthos-for-vms-and-other-app-modernization-tools" target="_blank">Anthos for VMs</a>, <a href="https://cloud.google.com/migrate/anthos" target="_blank">Migrate for Anthos and GKE</a> can help you jumpstart your cloud journey and into higher levels of cloud maturity</span></li></ul><p></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;">Consider running your standalone batch workloads in a region with higher CFE%</span></li></ul><p></p><p></p><ul style="text-align: left;"><li><span style="font-size: large;"><a href="https://cloud.google.com/compute/docs/instances/preemptible" target="_blank">Preemptible VMs</a> can be a great way to save on operational costs plus reduce your carbon footprint - if you have long running yet stateless workloads that can take advantage of.</span></li></ul><p></p><p><span style="font-size: medium;">Ready to embark on your socially responsible app development?</span></p><p><span style="font-size: medium;">What is your level of cloud maturity?</span></p><p><br /></p>Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-63062153832985432052020-12-25T18:41:00.003-05:002020-12-25T18:41:57.366-05:00Build your own COVID-19 Data Analytics Leveraging Open Source - Serverless Fn & Autonomous Database <p>Firstly, a huge thanks to all the frontline workers, healthcare professionals, technology contributions, non-profit organizations and everyone else who are fighting the pandemic everyday amidst the risks involved and more importantly the sacrifices - including the most important thing that can never be retrieved - TIME.</p><p>As Oracle Cloud continues to aid COVID-19 vaccine <a href="https://www.oracle.com/news/announcement/oracle-and-nih-collaborate-on-covid-19-vaccine-trials-071620.html" target="_blank">research & trials</a> and also help manage the COVID-19 <a href="https://www.oracle.com/news/announcement/oracle-cloud-manages-covid-19-vaccination-program-121520.html" target="_blank">vaccine distribution program</a>, I came up with a simple (humble) contribution that helps analyze and report COVID-19 data.</p><p>Although there are several dashboards and reports readily available on the web, they cater to a specific region, locale & metric. For example, what if? one would like to understand the total COVID-19 cases reported in Belarus on/up-to a specific date sliced by total tests conducted, new cases that were tested positive, hospitalization ratio per million against a median age group?</p><p>Data is publicly available but making sense of it is the key. In this article, we will see how we can build our own COVID-19 analytics - leveraging simple & popular open source tools and technology with the help of public cloud (Eg. Autonomous Database in Oracle Cloud - that is auto-managed, auto-tuned & auto-patched) [PS: You can also replace Autonomous DB with MySQL]. What's more? - we can potentially achieve this for free with the <a href="https://www.oracle.com/cloud/free/" target="_blank">Always Free</a> cloud instance.</p><p>Let's quickly take a look at the high-level solution architecture;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJbSiMpy506wPi4gwgVBJvXwhAFqLlHnWLPoFtCGYQgZQ6K23nBbSIO9gDX0lCZK_CZgXQj4WMnOXIypQGR44gAnOCAmtCwizC2sxygT81E_bp_sjw8c5hyphenhyphen1sX_yK63grWZFd3yvxy6UpW/s825/COVID-19.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="351" data-original-width="825" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJbSiMpy506wPi4gwgVBJvXwhAFqLlHnWLPoFtCGYQgZQ6K23nBbSIO9gDX0lCZK_CZgXQj4WMnOXIypQGR44gAnOCAmtCwizC2sxygT81E_bp_sjw8c5hyphenhyphen1sX_yK63grWZFd3yvxy6UpW/w640-h272/COVID-19.png" width="640" /></a></div><div><br /></div><p>Each component of this architecture is designed to be loosely coupled and can be replaced or further enhanced for functionality/convenience. For instance, I have leveraged Apache open-source serverless Fn project that natively runs on Oracle Cloud - this can be replaced with a Node.js or java code running on K8s-Docker container. Similarly, the Autonomous Database can be replaced with a MySQL DB </p><p>Let's take a look at the key components of this solution;</p><h3 style="text-align: left;">1) Source dataset [Courtesy: Our World in Data]</h3><p><a href="https://ourworldindata.org" target="_blank">"Our World in Data"</a> offers COVID-19 data in a variety of data formats and most importantly offers daily updates - so we can keep our analytics up-to-date.</p><p>In our case, we get the dataset in csv format <a href="https://covid.ourworldindata.org/data/owid-covid-data.csv" target="_blank">here</a></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXVIM_KfO6ZQg7hW0MSFBctQT29kIsTUFqQpW52TjIvucVfmKAsZ3Vkf5rF191ek8fE1R8M6A_tnyFeuapzUUSl0DvEIq8eE1avlySNdc6kEWI3krbbdog6CQWhV8BWcAYR4LXCljSmgQ7/s2048/Screen+Shot+2020-12-25+at+5.03.47+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1171" data-original-width="2048" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXVIM_KfO6ZQg7hW0MSFBctQT29kIsTUFqQpW52TjIvucVfmKAsZ3Vkf5rF191ek8fE1R8M6A_tnyFeuapzUUSl0DvEIq8eE1avlySNdc6kEWI3krbbdog6CQWhV8BWcAYR4LXCljSmgQ7/w400-h229/Screen+Shot+2020-12-25+at+5.03.47+PM.png" width="400" /></a></div><h3 style="text-align: left;">2) Python script deployed on Oracle Fn</h3><p>I have leveraged the Oracle Cloud Functions (based on Apache Fn) serverless platform to deploy the simple python script to download the COVID-19 dataset into an object storage bucket.</p><p>The choice of Oracle Cloud Functions is particularly helpful in this case because I don't have to manage any infrastructure or deal with packaging the docker container and version control them. It lets me focus only on the business logic. Also, it supports a variety of programming languages natively including Python, Go & Java. Most importantly, it has built-in security and offers out of the box support for event notifications & triggers and ability to expose functions as APIs.</p><h4 style="text-align: left;">Pre-Req: </h4><p>Create a dynamic group for Oracle Functions and ensure you have a policy defined in your compartment/tenancy for Oracle Functions the ability to access / read csv in the object storage bucket</p><pre><code><p>Instances that meet the criteria defined by any of these rules will be included in the dynamic group.</p><p>ALL {resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..abcdefgxyz'}</p><p>Allow dynamic-group FnDynamicGroup to manage objects in compartment sathya.ag</p></code></pre><p>Let's create an Oracle Functions application;</p><p>Oracle Cloud -> Developer Services -> Functions -> Create Application & give it a name</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj_MpgBeEzCppqjT0beEUozur0_PgHquTV49gzaNWTO-8xNN936GEEFOX7cADXeGswmGxSzNifBt__6j9o5DaIvW2q1ONcfHwzjP0T2b6avomtcyUmHGs_bSJCrkcQrZGAIK8lZfGVucar/s1210/Screen+Shot+2020-12-25+at+5.44.41+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="692" data-original-width="1210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj_MpgBeEzCppqjT0beEUozur0_PgHquTV49gzaNWTO-8xNN936GEEFOX7cADXeGswmGxSzNifBt__6j9o5DaIvW2q1ONcfHwzjP0T2b6avomtcyUmHGs_bSJCrkcQrZGAIK8lZfGVucar/s320/Screen+Shot+2020-12-25+at+5.44.41+PM.png" width="320" /></a></div><p>Applications lets us group several Oracle Functions. To create a serverless function;</p><p>For quick setup, you can leverage the Cloud Shell under the Getting Started instructions to deploy the following python code. Oracle functions platform packages the code as a docker container, uploads the docker image to the default Oracle Cloud docker registry and automatically deploys it as a serverless function with an invoke endpoint.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlJnycfAIn95Jjy9iZWjx1i60nMyURDtdPUuKittAB0vtC-qFkTGdFaPkdXCGkWeJmwlAyqwebgVuwrlTPzI60x9z4iCoIb3wB9d3wIJh4g40Rixv76lEGgyBKwhRr80IuVwGBaRTS0SGj/s2048/Screen+Shot+2020-12-25+at+5.54.45+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1077" data-original-width="2048" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlJnycfAIn95Jjy9iZWjx1i60nMyURDtdPUuKittAB0vtC-qFkTGdFaPkdXCGkWeJmwlAyqwebgVuwrlTPzI60x9z4iCoIb3wB9d3wIJh4g40Rixv76lEGgyBKwhRr80IuVwGBaRTS0SGj/w400-h210/Screen+Shot+2020-12-25+at+5.54.45+PM.png" width="400" /></a></div><pre><code>import io
import json
import oci
import csv
import requests
import logging
import os
import urllib.request
from fdk import response
def progress_callback(bytes_uploaded):
print("{} additional bytes uploaded".format(bytes_uploaded))
def handler(ctx, data: io.BytesIO=None):
logging.getLogger().info("Got incoming request")
signer = oci.auth.signers.get_resource_principals_signer()
object_name = bucket_name = namespace = ""
try:
cfg = ctx.Config()
input_bucket = cfg["input-bucket"]
processed_bucket = cfg["processed-bucket"]
input_csv = cfg["input-csv"]
object_name = cfg["object-name"]
except Exception as e:
print('Missing function parameters: bucket_name', flush=True)
raise
logging.getLogger().info("before calling load data {0} {1} {2}".format(input_bucket,</code></pre><pre><code> input_csv, object_name))
logging.getLogger().info("download start!")
filename, headers = urllib.request.urlretrieve(input_csv, filename="/tmp/covid.csv")
logging.getLogger().info("download complete!")
load_data(signer, namespace, input_bucket, filename, object_name)
#move_object(signer, namespace, input_bucket, processed_bucket, object_name)
return response.Response(
ctx,
response_data=json.dumps({"status": "Success"}),
headers={"Content-Type": "application/json"}
)
def load_data(signer, namespace, bucket_name, input_csv, object_name):
logging.getLogger().info("inside load data function {0} {1} {2}".format(signer, </code></pre><pre><code>namespace, bucket_name))
client = oci.object_storage.ObjectStorageClient(config={}, signer=signer)
try:
print("INFO - About to read object {0} from local folder and upload to bucket {1}</code></pre><pre><code>...".format(object_name, bucket_name), flush=True)
namespace = client.get_namespace().data
# Use UploadManager to do multi-part upload of file, with 3 Parallel uploads
logging.getLogger().info("before calling uploadmanager")
upload_manager = oci.object_storage.UploadManager(client, </code></pre><pre><code>allow_parallel_uploads=True, parallel_process_count=3)
response = upload_manager.upload_file(namespace, bucket_name, object_name, </code></pre><pre><code>input_csv, progress_callback=progress_callback)
logging.getLogger().info("response status {0}".format(response.status))
if (response.status == 200):
message = "Successfully uploaded %s in bucket %s." % (object_name, </code></pre><pre><code>bucket_name)
return True
except Exception as e:
logging.getLogger().info("exception message {0}".format(e))
message = " Image upload Failed in bucket %s. " % bucket_name
if "oci" in e.__class__.__module__:
if hasattr(e, 'message'):
message = message + e.message
else:
message = message + repr(e)
print(message)
return False</code></pre><p>In the configuration section, provide the key value pairs that can be dynamically processed by Oracle Functions at invoke.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixgaWRIkIXVAZMf_s_pMJIXHPz-hKwNqhxm6RQzO7lRvdLTxwvLmL2hN05ADoVAgqZ1-iPaXBJkYJTicoWgHO9oAaako9cWIwl__ZgEApKA6mmpwm2JzumiUWi8mxghVk1LOS34lEu1t37/s2138/Screen+Shot+2020-12-25+at+6.16.22+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="796" data-original-width="2138" height="149" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixgaWRIkIXVAZMf_s_pMJIXHPz-hKwNqhxm6RQzO7lRvdLTxwvLmL2hN05ADoVAgqZ1-iPaXBJkYJTicoWgHO9oAaako9cWIwl__ZgEApKA6mmpwm2JzumiUWi8mxghVk1LOS34lEu1t37/w400-h149/Screen+Shot+2020-12-25+at+6.16.22+PM.png" width="400" /></a></div><h3 style="text-align: left;">3) COVID Dataset in Object Storage</h3><p>Let's verify if the COVID-19 dataset is successfully downloaded into our object storage bucket.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyyV_gMottpf52f1LeHl_2cCHX_p0YvzwB4fmyuqWhZ5lSHZiJNjN3_ZWhW6CBZOle9RJ1kQbK8ybFQKD8gyiWAxa1oIHmeariiekp231-ZMUyQsFe5RWQqFCwWO-9jSRT7z70FSVBo2iT/s2048/Screen+Shot+2020-12-25+at+6.19.11+PM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1138" data-original-width="2048" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyyV_gMottpf52f1LeHl_2cCHX_p0YvzwB4fmyuqWhZ5lSHZiJNjN3_ZWhW6CBZOle9RJ1kQbK8ybFQKD8gyiWAxa1oIHmeariiekp231-ZMUyQsFe5RWQqFCwWO-9jSRT7z70FSVBo2iT/w400-h223/Screen+Shot+2020-12-25+at+6.19.11+PM.png" width="400" /></a></div><h3 style="text-align: left;">4) Loading COVID-19 dataset into Autonomous Database</h3><p>Since we are leveraging Oracle Cloud Autonomous DB, we can leverage the OOTB cloud SQL package to load data from an external object storage bucket. Another variant of this approach could be to leverage the csv data in object storage as an external table and ADB lets you query on the csv data directly.</p><p>Again, the choice for Autonomous Database helps us focus only on loading and querying the dataset and not have to worry about the underlying infrastructure, patching & maintenance. I like to think of Autonomous DB as a "serverless" database.</p><p>Execute the DBMS_CLOUD.COPY_DATA procedure to load data from object storage into ADB. [Ensure you have the base table created to hold the COVID-19 dataset]</p>
<pre><code>BEGIN
DBMS_CLOUD.COPY_DATA(
table_name =>'COVID',
credential_name =>'JSON_CRED_AG',
file_uri_list =>'YOUR OBJECT STORAGE BUCKET URI',
format => json_object('type' value 'CSV', 'ignoremissingcolumns' value 'true', </code></pre><pre><code>'delimiter' value ',', 'blankasnull' value 'true', 'skipheaders' value '1', 'dateformat' value 'YYYY-MM-DD')
);
END;
/</code></pre><h3 style="text-align: left;">5) Analytics Dashboard</h3><p>Now that we have our data in a database, we can leverage any analytics / reporting engine to make sense of the data and generate dynamic reports. In our case, we leverage Oracle Analytics and/or Oracle Data Visualization.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDj83AW0Gp_rLTu5riRuoe-KtHNSi92Z-YFnkuDajPJ9lZSPtnlcpI55ADHLdcZVZr_5jKxy9_NFiOxRdKsy3os-ZgxroZzLPHUZbHc6mtD-kRUzEmxcs-3BrVarsdSYk03G7d_ZGaHGfQ/s1400/Screen+Shot+2020-12-25+at+6.27.17+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="668" data-original-width="1400" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDj83AW0Gp_rLTu5riRuoe-KtHNSi92Z-YFnkuDajPJ9lZSPtnlcpI55ADHLdcZVZr_5jKxy9_NFiOxRdKsy3os-ZgxroZzLPHUZbHc6mtD-kRUzEmxcs-3BrVarsdSYk03G7d_ZGaHGfQ/w400-h191/Screen+Shot+2020-12-25+at+6.27.17+PM.png" width="400" /></a></div><br /><p><br /></p>Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-24310033605194694922020-09-29T23:50:00.003-04:002020-11-14T13:03:51.973-05:00Mitigate Ransomware Attacks & Protect your data with Oracle Cloud<p>
Recently, I was working with a Fortune100 retailer. During a cadence with
their Chief Technology Officer & Security Advisor, an interesting topic
came up for discussion. With ever growing malware attacks - especially
<a href="https://en.wikipedia.org/wiki/Ransomware" rel="nofollow" target="_blank">Ransomware</a>, the board mandated IT to prioritize strategy to mitigate, prevent &
protect their crown jewel (data) against potential Ransomware attacks.
</p>
<p>Board concerns included;</p>
<p></p>
<ul style="text-align: left;">
<li><i>Protecting Brand Reputation</i></li>
<li>
<i>Immediate need for a cost-effective business continuity plan (BCP)</i>
</li>
<li><i>Security Compliance</i></li>
</ul>
<p></p>
<p>
Enterprises across the world - both large & small - have been impacted by
Ransomware and incurred several billion dollars in losses - either through
loss of business, time to recover and/or ransom costs.
</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghy4M5wIebUkyy4m8gllUD_G6yaapr1sNJjrJAfxOBl17jrHitjD1RsVrv_6p_WJMUtQAlcCqqlamWh5QOtsMtR-e4JM6MH9CVznKRhXGlu6kt6afmPH4NU645E00LEOHilp05z45xDV-Z/s1324/Screen+Shot+2020-09-30+at+9.10.51+AM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="636" data-original-width="1324" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghy4M5wIebUkyy4m8gllUD_G6yaapr1sNJjrJAfxOBl17jrHitjD1RsVrv_6p_WJMUtQAlcCqqlamWh5QOtsMtR-e4JM6MH9CVznKRhXGlu6kt6afmPH4NU645E00LEOHilp05z45xDV-Z/w640-h308/Screen+Shot+2020-09-30+at+9.10.51+AM.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9qwWc7va5XpHb1QMsw6hQLuCH1czs_vdYrfAa6Z9cAzkdcisZ3nBYw6OCAFGTtmVx-YUTMNtpUze8shI1nj4KArN6PaMXNH_2AJ8ypLWtAKFUl-6Qb_kEznJX1DPkuC2ZCfl9AI5LL5J8/s550/how-to-detect-ransomware.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="550" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9qwWc7va5XpHb1QMsw6hQLuCH1czs_vdYrfAa6Z9cAzkdcisZ3nBYw6OCAFGTtmVx-YUTMNtpUze8shI1nj4KArN6PaMXNH_2AJ8ypLWtAKFUl-6Qb_kEznJX1DPkuC2ZCfl9AI5LL5J8/w400-h291/how-to-detect-ransomware.png" width="400" /></a>
</div>
<p>Per wikipedia...</p>
<p></p>
<blockquote>
Security experts have suggested precautionary measures for dealing with
ransomware. Using software or other security policies to block known payloads
from launching will help to prevent infection, but will not protect against
all attacks. As such, having a proper backup solution is a critical component
to defending against ransomware. Note that, because many ransomware attackers
will not only encrypt the victim's live machine but it will also attempt to
delete any hot backups stored locally or on accessible over the network on a
NAS, it's also critical to maintain "offline" backups of data stored in
locations inaccessible from any potentially infected computer, such as
external storage drives or devices that do not have any access to any network
(including the Internet), prevents them from being accessed by the ransomware.
</blockquote>
<p></p>
<p>
As hackers find new & creative ways to disrupt global businesses with
malicious intent - Reveton, Fusob, WannaCry, BadRabbit, Petya (Remember
<a href="https://www.wired.com/story/notpetya-cyberattack-ukraine-russia-code-crashed-the-world/" rel="nofollow" target="_blank">NotPetya</a>?), SamSam - all different strains of Ransomware over the years that have
caused billions in losses, it might sound impossible to predict but certainly
possible to prevent, protect & mitigate the impact & damage; should
there ever be one.
</p>
<p>
In this blog, I would like to share my perspective and solution on how we
helped the customer by leveraging Oracle's Gen2 Cloud Infrastructure services.
</p>
<p>
One of the core tenets of security to prevent against Ransomware like malware
attacks is to maintain consistent, redundant, secure "offline" backups of
critical data - since Ransomware can traverse network.
</p>
<p>
Our proposal encompassed 3 primary factors that are key for enterprise
workloads to run uninterrupted;
</p>
<p><span style="color: #cc0000;">1. Enterprise Grade Secure Backups & Cloud Storage</span></p>
<p>
Oracle's Gen2 Cloud offers secure, redundant & enterprise grade cloud
backup & storage solution aimed at not just backing up on-premise data
(offline backups) but also services that manage & automate consistent
on-premise data backups. Specifically the following built-in features offer an
immutable, versioned, consistent, redundant & secure storage for all kinds
of enterprise data.
</p>
<p></p>
<ul style="text-align: left;">
<li><i>Two distinct storage tiers for hot & cold backup storage</i></li>
<li><i>Secure & Restricted access with fine-grained IAM policies</i></li>
<li>
<i>Object versioning to prevent accidental/malicious object
overwrites/deletion (CRUD)</i>
</li>
<li>
<i>Default AES-256 bit encryption with ability to auto/self managed keys</i>
</li>
<li><i>Rich lifecycle automation policies</i></li>
<li>
<i>Retention rules to comply with regulatory compliance and ensure data
immutability</i>
</li>
<li>
<i>Configurable Replication policies for data redundancy cross-region</i>
</li>
<li><i>Self-healing to ensure data integrity</i></li>
</ul>
<p></p>
<p>In additions, </p>
<p>
Oracle Storage Gateway offers the ability to deploy the solution with zero
disruption as it exposes cloud storage as an NFS locally &
</p>
<p>
Oracle database backup service automates the management of Oracle database
backups from on-premise to cloud
</p>
<p><span style="color: #cc0000;">2. Ensure Business Continuity - Not just offline backups for fallback</span></p>
<p>
Oracle cloud Gen2 prides itself on the fact that it is purpose built for the
enterprise. With fundamental building blocks at its core such as "off-box
virtualization", non-oversubscribed everything (network, BW, compute &
storage), defense-in-depth layered security-first cloud architecture &
unique offerings such as modern AMD, Intel, Nvidia GPUs, HPC, RDMA clustered
networking, NVMe & Exadata, customers can rely on Oracle Cloud and treat
it just as an extension of their on-premise IT.
</p>
<p>
This provides the ability to spin up VMs, Bare Metal servers, VMWare
workloads, Databases (Oracle DB VMs, Physical DBs, MySQL, Exadata, Autonomous,
SQL Server) - everything potentially needed to ensure business continuity.
</p>
<p><span style="color: #cc0000;">3. Security-First Cloud Architecture & Compliance</span></p>
<p>At its core, Oracle Cloud offers built-in;</p>
<p></p>
<ul style="text-align: left;">
<li>
<i>Edge-Security through Global PoPs, DDoS protection, DNS security &
WAF</i>
</li>
<li>
<i>Monitoring with 3rd party security (FW, NGFW, IPS), configuration
monitoring, logging & compliance</i>
</li>
<li>
<i>Virtual Network interface segmentation, Security Lists, IPSec VPN,
FastConnect & Private Network</i>
</li>
<li>
<i>Tenant isolation, Hardened Images, HW Entropy, Root-of-Trust Card, HSM
& signed firmware</i>
</li>
<li><i>Data (At-Rest, In-Transit & Key Vault Management)</i></li>
<li>
<i>Identity federation, role-based policies, compartments, tagging and
instance principals</i>
</li>
</ul>
<p></p>
<p>In additions, </p>
<p>
Fine-grained IAM security policies to secure & restrict resource access at
the finest level,
</p>
<p>Multi-Factor Authentication (MFA) for additional layer of user security</p>
<p>
CASB for OCI offers visibility, threat protection, data security and
compliance for OCI deployments.
</p>
<p>
Below is the reference architecture that addresses Ransomware prevention &
mitigation strategy for deployments & data in the Oracle Cloud.
</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghy4M5wIebUkyy4m8gllUD_G6yaapr1sNJjrJAfxOBl17jrHitjD1RsVrv_6p_WJMUtQAlcCqqlamWh5QOtsMtR-e4JM6MH9CVznKRhXGlu6kt6afmPH4NU645E00LEOHilp05z45xDV-Z/s1324/Screen+Shot+2020-09-30+at+9.10.51+AM.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="636" data-original-width="1324" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghy4M5wIebUkyy4m8gllUD_G6yaapr1sNJjrJAfxOBl17jrHitjD1RsVrv_6p_WJMUtQAlcCqqlamWh5QOtsMtR-e4JM6MH9CVznKRhXGlu6kt6afmPH4NU645E00LEOHilp05z45xDV-Z/w640-h308/Screen+Shot+2020-09-30+at+9.10.51+AM.png" width="640" /></a></div>
<p>Feel free to reach out if you have a criticism, feedback or queries.</p>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-7730189305336984192019-09-23T22:43:00.001-04:002019-09-23T22:43:06.684-04:00Automate Oracle APEX Deployment for OCI Database Using Terraform<div dir="ltr" style="text-align: left;" trbidi="on">
Recently, I was assisting a customer design & configure APEX (Oracle Application Express) for databases on OCI. The purpose of this blog is to augment some finer details, tips & tricks that may help with successful installation (already documented in some detail in this <a href="https://docs.cloud.oracle.com/iaas/Content/Resources/Assets/whitepapers/oracle-apex-on-oci-database.pdf" target="_blank">whitepaper</a>.)<br />
<br />
Let's quickly look at the architecture / deployment topology. In this example, we will have one centralized APEX instance mapped to multiple database instances. The APEX instance will be provisioned in a public subnet so it can be accessed from the internet. However, the OCI databases will be secured within one or more private subnets.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia48aej2Qn1-0PiddGmnsI_Cg36BemrVlWt2Oj68CQXUQhm8ndFWyM9GpKW-eWItgfV0ickr0wI3Y06xd9PmQznow_JGwSTx8QRN50uJaY8lz4-E33PIBwQAeqQbqCjBiVHgf3zJspgTtK/s1600/Screen+Shot+2019-09-23+at+10.32.53+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="874" data-original-width="1600" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia48aej2Qn1-0PiddGmnsI_Cg36BemrVlWt2Oj68CQXUQhm8ndFWyM9GpKW-eWItgfV0ickr0wI3Y06xd9PmQznow_JGwSTx8QRN50uJaY8lz4-E33PIBwQAeqQbqCjBiVHgf3zJspgTtK/s400/Screen+Shot+2019-09-23+at+10.32.53+PM.png" width="400" /></a></div>
<br />
Step 1: Download Terraform release 0.11.15 (oci) <a href="https://releases.hashicorp.com/terraform/" target="_blank">here</a><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw-LJoRcczYZtkeuSSHpTqkalXkRV1IHFvRaSBm74vLDPdOJSPsWQAw8On_z71BTOEVixu4W_AhsRcltfEWUzKjJB2OocUThCDVZwpb4DTu0KBQ0za-oT6X8QNIKfHMFBT65EbnyptYV0J/s1600/Screen+Shot+2019-09-23+at+10.33.39+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="472" data-original-width="436" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw-LJoRcczYZtkeuSSHpTqkalXkRV1IHFvRaSBm74vLDPdOJSPsWQAw8On_z71BTOEVixu4W_AhsRcltfEWUzKjJB2OocUThCDVZwpb4DTu0KBQ0za-oT6X8QNIKfHMFBT65EbnyptYV0J/s200/Screen+Shot+2019-09-23+at+10.33.39+PM.png" width="184" /></a></div>
<br />
Step 2: Depending on your OS, install/configure Terraform on your laptop/PC. For example, if you are running on a mac, download the darwin_amd64 and unzip this in a folder.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ7kbDn9_zM63Z7PRif-sIp_sqtBwRZkdXqhpiFWMfoyt23krsQJ5ZMsF0xBKSLbGNzUtJQEOmBPQv0BLOtHM2EZvvyOtQJF2j6jM1pCD85bYKJGU185PKhqdAe1qt3S81jUEGl5I8sm8E/s1600/Screen+Shot+2019-09-23+at+10.34.16+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="920" data-original-width="782" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ7kbDn9_zM63Z7PRif-sIp_sqtBwRZkdXqhpiFWMfoyt23krsQJ5ZMsF0xBKSLbGNzUtJQEOmBPQv0BLOtHM2EZvvyOtQJF2j6jM1pCD85bYKJGU185PKhqdAe1qt3S81jUEGl5I8sm8E/s320/Screen+Shot+2019-09-23+at+10.34.16+PM.png" width="272" /></a></div>
<br />
Step 3: Copy the "terraform" to your /usr/local/bin directory to install/configure Terraform on your machine<br />
<br />
<i>$ unzip terraform_0.11.15-oci_darwin_amd64.zip</i><br />
<i>$ cp terraform /usr/local/bin</i><br />
<br />
Step 4: Download the APEX terraform template & scripts <a href="https://objectstorage.uk-london-1.oraclecloud.com/p/FO4uTJoUNr-ccx91pPukWzU4FPwISoGpk3k7mi0Yv5k/n/intdbaasecra/b/masito-SQLDeveloperWeb/o/ORDS-APEX_Comp.zip" target="_blank">here</a>. This contains the terraform templates & scripts to install and configure ORDS & APEX on a OCI Compute VM within a public subnet.<br />
<br />
Step 5: Create a bucket within your OCI object storage. Download the following and place them within this bucket. The Terraform script will use these to install the appropriate versions of APEX, ORDS & web server.<br />
<br />
Hint: You can make this bucket public briefly if you don't want to bother with pre-auth requests etc.. since this will only hold the binaries. Once done, we can change the visibility back to private or blow this bucket up.<br />
<br />
a) Download the latest APEX binary <a href="https://www.oracle.com/tools/downloads/apex-v191-downloads.html" target="_blank">here</a><br />
b) Download the latest ORDS binary <a href="https://www.oracle.com/database/technologies/appdev/rest-data-services-v192-downloads.html" target="_blank">here</a><br />
c) Optionally (if you prefer running APEX on Tomcat) download the latest tomcat zip<br />
<br />
Note: Make sure the Apex and ORDS versions are compatible with the version of database you provisioned on OCI.<br />
<br />
Step 6: On your OCI tenancy, make sure you have a public subnet within your VCN, attached a internet gateway and a security list. The security list must have the following ingress rules;<br />
<br />
<i>0.0.0.0/0 TCP TF_VAR_COM_PORT</i> (Fetch this based on the port on which you would expose APEX over.)<br />
<br />
Step 7: Open the ingress rule on the private subnet (where your database is running) to allow the port (eg., 1521) from the public subnet (where APEX will be deployed)<br />
<br />
Step 8: For simplicity, we will be exposing APEX over ip-based access. If you prefer to frontend your apex installation with a DNS, follow the whitepaper reference above. Does a great job offering DNS options.<br />
<br />
Step 9: Unzip the ORDS zip file downloaded in Step 4 above.<br />
<br />
Step 10: Run <i>terraform --version </i>and make sure you are running on 0.11.15 version. This is important as the terraform template & scripts are written based on this version. You may encounter errors trying to run this AS-IS with later versions of terraform.<br />
<br />
Step 11: Gather the following info before proceeding. You will need access to your OCI tenancy to gather lot of details.<br />
<br />
a) Generate a pair of SSH public & private keys. These will be used while provisioning the new compute VM that will host APEX & ORDS. Save these for future ssh access to your apex/ords compute VM. Gather the absolute paths for both private & public keys.<br />
b) Generate a API key and fingerprint for your user id (Remember, this is the user that will be used by terraform OCI provider to make API calls into OCI). If you don't know how to generate a API signing key and fingerprint refer to OCI documentation <a href="https://docs.cloud.oracle.com/iaas/Content/API/Concepts/apisigningkey.htm" target="_blank">here</a>.<br />
c) OCI Tenancy OCID<br />
d) OCI User ID OCID<br />
e) OCI User Fingerprint<br />
f) OCI Compartment OCID<br />
g) Target Database private IP address<br />
h) Target Database Service Name (If you are running on a multitenant database, make sure you provide the PDB service name and not the root CDB service name).<br />
<br />
Hint: Click on DB Connection button on the OCI DB console. It shows the CDB root connection info along with the service name info. Simply replace the CDB domain name with the PDB name. This should look like <<pdb>>.<<subnet>>.<<vcn>>.oraclevcn.com<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioQbIX4cDxsMSJQXo8c1W1zPTq2tFiDDCqXX5UrpV_oEXXwifA2yG5qqXbxFJjAAGUpBwaXtxkmUdv9JC3ElLr5C8eoHDtzRM25fLy6_X6tMj5QzZ95cVVvc-eGKYjlpBzc09XayqpOFz7/s1600/Screen+Shot+2019-09-23+at+10.35.13+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="843" data-original-width="1600" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioQbIX4cDxsMSJQXo8c1W1zPTq2tFiDDCqXX5UrpV_oEXXwifA2yG5qqXbxFJjAAGUpBwaXtxkmUdv9JC3ElLr5C8eoHDtzRM25fLy6_X6tMj5QzZ95cVVvc-eGKYjlpBzc09XayqpOFz7/s400/Screen+Shot+2019-09-23+at+10.35.13+PM.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicMLnJXACN_PkhvxSyycIKL7-VuSuncGwMdW36W9VkyaWPdbaEv3qL5NLdauXqj0wBrqAXXUNye77mSBnZCxcCeKa_xjU2Z5IgxdiKRwiSycajReZZlCBIu9GGUQiBkevVzxYuPlQX7Akt/s1600/Screen+Shot+2019-09-23+at+10.37.30+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1021" data-original-width="1426" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicMLnJXACN_PkhvxSyycIKL7-VuSuncGwMdW36W9VkyaWPdbaEv3qL5NLdauXqj0wBrqAXXUNye77mSBnZCxcCeKa_xjU2Z5IgxdiKRwiSycajReZZlCBIu9GGUQiBkevVzxYuPlQX7Akt/s320/Screen+Shot+2019-09-23+at+10.37.30+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
i) Region: This is the region identifier where you have the database running & eventually APEX. Get your region identifier <a href="https://docs.cloud.oracle.com/iaas/Content/General/Concepts/regions.htm" target="_blank">here</a>.<br />
j) AD: Availability Domain where you would like to install APEX/ORDS. eg., 1, 2 or 3<br />
k) OEL Version: APEX Compute VM will be provisioned on OEL OS. Indicate which version of OEL you would like installed. eg., 7.6<br />
l) Compute Instance Name & Display Name (Choose an appropriate name)<br />
m) Instance Shape: eg., VM.Standard2.2 for a 2 OCPU VM<br />
n) Object Storage URLs for APEX zip, ORDS war file & optionally tomcat zip files<br />
o) Apex/ORDS webserver port number eg., 8080, 8888 etc..<br />
Hint: Remember to open this port on the public subnet security list<br />
<br />
Step 12: cd into the ORDS-APEX_Comp directory and run setup.sh. This script will prompt for all the values described above. Once this script is executed, this creates a env-vars file that contains these values for Terraform to use. Alternatively, you can directly edit this file and provide values.<br />
<br />
Step 13: Once you make sure all variables are set properly, execute the following;<br />
<br />
Hint: You may be prompted for the DB admin password.<br />
<br />
<i>terraform init</i><br />
<br />
<i>terraform plan</i> (This should indicate 5 actions that will be performed on your OCI tenancy). This would change depending on whether you choose Tomcat or Jetty as your web server.<br />
<br />
<i>+ null_resource.remote-exec_init</i><br />
<i> id: <computed</i><i>></i><br />
<i><br /></i>
<i> + null_resource.remote-exec_tomcat-1</i><br />
<i> id: </i><i><</i><i>computed</i><i>></i><br />
<i><br /></i>
<i> + null_resource.remote-exec_tomcat-2</i><br />
<i> id: </i><i><</i><i>computed</i><i>></i><br />
<i><br /></i>
<i> + null_resource.remote-exec_tomcat-apex</i><br />
<i> id: </i><i><</i><i>computed</i><i>></i><br />
<i><br /></i>
<i> + oci_core_instance.ORDS-Comp-Instance</i><br />
<i> id: </i><i><</i><i>computed></i><br />
<i><br /></i>
<i>terraform apply</i><br />
<br />
This should run for approximately 15-20 mins. Make sure there are no errors while you run this script. If there are errors, execute "terraform destroy" to rollback all changes. Also if APEX/ORDS is partially deployed on the database (by terraform), clean this up manually. Follow the documentation <a href="https://docs.oracle.com/en/database/oracle/application-express/19.1/htmig/cleaningup-after-failed-installation.html#GUID-872260A2-2BF5-42F8-A9D5-B7A40EF9345C" target="_blank">here</a>.<br />
<br />
Some common causes of errors;<br />
1) You may have installed APEX manually on this database before. This will conflict with the terraform APEX install attempt.<br />
2) Terraform script partially executed and failed during APEX install. (Hint: One way to find this out is by observing a bunch of PL/SQL ORA-* errors during terraform execution)<br />
<br />
Solution is to clean up APEX manually and ensuring terraform is rolled back using the "destroy" command.<br />
<br />
To add / map multiple databases to this APEX/ORDS instance, simply execute the apex_add_db.sh script bundled with the ORDS Terraform scripts.<br />
<br />
<i>$ ./apex_add_db.sh -p <database_admin_password</i><i>></i><i> -i <IP_address</i><i>></i><i> -s </i><i><</i><i>database_service_name</i><i>></i><br />
<br />
Hope this helps quickly spin up APEX for multiple DB instances.</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-91385202576945144492019-06-04T19:54:00.001-04:002019-06-05T12:02:14.292-04:00Achieve High Availability (HA) with Oracle Cloud Infrastructure (OCI) - using HAProxy & KeepAlived<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>Features such as High Availability (HA), Elastic Scaling, Disaster Recovery (DR) are no longer restricted to Tier-1 mission critical applications & services. These are now table-stakes for any enterprise-grade cloud provider and enterprises can leverage these at will - as they are now fundamental building blocks of the cloud platform. Oracle Cloud Infrastructure (OCI) offers several modern state-of-the-art capabilities including - Bare Metal servers for extreme performance & HPC, Availability Domains & Fault-Domain constructs for fault-tolerance, HA & DR, Elastic Scaling of compute & storage independently for future-proofing, RAC for highly-available databases, Regional Subnets for seamless datacenter resiliency & failover, LBaaS (Load Balancer as a Service) for platform-driven fully managed instance failovers etc..<br />
<br />
Although there are many different ways to achieve HA on Oracle Cloud Infrastructure, we will look at a more simple/primitive method (just leveraging core OCI capabilities) that leverages open-source technologies.<br />
Note: This could be more elegantly achieved using OCI's native <a href="https://cloud.oracle.com/load-balancing" target="_blank">LBaaS</a> PaaS service as well.<br />
<br />
However, in certain situations - windows server based apps, container apps, microservice constructs - harproxy (or similar) & keepalived might have semblance to on-premise experience and/or solution preference.<br />
<br />
In this article we would walk through detailed step-by-step instructions on how to install, configure and achieve HA & failover using <a href="http://www.haproxy.org/" target="_blank">HAProxy</a> & <a href="https://www.keepalived.org/" target="_blank">KeepAlived</a>.<br />
<br />
This article presumes users have some exposure to HAProxy, KeepAlived concepts as well as cloud constructs such as virtual networking, subnets, private/public IPs, security lists/route tables etc..<br />
A little bit of python & bash shell scripting knowledge would be helpful too.<br />
I not, don't worry - I will try my best to point out / reference documentation as much as possible.<br />
<br />
<u><b>Pre-Requisites:</b></u><br />
<br />
1) An Oracle Cloud Account / Tenancy. If you don't have one, you can request a trial instance <a href="https://myservices.us.oraclecloud.com/mycloud/signup?language=en&sourceType=_ref_coc-asset-opcIAASBareMetalLoadBalancer" target="_blank">here</a>.<br />
2) A Compartment that would host our HA instances<br />
3) A VCN (Virtual Cloud Network) with at least 1 public subnet<br />
4) Administrator access on the cloud instance to configure Identity, Network Rules, Policies & Dynamic Groups<br />
<br />
Spin Up 2 OCI VM Instances:<br />
<br />
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>To start, let's first spin up 2 VMs on OCI.<br />
<br />
My VCN looks like below;<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjJKyweq9w-eDOCthThfDwDc_Iztq1dmnqFHeScbRLx78l3khfVwA07GQQFze5P37P74M39faVBzi8O9HsGaFlx_yQSGZBZFj1XzJE_d5wsiEG8qjfXPIBGMJ3WeeyOFLXofrSh1Dc6vtu/s1600/vcn.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="852" data-original-width="1547" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjJKyweq9w-eDOCthThfDwDc_Iztq1dmnqFHeScbRLx78l3khfVwA07GQQFze5P37P74M39faVBzi8O9HsGaFlx_yQSGZBZFj1XzJE_d5wsiEG8qjfXPIBGMJ3WeeyOFLXofrSh1Dc6vtu/s400/vcn.png" width="400" /></a></div>
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
Need help setting up a VCN on OCI? Refer <a href="https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/scenarioa.htm" target="_blank">here</a><br />
<br />
Note: In this example, we have HA within an AD (Availability Domain) leveraging the "Fault Domain" resilience. However, this can be quickly reconstructed with a "regional subnet" construct for a full "site resiliency".<br />
<br />
Within a public subnet, spin up 2 VMs.<br />
In my example I have 2 Angry Bird servers - Terence & Stella.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha9CmSqtsdS2CL52IbUfP-KuHS2AOwEv-vJKj3a7X-sEgz4jBsee8YaTweP47TBOfWsTNqzzJIW87ldP9tVhrDdlk79dDjE1xuWbxa3JJsOsuiv3MGk81fWv5h99GyCU6iVOJFwyZv13Vp/s1600/img.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="439" data-original-width="808" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha9CmSqtsdS2CL52IbUfP-KuHS2AOwEv-vJKj3a7X-sEgz4jBsee8YaTweP47TBOfWsTNqzzJIW87ldP9tVhrDdlk79dDjE1xuWbxa3JJsOsuiv3MGk81fWv5h99GyCU6iVOJFwyZv13Vp/s320/img.png" width="320" /></a></div>
Both running a standard single core VM with Oracle Enterprise Linux in the same availability domain - but placed strategically in different fault domains for intra-AD HA.<br />
<br />
Now, you should see 2 instances up & running within your VCN.<br />
<br />
Let's now SSH into our instances.<br />
<br />
<div class="code">
<i>ssh -i <</i><i><private_key</i><i><ssh_private_key>></ssh_private_key></i><i>></i><i><ssh_private_key> opc@<</ssh_private_key></i><i><public_ip</i><i><ssh_private_key><public_ip_address>></public_ip_address></ssh_private_key></i><i>></i>
</div>
<br />
Note: If you are unable to ssh into your instance. Make sure;<br />
1) The instance is indeed spun up within a public subnet<br />
2) Security List has port 22 enabled (by default this should be there)<br />
3) Ensure you have an internet gateway (IGW) attached to your VCN and route table configured with the route to IGW<br />
4) Finally at the OS level, make sure you open up firewall ports. For a quick test, you can try stopping the firewall on linux OS instances using the command: <i>service firewalld stop</i><br />
<br />
<b><u>Install your preferred proxy service:</u></b><br />
<br />
You can choose to install any of your preferred http/https proxy or load balancer service. Some of the most popular ones include - apache httpd, Nginx, HAProxy.<br />
<br />
In my example, I used HAProxy.<br />
Install HAProxy on both Terence & Stella VM instances.<br />
<i><br /></i>
<br />
<div class="code">
<i>sudo su</i><br />
<i>yum install haproxy</i>
</div>
<br />
Since we are just going to test the failover / HA configuration, we are not going to actually create any backend sets / services. When the reverse proxy service is called, it will be directed to render a static error page.<br />
<br />
Let's create a simple html page under /etc/haproxy/errorfiles/errorpage.http<br />
Replace {ServerName} with appropriate VM names so it helps distinguish the service when it fails over.<br />
<span style="background-color: white; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13.199999809265137px;"></span><br />
<div class="code">
HTTP/1.0 503 Service Unavailable<br />
Cache-Control: no-cache<br />
Connection: close<br />
Content-Type: text/html<br />
<br />
<html><br />
<head><br />
<title>503 - Service Unavailable</title><br />
</head><br />
<body><br />
<div><br />
<h2>Hello from {ServerName}</h2><br />
</div><br />
</body><br />
</html></div>
</div>
</div>
<br />
Configure HAProxy /etc/haproxy/haproxy.cfg with the errorfile info and frontend bind on port 80. Remember, we actually don't have any backends configured. But that's okay for our failover test.<br />
<br />
<div class="code">
defaults<br />
mode http<br />
log global<br />
option httplog<br />
option dontlognull<br />
option http-server-close<br />
option forwardfor except 127.0.0.0/8<br />
option redispatch<br />
retries 3<br />
timeout http-request 10s<br />
timeout queue 1m<br />
timeout connect 10s<br />
timeout client 1m<br />
timeout server 1m<br />
timeout http-keep-alive 10s<br />
timeout check 10s<br />
maxconn 3000<br />
errorfile 503 /etc/haproxy/errorfiles/errorpage.http<br />
#---------------------------------------------------------------------<br />
# main frontend which proxys to the backends<br />
#---------------------------------------------------------------------<br />
frontend hatest<br />
mode http<br />
bind *:80<br />
default_backend app<br />
<br />
#---------------------------------------------------------------------<br />
# static backend for serving up images, stylesheets and such<br />
#---------------------------------------------------------------------<br />
backend static<br />
balance roundrobin<br />
server static 127.0.0.1:4331 check<br />
<br />
#---------------------------------------------------------------------<br />
# round robin balancing between the various backends<br />
#---------------------------------------------------------------------<br />
backend app<br />
mode http<br />
balance roundrobin<br />
option httpchk HEAD / HTTP/1.1<br />
server app1 127.0.0.1:5001 check</div>
<br />
Now, let's configure HAProxy to start on VM boot.<br />
<div class="code">
chkconfig haproxy on<br />
service haproxy start</div>
<br />
Try hitting both server instances with their respective public ip addresses;<br />
http://publicipofinstance<br />
<br />
and you should see the appropriate server's 503 error page with welcome messages.<br />
<table><tbody>
<tr>
<td><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgloQ0cECjFUzQkeJkumYHyU3-4Eq1epeos_CHo6AHwn-vTFj-fTFt9BKmB5JZr4vLMTzhMBrcNFRdOgDNAPg24ftZbpVkMrguICbSCxu2hTR36FvUUmcCJwiUV_-_Jk3IRgYQLf8hlL2Za/s1600/terence+copy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="474" data-original-width="810" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgloQ0cECjFUzQkeJkumYHyU3-4Eq1epeos_CHo6AHwn-vTFj-fTFt9BKmB5JZr4vLMTzhMBrcNFRdOgDNAPg24ftZbpVkMrguICbSCxu2hTR36FvUUmcCJwiUV_-_Jk3IRgYQLf8hlL2Za/s320/terence+copy.png" width="320" /></a></div>
</td>
<td><div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAwiAhlUKcZXa9VQRTIVGOzU1S_x82Q6_7u0dzw9uXUOKvrBZStv1QRLBvtMOltMLHOgEWZ5QgmnszvUDOzJIi25n8EndlLtPn6SoX4ZK_D7LKnoqkwzfmWdxzFgvwY76ZlQHrS8HqvDVi/s1600/terence.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="474" data-original-width="810" height="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAwiAhlUKcZXa9VQRTIVGOzU1S_x82Q6_7u0dzw9uXUOKvrBZStv1QRLBvtMOltMLHOgEWZ5QgmnszvUDOzJIi25n8EndlLtPn6SoX4ZK_D7LKnoqkwzfmWdxzFgvwY76ZlQHrS8HqvDVi/s320/terence.png" width="320" /></a></div>
</td>
</tr>
</tbody></table>
<u>Note:</u><br />
If you are unable to connect from your browser, check the public subnet security list for port 80, route table for IGW route or the OS firewall could be blocking port 80.<br />
<br />
<b><u>Configure Secondary IP:</u></b><br />
<br />
In order for instance to failover, we need a reserved public ip that would shuttle over across instances for a seamless HA / failover.<br />
<br />
In the OCI Console, go to the primary VM instance - pick any one VM that would serve as the "master" node. Click on "Attached VNICs" under the "Resources" section.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
We will now create a secondary IP under the "Primary VNIC".<br />
Click on the "Primary VNIC" > "IP Addresses" > choose "Assign Private IP Address".<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhGUcV-F9roa7SXJ0OiLWq7fqDNDTCuCu_W7AM6HNN69sxmfoQ0nb-j2yyx6_grP3X2eB-T5y311jtL4VGYd_JWRh0vcN5myU3_2BJJQ8q5b0b_ZMMAW5ctzm0akhCKhKfOvUF69fYFq27/s1600/attachedvnic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="562" data-original-width="1600" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhGUcV-F9roa7SXJ0OiLWq7fqDNDTCuCu_W7AM6HNN69sxmfoQ0nb-j2yyx6_grP3X2eB-T5y311jtL4VGYd_JWRh0vcN5myU3_2BJJQ8q5b0b_ZMMAW5ctzm0akhCKhKfOvUF69fYFq27/s320/attachedvnic.png" width="320" /></a></div>
<br />
In the dialog, enter a private ip that is unused within the VCN/Subnet. In my case, I picked 10.0.0.4.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQWzR0BJwx8-qon3OPQVDZRPu9O6cfAyLCS06eX07VcfWKzLzIHzDbd8mwvcSAwig22o8YDFdnImPtMazOao5SO6S8dm-tXLmcEpHB0uNE7GnYSrSw9YNib_X472cuDcyPTJlnS5_esp2-/s1600/private_ip_assign.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="702" data-original-width="1081" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQWzR0BJwx8-qon3OPQVDZRPu9O6cfAyLCS06eX07VcfWKzLzIHzDbd8mwvcSAwig22o8YDFdnImPtMazOao5SO6S8dm-tXLmcEpHB0uNE7GnYSrSw9YNib_X472cuDcyPTJlnS5_esp2-/s320/private_ip_assign.png" width="320" /></a></div>
<br />
Under the "Public IP Address" section, choose "Reserved Public IP" and select "Create a New Reserved Public IP". Optionally give it a name.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvhUF-X8qLg0LWu341IkmuuDiZ49vwBkm3ea4ld2ggprz0RSegHEGDIiR6JhYm18LD79jrFgSiMBmUdIgLhyphenhyphenl_HPNOkRsahFFGxrjYvD5FjwPZWtxKSlOgpwR5-g_xoTs7eZ57w5-l6AKQ/s1600/reserved_ip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1104" data-original-width="1468" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvhUF-X8qLg0LWu341IkmuuDiZ49vwBkm3ea4ld2ggprz0RSegHEGDIiR6JhYm18LD79jrFgSiMBmUdIgLhyphenhyphenl_HPNOkRsahFFGxrjYvD5FjwPZWtxKSlOgpwR5-g_xoTs7eZ57w5-l6AKQ/s320/reserved_ip.png" width="320" /></a></div>
This would be our reserved public ip - which would move along with our chosen private ip address.<br />
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><br />
Go back to the primary VNIC of your VM instance and notice you have 2 public IPs (one ephemeral IP that is OCI assigned and another reserved IP) assigned to the instance. This technically means the VM can be accessed with either IPs.<br />
<br />
<br />
However, we need to make sure the OS config is updated to reflect this.<br />
<br />
Quicker option is to execute the following command (however this would not persist on VM reboot).<br />
In my case, the command looks like below;<br />
<br />
<div class="code">
<i>
ip addr add 10.0.0.4/25 dev ens3 label ens3:0<br />
Syntax: ip addr add <address>/<subnet_prefix_len> dev <phys_dev> label <phys_dev>:<addr_seq_num><br />
</i></div>
<br />
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a>To make this change persistent, create an ifcfg file named /etc/sysconfig/network-scripts/ifcfg-<phys_dev>:<addr_seq_num>. To continue with the preceding example, the file name would be /etc/sysconfig/network-scripts/ifcfg-ens3:0, and the contents would be:<br />
<br />
<div class="code">
<i>
DEVICE="ens3:0"<br />
BOOTPROTO=static<br />
IPADDR=10.0.0.4<br />
NETMASK=255.255.255.128<br />
ONBOOT=yes<br />
</i>
</div>
<br />
Note: Only this step has to be performed on both VM instances - as when the private ip moves (along with the reserved ip) to standby instance, the OS must be able to recognize the IP mapping.<br />
<br />
To verify this change, try accessing the Terence VM with both IP address via a browser.<br />
<br />
<b><u>Install KeepAlived:</u></b><br />
<br />
We will leverage KeepAlived to maintain our server pool, monitor the VM instances and shuttle IP address. In our example we would use the VRRP protocol and unicast ip addressing.<br />
<br />
Make sure to add the VRRP protocol rule to the subnet security list. This will allow the VM instances to communicate over VRRP.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGnFdlapkMHLcLTTgJknSdt48tjJav8hj-z2dTtMkni9nJcgZ0Mlwy00l3Ulhw8sYyGBn7aVN_1NJkt9BZ7ia91QOaIsuAGnWmBgENzAQoYM0AyPoJ33L6RhGuH765XR5AQYDZ-16kmb1U/s1600/security+lists.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1125" data-original-width="1456" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGnFdlapkMHLcLTTgJknSdt48tjJav8hj-z2dTtMkni9nJcgZ0Mlwy00l3Ulhw8sYyGBn7aVN_1NJkt9BZ7ia91QOaIsuAGnWmBgENzAQoYM0AyPoJ33L6RhGuH765XR5AQYDZ-16kmb1U/s320/security+lists.png" width="320" /></a></div>
<br />
Let's install keepalived on both VM instances.<br />
<br />
<div class="code">
<i>
sudo su<br />
yum install keepalived
</i>
</div>
<br />
<br />
Modify the keepalived config file @ /etc/keepalived/keepalived.conf.<br />
My config file for both Terence (Primary / Master) and Stella (Secondary / Backup) instances look like below;<br />
<br />
Note source ip (ip of current server instance), peer ip (ip of backup instance) and state fields. Make sure priority is higher for Master node.<br />
<br />
<div class="code">
<i>! Configuration File for keepalived</i><br />
<i><br /></i>
<i>vrrp_script check_haproxy</i><br />
<i>{</i><br />
<i> script "pidof haproxy"</i><br />
<i> interval 5</i><br />
<i> fall 2</i><br />
<i> rise 2</i><br />
<i>}</i><br />
<i><br /></i>
<i>vrrp_instance VI_1 {</i><br />
<i> state MASTER</i><br />
<i> interface ens3</i><br />
<i> virtual_router_id 50</i><br />
<i> priority 101</i><br />
<i> unicast_src_ip 10.0.0.2</i><br />
<i><br /></i>
<i> unicast_peer</i><br />
<i> {</i><br />
<i> 10.0.0.3</i><br />
<i> }</i><br />
<i> track_script</i><br />
<i> {</i><br />
<i> check_haproxy</i><br />
<i> }</i><br />
<i><br /></i>
<i> notify_master /etc/keepalived/failover.sh</i><br />
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><i>}</i></div>
<br />
<div class="code">
<i>! Configuration File for keepalived</i><br />
<i>vrrp_script check_haproxy</i><br />
<i>{</i><br />
<i> script "pidof haproxy"</i><br />
<i> interval 5</i><br />
<i> fall 2</i><br />
<i> rise 2</i><br />
<i>}</i><br />
<i><br /></i>
<i>vrrp_instance VI_1 {</i><br />
<i> state BACKUP</i><br />
<i> interface ens3</i><br />
<i> virtual_router_id 50</i><br />
<i> priority 99</i><br />
<i> unicast_src_ip 10.0.0.3</i><br />
<i><br /></i>
<i> unicast_peer</i><br />
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><i> {</i><br />
<i> 10.0.0.2</i><br />
<i> }</i><br />
<i> track_script</i><br />
<i> {</i><br />
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><i> check_haproxy</i><br />
<i> }</i><br />
<i><br /></i>
<i> notify_master /etc/keepalived/failover.sh</i><br />
<i>}</i></div>
<br />
<b><u>Configure Instance Principals in OCI:</u></b><br />
<br />
We will leverage the OCI Instance Principals to allow instances within the server pool to manage virtual network connections. This would enable the reserved IP to move across VM instances.<br />
<br />
Create a dynamic group and create a matching rule to ensure all VMs within our server pool are added to the group. More details on how to create a dynamic group <a href="https://docs.cloud.oracle.com/iaas/Content/Identity/Tasks/managingdynamicgroups.htm" target="_blank">here</a>.<br />
Now, create a policy to allow the dynamic group to manage virtual network connectivity.<br />
<br />
In this case, the policy would look like below;<br />
<span style="background-color: white; color: #222222; font-family: , "blinkmacsystemfont" , "segoe ui" , "roboto" , , "ubuntu" , "cantarell" , "helvetica neue" , sans-serif; font-size: 14px;"></span><br />
<div class="code">
<span style="background-color: white; color: #222222; font-family: , "blinkmacsystemfont" , "segoe ui" , "roboto" , , "ubuntu" , "cantarell" , "helvetica neue" , sans-serif; font-size: 14px;"><i>Allow dynamic-group HAProxyDG to manage virtual-network-family in compartment id ocid1.compartment.oc1..aaaaaaaaaxxxxxxxxxxxxxxxxa</i></span></div>
<br />
Install Python OCI SDK:<br />
<br />
Let's now install python oci sdk on both VM instances.<br />
<br />
<div class="code">
<i>sudo su<br />
yum install -y python</i><br />
<br />
<i># Download and install pip</i><br />
<i>curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py</i><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="about:invalid#zClosurez" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<i>python get-pip.py</i><br />
<i><br /></i>
<i># install python OCI SDK</i><br />
<i>pip install oci</i></div>
<br />
Let's now start keepalived daemon services on both VMs. You can either use chkconfig to make this service start on boots. There have been several intermittent issues reported with running keepalived as a service.<br />
Another workaround is to start this via command line using;<br />
keepalived -D<br />
<br />
<a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=5705818669612605666" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="about:invalid#zClosurez" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><b><u>Python Script using OCI SDK to Migrate IP from Master VM to Backup VM:</u></b><br />
<br />
<div class="code">
<i>import sys, oci, logging, os</i><br />
<i><br /></i>
<i>def assign_to_different_vnic(private_ip_id, vnic_id): </i><br />
<i><br /></i>
<i> update_private_ip_details = oci.core.models.UpdatePrivateIpDetails(vnic_id=vnic_id)</i><br />
<i> network.update_private_ip(private_ip_id, update_private_ip_details)</i><br />
<i> </i><br />
<i>if __name__ == '__main__':</i><br />
<i> signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner()</i><br />
<i> network = oci.core.VirtualNetworkClient(config={}, signer=signer)</i><br />
<br />
<i> new_vnic_id = sys.argv[1]</i><br />
<i> privateip_id = sys.argv[2]</i><br />
<i> assign_to_different_vnic(privateip_id, new_vnic_id)</i></div>
<br />
We will now call this python script from a shell script.<br />
Create this shell script under /etc/keepalived/failover.sh<br />
Note: This script will be invoked by the keepalived daemon<br />
<br />
<div class="code">
<i>#!/bin/bash</i><br />
<i><br /></i>
<i>logger -s "Floating the private/public VIPs:"</i><br />
<i>python /home/opc/claimip.py {ocid of vnic} {ocid of private ip} > >(logger -s -t $(basename $0)) 2>&1</i><br />
<i>logger -s "Private/public VIPs attached to the NEW Master Node!"</i>
</div>
<br />
Make sure in each of the VM instances, the vnic ocid is set properly. The private ip ocid will remain the same - since it will be the same ip (in our case 10.0.0.4) that will float across VMs.<br />
<br />
We are all set. Access the reserved public ip (haproxy service) from a browser;<br />
You should now see "Hello from Terence" - since the ip is assigned to this master node.<br />
<br />
Now, try stopping haproxy service: service haproxy stop.<br />
Refreshing the page must now render "Hello from Stella" - as the ip moved over to the backup node.<br />
<br />
We now created a HA configuration. For fun, start the haproxy service back on Terence and stop the haproxy service on Stella.</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-62207946304283712642017-12-17T16:59:00.002-05:002017-12-17T19:04:38.702-05:00Transform your on-premise Oracle Investments to Cloud - A Perspective !!<div dir="ltr" style="text-align: left;" trbidi="on">
This article is an inspiration from some of the questions that I get asked by customers every day.<br />
<br />
1) We have made a lot of on-premise Oracle investments - especially database. How can Oracle help us with our cloud transformation initiatives?<br />
2) How does Oracle DB Cloud Service compare to AWS RDS, Oracle software on Azure? Why should we choose Oracle cloud over competition?<br />
3) What is Oracle's strategy and vision for enterprise customers who have made significant investments over the years on-prem?<br />
4) Other than price-point TCO benefits, what other benefits does Oracle Cloud offer?<br />
<br />
In my job role as an enterprise cloud architect, I engage with my customers by bringing in a point-of-view that helps nurture long-term strategy discussions, enrich ideas, propose solution & options to further their cloud/digital transformation endeavors.<br />
<br />
In this article, we will analyze a typical customer scenario with various cloud options, inherent PaaS advantages, cost comparisons and non-quantifiable benefits.<br />
<br />
Before we delve deep into the details and cost comparisons, I want to state a safe harbor disclaimer that all views (including data points, pricing and options) expressed in this article are my own, based on experience and does not necessarily reflect the views of Oracle. As an Oracle enthusiast and evangelist, this article is purely intended to present a point-of-view, analyze options, value and benefits.<br />
<br />
Okay.. Let's take a quick peek at the Oracle database cloud offerings. Built on the basic premise of offering "complete choice", customers have the option to subscribe to the smallest standard DB instance on a VM for development, 2-node RAC cluster DB instance on bare metal for high performance production workloads or opt for the subscription based extreme performance Exadata in the cloud.<br />
<br />
Unique to Oracle Cloud, for customers with existing on-premise database licenses, it's an understatement to say the BYOL PaaS pricing model is "attractive". Just for quick comparisons, at published Pay-as-yo-go pricing;<br />
<br />
License included DBCS Enterprise Edition (1 OCPU / Hour) is $0.8064<br />
BYOL to Oracle DBCS Enterprise Edition (1 OCPU /Hour) is $0.2903<br />
<br />
That is 64% savings right off the bat.<br />
<br />
1 OCPU is equivalent of one physical core of Intel Xeon processor with hyper threading enabled - equivalent of AWS' 2 vCPUs and 1 Azure Core.<br />
<br />
Let's now look at how this compares to Oracle database on AWS, Azure and GCP. This list is not exhaustive but a selection of a few key considerations for enterprise mission-critical workloads.<br />
<br />
AWS and Azure are authorized cloud environments. Google Cloud Platform is not an authorized cloud environment for Oracle Database (predominantly because of how GCP virtualizes their servers).<br />
<br />
However, should customers choose AWS or Azure cloud to host Oracle Database? - depends on a few factors;<br />
<br />
First and foremost consideration when customers move workloads to cloud: IaaS or PaaS? Database on IaaS only offers "IaaS" benefits like saving datacenter costs. PaaS options like Oracle Database Cloud Service offers higher level of service benefits in the cloud including automated provisioning, elastic scaling, patching, rollback etc..<br />
<br />
<b>a) High Availability (HA):</b> For customers with HA needs, this could be a deal breaker as neither Azure nor AWS support RAC (Real Application Clusters). At best AWS RDS offers replication and Multi-AZ deployments but not with zero-downtime.<br />
<b><br /></b>
<b>b) PaaS / Fully Managed:</b> If you are looking for a fully managed, elastic, seamlessly scalable, full-stack patching capabilities, AWS/Azure may not be right fit.<br />
<b><br /></b>
<b>c) License Cost:</b> Although AWS and Azure are authorized cloud environments for running Oracle database, when counting Oracle Processor license requirements, the
Oracle Processor Core Factor Table is not applicable. This basically makes it 2x more expensive for customers to run Oracle database on AWS/Azure than on-premise.<br />
<b><br /></b>
<b>d) Provisioned IOPS:</b> Costs can quickly add up if customers choose "provisioned IOPS" SSD for storage. By default, for all workloads Oracle Cloud offers high performance NVMe based SSD storage.<br />
<b><br /></b>
<b>e) Data Security & Encryption:</b> TDE (Transparent Data Encryption) is included and enabled by default in the Oracle Cloud for all Oracle editions and options (including database standard edition). For eg., with AWS customer must buy the "Advanced Security" option.<br />
<b><br /></b>
<b>f) Database Options:</b> Oracle cloud bundles database options into 4 broad offerings. Standard, Enterprise, Enterprise High Performance & Enterprise Extreme Performance. For BYOL customers, even the basic Enterprise Edition comes included with database options such as Diagnostics Pack, Tuning Pack, Real Application Testing, Data Masking & Subsetting Pack. This means, customers with Database EE license can leverage these features in the cloud even if they are not currently licensed on-premise - thus presenting a huge advantage.<br />
<b><br /></b>
<b>g) Backup & Restore:</b> Oracle offers in-place restore for your database backups. This means, you can choose from any of the available backups (automated / point-in-time / most recent) and perform a restore on the same database instance. In contrast, AWS allows restore from backups but creates a "new" database instance - potentially impacting application connectivity, VPC, security group re-configuration.<br />
<br />
Now, let's take a typical customer scenario as we walk through various options;<br />
<b><br /></b>
<b>Current Install Base (8 Processor Licenses):</b><br />
<br />
<ul style="text-align: left;">
<li>Oracle Database Enterprise Edition</li>
</ul>
<b><br /></b>
<b>Licensed Database Options:</b><br />
<div style="text-align: left;">
</div>
<ul>
<li>Partitioning</li>
<li>Real Application Clusters (RAC)</li>
<li>Active Data Guard</li>
<li>Advanced Compression</li>
<li>Database Vault</li>
<li>Diagnostics Pack</li>
<li>Tuning Pack</li>
<li>OLAP</li>
<li>Advanced Security</li>
</ul>
<br />
<div style="text-align: left;">
Quick note on Oracle on-prem license metrics - 1 Processor license typically has a 0.5 core factor multiplier unless customers have deployed on high horsepower systems such as Intel Itaniums or IBM Ps.</div>
<br />
In this scenario, this means customer can deploy Oracle software on 16 cores - which typically is equivalent to 32 vCPUs in a virtualized environment (Assumption: 1 physical core -> 2 threads).<br />
<br />
At list price, initial cost of the above configuration would be $1.27 M (including software license acquisition & support). Pragmatically, @ 60% discount, this could be $500 K.<br />
<br />
<style>
#mytable{
width:100%
}
#mytable, th, td {
border: 1px solid black;
border-collapse: collapse;
}
#mytable th, #mytable td {
padding: 5px;
text-align: left;
}
</style>
<br />
<table id="mytable">
<tbody>
<tr>
<th></th>
<th>Year 1</th>
<th>Year 2</th>
<th>Year n</th>
</tr>
<tr>
<td>DB EE License</td>
<td>$1.27 M</td>
<td>$0</td>
<td>$0</td>
</tr>
<tr>
<td>Support</td>
<td>$358 K</td>
<td>$358 K</td>
<td>$358 K</td>
</tr>
<tr>
<td>Total</td>
<td>$1.63 M</td>
<td>$358 K</td>
<td>$358 K</td>
</tr>
<tr>
<td>@ 60% Discount</td>
<td>$508 K</td>
<td>$143 K</td>
<td>$143 K</td>
</tr>
</tbody></table>
<br />
Now, let's pivot this on-premise database to PaaS (Database as a Service)...<br />
Customer has 2 options;<br />
<br />
<ul style="text-align: left;">
<li>Subscribe to "license-included" DBCS (PaaS). This would preserve their on-prem licenses which could be re-purposed for other projects still on-prem</li>
<li>BYOL (Bring Your Own License) option - Convert on-premise database investments to cloud with heavily discounted PaaS subscription costs (Credits applied since customer owns on-prem Oracle database licenses)</li>
</ul>
<div>
For the same configuration, closest option for license-included DBCS is DBCS Extreme Performance (support for RAC & Active Data Guard). Customer is also entitled for other database options like In-Memory, Advanced Analytics etc.. as they are bundled under Extreme Performance edition.<style>
#mytable{
width:100%
}
#mytable, th, td {
border: 1px solid black;
border-collapse: collapse;
}
#mytable th, #mytable td {
padding: 5px;
text-align: left;
}
</style>
<br />
<br />
However, with BYOL, customers can bring their DB Enterprise Edition license along with the licensed options and run it on Oracle cloud as PaaS. In this case, customer also gains access to features like Real Application Testing, Data Masking & Subsetting Pack,<br />
<br />
This is another unique Oracle cloud feature. For eg., AWS does not offer a "license-included" RDS for Oracle Database Enterprise Edition.<br />
<br />
Irrespective of options, subscription cost includes underlying infrastructure (compute, storage & networking), infrastructure support, software (database) licence, software support and automations.<br />
<br />
<table id="mytable">
<tbody>
<tr>
<th></th>
<th>Year 1</th>
<th>Year 2</th>
<th>Year n</th>
</tr>
<tr>
<td>License Included DBCS Extreme Performance</td>
<td>$360 K</td>
<td>$360 K</td>
<td>$360 K</td>
</tr>
<tr>
<td>BYOL DBCS EE</td>
<td>$41 K</td>
<td>$41 K</td>
<td>$41 K</td>
</tr>
</tbody></table>
</div>
<div>
<br />
Clearly BYOL option is a winner with ~89% savings over license included PaaS.<br />
<br />
That's not all. The above is based on published PAYG pricing. Further discounting available on monthly commits.<br />
<br />
Of course, no one size fits all !! Customers have a wide range of options to choose their deployment on VMs, Bare Metal or Exadata. Engage your Oracle team for value add services including portfolio analysis, TCO & tailored roadmap.<br />
<br />
Please leave your feedback and thoughts.</div>
</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-49478940370953510072017-11-20T10:26:00.000-05:002017-11-20T10:26:00.543-05:00The “Enterprise Cloud”: 5 reasons why Oracle’s Next-Gen Cloud Infrastructure is perfect for your Enterprise<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal">
Spend, Security & Sustainability are most likely the top
3 concerns of any CIO/CDO in the cloud era. The spike trend in “cloud
transformation” initiatives is at its peak. As enterprises look to pivot to the
cloud, it’s imperative not to create a “cloud spaghetti” – the same issue that
haunts the traditional on-prem systems. It is not about that first one-off experimental
project or lift & shift of an application to the cloud Infrastructure that
adds value in the longer run – painting the enterprise’s broader vision,
ensuring cloud vendor’s compliance to “standards”, seamless integration options
(PaaS), roadmap for cloud maturity/evolution (SaaS) for higher level of service
efficiencies – all of which should be key concerns of enterprise architects.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Purpose built for diverse enterprise workloads, the next gen
Oracle Cloud Infrastructure promises extreme peak consistent performance, standards
compliance and choice at simple intuitive pricing.<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Here are 5 ways how Oracle Cloud Infrastructure uniquely offers
these capabilities;</div>
<div class="MsoNormal">
<span style="text-indent: -0.25in;"><br /></span></div>
<div class="MsoNormal">
<b><span style="color: #cc0000;"><span style="text-indent: -0.25in;">1)</span><span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal; text-indent: -0.25in;"> </span><span style="text-indent: -0.25in;">Modern
X7 and GPU Instances</span></span></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Oracle Cloud Infrastructure offers compute
for a variety of workloads - from cloud-native application development to
graphic intensive application workloads. Modern X7 skylake processors with up
to 52 OCPUs available in standard, High IO, Dense IO shapes with available
local high-speed NVMe storage and Tesla P100 GPUs based on NVIDIA Pascal
Generation powers Oracle Cloud Infrastructure.</div>
<div class="MsoNormal">
<span style="text-indent: -0.25in;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #cc0000;"><b><span style="text-indent: -0.25in;">2)</span><span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal; text-indent: -0.25in;"> </span><span style="text-indent: -0.25in;">Choice
of Compute & Deployment</span></b></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Oracle is uniquely positioned to
offer 3 deployment models – public cloud, private cloud & cloud @ customer
to serve customers of all different shapes, sizes, needs and maturity.
Customers can provision dedicated bare-metal servers in the cloud where no
provider software resides or virtual machine instances based on needs. Also
unique to Oracle Cloud Infrastructure is that it is optimized to run Oracle
Databases and Oracle Applications helping customers with their transition to
cloud.</div>
<div class="MsoNormal">
<span style="text-indent: -0.25in;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #cc0000;"><b><span style="text-indent: -0.25in;">3)</span><span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal; text-indent: -0.25in;"> </span><span style="text-indent: -0.25in;">High
Throughput 25Gbps Flat Network Infrastructure</span></b></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
With a flat network design reaching
any compute or storage node within the Oracle Cloud Infrastructure is no more
than 2 hops – extreme performance. Connections between any two nodes within an
Availability Domain is < 100 microseconds and < 1 millisecond between Availability
Domains. Unique to Oracle Cloud Infrastructure is the fact that there is no “tax”
for HA – customers pay no “data transfer” charges for HA between Availability
Domains.</div>
<div class="MsoNormal">
<span style="text-indent: -0.25in;"><br /></span></div>
<div class="MsoNormal">
<b><span style="color: #cc0000;"><span style="text-indent: -0.25in;">4)</span><span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal; text-indent: -0.25in;"> </span><span style="text-indent: -0.25in;">High
Performance NVMe local & Flash-based Block Storage</span></span></b></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Oracle Cloud offers best-in-class
storage using the industry-leading NVMe SSDs. In terms of performance, what
this means is that customers can get up to 25,000 IOPS per service volume.
Unique to Oracle Cloud Infrastructure is the model where customers don’t get
charged for provisioned IOPS which makes a lot of IOPS intensive usecases much
cheaper to run. With out-of-the-box data @ rest encryption, integrated backups
and redundancy, customers pay little over 4 cents per GB per month – that’s ~$500
per TB for a year!</div>
<div class="MsoNormal">
<span style="text-indent: -0.25in;"><br /></span></div>
<div class="MsoNormal">
<span style="color: #cc0000;"><b><span style="text-indent: -0.25in;">5)</span><span style="font-size: 7pt; font-stretch: normal; font-variant-numeric: normal; line-height: normal; text-indent: -0.25in;"> </span><span style="text-indent: -0.25in;">Network
Isolation</span></b></span></div>
<div class="MsoNormal">
<span style="font-family: inherit;"><br /></span></div>
<div class="MsoNormal">
<span style="font-family: inherit;">With security at the
core of the design, Oracle Cloud Infrastructure virtualizes at the network
layer – where it truly belongs. This helps fully encapsulate every customer’s
traffic in a completely private SDN. With highly customizable VCNs (Virtual
Cloud Networks), fully configurable IP addresses, subnets, routing, firewall
and connectivity services, organizations can seamlessly extend their IT
infrastructure by mirroring their internal networks or build new network
topologies with fine-grained control.</span></div>
<div class="MsoNormal" style="margin-left: .5in;">
<o:p></o:p></div>
</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-39511268131793052742017-02-08T19:00:00.000-05:002017-02-09T10:10:07.514-05:00Zero-2-Eventing in minutes: Dockerize Apache Kafka on Oracle Container Cloud<div dir="ltr" style="text-align: left;" trbidi="on">
Messaging platform with extreme scaling, fault-tolerance, replication, parallelism, real-time streaming and load balancing - Apache Kafka is arguably the most commonly used distributed messaging platform today.<br />
<br />
A few weeks ago, I was working with one of my customers on their enterprise cloud strategy. They are one of the largest retail brands in the US. As part of their rationalization exercise and "Pivot to the Cloud" strategy, their Kafka event hub had to be containerized and deployed on cloud infrastructure.<br />
<br />
The idea of this blog post is to walk you through running a full-stack Docker based Apache Kafka + Zookeeper cluster on Oracle Container Cloud in a matter of minutes without having to deal with the complex infrastructure/network setup, Docker toolset installs, upgrades and maintenance.<br />
<br />
If you are new to Oracle Container Cloud, please refer to my earlier blog <a href="http://sathyam-soa.blogspot.com/2017/02/simplify-cloud-native-microservices.html" target="_blank">here</a>.<br />
<br />
If you would like to get a feel of the Oracle Container Cloud service, head out to <a href="https://cloud.oracle.com/en_US/tryit">https://cloud.oracle.com/en_US/tryit</a> and request a fully-featured instance.<br />
<br />
Once you are logged-in as a cloud administrator, click on <b>Container Cloud Service</b> from the list of services available on the cloud dashboard.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxkGw7GhMYf15N9UgfkaH7a_MuX9S6YQRQtwB-Ef7FyyWXArfCpUfO1wmdH8WHpNViN0M3qg_h4tKqTv4hn4sUEOs3NkmmS6hxziKu0CoiQhxkVKJ8IY-HAo0jXSaXriYIibCa95ZeLfZD/s1600/cloud_dash.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxkGw7GhMYf15N9UgfkaH7a_MuX9S6YQRQtwB-Ef7FyyWXArfCpUfO1wmdH8WHpNViN0M3qg_h4tKqTv4hn4sUEOs3NkmmS6hxziKu0CoiQhxkVKJ8IY-HAo0jXSaXriYIibCa95ZeLfZD/s400/cloud_dash.png" width="400" /></a></div>
<br />
In the Oracle Container Cloud Service console, click "Create Service" to create a new Container Cloud Service instance.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifN2qa1j8GcMDgr9Rhvb5E_6zg7HbuQoPnKEkvNc08P85kfw3lpiVV59V20QKJDKCd3dYI5Wclit3nZdO1lqs32dUuDm-qf5zBu3u8HeZ7vFsECOAUqdbnwqOfJFtPaveBzghzQLQdMd1l/s1600/occs_console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifN2qa1j8GcMDgr9Rhvb5E_6zg7HbuQoPnKEkvNc08P85kfw3lpiVV59V20QKJDKCd3dYI5Wclit3nZdO1lqs32dUuDm-qf5zBu3u8HeZ7vFsECOAUqdbnwqOfJFtPaveBzghzQLQdMd1l/s400/occs_console.png" width="400" /></a></div>
<br />
Define the service details on the "Create Service" page. Click Next and Confirm.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglcu1J5OrkLp9986_mQG9J9VVHpuGL5Hw1sacO-xqyFAGjTQTYSXuI5DEgMczD0ya3rlb0wmx0ZiNUGV8H3nTvEAR-Wc8minxkHSOeY8dD-B_7JQxF4yORnvXAidcCvNSn8NVAiF7OHzHK/s1600/occs_create.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglcu1J5OrkLp9986_mQG9J9VVHpuGL5Hw1sacO-xqyFAGjTQTYSXuI5DEgMczD0ya3rlb0wmx0ZiNUGV8H3nTvEAR-Wc8minxkHSOeY8dD-B_7JQxF4yORnvXAidcCvNSn8NVAiF7OHzHK/s400/occs_create.png" width="400" /></a></div>
<br />
Give it a few minutes and you will find a Container Manager Node and Worker Nodes provisioned for use. Click on the service to explore the service details.<br />
<br />
Click on the hamburger menu on the container service and choose "<b>Container Console</b>" to open the service administrator console. Login using the administrator user (provided during the service creation).<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-6ydrZexQ3JoGzddJeJ4J2Vfpo1rQPeF57jSpi1UL9uQo78MAVYPb7NxxoJqZt1TpXo9EqOybbsMC3coWouXhvYu2sChTgUMqQQePCc1XQWn1x2mXB8hlcx1ahnkeaOCO_tAqYCC01edQ/s1600/occs_instance.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-6ydrZexQ3JoGzddJeJ4J2Vfpo1rQPeF57jSpi1UL9uQo78MAVYPb7NxxoJqZt1TpXo9EqOybbsMC3coWouXhvYu2sChTgUMqQQePCc1XQWn1x2mXB8hlcx1ahnkeaOCO_tAqYCC01edQ/s400/occs_instance.png" width="400" /></a></div>
<br />
For users of Apache Kafka on Docker, you would be aware of tens of publicly available containers.<br />
<br />
If you are looking to have a simple single container Kafka service where Zookeeper and Kafka brokers co-exist on a single container, I have found <b><span style="color: #cc0000;">spotify/kafka</span></b> easy to setup & use.<br />
For the more complex multi-tier setup, where Zookeeper and Kafka brokers run on dedicated container nodes, <b><span style="color: #cc0000;">wurstmeister/kafka</span></b> is the most popular option.<br />
<br />
Since, I want to demonstrate how to provision a production grade Kafka stack on Oracle Container Cloud, we will go with the <span style="color: #cc0000;"><b>wurstmeister/kafka</b></span> docker image<br />
<br />
Go to the Services section and click "<b>New Service</b>" button. You can see that OCCS offers multiple options to define a service container;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB-XSKg2O9ei_iu6yGz5KfRcmUUJlAKpfoc_898KRk2fJ_wZqOI2Zlrnn3GB_toOqgzZTA1Ly4gHE6enS7GeOFIPNt0VWrTB7PJcVp-SlfhiuK0vPBFdiBKn2ST3gdXrzYhpF9Hay4WcLk/s1600/services.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB-XSKg2O9ei_iu6yGz5KfRcmUUJlAKpfoc_898KRk2fJ_wZqOI2Zlrnn3GB_toOqgzZTA1Ly4gHE6enS7GeOFIPNt0VWrTB7PJcVp-SlfhiuK0vPBFdiBKn2ST3gdXrzYhpF9Hay4WcLk/s400/services.png" width="400" /></a></div>
<ol style="text-align: left;">
<li><b><span style="color: #cc0000;">Builder</span></b>: For the not-so-tech-savvy users where you can simply enter service details and OCCS takes care of building the docker commands for you</li>
<li><b><span style="color: #cc0000;">Docker Run</span></b>: If you are a Docker pro, you can simply head out to this tab and enter your Docker Run commands directly. This is also a great option, if you already have existing Docker setup which allows you to simply copy paste your Docker Run command</li>
<li><span style="color: #cc0000;"><b>YAML</b></span>: For the YAML lovers, you can also define your service using YAML constructs</li>
</ol>
<br />
The cool thing is that, you can use any / either / a combination of these options to define and create your container service. Any changes you make on any of these will reflect immediately on the other automagically.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjruI9jx2aZ4R6eXWUMmBdi4ihmV66HxjqarsWtTz7jq9-z5NRTI9RufCUFSK28gp5iUQHMUrmGns1FZZkJCZpfWtMwfHOzkqY4vj9g6O41M2vNL8pCkRIOu-uMsRW9VMizTcG4wFeS0Wj6/s1600/newservice.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjruI9jx2aZ4R6eXWUMmBdi4ihmV66HxjqarsWtTz7jq9-z5NRTI9RufCUFSK28gp5iUQHMUrmGns1FZZkJCZpfWtMwfHOzkqY4vj9g6O41M2vNL8pCkRIOu-uMsRW9VMizTcG4wFeS0Wj6/s400/newservice.png" width="400" /></a></div>
<br />
Let's use the "<span style="color: #cc0000;"><b>Builder</b></span>" tab to define our first Kafka service.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<b>Service Name</b>: Provide a name for the Kafka service. Notice that the service ID is automatically generated which will be used to uniquely identify our service.<br />
<br />
<b>Service Description</b>: Describe the service. Eg., My Kafka Event Hub.<br />
Notice that this would automatically create a environment variable "occs:description"<br />
<br />
<b>Scheduler</b>: Determines how & where containers will be provisioned across hosts.<br />
<br />
<b>Availability</b>: Define availability of the service based on pool, host or tags.<br />
<br />
<b>Image</b>: Enter "wurstmeister/kafka" (without quotes).<br />
Since this is a public image available on docker hub, OCCS can pull this automatically. Remember you can also pull from private docker registries that you might have. If so, head over to "Registries" section on the main console to add your docker registry.<br />
<br />
<b>Command</b>: If you want to run some commands on container startup that goes here.<br />
<br />
In the "<b>Available Options</b>" panel, choose "<b>Ports</b>". This will add a new "<b>Ports</b>" section to your Builder panel. Click "<b>Add</b>". This will define on what port our Kafka service would run.<br />
Leave the IP field empty (this would default to the container IP based on the host it would run - determined dynamically). Enter host port as 9092, container port as 9092 and choose TCP for protocol.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbpZQQgaOp1-lNOI4xC6ugV5C57-1eojyLRzBoHSK7LafHHp8eOeBtWt7R5NUeglgR98wiGle6GL2YX591YJ1gRStwmYHrED9e1M1HAj8kvfKv2i1nF5svFAz-YnPygcJe_jemefb7BRpg/s1600/ports.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbpZQQgaOp1-lNOI4xC6ugV5C57-1eojyLRzBoHSK7LafHHp8eOeBtWt7R5NUeglgR98wiGle6GL2YX591YJ1gRStwmYHrED9e1M1HAj8kvfKv2i1nF5svFAz-YnPygcJe_jemefb7BRpg/s320/ports.png" width="240" /></a></div>
Your first Kafka service should look like below.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmtARBMFkACB59Hi8Ynaqq_omeYzhuK3W01TxsIJfj6iILIQCu5ImtiBJi84LAYZayJULEafgE5k6n9k54bK61Z_k5hmnYMdraA9RAQCaNAp11VO80Qp9lTPBt53pbKnJKHmOj0h4s5lgm/s1600/ServiceEditor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="337" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmtARBMFkACB59Hi8Ynaqq_omeYzhuK3W01TxsIJfj6iILIQCu5ImtiBJi84LAYZayJULEafgE5k6n9k54bK61Z_k5hmnYMdraA9RAQCaNAp11VO80Qp9lTPBt53pbKnJKHmOj0h4s5lgm/s400/ServiceEditor.png" width="400" /></a></div>
<br />
Now, head over to the "Docker Run" and "YAML" tabs and notice the service definition created automagically in the background while we were defining the service. Click "Save" to exit.<br />
<table> <tbody>
<tr>
<td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwBVptIKBXAwmHeAIw5aGvQmx2JNhxgivgUYWYzDACp3cdkJdlMr112rOpc9VfMmPNAqIULsyPtzlh0BWoBSEOWHdqiRLr4owjcvSMfKsXalbLDnX7FxgGxOThsOzPa3xz-ua8K2mxk04J/s1600/Docker_Run.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwBVptIKBXAwmHeAIw5aGvQmx2JNhxgivgUYWYzDACp3cdkJdlMr112rOpc9VfMmPNAqIULsyPtzlh0BWoBSEOWHdqiRLr4owjcvSMfKsXalbLDnX7FxgGxOThsOzPa3xz-ua8K2mxk04J/s400/Docker_Run.png" width="400" /></a></td>
<td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUJdJ6sJJ3tOVtlU6ZfCluZyhayOma7HJIsj6BfeNGHaOjDEiWX9rYyRRX_9Ym2xjnX2X3r4oFC4hcdfc0nxy_YROy3RFrdB5neZ9D5sRVMNfEI2iLTfnK6LGaysI_k9ok6RK27QPYnQ9d/s1600/yaml.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUJdJ6sJJ3tOVtlU6ZfCluZyhayOma7HJIsj6BfeNGHaOjDEiWX9rYyRRX_9Ym2xjnX2X3r4oFC4hcdfc0nxy_YROy3RFrdB5neZ9D5sRVMNfEI2iLTfnK6LGaysI_k9ok6RK27QPYnQ9d/s400/yaml.png" width="400" /></a></td>
</tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Let's now create another definition for our Zookeeper service. Kafka uses Zookeeper for cluster and member management.<br />
Follow the same steps as earlier to create the new Zookeeper service which would run on port 2181.<br />
<br />
Your Zookeeper service should look like below. Save & Exit.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWKF5FOGx9DTl4WafmPvxTXkM1JWg25_nqhRWCACsxLQHrmZF53YRXu9fubYZKqnkGEP0EUU_RqyW1CD6XxK0Q5TlfnZVLRdBymhkeBvvBspbNsz1gSbjyZCHM6g6icJyF4LgOuVMZyL4R/s1600/zookeeper_service.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWKF5FOGx9DTl4WafmPvxTXkM1JWg25_nqhRWCACsxLQHrmZF53YRXu9fubYZKqnkGEP0EUU_RqyW1CD6XxK0Q5TlfnZVLRdBymhkeBvvBspbNsz1gSbjyZCHM6g6icJyF4LgOuVMZyL4R/s400/zookeeper_service.png" width="400" /></a></div>
<br />
Now that we have our Kafka and Zookeeper services ready, time to link them up together for our full-fledged Kafka stack on cloud.<br />
<br />
Go to "Stacks" section and click "New Stack".<br />
Note: This is the Docker Compose feature. If you already had your Docker Compose YAML files, you can simply copy-paste here to stack up your services.<br />
<br />
Provide the new stack a name: MyKafkaStack (This would create a stack id automatically to uniquely identify the stack).<br />
<br />
Notice all the services displayed on the right under the "Available Services" section.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJbvs0xRexvoJygl-8-_JjZjoyhnNNHEtVDXnaZISodZ2gizIkrZILI5am2U7oC3ck9inD-4tErILM6saNFRljz-2mSSERcs1KWbvJl8wf1dSHWaMe7f3hLxn2IrwnZtq5hWwJYOhxahDK/s1600/stacks.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJbvs0xRexvoJygl-8-_JjZjoyhnNNHEtVDXnaZISodZ2gizIkrZILI5am2U7oC3ck9inD-4tErILM6saNFRljz-2mSSERcs1KWbvJl8wf1dSHWaMe7f3hLxn2IrwnZtq5hWwJYOhxahDK/s400/stacks.png" width="400" /></a></div>
<br />
Similar to the "Service" definition, "Stacks" offer 2 modes to define and create stacks. Either drag & drop services on UI (or) click on "Advanced Editor" to wire services using YAML constructs. Even better, use a combination of both.<br />
Let's use a combination.<br />
<br />
Let's drag & drop MyKafka and MyZookeeper services on to the "Stacks" screen.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaRyxk-GOxXX20GgPeDlBGd9S5N88d_ReUusFGcc4_BmT_KZ5_OTm9Yn-tZ0z_1pQZ8ZDQkGsM1JLb24lJOULV0fwf3H-ahyphenhyphenDQ-E1F29_ueh1_R-HILYStwbQwOFCD_N_eS-wUv0V6OqZ-/s1600/stack.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaRyxk-GOxXX20GgPeDlBGd9S5N88d_ReUusFGcc4_BmT_KZ5_OTm9Yn-tZ0z_1pQZ8ZDQkGsM1JLb24lJOULV0fwf3H-ahyphenhyphenDQ-E1F29_ueh1_R-HILYStwbQwOFCD_N_eS-wUv0V6OqZ-/s400/stack.png" width="400" /></a></div>
<br />
Click on "Advanced Editor" to open the YAML composer. Immediately notice that the YAML script is generated based on the service we composed on the UI (drag & drop).<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic6mBwirp3XHN0p7OTTNHhw5s9TjtKcWaHQdSkd132RgKPXTyyswJz10qx2Vvj-fdAVk3y5CELcvLtCrvCy_9Gjgagphz6zAwmaOBBOAOaJSkrAFjvBdWT9Qfl38fCO4EVB2wM_BNKk-eY/s1600/stack_editor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic6mBwirp3XHN0p7OTTNHhw5s9TjtKcWaHQdSkd132RgKPXTyyswJz10qx2Vvj-fdAVk3y5CELcvLtCrvCy_9Gjgagphz6zAwmaOBBOAOaJSkrAFjvBdWT9Qfl38fCO4EVB2wM_BNKk-eY/s400/stack_editor.png" width="400" /></a></div>
<br />
The Kafka service requires a few environment variables to be set to expose itself for external connectivity. Add the following environment variables to the YAML editor under the "MyKafka" service.<br />
<br />
- "KAFKA_ADVERTISED_HOST_NAME={{hostip_for_interface .HostIPs \"public_ip\"}}"<br />
- KAFKA_ADVERTISED_PORT=9092<br />
- "KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181"<br />
<br />
Note: We want the stack to run on "Any Host" irrespective of IP address changes. The expression above will fetch the IP address of the host dynamically at run-time. You can leverage the "Tips & Tricks" option in the editor to see some tips & examples.<br />
<br />
Define the links under the "MyKafka" service to link it to our Zookeeper container, using the YAML construct below;<br />
<br />
links:<br />
-"MyZookeeper:zookeeper"<br />
<br />
Ensure that your stack editor looks like below and click Done to exit. Save to exit the stack editor.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2BlZVRyswesLYolyRHZJbEIgXpebRlNuM2Wz45GaINHVUYN1ys0l1_WDvvSepa5jMMTRc3aBdHLDf1ULDif9qgsy7Rb04SkpNN-KSBYM06YL-1-aKkq2dljKxHzG-192UmoJwMbTRsyU2/s1600/full_kafka_yaml.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2BlZVRyswesLYolyRHZJbEIgXpebRlNuM2Wz45GaINHVUYN1ys0l1_WDvvSepa5jMMTRc3aBdHLDf1ULDif9qgsy7Rb04SkpNN-KSBYM06YL-1-aKkq2dljKxHzG-192UmoJwMbTRsyU2/s400/full_kafka_yaml.png" width="400" /></a></div>
<br />
Note: A link is shown on the UI indicating the Kafka service is "linked" to the Zookeeper.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgctmmAdToR4guxHPR8IM70Uc8URIHVPJ7tKQ4g19HY87IVRwXD-NpjXFExZUkjR7l7ELlcH5NVzrS00ZPeWQDY1rqXAZD-Jgk2Y2p9bLEvgCaPZgm4JVjoAJ7xFONJrBotw4hDtwvaXmE/s1600/mykafkastackui.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgctmmAdToR4guxHPR8IM70Uc8URIHVPJ7tKQ4g19HY87IVRwXD-NpjXFExZUkjR7l7ELlcH5NVzrS00ZPeWQDY1rqXAZD-Jgk2Y2p9bLEvgCaPZgm4JVjoAJ7xFONJrBotw4hDtwvaXmE/s400/mykafkastackui.png" width="400" /></a></div>
<br />
OCCS offers a convenient single-click deployment of stacks. Click "Deploy" next to the "MyKafkaStack" to deploy both Kafka and Zookeeper services.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiehzA0Wkunp3v8lQMrQzSUWYcIP4EjAWjB58rNBvZ1dAC3R63B3j3yT1ZUiV4K1EaiX-DzCv4JcZ7xZtRt-LAUNHyuuctcxMCmJ2JXDRRA5ePiT5cX0aQEfKIefye0e-ovWRHn3ucDd1Iv/s1600/dep.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiehzA0Wkunp3v8lQMrQzSUWYcIP4EjAWjB58rNBvZ1dAC3R63B3j3yT1ZUiV4K1EaiX-DzCv4JcZ7xZtRt-LAUNHyuuctcxMCmJ2JXDRRA5ePiT5cX0aQEfKIefye0e-ovWRHn3ucDd1Iv/s400/dep.png" width="400" /></a></div>
<br />
On successful deployment, you should see 2 healthy services running. Note that OCCS allows you to define health checks on containers.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5OqwighvN3rIUp-WamnZsLugL7MARsigjxlXtK36vjcsLqBp5xuSDg2oZfZTL6qT0pl4WTl4qH_kS707l16RNEIMxroPbb9uSVfF_mPUDwPo4mPy50oopI_I7ecmtgh83P9UM2PlGGWdf/s1600/Deployment.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5OqwighvN3rIUp-WamnZsLugL7MARsigjxlXtK36vjcsLqBp5xuSDg2oZfZTL6qT0pl4WTl4qH_kS707l16RNEIMxroPbb9uSVfF_mPUDwPo4mPy50oopI_I7ecmtgh83P9UM2PlGGWdf/s400/Deployment.png" width="400" /></a></div>
<br />
You can also define "webhooks" for your Continuous Integration (CI) / Continuous Delivery (CD) capabilities.<br />
<br />
Let's quickly test our new Kafka stack. I am using my local Kafka command line client to test my Kafka service. First create a new topic, start the producer and consumer scripts in your terminals.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMjnKk6adm3X8uxuFrJEVBweOT0CEgxiACm2R6t6T8tsQl_6Hppnn9m849O8-UdRqGsboVbbYWYF0gedoPxE36Md4JQtqNlwkKwKfkqFzJwClWIQ45_Vgas06mwiF0UPH1h9pIfKBSEeHO/s1600/testclients.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMjnKk6adm3X8uxuFrJEVBweOT0CEgxiACm2R6t6T8tsQl_6Hppnn9m849O8-UdRqGsboVbbYWYF0gedoPxE36Md4JQtqNlwkKwKfkqFzJwClWIQ45_Vgas06mwiF0UPH1h9pIfKBSEeHO/s400/testclients.png" width="400" /></a></div>
<br />
We just deployed a Apache Kafka Zookeeper Docker stack on Oracle Cloud. You can now start scaling your Kafka cluster, add more container/hosts and dynamically scale up/down and use this as your cloud-based event hub.<br />
<br />
In my next blog, we will see how to rapidly deploy a LAMP stack application on Oracle Container Cloud. Stay Tuned!</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-61130729320546568462017-02-07T16:11:00.000-05:002017-02-09T10:11:59.759-05:00Simplify Cloud Native, Microservices DevOps with Oracle Container Cloud<div dir="ltr" style="text-align: left;" trbidi="on">
"Containers" are becoming the new normal and an indispensable part of cloud native / microservices development. If you are new to the concept of containers, open a new tab and google. Container benefits are out of scope of this article.<br />
With respect to cloud-native development, containers provide DevOps 2 huge benefits;<br />
<br />
<ul style="text-align: left;">
<li>Robust foundation for microservices "style" architecture & scalability</li>
<li>Environment parity (Dev-Test-Prod) and seamless hybrid deployment</li>
</ul>
<br />
All things considered, containers are great for "Dev". Are they good for "Ops"?<br />
<br />
With even more services to manage, monitor & maintain, containers certainly pose some challenges unless you have a robust, easy to provision management and monitoring platform.<br />
<br />
Oracle Container Cloud Service aims to solve exactly that problem. With comprehensive tooling to compose, deploy, orchestrate and manage container-based apps, Oracle container cloud enables rapid creation, deployment & management of enterprise-grade container infrastructure.<br />
<br />
Let's take a peek under the hood;<br />
<br />
<b><u>Spin-up or Tear-down containers at-will:</u></b><br />
<br />
Whether you are looking to quickly setup an infrastructure for testing your container apps or setting up a production-grade container infrastructure to run your apps, you can do it all with just a few clicks.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYrwliDh98d32NRpnmk1aeYR9VVSyPJuGjWn6NlcKNh127iQTMC0-1fSlTLm4IkM1lCRduqZSLKnb88Ce7Ty3ckFtXdc0znsuua-DY3H6DBOo9knif5oeZkN1d8JJtYl2x6cV2O__3Lm0C/s1600/cloud.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYrwliDh98d32NRpnmk1aeYR9VVSyPJuGjWn6NlcKNh127iQTMC0-1fSlTLm4IkM1lCRduqZSLKnb88Ce7Ty3ckFtXdc0znsuua-DY3H6DBOo9knif5oeZkN1d8JJtYl2x6cV2O__3Lm0C/s400/cloud.png" width="400" /></a></div>
<br />
Oracle container cloud automatically provisions a manager node which will act as the "container management" server and you have the ability to configure the shape and size of the hosts on which your containers would run - called "worker nodes".<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCtD6Wn3vObcCe7IzNGF9mvyN4M1qs7DlUwyuGHwO1byEzuxc3hs1A7UrMWgzsJSB7srlUdwGHju1xHWvDH3oxHV3UWDh6gwEnaoPFN0mdEzkvRabgeql8xMvKCIb00yReX8TyDIlWJU1R/s1600/occs1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="271" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCtD6Wn3vObcCe7IzNGF9mvyN4M1qs7DlUwyuGHwO1byEzuxc3hs1A7UrMWgzsJSB7srlUdwGHju1xHWvDH3oxHV3UWDh6gwEnaoPFN0mdEzkvRabgeql8xMvKCIb00yReX8TyDIlWJU1R/s400/occs1.png" width="400" /></a></div>
<br />
Group or Assign hosts to different pools for resource segregation using the "Resource Pools" feature.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix0mR4txDTXEf9N0_8uJILT2L2nwHE1azPvg8G950-XQssIRRY7j94ZqadWjOCoWuyg9AgKtZkCN3cAKmvWGpPYUpQCAdmw9LeLBSalxy8Cu1qFsoK6lZyvkTGqRw35jxczzqxEaEFGvha/s1600/pools.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="136" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix0mR4txDTXEf9N0_8uJILT2L2nwHE1azPvg8G950-XQssIRRY7j94ZqadWjOCoWuyg9AgKtZkCN3cAKmvWGpPYUpQCAdmw9LeLBSalxy8Cu1qFsoK6lZyvkTGqRw35jxczzqxEaEFGvha/s400/pools.png" width="400" /></a></div>
<br />
In addition, "Tags" feature allows you to tag your resource pools, hosts, services and deployments. Tags provide fine-grained control over hosts/resource pools on which a service/stack can be deployed on.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiM2VCgbTXgVYHa4MtFadJoNz8_vULh95-khjhFuuOX-yuvClWlj4QCdlIKeypped22adkyk5-hALwjYdd1DlOeuuoSwa3s72lrbCWEy3XxCyqozdhE_VNJgx_fT555R-466hibq5YypL3/s1600/tags.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiM2VCgbTXgVYHa4MtFadJoNz8_vULh95-khjhFuuOX-yuvClWlj4QCdlIKeypped22adkyk5-hALwjYdd1DlOeuuoSwa3s72lrbCWEy3XxCyqozdhE_VNJgx_fT555R-466hibq5YypL3/s400/tags.png" width="400" /></a></div>
<br />
Discover & Manage DNS information of all your running docker containers from the "Service Discovery" page.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMgewir74zWb7cpT3U4SBReP290uTX8KtldUJc8fbdc445C87quKk9bHz0PXdZAID5Eyt-HxB8WE1hCz4Uv0J2zJjOfHN96d-Ah0vQGdsiw7hGgSXwhu111Q1hInTBk72mMyYDKHq2Mfpp/s1600/discovery.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMgewir74zWb7cpT3U4SBReP290uTX8KtldUJc8fbdc445C87quKk9bHz0PXdZAID5Eyt-HxB8WE1hCz4Uv0J2zJjOfHN96d-Ah0vQGdsiw7hGgSXwhu111Q1hInTBk72mMyYDKHq2Mfpp/s400/discovery.png" width="400" /></a></div>
<br />
<b><u>BYOD (Bring Your Own Docker containers) or Start with example stacks:</u></b><br />
<br />
Oracle container cloud links to the public docker hub registry out-of-the-box where you can pull from thousands of docker images. Whether you have a public docker repository or a private docker hub, you can add them to the container cloud docker registry.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN0VE7Ts_drON_EW26J7KREWog9W8yidG1NMaSvbtsCRWZ5WT4UoL5UN27ss-t-IKeBsd202EofkiYkR5-v-OnCTP7Vw4D-xcMPTzyXZMCNUJnfnaAjzMoqPTgzDnrU5Wg9QaDDZlDWPQj/s1600/registry.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="78" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN0VE7Ts_drON_EW26J7KREWog9W8yidG1NMaSvbtsCRWZ5WT4UoL5UN27ss-t-IKeBsd202EofkiYkR5-v-OnCTP7Vw4D-xcMPTzyXZMCNUJnfnaAjzMoqPTgzDnrU5Wg9QaDDZlDWPQj/s400/registry.png" width="400" /></a></div>
<br />
If you are new to Docker containers, you can jumpstart with some of the in-built example services and stacks - Nginx, Apache HTTP server, Mongo, MySQL, MariaDB, Busybox, HAProxy, Wordpress etc..<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVmRbE96uYphMu8EXihGF9QWglD4pJxD1uyjEIdlT3QoEASC9y858RhoeP4JZKlxYRgmgz5s3Tecu58c-3KbFLw_nThCHJScLw2Rf1Lo80m6oDo7pFPhD6jiHHoPXXMu56opclVGSSXxA5/s1600/services.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVmRbE96uYphMu8EXihGF9QWglD4pJxD1uyjEIdlT3QoEASC9y858RhoeP4JZKlxYRgmgz5s3Tecu58c-3KbFLw_nThCHJScLw2Rf1Lo80m6oDo7pFPhD6jiHHoPXXMu56opclVGSSXxA5/s400/services.png" width="400" /></a></div>
<br />
<b><u>Focus on building your apps and service stacks:</u></b><br />
<br />
As I mentioned earlier, the operational complexity with containers and microservices is with the complex orchestration scripts, dependency management, scaling and deployment. Oracle container cloud stands-out in this respect - providing the ability to create single-click deployment of the entire stack, built-in service discovery, quick import existing Docker Run / Docker Compose YAML and on-click scale - all from a single pane of glass.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC9tUE8_i1HdnuseIFIfDaYUfrQqxg7KiFGrnjZZtYaHlG-l_BIGLka4hhLiYVw4f8Pwn4G0kkZzLpEL-DDIWByiO_rynpYo4s1FUkTXMrdf0sbfO8z4XtLSEG0uv6wlTO87DXcDJW8AFo/s1600/stacks.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC9tUE8_i1HdnuseIFIfDaYUfrQqxg7KiFGrnjZZtYaHlG-l_BIGLka4hhLiYVw4f8Pwn4G0kkZzLpEL-DDIWByiO_rynpYo4s1FUkTXMrdf0sbfO8z4XtLSEG0uv6wlTO87DXcDJW8AFo/s400/stacks.png" width="400" /></a></div>
<br />
<b><u>When it's time to fly:</u></b><br />
<br />
After successful deployment of Docker containers, it's highly critical to gain insight into your container apps and services.<br />
Oracle Container Cloud offers simple yet powerful monitoring & management dashboards to monitor container/host performance, container health, event audit logs. To top it, OCCS also maintains the running state of the app with self-healing application deployments.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVviE8OhW31318_Cc3zjh7z9bnk2gVRZkRjljsjpil2uebZd_oSWpzb6LUfX_Mg-kpxpR6lbDgB4y4NsUZUPmi7SrkaRp6adLM23xYoxEaN_QMr7Z82IaCkbcPoPxLOcIy4LBbfMXUdqki/s1600/tasks.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVviE8OhW31318_Cc3zjh7z9bnk2gVRZkRjljsjpil2uebZd_oSWpzb6LUfX_Mg-kpxpR6lbDgB4y4NsUZUPmi7SrkaRp6adLM23xYoxEaN_QMr7Z82IaCkbcPoPxLOcIy4LBbfMXUdqki/s400/tasks.png" width="400" /></a></div>
<br />
Any modern cloud offering is never complete without REST APIs. OCCS offers complete suite of REST APIs to configure, deploy, administer, monitor, orchestrate & scale your container apps/services.<br />
<br />
In my next <b><a href="http://sathyam-soa.blogspot.com/2017/02/zero-2-eventing-in-minutes-dockerize.html" target="_blank"><span style="color: blue;">article here</span></a></b>, I will walk you through on how to deploy a full-stack Apache Kafka service with Zookeeper in minutes.<br />
<br />
Eager to get started? Get a free trial of the Oracle Container Cloud <a href="https://cloud.oracle.com/container" target="_blank">here</a> and let me know your feedback.</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-7291732231928612862016-12-22T13:15:00.001-05:002016-12-22T13:15:13.210-05:00SOA 12c: Process Large Files Using Oracle MFT & File Adapter Chunked Read Option<div dir="ltr" style="text-align: left;" trbidi="on">
SOA 12c adds a new ChunkedRead operation to the JCA File Adapter. Prior to this, users had to use a SynchRead operation and then edit the JCA file to achieve a "chunked read". In this blog, I will attempt to explain how to process a large file in chunks using the SOA File Adapter and some best practices around it. One of the major advantages of chunking large files is that it reduces the amount of data that is loaded in memory and makes efficient use of the translator resources.<br />
<br />
"File Processing" means, reading, parsing and translating the file contents. If you just want to move/transfer a file consider using MFT for best performance, efficiency & scalability.<br />
<br />
In this example, MFT gets a large customer records file from a remote SFTP location and sends it to SOA layer for further processing. MFT configuration is pretty straight-forward and is out of scope in this entry. For more info on Oracle MFT read <a href="http://sathyam-soa.blogspot.com/2015/01/oracle-mft-managed-file-transfer.html" target="_blank">here</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVFF82wMP8CrP3xR4kheh4EJAPZrDhgGqqgaZ9SSXnQoJTxQMcdotBOt9Oh2ElGLExKcusu90hGW-WCx1Fm2MS34pbC71-uPd4CPLp71UsTVbcQC_SFkqiDKovQYh39lnfZQ36Jn6nf3UP/s1600/overall.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVFF82wMP8CrP3xR4kheh4EJAPZrDhgGqqgaZ9SSXnQoJTxQMcdotBOt9Oh2ElGLExKcusu90hGW-WCx1Fm2MS34pbC71-uPd4CPLp71UsTVbcQC_SFkqiDKovQYh39lnfZQ36Jn6nf3UP/s400/overall.png" width="400" /></a></div>
<br />
SOA 12c offers tight integration with Oracle MFT through the simple to use MFT adapter. If the MFT adapter is configured as a service, MFT can directly pass the file either inline or as a reference to the SOA process. If configured as a reference, it enables a SOA process to leverage MFT to transfer a file.<br />
<br />
MFT also provides a bunch of useful file metadata info (target file name, directory, file size etc..) as part of the MFT header SOAP request.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_25dj-CazeSdx9mdu63wIxR_zVcfGw7aw9L_qR4f8qU0TyQ1DaGLBDZIFxRvjwSw-WJ5Jo8Hb-NMnsEikeZ5_2AAVz4Fqy9y7QCm2wmyik08jUj0HyyvZvBQ7LNuop6ZNayutsgCdERhh/s1600/MFTAdapter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_25dj-CazeSdx9mdu63wIxR_zVcfGw7aw9L_qR4f8qU0TyQ1DaGLBDZIFxRvjwSw-WJ5Jo8Hb-NMnsEikeZ5_2AAVz4Fqy9y7QCm2wmyik08jUj0HyyvZvBQ7LNuop6ZNayutsgCdERhh/s320/MFTAdapter.png" width="239" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Create a File Adapter:</u></b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Drag & drop a File adapter to the external references swimlane of our SOA composite. Follow instructions in the wizard to complete the configuration as shown below. Ensure that you choose the "Chunked Read" operation and define a chunk size - This will be the number of records in the file that will be read in each iteration. For eg., if you have 500 records with a chunk size of 100, the adapter would read the file in 5 chunks.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiin5k41ggZnFhQ1Eab3RKu21iLV8PJHQBChLXxdTFvRHkYXhd97_ZoiIGsAS4BZihbSDf_mlNXaP08N6ELJkR0rmaMda00u605xih1t40E2dwvDPTbSsaKkdmqfsB2YM_4W-aZ6vX7YNY5/s1600/chunk1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiin5k41ggZnFhQ1Eab3RKu21iLV8PJHQBChLXxdTFvRHkYXhd97_ZoiIGsAS4BZihbSDf_mlNXaP08N6ELJkR0rmaMda00u605xih1t40E2dwvDPTbSsaKkdmqfsB2YM_4W-aZ6vX7YNY5/s400/chunk1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIEBthrtLow2vz5dz3KtYt-T60wfC2gA2P9EbqTIydLFkVVhA3xikYegtVRZs1J6s3SLrtfBcKGDWwCvzt-Nkl815uUMFPbTRmH-S7T_06gsjRrRH3mke-8JoeQe89sDxIOH7Wbkp70GFh/s1600/chunk2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIEBthrtLow2vz5dz3KtYt-T60wfC2gA2P9EbqTIydLFkVVhA3xikYegtVRZs1J6s3SLrtfBcKGDWwCvzt-Nkl815uUMFPbTRmH-S7T_06gsjRrRH3mke-8JoeQe89sDxIOH7Wbkp70GFh/s400/chunk2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv-2kblqzilqcIrYu9qsNWXwZXCV4mCT6vLScpXTtIrqdDi5pKCxoiI091K3TeL_5tMDOYhlaKi3ZPzF3cievCk8sDqiVo-obSA1ZCxu3GxpxlMjIJ0J8mF3UtKYqyfqGzVtaovntDcuh-/s1600/chunk3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv-2kblqzilqcIrYu9qsNWXwZXCV4mCT6vLScpXTtIrqdDi5pKCxoiI091K3TeL_5tMDOYhlaKi3ZPzF3cievCk8sDqiVo-obSA1ZCxu3GxpxlMjIJ0J8mF3UtKYqyfqGzVtaovntDcuh-/s400/chunk3.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVHCVpaJIf66KRWzeg9vwCH1bzj9HivmuU4xivqNZbOhVl5RvEJAuLJ0cl_TaYNGzG1Q7C2aU4GREyh1AiG4M2p7LuFITi9a5arvoSIPUOt_Ly7vKFmFsut3X-stKM8Crjbeu_wJG9ldD9/s1600/chunk4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVHCVpaJIf66KRWzeg9vwCH1bzj9HivmuU4xivqNZbOhVl5RvEJAuLJ0cl_TaYNGzG1Q7C2aU4GREyh1AiG4M2p7LuFITi9a5arvoSIPUOt_Ly7vKFmFsut3X-stKM8Crjbeu_wJG9ldD9/s400/chunk4.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxrtUBmN0Ah0QHJ4lIyXnktgeZo3-S67yGFOYmErEewwFLMBQX_bQzgjwdrfAAa7r2accCEz-R7Q-tKJImdF3KHfSUMkgWq5Y7j-P8frfoDpy00lo7Gg2DbT2ahzLCutHg1RZ006Y-aiQk/s1600/chunk5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxrtUBmN0Ah0QHJ4lIyXnktgeZo3-S67yGFOYmErEewwFLMBQX_bQzgjwdrfAAa7r2accCEz-R7Q-tKJImdF3KHfSUMkgWq5Y7j-P8frfoDpy00lo7Gg2DbT2ahzLCutHg1RZ006Y-aiQk/s400/chunk5.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8naJv5lAljdTbci2rYolBEih3bOmcQ2jS4a5dwjErDo5GBvvsZ3hNG5C_7I7A_T-BXf2b_MXapv8pUqwx5mrn4DO18PvIGvEdzlALUh22dfa-bo9OYgBQuUyDOQfB8ip-lbYm5CWXiHKN/s1600/chunk6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8naJv5lAljdTbci2rYolBEih3bOmcQ2jS4a5dwjErDo5GBvvsZ3hNG5C_7I7A_T-BXf2b_MXapv8pUqwx5mrn4DO18PvIGvEdzlALUh22dfa-bo9OYgBQuUyDOQfB8ip-lbYm5CWXiHKN/s400/chunk6.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxZDh9TCLjjBfvoPRtRUpBTP773w41F6dLwuP2u9gWmC282kWWaB0-yvjktnWGDHQJfUYNavDJeWd1qb6X6x-8Kt5g_6e9JruOFc3LrOIyfJVIhjQ7HYaRJBi2DeeN7n5IFfMyRDjNlo-W/s1600/chunk7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxZDh9TCLjjBfvoPRtRUpBTP773w41F6dLwuP2u9gWmC282kWWaB0-yvjktnWGDHQJfUYNavDJeWd1qb6X6x-8Kt5g_6e9JruOFc3LrOIyfJVIhjQ7HYaRJBi2DeeN7n5IFfMyRDjNlo-W/s400/chunk7.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
You will have to create an NXSD schema which can be generated with the sample flat file. The file adapter uses the NXSD to read the flat file and also convert it into XML format.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Implementing the BPEL Process:</u></b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now, create a BPEL process using the BPEL 2.0 specification [This is the default option].</div>
<div class="separator" style="clear: both; text-align: left;">
As a best practice, ensure the BPEL process is asynchronous - this will ensure that the "long running" BPEL process doesn't hog threads.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In this case, since we are receiving a file from MFT, we will choose "No Service" template to create a BPEL process with no interface. We will define this interface later with the MFT adapter.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhao-TQrwMahQYC-LtUkWr0r680fa9cIrx8VY5mbn493f6RPPYCSLks8_26Hjyqpyasp4CAqC42F4j43gjBsyN6HWwcFvpE4wxa4P7oAxLUhy2RORMjI39krTcuoYDlWrSLIwYaho1Rt11o/s1600/bpel2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="337" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhao-TQrwMahQYC-LtUkWr0r680fa9cIrx8VY5mbn493f6RPPYCSLks8_26Hjyqpyasp4CAqC42F4j43gjBsyN6HWwcFvpE4wxa4P7oAxLUhy2RORMjI39krTcuoYDlWrSLIwYaho1Rt11o/s400/bpel2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Create MFT Adapter:</u></b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Drag and drop an MFT adapter to the "Exposed Services" swimlane of your SOA composite application, provide a name and choose "Service". Now, wire the MFT Adapter service and File Adapter reference to the BPEL process we created. Your SOA composite should look like below;</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0gKzE0sxF6WEVXqPYoJUpq6wbjUA8HHBbUN1Sr9SOi19Oi4l5y_3rVkXVT6EwRDPF8odRmdfsbojgMmFB1omifHmo4CoLLhAG09eDo4h6K4DvFzMw8rsjrTG8KpPbSvuuoNtw3-aw0ZNY/s1600/MFT_Adapter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0gKzE0sxF6WEVXqPYoJUpq6wbjUA8HHBbUN1Sr9SOi19Oi4l5y_3rVkXVT6EwRDPF8odRmdfsbojgMmFB1omifHmo4CoLLhAG09eDo4h6K4DvFzMw8rsjrTG8KpPbSvuuoNtw3-aw0ZNY/s400/MFT_Adapter.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJccR-TUrW7WMDZWxGyeVz7gN06lGC3PzeNahBMWED4sKgQAMxbNO4cvgmplrPzYGbIhh4Sr6aBXlVdPjeBIjm7c0ftvHEOzDfcgzsBhutWVCBLsNKodx47bumy66c37hyxh-T3KChD45U/s1600/composite.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJccR-TUrW7WMDZWxGyeVz7gN06lGC3PzeNahBMWED4sKgQAMxbNO4cvgmplrPzYGbIhh4Sr6aBXlVdPjeBIjm7c0ftvHEOzDfcgzsBhutWVCBLsNKodx47bumy66c37hyxh-T3KChD45U/s400/composite.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Processing large file in chunks:</u></b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In order to process the file in chunks, the BPEL process invoke that triggers the File Adapter must be placed within a while loop. During each iteration, the file adapter uses the property header values to determine where to start reading.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
At a minimum, the following are the JCA adapter properties that must be set;</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><span style="color: #cc0000;">jca.file.FileName</span></b> : Send/Receive file name. This property overrides the adapter configuration. Very handy property to set / get dynamic file names</div>
<div class="separator" style="clear: both; text-align: left;">
<b><span style="color: #cc0000;">jca.file.Directory</span></b> : Send/Receive directory location. This property overrides the adapter configuration</div>
<div class="separator" style="clear: both; text-align: left;">
<b><span style="color: #cc0000;">jca.file.LineNumber </span></b>: Set/Get line number from which the file adapter must start processing the native file</div>
<div class="separator" style="clear: both; text-align: left;">
<b><span style="color: #cc0000;">jca.file.ColumnNumber</span></b> : Set/Get column number from which the file adapter must start processing the native file</div>
<div class="separator" style="clear: both; text-align: left;">
<b><span style="color: #cc0000;">jca.file.IsEOF</span></b> : File adapter returns this property to indicate whether end-of-file has been reached or not</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Apart from the above, there are 3 other properties that helps with error management & exception handling.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><span style="color: #cc0000;">jca.file.IsMessageRejected</span></b> : Returned by the file adapter if a message is rejected (non-conformance to the schema/not well formed)</div>
<div class="separator" style="clear: both; text-align: left;">
<b><span style="color: #cc0000;">jca.file.RejectionReason</span></b> : Returned by the file adapter in conjunction with the above property. Reason for the message rejection</div>
<div class="separator" style="clear: both; text-align: left;">
<b><span style="color: #cc0000;">jca.file.NoDataFound</span></b> : Returned by the file adapter if no data is found to be read</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In the BPEL process "Invoke" activity, only jca.file.FileName and jca.file.Directory properies are available to choose from the properties tab. We will have to configure the other properties manually.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
First, let's create a bunch of BPEL variables to hold these properties. For simplicity, just create all variables with a simple XSD string type.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8hzmcCHM3T7OOF4ipphFGFHsV9rrkQTIUoqY3jmi0DpabP10VWdvng8-axtcil481eCWJSB1rjplbcrCZKDLRgZ8k-zKIUAGfCqOuFBHl7kOaw9SHiIFQTz56_qcJOBxM95r6OALP_upH/s1600/vars.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8hzmcCHM3T7OOF4ipphFGFHsV9rrkQTIUoqY3jmi0DpabP10VWdvng8-axtcil481eCWJSB1rjplbcrCZKDLRgZ8k-zKIUAGfCqOuFBHl7kOaw9SHiIFQTz56_qcJOBxM95r6OALP_upH/s400/vars.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Let's now configure the file adapter properties.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
For input, we must first send filename, directory, line number and column number to the file adapter, so the first chunked read can happen. From the return properties (output), we will receive the new line number, column number, end-of-file properties which can be fed back to the adapter within a while loop.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Click on the "source" tab in the BPEL process and configure the following properties. Syntax shown below is for BPEL 2.0 spec, since we built the BPEL process based on BPEL 2.0.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Note: In BPEL 1.1 specification, the syntax was bpelx:inputProperties & bpelx:outputProperties.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaGcpBadr8EXg4zanL2m-ddKuD3fAum-7d871LidAt9C0I0NU-l9jAPAogYs1TaT5getKXSKzFqPvAal3hmOCYcSJ3A23MknL6kZGDaHnF4CweRqDVAioEfnhySIQR3x2dybKf5XTPWlpk/s1600/props2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaGcpBadr8EXg4zanL2m-ddKuD3fAum-7d871LidAt9C0I0NU-l9jAPAogYs1TaT5getKXSKzFqPvAal3hmOCYcSJ3A23MknL6kZGDaHnF4CweRqDVAioEfnhySIQR3x2dybKf5XTPWlpk/s400/props2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Drag & drop an assign activity before the while loop to initialize the variables for the first time the file is read (first chunk) - since we know the first chunk of data will start at line 1 and column 1.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
lineNumber -> 1</div>
<div class="separator" style="clear: both; text-align: left;">
columnNumber -> 1</div>
<div class="separator" style="clear: both; text-align: left;">
isEOF -> 'false'</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
For the while loop condition, the file adapter must be invoked until end-of-file is reached, enter the following loop condition;</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicKcCDgXXDaVgC4YjbHP28NX-q7W9MjmMHQFpM97kX_C9YyWXsJeS4Z8dYy6eezQqMarci9v6D-g41smnVNNaVnaV_jQIXZtxajf1hlMhDFz4Sjj7ZRZDEQ7zDKsHGUBfaA8uZxBwoOzyr/s1600/while.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicKcCDgXXDaVgC4YjbHP28NX-q7W9MjmMHQFpM97kX_C9YyWXsJeS4Z8dYy6eezQqMarci9v6D-g41smnVNNaVnaV_jQIXZtxajf1hlMhDFz4Sjj7ZRZDEQ7zDKsHGUBfaA8uZxBwoOzyr/s320/while.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Within the while loop, drag & drop another assign activity to re-assign file adapter properties.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
returnIsEOF -> isEOF</div>
<div class="separator" style="clear: both; text-align: left;">
returnLineNumber -> lineNumber</div>
<div class="separator" style="clear: both; text-align: left;">
returnColumnNumber -> columnNumber</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This will ensure that the in the next loop, file adapter would start fetching records from the previous end. For eg., If you have a file with 500 records with a chunk value of 100, returnLineNumber will have a value of 101 after the first loop is completed. This will ensure the file adapter starts reading the file from line number 101 instead of starting over.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Your BPEL process must look like this;</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCSY_ft3nGZpr9F6OF8tUqepIK8TfkO0OXPCNJy27Bov54nujlVpxm2IoNqfoN0ZByNfEaFaCs3BsRoYKHooYnES2OGxEdmWN35d4MosZJD0z_VJzLdNooBvHBztfz_0gV7SlZSX8JhmaF/s1600/bpel3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCSY_ft3nGZpr9F6OF8tUqepIK8TfkO0OXPCNJy27Bov54nujlVpxm2IoNqfoN0ZByNfEaFaCs3BsRoYKHooYnES2OGxEdmWN35d4MosZJD0z_VJzLdNooBvHBztfz_0gV7SlZSX8JhmaF/s400/bpel3.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
We now have the BPEL process that receives file reference from MFT, reads the large file in chunks.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Further processing like data shaping, transformation can be done from within the while loop.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com4tag:blogger.com,1999:blog-5705818669612605666.post-35831626220840820082016-11-17T12:53:00.001-05:002016-11-17T12:53:47.766-05:00SOA 12c RCU: Oracle XE 11g TNS listener does not currently know of SID<div dir="ltr" style="text-align: left;" trbidi="on">
Recently, I installed Oracle XE 11g database on my windows machine to host my SOA 12c RCU.<br />
Note: Although XE is not a certified database for SOA 12c, it works just fine for development purposes.<br />
<br />
Strangely enough, my RCU utility was unable to connect to the database instance. I kept getting the error that "Unable to connect to the DB. Service not available".<br />
I was pretty sure that all my connect parameters were correct.<br />
<br />
Also, worth noting is that, I couldn't connect to the DB apex application running @ http://127.0.0.1:8080/apex/f?p=4950<br />
<br />
First suspicion was to check the service name, as sometimes during installation, the domain name gets appended to the service name. eg., instead of orcl, it might be registered as orcl.localdomain<br />
<br />
A quick look at the listener.ora file revealed that the default service name was indeed XE.<br />
<br />
However, when I ran the lsnrctl status command, I could see that the XE service was not listed.<br />
<br />
<span style="color: #e06666;">Default Service XE</span><br />
<span style="color: #e06666;">Listener Parameter File C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora</span><br />
<span style="color: #e06666;">Listener Log File C:\oraclexe\app\oracle\diag\tnslsnr\SATANNAM-US\listener\alert\log.xml</span><br />
<span style="color: #e06666;">Listening Endpoints Summary...</span><br />
<span style="color: #e06666;"> (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))</span><br />
<span style="color: #e06666;"> (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))</span><br />
<span style="color: #e06666;">Services Summary...</span><br />
<span style="color: #e06666;">Service "CLRExtProc" has 1 instance(s).</span><br />
<span style="color: #e06666;"> Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...</span><br />
<span style="color: #e06666;">Service "PLSExtProc" has 1 instance(s).</span><br />
<span style="color: #e06666;"> Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...</span><br />
<span style="color: #e06666;">The command completed successfully.</span><br />
<br />
This is due to the fact that the listener hasn't registered the XE service properly. In my case, restarts of database and listener services didn't help. Remember, as a best practice the listener must always be started ahead of starting the database for it to register the services.<br />
<br />
The fix is to manually instruct the database to register the XE service. To do this, login to sqlplus as sysdba and issue the following commands.<br />
<br />
<span style="color: #3d85c6;">> sqlplus / as sysdba</span><br />
<span style="color: #3d85c6;">> Connected to:</span><br />
<span style="color: #3d85c6;">Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production</span><br />
<span style="color: #3d85c6;"><br /></span>
<span style="color: #3d85c6;">SQL> alter system set LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope=both;</span><br />
<span style="color: #3d85c6;">alter system register;</span><br />
<br />
Exit sqlplus and restart your OracleServiceXE and listener services.<br />
<br />
Now, lsnrctl status command gives the following output;<br />
<br />
<span style="color: #e06666;">Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))</span><br />
<span style="color: #e06666;"><br /></span>
<span style="color: #e06666;">Default Service XE</span><br />
<span style="color: #e06666;">Listener Parameter File C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\listener.ora</span><br />
<span style="color: #e06666;">Listener Log File C:\oraclexe\app\oracle\diag\tnslsnr\SATANNAM-US\listener\alert\log.xml</span><br />
<span style="color: #e06666;">Listening Endpoints Summary...</span><br />
<span style="color: #e06666;"> (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))</span><br />
<span style="color: #e06666;"> (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))</span><br />
<span style="color: #e06666;"> (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8080)) Presentation=HTTP)(Session=RAW))</span><br />
<span style="color: #e06666;">Services Summary...</span><br />
<span style="color: #e06666;">Service "CLRExtProc" has 1 instance(s).</span><br />
<span style="color: #e06666;"> Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...</span><br />
<span style="color: #e06666;">Service "PLSExtProc" has 1 instance(s).</span><br />
<span style="color: #e06666;"> Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...</span><br />
<span style="color: #e06666;">Service "XEXDB" has 1 instance(s).</span><br />
<span style="color: #e06666;"> Instance "xe", status READY, has 1 handler(s) for this service...</span><br />
<span style="color: #e06666;">Service "xe" has 1 instance(s).</span><br />
<span style="color: #e06666;"> Instance "xe", status READY, has 1 handler(s) for this service...</span><br />
<span style="color: #e06666;">The command completed successfully.</span><br />
<br />
You can see that XE service is now registered and ready. Also note that the http port 8080 is up and running - meaning you can now successfully access the APEX url.</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-79555303949360218882016-11-07T10:29:00.001-05:002016-11-07T10:30:49.765-05:00Process Cloud Service (PCS) Integration Options<div dir="ltr" style="text-align: left;" trbidi="on">
Process is ubiquitous - be it SaaS process extensions, automation of a manual process, gain visibility into a process or just eliminating human errors.<br />
<br />
With fully visual, browser based, no IDE platform that runs on the cloud, Process Cloud Service lends itself as a simple yet powerful tool to citizen developers and LOB users alike, to raidly automate their business processes with little to no dependency on IT/DevOps. Cloud platform (PaaS) offerings such as Process Cloud Service and Integration Cloud Service enable modern enterprises leveraging a range of SaaS applications to extend, automate and integrate back with on-prem systems.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig16eTErc3xYTL_FB_9toHyLUmL1RDJFhWqk3AzRRo69HE9xlMv6swE5fBd9h-QGTzGEkUX-JKp9wC6DaK1BkdZkVWNB6l7AANbGtT-maWX6siI9qmlE61xS2BRw4dcY-_fFEugWlvxJ0H/s1600/pcs1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig16eTErc3xYTL_FB_9toHyLUmL1RDJFhWqk3AzRRo69HE9xlMv6swE5fBd9h-QGTzGEkUX-JKp9wC6DaK1BkdZkVWNB6l7AANbGtT-maWX6siI9qmlE61xS2BRw4dcY-_fFEugWlvxJ0H/s400/pcs1.png" width="400" /></a></div>
<br />
Outside of its own instance data, business processes also need data from external data sources. Process Cloud Service offers 3 options to seamlessly integrate with external systems / services;<br />
<br />
1) SOAP<br />
2) REST<br />
3) ICS (Integration Cloud Service)<br />
<br />
To invoke or call external services using a Service Activity within a business process, we must first create a connector - available under the Integrations section in your process composer.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYPPHeMOMGBPa4VYmG01k-_rJ3Vidgn71CzLIAeP2JA9_cTzkYoygmICyjQZaC2LHiekoDyt_qLoSeb9AFxgxKmTRe_lZmr6R1HaDcWII5vS0GViR0e7xDpppM6OETxv-PeIUrASR1Jr1X/s1600/pcs2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYPPHeMOMGBPa4VYmG01k-_rJ3Vidgn71CzLIAeP2JA9_cTzkYoygmICyjQZaC2LHiekoDyt_qLoSeb9AFxgxKmTRe_lZmr6R1HaDcWII5vS0GViR0e7xDpppM6OETxv-PeIUrASR1Jr1X/s400/pcs2.png" width="400" /></a></div>
<br />
Out of the box, Process Cloud Service allows connectivity to external services through SOAP / REST protocols. For any other type of integration - for eg., Database, File, Oracle/3rd party apps, you have 2 options;<br />
<br />
1) Expose them as SOAP/REST APIs either through a middle tier or using natively available options (eg., APEX ORDS for Database) and call them directly from PCS<br />
2) Use Integration Cloud Service (ICS) to quickly interface your target data source as SOAP/REST using a range of technology, application and SaaS adapters<br />
<br />
<b><u>1) SOAP</u></b><br />
<br />
With this integration option, you can connect to any SOAP web service that is accessible over internet. You have options to either upload a WSDL definition or use a SOAP URL directly.<br />
If you are using URL, notice that all the referenced schema (XSD) files are also imported automatically.<br />
<br />
You also have an option to configure the "Read Timeout", "Connection Timeout" and WS-Security parameters for the service.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQmuOZ6-5AihG8kJodNbFB0AwZCsGtgjP7nLEj9yP-bROeX9-sWwS0GC8Ti88xroeCRdHJNWfjzBkeKdVHSzAcgwOQAyL4IOFs_ipHRY7n2zN8CivkTauk6r1lIXAfmU3um0okziQiA7QS/s1600/soap1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQmuOZ6-5AihG8kJodNbFB0AwZCsGtgjP7nLEj9yP-bROeX9-sWwS0GC8Ti88xroeCRdHJNWfjzBkeKdVHSzAcgwOQAyL4IOFs_ipHRY7n2zN8CivkTauk6r1lIXAfmU3um0okziQiA7QS/s400/soap1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj87OxsNCi6r7LxYWUzSZRbVh-12s41faHj9-QLzvATnEPrghvzzFLr0VCoIx7xZG9ZZidPEs3iqa5sroBQTZ3Z6iWxIIPI8WKqBUWHLObWn0gMawJgRsX6b5uxiKhTabCnz-7jpPWkI8UY/s1600/soap2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj87OxsNCi6r7LxYWUzSZRbVh-12s41faHj9-QLzvATnEPrghvzzFLr0VCoIx7xZG9ZZidPEs3iqa5sroBQTZ3Z6iWxIIPI8WKqBUWHLObWn0gMawJgRsX6b5uxiKhTabCnz-7jpPWkI8UY/s400/soap2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNd5Ju7-_TAzMJA7I_B7amRR80h6_MfylpOtN-HzKmxbN5k0H-_WBYsXsGSQHZRrECIm3BHx3yzPs8t6Qn-aOks0dKLndrBLYRz7ttLu8qtDaXs6YHgtnLU59A0QqdNezcnn4bnpcbloY/s1600/soap3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWNd5Ju7-_TAzMJA7I_B7amRR80h6_MfylpOtN-HzKmxbN5k0H-_WBYsXsGSQHZRrECIm3BHx3yzPs8t6Qn-aOks0dKLndrBLYRz7ttLu8qtDaXs6YHgtnLU59A0QqdNezcnn4bnpcbloY/s400/soap3.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBnzyGrCL2drHdp2oyaK18w7Sn2igpb6hqIAx8Jf4PTWEQyxI5fePgF2E2SWXLAyi_3EskrWXcWW7TwQcA0Jhp6Mf1LXQ9wORrJyWl51uwTtsOZEt9KVH_ZrBs2prgY5Zx3SnHmetYLCRo/s1600/soap4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBnzyGrCL2drHdp2oyaK18w7Sn2igpb6hqIAx8Jf4PTWEQyxI5fePgF2E2SWXLAyi_3EskrWXcWW7TwQcA0Jhp6Mf1LXQ9wORrJyWl51uwTtsOZEt9KVH_ZrBs2prgY5Zx3SnHmetYLCRo/s400/soap4.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<b><u>2) REST</u></b><br />
<br />
Process Cloud Service offers extensive support to integrate and connect to REST APIs. Intuitive wizard guides through configuration of REST based services including various HTTP verbs, resources and request-response payloads.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhckKrTyiJdOTHfJ8XfzwFbxiG6vz7bhTTafblEO4sMI57A_1uWkl6VHbDmpb0xd0AwZKafLlu6NqrLD0b5aIm8cIxi4d2ITFNdGhvcMdusuC9nVKVMS-kgLubYPNBOxtCmKkoFeCADNsVQ/s1600/rest1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhckKrTyiJdOTHfJ8XfzwFbxiG6vz7bhTTafblEO4sMI57A_1uWkl6VHbDmpb0xd0AwZKafLlu6NqrLD0b5aIm8cIxi4d2ITFNdGhvcMdusuC9nVKVMS-kgLubYPNBOxtCmKkoFeCADNsVQ/s320/rest1.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizTP5kAbcxPiarxme_dTexVB8_QK22qSvRC-RESus3Fq1uMFtDGFXIACy6wpB6Rsbv4TOpV717go4-TyqyC7hAjWyoL-FNMbtgwVKa2Ur1YYiYlKuvuZK96DiDSh8EPM_uq123buScgsbS/s1600/rest2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizTP5kAbcxPiarxme_dTexVB8_QK22qSvRC-RESus3Fq1uMFtDGFXIACy6wpB6Rsbv4TOpV717go4-TyqyC7hAjWyoL-FNMbtgwVKa2Ur1YYiYlKuvuZK96DiDSh8EPM_uq123buScgsbS/s400/rest2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibLbQ8wOmM5GuDLPzyhJxZpbHYPCG18upreZoJ6cprRWCSejLsZEK-0LStgm2MvarAvbVm4jnPuV2XD3Lp9z6IRLtupT5F1aBjIFmGJcgIGdbvfuxcebPjx-8MqZbjYKmuV2tu4CGqP_f7/s1600/rest3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibLbQ8wOmM5GuDLPzyhJxZpbHYPCG18upreZoJ6cprRWCSejLsZEK-0LStgm2MvarAvbVm4jnPuV2XD3Lp9z6IRLtupT5F1aBjIFmGJcgIGdbvfuxcebPjx-8MqZbjYKmuV2tu4CGqP_f7/s400/rest3.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZDfY5Jfd5u3DTdsAB8m1NysZIJGwM1nnS9yDCM-6tmE8R-UQONeLZ_G6F0Zq2v6azKTNss8k-LWzr9V_vQZ46nT4_MfyUmIImP6bh-xQzn5ESGvGKr_Grd_Eszsu1Ji41eOS3or7sz9MA/s1600/rest4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZDfY5Jfd5u3DTdsAB8m1NysZIJGwM1nnS9yDCM-6tmE8R-UQONeLZ_G6F0Zq2v6azKTNss8k-LWzr9V_vQZ46nT4_MfyUmIImP6bh-xQzn5ESGvGKr_Grd_Eszsu1Ji41eOS3or7sz9MA/s400/rest4.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl3T2Jt9vT68FI-4HxZ64sAjORGvx_AG3f7lOjyQSXOclQCcxKkwSFixD3VpQZeYEHWr3hFpRJddp0b-2JU_rHfWK1OCRNPU1csDucWGdHzDRJYIKb49WAoHXNbL7n59RJxCx_labpEDJ1/s1600/rest5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="177" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl3T2Jt9vT68FI-4HxZ64sAjORGvx_AG3f7lOjyQSXOclQCcxKkwSFixD3VpQZeYEHWr3hFpRJddp0b-2JU_rHfWK1OCRNPU1csDucWGdHzDRJYIKb49WAoHXNbL7n59RJxCx_labpEDJ1/s400/rest5.png" width="400" /></a></div>
<b><u><br /></u></b>
<b><u>3) ICS Integration</u></b><br />
<br />
Process Cloud Service (PCS) provides tight-integration to Integration Cloud Service (ICS) among other PaaS / IaaS services such as Documents Cloud Service, Business Intelligence Cloud Service, Storage Cloud and Notification Service.<br />
<br />
All it requires is a one-time configuration in PCS workspace and while modeling a process, the service connector display all ICS integrations to choose from.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIyOGbtznRpUw_cFJK-ZSw0Zg6puWyrLky5v8uD3vHIHiZ2gSYDhGqgdfHUVU6TplGAXvi8VntFdGdBUXHPMcDQesIEKqHblrU-8OPAkMP8b6UfxzrIHcA9iGa5mVCWFW8DxmBAec85Scy/s1600/ics1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIyOGbtznRpUw_cFJK-ZSw0Zg6puWyrLky5v8uD3vHIHiZ2gSYDhGqgdfHUVU6TplGAXvi8VntFdGdBUXHPMcDQesIEKqHblrU-8OPAkMP8b6UfxzrIHcA9iGa5mVCWFW8DxmBAec85Scy/s400/ics1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg91YZkbUavTS38eh93ZMj3NwYKavqoi6rxAFGfABvwbQ_sZcJqtfcUOUJW4tU0kPwheFxzPEC0L4VcYBXHSbywKIQeQetX0a9axzGhgsHOZowPYpYdUBjIrhDMVnxQscC8nituAgK3nMgO/s1600/ics2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg91YZkbUavTS38eh93ZMj3NwYKavqoi6rxAFGfABvwbQ_sZcJqtfcUOUJW4tU0kPwheFxzPEC0L4VcYBXHSbywKIQeQetX0a9axzGhgsHOZowPYpYdUBjIrhDMVnxQscC8nituAgK3nMgO/s320/ics2.png" width="300" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_o1ohYR5k9Q3YcVCTV-ZEED5Mj-ol3hAThpVT-iHMBKXZpKwOCBUAzvxQST7uEpk2mrVWIvndjJMsF78Z0pHxigrlbrgGbp5KYm-t9ohmIMo-UL0827PAdyjjxvpbof9hjI8GMccTJnEd/s1600/ics3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_o1ohYR5k9Q3YcVCTV-ZEED5Mj-ol3hAThpVT-iHMBKXZpKwOCBUAzvxQST7uEpk2mrVWIvndjJMsF78Z0pHxigrlbrgGbp5KYm-t9ohmIMo-UL0827PAdyjjxvpbof9hjI8GMccTJnEd/s320/ics3.png" width="301" /></a></div>
<br />
With all these different integration options, Process Cloud Service not only delivers rapid process automation but also offers extensive connectivity to external systems and services.</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com2tag:blogger.com,1999:blog-5705818669612605666.post-66644028932829713182016-09-19T11:01:00.000-04:002016-09-19T11:01:37.752-04:00Learner Series: Dynamically load XSL templates<div dir="ltr" style="text-align: left;" trbidi="on">
I received a few requests from readers on how to dynamically load XSLT stylesheets in SOA 11g/12c.<br />
<br />
This usecase finds importance when you have the following;<br />
<br />
<ul style="text-align: left;">
<li>You have one input source (master data) and multiple destinations each of which receives the same data in different formats</li>
<li>Your destination requires minor changes on the data being sent and you don't want to redeploy the whole process causing downtime to other systems</li>
<li>You have dynamic partnerlinks to connect to multiple targets each of those targets expect data in a certain format</li>
</ul>
<br />
We will leverage SOA-MDS to store and retrieve our XSL stylesheets dynamically at runtime.<br />
<br />
Step 1: Develop your XSLT mappings and test them before you persist them on MDS<br />
Ref: learn how to use MDS in <a href="http://sathyam-soa.blogspot.com/2012/11/soa-11g-mds-share-common-artifacts.html" target="_blank">11g</a>/<a href="http://sathyam-soa.blogspot.com/2016/09/learner-series-soa-12c-share-resources.html" target="_blank">12c</a><br />
<br />
Once you have your stylesheets in MDS, you can reference them from within your BPEL process using the oramds:/ protocol<br />
<br />
Step 2: You don't need to use the "Transform" activity in your BPEL. Use either of the following BPEL XPath Extension Functions to load and process your XSL stylesheets within your "Assign" activity.<br />
<br />
ora:processXSLT()<br />
ora:doXSLTransformForDoc()<br />
<br />
For example, ora:processXSLT('oramds:/apps/stylesheets/xformOrder.xsl', $inputVariable.payload)<br />
<br />
You can further parameterize this expression by using a DVM to store the XSL references and use dvm:lookup to get the first parameter - XML template location.</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-64558251034054554342016-09-11T23:23:00.000-04:002016-11-07T10:31:38.896-05:00Smart Connect Modern Enterprise Apps & SaaS w/ Oracle iPaaS<div dir="ltr" style="text-align: left;" trbidi="on">
Modern enterprise systems stretch from ground to the cloud and everything in between.<br />
With plethora of diverse SaaS applications combined with existing home grown/legacy on-premise applications - each promising to solve a specific business problem, the integration problem has just got complicated.<br />
<br />
IDC predicts that by 2018, SaaS-based enterprise applications would generate over $50 billion in revenue resulting in more than 27% of enterprise apps running on cloud.<br />
<br />
Enterprises must equip themselves to embrace this change to integrate, secure and manage their "extended" enterprise on cloud.<br />
<br />
Most traditional integration solutions have 2 shortcomings;<br />
One, they require considerable DevOps efforts - think development, deployment, maintenance etc..<br />
Two, they aren't built ground-up for SaaS integrations - lack of SaaS adapters, network latencies, firewall pinholes for SaaS connectivity etc..<br />
<br />
Hence the need for an iPaaS - Integration Platform as a Service. For any iPaaS solution to be successful, there are 3 important considerations that enterprise architects must account for;<br />
<br />
<ol style="text-align: left;">
<li>Ease of Use</li>
<li>Time to Market &</li>
<li>Deployment Choice</li>
</ol>
<br />
<b>1. Ease of Use:</b><br />
<br />
A cloud solution's first deliverable to business must be "Simplifying IT" and bringing IT closer to business. Oracle Integration Cloud Platform (ICS) is built for "citizen developers" and hence truly offers a "zero code" integration platform. This is a huge advantage for business and IT alike, as all technology complexities are hidden away. This means; there is no new technology to learn / ramp-up, no skill-gaps to fill, quicker turn-around times...<br />
<br />
Oracle ICS also features a pattern-driven integration model with a bunch of common integration patterns to choose from, for a variety of integration needs including pub-sub, straight-on data mapping, orchestration etc.. all delivered just over a browser. No IDE, No installation & Zero Code.<br />
<br />
<b>2. Time to Market:</b><br />
<br />
A huge impediment to any project plan is "TTM" delays that concerns the business.<br />
<br />
Even for some of my customers who are on the bleeding edge of technology find it pragmatically difficult to staff, develop, administrate & manage their integration projects - partly owing to changing trends in technology but mostly because their DevOps can't scale to handle business demands. For instance, in the last 6-9 months, their sales department has bought into salesforce.com, HR moved to Fusion HCM cloud and Marketing is automating campaings on Eloqua. All of these are strategic initiatives driven by the line of business which offers feature-rich enterprise applications with lesser dependency on IT Ops at least to manage & maintain them.<br />
<br />
However, care must be taken not to build silo'ed SaaS applications - there must be a robust integration platform to connect SaaS with On-prem systems without the complexities of a traditional middleware. Oracle ICS was architected ground-up with "Time to Market" as its principle goal. Integrations that typically take a few months can be up & running in a few days.<br />
<br />
This is made possible with the ever-growing list of feature-rich SaaS, Apps and Technology adapters built for cloud, pre-built integrations and smart recommendations.<br />
<br />
<b>3. Deployment Choice:</b><br />
<br />
Another integration decision is the "Integration Center of Gravity" which defines where the integration can be run for best performance. Let's say we want to connect 2 SaaS applications - does it make sense to run the integration on-prem behind your enterprise firewall? probably not. On the contrary, if you want to integrate 2 on-prem systems but still like to leverage the advantages that Oracle ICS offers, you have the flexibility to run ICS on-prem within your datacenter.<br />
<br />
Oracle ICS is a truly hybrid iPaaS providing full deployment choice whether you want to run your integration platform on cloud or on ground.</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com2tag:blogger.com,1999:blog-5705818669612605666.post-100366584086365772016-09-08T18:50:00.002-04:002016-09-08T18:51:32.955-04:00Learner Series: SOA 12c Share Resources easily using MDS<div dir="ltr" style="text-align: left;" trbidi="on">
SOA 12c has simplified the way developers leverage the MDS capabilities.<br />
<br />
Developers still have the 11g way of deploying "SOA Bundle" archives to MDS described <a href="http://sathyam-soa.blogspot.com/2012/11/soa-11g-mds-share-common-artifacts.html" target="_blank">here</a>.<br />
But if you are on SOA 12c, you get a simpler option.<br />
<br />
Once you install SOA 12c quickstart, you get a file-based SOA DesignTime MDS Repository by default. You can choose where to host your MDS root.<br />
<br />
Under the Resources window in JDeveloper, expand SOA-MDS IDE connection. You must have a default SOA_DesignTimeRepository. Go to properties and set your MDS root folder.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbg3ldOfpirE4drcXqJe6gy8SIcqh7rx-WbInHVM9cDhI_VrAhT9UxzCgDTpyYFLsoYl_4HnaFl20dktx74E_LZxcG8jq9JjKwnXKX0flAECMNHOWJixyy6yqt8cgRinYWPVJIiyi4LkZt/s1600/12c_mds2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbg3ldOfpirE4drcXqJe6gy8SIcqh7rx-WbInHVM9cDhI_VrAhT9UxzCgDTpyYFLsoYl_4HnaFl20dktx74E_LZxcG8jq9JjKwnXKX0flAECMNHOWJixyy6yqt8cgRinYWPVJIiyi4LkZt/s1600/12c_mds2.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6OQE_jIoB7bvJ438eLUXtnZgDMphIlcLjrxtcic_a8-VEyllfuNbZ0O9ruTpMtfXf9mt-N3DdrC-OCGmBvIPIH6DCmt2XaeOwMs77240TokvLOGeD7sQ0IulSuQGWY-Z-wuSMrphkzWZ0/s1600/12c_mds1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6OQE_jIoB7bvJ438eLUXtnZgDMphIlcLjrxtcic_a8-VEyllfuNbZ0O9ruTpMtfXf9mt-N3DdrC-OCGmBvIPIH6DCmt2XaeOwMs77240TokvLOGeD7sQ0IulSuQGWY-Z-wuSMrphkzWZ0/s400/12c_mds1.png" width="326" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
You can copy your resources that you want to reuse/share to your MDS root folder and reference them within your SOA composite by using the oramds:/ protocol. eg., oramds:/apps/xsd/employee.xsd<br />
<br />
Now to create a runtime MDS repository, first create a DB MDS connection to your SOA instance using your prefix_MDS schema [prefix is what you specified during RCU config].<br />
<br />
From the Resources window -> IDE connection panel, right click SOA-MDS and create a new SOA-MDS connection. Provide a unique connection name, choose Connection type as "DB Based MDS", select the MDS connection created above and choose the "soa-infra" partition.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUvH4dQWPcF3JXW2JlJbc4nVWXlqYVEK8NlmpYJ-bDmvkIxxehhjcftVt0cCEb6CuAkaEGZYsUObTA6LhHVH7skwpe4OV3Rf13aCKReFEMhioI8cQIvFXJ4TzkAveumu_AdXF6p7tRkOpJ/s1600/12c_mds3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUvH4dQWPcF3JXW2JlJbc4nVWXlqYVEK8NlmpYJ-bDmvkIxxehhjcftVt0cCEb6CuAkaEGZYsUObTA6LhHVH7skwpe4OV3Rf13aCKReFEMhioI8cQIvFXJ4TzkAveumu_AdXF6p7tRkOpJ/s400/12c_mds3.png" width="300" /></a></div>
<br />
Note: SOA quickstart by default uses Java derby database (no DB MDS capabilities). You must either have a compact domain installation or a full-fledged SOA installation (your staging / test / production server).<br />
<br />
To deploy the design time MDS (file-based) resources to DB based runtime MDS repository, right click on the design time repository and choose Transfer. The wizard will prompt you for the runtime MDS to which the resources must be transferred to. Choose the resources you need to transfer and your DB MDS connection and click on Transfer.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnHVHJRsmUJmL-iIoPjH1fD6cfDzfVyJlOYNIjE0D0cq1Zr2niKuRtkT9zq3zZPSYWNYYjbZokoFF576It5bf42RYvIyTf4oRcShPIFIBI0kaZTMSXbSCFnKgyR-zD5f49XLoaYuEq8mJ9/s1600/12c_mds4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnHVHJRsmUJmL-iIoPjH1fD6cfDzfVyJlOYNIjE0D0cq1Zr2niKuRtkT9zq3zZPSYWNYYjbZokoFF576It5bf42RYvIyTf4oRcShPIFIBI0kaZTMSXbSCFnKgyR-zD5f49XLoaYuEq8mJ9/s400/12c_mds4.png" width="400" /></a></div>
<br /></div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-29450814242311894702016-07-29T13:30:00.003-04:002016-09-09T08:21:53.542-04:00Learner Series: Handling Dynamic Arrays in SOA 12c (BPEL 2.0)<div dir="ltr" style="text-align: left;" trbidi="on">
Dynamic arrays are always tricky to handle within a BPEL process. Every now and then we encounter XML schemas that have generic name-value pair arrays that are unbounded. The challenge is assigning data to and from these dynamic arrays as there are no concrete XML target elements at runtime. Hence, the XML elements must be generated first before assigning values to them.<br />
<br />
There are multiple ways this problem can be solved.<br />
<br />
For one, you can choose XSLT over a simple assign. XSLT wields more granular control over how the XML elements are handled. You can instruct the XSL processor to loop over dynamic array list and assign values. This of course requires some level of XSLT skill (Although JDeveloper presents an easy XSL mapper, I prefer fiddling with the source) and in certain cases, you may have to pass some BPEL variables (properties) to XSLT in additions to the source and target variables.<br />
<br />
Second option would be to use an XML literal (called XML fragment in BPEL 1.1) within your assign activity. Here you can pre-form the XML literal, assign it to the target and then map the values. Not so sophisticated and if you are not careful with namespaces, this could cause a lot of mapping troubles.<br />
<br />
Thirdly, with BPEL 2.0 you can simply add an attribute to your copy action in your assign activity to achieve the same. Most simplest of all.<br />
<br />
Since this is a learner series, let's get into some details on how to go about this;<br />
<br />
Let's first understand the root-cause of the error;<br />
<br />
The problem with assigning dynamic arrays within BPEL is that, for the first element in the array, since the XML element is always "available", the copy happens successfully.<br />
However, starting with the second element, all copy rules within assign would fail due to a "selection failure" with the following error because the dynamic array XML elements are still not formed or is empty.<br />
<br />
<span style="color: #cc0000;">"Exception is thrown because the to-spec at line 140 is evaluated to be empty"</span><br />
<span style="color: #cc0000;">or</span><br />
<span style="color: #cc0000;">"Exception is thrown because the from-spec at line 160 is evaluated to be empty"</span><br />
<br />
depending on whether you are trying to copy to a target or copy from a source.<br />
<br />
Your XML schema containing dynamic array may look something like this;<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikhppeiTaaZZvOcuqPWszFJ2Doy_OZGDKiNZ_F-fBsLx-I3XAExE4CrQBIIivjYfJPybnzdDn4kzTs3ulcYEPeDdZ8dIc3p1NAnkSTkF2AAIKnM6D8v7cC9hRzrLSwPsKcXhtlEIGxqlgc/s1600/dynamicarrayschema.png" imageanchor="1"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikhppeiTaaZZvOcuqPWszFJ2Doy_OZGDKiNZ_F-fBsLx-I3XAExE4CrQBIIivjYfJPybnzdDn4kzTs3ulcYEPeDdZ8dIc3p1NAnkSTkF2AAIKnM6D8v7cC9hRzrLSwPsKcXhtlEIGxqlgc/s400/dynamicarrayschema.png" width="400" /></a><br />
<br />
Your typical assign would like the following - you will have to manually let BPEL know which element the values must be mapped - [1], [2], [3] .... [n]. Just append this to your root XML element which contains the dynamic array. In this case;<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHUHepm_DS4iAb1ER8uSREWM5BmJQOqe9op8fj7a2QgExncEHvK6wOBTt6tRBTZh0Y5jN0IxN0sjmcOOIzlLMFF1FRZQ31sW0uiC8HyIxLYn_zFai1bEhdz5bz48eWwUfiU3CnHQSMC4S2/s1600/Assign_Array.png" imageanchor="1"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHUHepm_DS4iAb1ER8uSREWM5BmJQOqe9op8fj7a2QgExncEHvK6wOBTt6tRBTZh0Y5jN0IxN0sjmcOOIzlLMFF1FRZQ31sW0uiC8HyIxLYn_zFai1bEhdz5bz48eWwUfiU3CnHQSMC4S2/s400/Assign_Array.png" width="400" /></a><br />
<br />
Now, starting with the second copy rule within your assign, right-click on the rule item and select "ignoreMissingFromData" or "insertMissingToData" depending on whether your dynamic array is being read or written to respectively.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZIsxQT8f1wDcOpdybU7xK1ySjoz0yFh5JJK4x5HvthPaUdgp363IOLObIDbXgRKZvEuJtruUCLDvCEApFVnszcmdAtiwubeatkiSP1eQdSPH-uyX3ZvsFuhdmV8zlappHxOq5YgTxbkpB/s1600/insertmissing.png" imageanchor="1"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZIsxQT8f1wDcOpdybU7xK1ySjoz0yFh5JJK4x5HvthPaUdgp363IOLObIDbXgRKZvEuJtruUCLDvCEApFVnszcmdAtiwubeatkiSP1eQdSPH-uyX3ZvsFuhdmV8zlappHxOq5YgTxbkpB/s400/insertmissing.png" width="400" /></a><br />
<br />
This action would add a flag (attribute) to the copy rule instructing BPEL to handle the dynamic XML element - either ignore or insert.<br />
<br />
<copy bpelx:insertMissingToData="yes"><br />
or<br />
<copy bpelx:ignoreMissingFromData="yes"><br />
<br />
Happy BPELing...</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com1tag:blogger.com,1999:blog-5705818669612605666.post-70430563028607903022016-06-10T18:39:00.003-04:002016-06-10T18:39:36.816-04:00Java Node.JS Microservices Hackathon, Boston<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: white; color: #333333; line-height: 17px; white-space: pre-line;"><span style="font-family: inherit;">Let's Hack !! </span></span><br />
<span style="background-color: white; color: #333333; line-height: 17px; white-space: pre-line;"><span style="font-family: inherit;"><br /></span></span>
<span style="background-color: white; color: #333333; line-height: 17px; white-space: pre-line;"><span style="font-family: inherit;">Join us for the Boston microservices hackathon and learn about latest Java 8, JET and Node.JS.</span></span><br />
<span style="background-color: white; color: #333333; line-height: 17px; white-space: pre-line;"><span style="font-family: inherit;"><br /></span></span>
<span style="background-color: white; color: #333333; line-height: 17px; white-space: pre-line;"><span style="font-family: inherit;">We will also go cloud native to create, build, deploy and manage microservices on Oracle Public Cloud. </span></span><br />
<span style="background-color: white; color: #333333; line-height: 17px; white-space: pre-line;"><span style="font-family: inherit;"><br /></span></span>
<span style="background-color: white; color: #333333; line-height: 17px; white-space: pre-line;"><span style="font-family: inherit;">Space is limited. </span></span><span style="background-color: white; color: #333333; font-family: inherit; line-height: 17px; white-space: pre-line;">Register early @ </span><a data-trk="link" href="https://lnkd.in/eF2XrfK" style="background-color: white; border: 0px; color: #008cc9; font-family: inherit; font-stretch: inherit; line-height: 17px; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; white-space: pre-line;" target="_blank">https://lnkd.in/eF2XrfK</a><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Or post your contact in the comments and I will register you.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">See you there !! </span></div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com0tag:blogger.com,1999:blog-5705818669612605666.post-121146867634115152015-09-28T23:29:00.002-04:002015-09-28T23:31:29.431-04:00SOA 12c Compact Domain DB Based MDS<div dir="ltr" style="text-align: left;" trbidi="on">
With the release of SOA 12c, developers can now have full-fledged SOA 12c running on their desktops/laptops on the integrated WebLogic server. This is a great news for development community - as one can download the SOA/BPM 12c quickstart which comes pre-configured with JDeveloper and integrated WLS running SOA/BPM.<br />
<br />
Some developer productivity benefits include;<br />
1) You don't need a license for quickstart installs (for development & evaluation purposes)<br />
2) Single jar that will install & configure WebLogic domain, SOA, JDev and everything you need to get going<br />
<br />
However, there are some limitations with the default quickstart install. For one, the quickstart installation runs on top of Java Derby DB; and the SOA MDS is a file-based repository by default. Although for normal development purposes this may not be a big challenge, it could be an issue if you want to leverage some features such as;<br />
<br />
1) Run-time modification of business rules<br />
2) B2B, MFT & ESS<br />
3) SOA Composer<br />
4) BAM<br />
5) BPM Composer etc.. which require a Oracle database to run.<br />
<br />
However, there are other ways to configure your development environment to run on top of Oracle database - therefore you can have a DB based SOA MDS.<br />
<br />
In this post, I will illustrate how to install and configure a SOA 12c compact domain for development purposes.<br />
<br />
<b><u>Pre-Requisites:</u></b><br />
<br />
1) Download Java 7. According to the certification matrix jdk 1.7.0u55+ is supported - <a href="http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html" target="_blank">here</a><br />
2) Download Oracle XE 11g Database - <a href="http://download.oracle.com/otn/nt/oracle11g/xe/OracleXE112_Win64.zip" target="_blank">here</a><br />
3) Download SOA 12.1.3 quickstart distribution - <a href="http://download.oracle.com/otn/nt/middleware/12c/121300/fmw_12.1.3.0.0_soaqs_Disk1_1of1.zip" target="_blank">here</a><br />
4) Optional components such as B2B, MFT, can be downloaded if required<br />
Download MFT - <a href="http://download.oracle.com/otn/nt/middleware/12c/121300/fmw_12.1.3.0.0_mft_Disk1_1of1.zip" target="_blank">here</a><br />
Download B2B - <a href="http://download.oracle.com/otn/nt/middleware/12c/121300/fmw_12.1.3.0.0_b2b_Disk1_1of1.zip" target="_blank">here</a><br />
<br />
Install java 7 on your environment. Note: By default on windows jdk will choose a location under "Program Files". In certain cases, I have seen the space in folder location cause unknown issues. Ensure java is installed on a location without space in the folder name eg., C:\Java<br />
<br />
<b><u>SOA 12c Quickstart Installation:</u></b><br />
<br />
Unzip the fmw_12.1.3.0.0_soaqs_Disk1_1of1.zip<br />
<br />
Open terminal (command prompt) as administrator<br />
Ensure JAVA_HOME and PATH environment variables are set and points to the jdk installed<br />
set JAVA_HOME=C:\Java\jdk1.7.0_71<br />
set PATH=%PATH%;C:\Java\jdk1.7.0_71\bin<br />
<br />
Step 1:<br />
Execute the following command to install the SOA 12c quickstart<br />
java -D64 -jar fmw_12.1.3.0.0_soa_quickstart.jar<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNPdeeJRdzROC0KOnV_ErjmTL-Byrufk0jhAg2UyImpqANiwFJYxt8dy_C-iM_BdWCsD_3nO-LyQTNATQk9TGWDUx5NJLy3TTkouEpQGKUERXMFhFFVh1pa76ad_D3GhXfDilMhcdNByI/s1600/soaqs_step1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNPdeeJRdzROC0KOnV_ErjmTL-Byrufk0jhAg2UyImpqANiwFJYxt8dy_C-iM_BdWCsD_3nO-LyQTNATQk9TGWDUx5NJLy3TTkouEpQGKUERXMFhFFVh1pa76ad_D3GhXfDilMhcdNByI/s320/soaqs_step1.png" width="320" /></a></div>
Step 2: Provide a oracle home where SOA 12c must be installed<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT-ODXTtzoPufpwc65l0XpTPgkcRXMUUtWGxpzFZ88h_cpKyb9HCkHp6-PdrWqKv0GUD-W0HiUY6F6_Hqd5J27hQgt8BtlPPHorgMbIjXcVLjw-cWVkuyeww5L1G_WayZha0RtUArZymIJ/s1600/soaqs_step2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT-ODXTtzoPufpwc65l0XpTPgkcRXMUUtWGxpzFZ88h_cpKyb9HCkHp6-PdrWqKv0GUD-W0HiUY6F6_Hqd5J27hQgt8BtlPPHorgMbIjXcVLjw-cWVkuyeww5L1G_WayZha0RtUArZymIJ/s320/soaqs_step2.png" width="320" /></a></div>
Step 3: Ensure the validations are okay<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiT71f6Li7LgdWM3dJcZX0dZmtNupy3VvCrBdSmHCgtiBm6aYRWqxVk5G0mKusGVht0dEFRpVK99RrwmawRgXl_TJNq-5hvrt8z5LAb7zW6OsLQHb3o7v9ij7K_c3_TTjwGeYRFg_FOYSX/s1600/soaqs_step3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiT71f6Li7LgdWM3dJcZX0dZmtNupy3VvCrBdSmHCgtiBm6aYRWqxVk5G0mKusGVht0dEFRpVK99RrwmawRgXl_TJNq-5hvrt8z5LAb7zW6OsLQHb3o7v9ij7K_c3_TTjwGeYRFg_FOYSX/s320/soaqs_step3.png" width="320" /></a></div>
Step 4: Review the installation summary - provides the list of features/components installed as part of the quickstart distribution<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZLI4m80-lZ68XQAl2j40jlJTgK_Y5_9O6M7vB8qGEP3zwlZTubiViCLu6MlU1IAJsJLTWII3ymJhk45nSX5y7w1FIyeQNPXHDYNqPtwKLhWDbOEkHVoo4PHUVOXHKkvlIf-pMFXcoJPlQ/s1600/soaqs_step4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZLI4m80-lZ68XQAl2j40jlJTgK_Y5_9O6M7vB8qGEP3zwlZTubiViCLu6MlU1IAJsJLTWII3ymJhk45nSX5y7w1FIyeQNPXHDYNqPtwKLhWDbOEkHVoo4PHUVOXHKkvlIf-pMFXcoJPlQ/s320/soaqs_step4.png" width="320" /></a></div>
Step 5: Review the installation progress<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyddDr4dru3WM1QaS22g-q5f-K1ABDZU9VHgYyj0Rt_3oeaXJ_YOfHuTLcnWadqBxeKE6tmflJAwVvwm7uZNgF2PO54Ko5l5jhwtxZnVoyJWrOGccQzqiSlvvE_N1-8KmaLOaTWXv2mFjD/s1600/soaqs_step5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyddDr4dru3WM1QaS22g-q5f-K1ABDZU9VHgYyj0Rt_3oeaXJ_YOfHuTLcnWadqBxeKE6tmflJAwVvwm7uZNgF2PO54Ko5l5jhwtxZnVoyJWrOGccQzqiSlvvE_N1-8KmaLOaTWXv2mFjD/s320/soaqs_step5.png" width="320" /></a></div>
Step 6: Once the installation succeeds, click Finish.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuxSHUhAHKFQChOkMAuNSBDMPV3r4AiDVUpbDQxB6GkfQnLcbxLZgiEA-LROE6iQ6huwqNGDUCSz1Eir6x23XHZKABZwuHwMSybuB0nk-Kx_W2am1c_Uc3HP0he2fATtfd7ee9B8T9Z7y/s1600/soaqs_step6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuxSHUhAHKFQChOkMAuNSBDMPV3r4AiDVUpbDQxB6GkfQnLcbxLZgiEA-LROE6iQ6huwqNGDUCSz1Eir6x23XHZKABZwuHwMSybuB0nk-Kx_W2am1c_Uc3HP0he2fATtfd7ee9B8T9Z7y/s320/soaqs_step6.png" width="320" /></a></div>
At this stage, quickstart can be used if you are not looking for features such as mentioned above. Just open the JDeveloper, right click on the IntegratedWeblogicServer to create and start domain. JDeveloper takes care of creating a WLS domain and configuring it automatically.<br />
<br />
Follow through for a compact domain installation.<br />
<br />
If you need additional components such as B2B, BPM or MFT now is the time to install them. Let's install B2B.<br />
<br />
<b><u>Installing Oracle B2B:</u></b><br />
<br />
Step 1:<br />
Unzip fmw_12.1.3.0.0_b2b_Disk1_1of1.zip and execute the following command to install B2B<br />
java -D64 -jar fmw_12.1.3.0.0_b2bhealthcare.jar<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiezntrZ60jrLg2DvufWtmt5LPrx_8GY24zPEzEYCz96jtNeTI-j6GBAtfieclcsPOgBfX13qnrXwRLjSoVOWvqvxuKHjjAQFAgdOFo6mQzxJZwRoNGjYb71aS3fv65cB3lhmfggIGq0Nxz/s1600/b2b_step1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiezntrZ60jrLg2DvufWtmt5LPrx_8GY24zPEzEYCz96jtNeTI-j6GBAtfieclcsPOgBfX13qnrXwRLjSoVOWvqvxuKHjjAQFAgdOFo6mQzxJZwRoNGjYb71aS3fv65cB3lhmfggIGq0Nxz/s320/b2b_step1.png" width="320" /></a></div>
<div>
Step 2: Choose the same Oracle home that was used to install the SOA 12c quickstart</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9RbAoJ-rhpscIjBRtTji4lc_FORTkBaJsRVstrJ96d6K08_dAa-EaMTnu-rpk07qsZnAQhweFV9SU7NxRuJs793MLT0m7eh6FHupY-lpwBMrd014Hrag4QiRUBFxShaJtiM_uIBtlrHc8/s1600/b2b_step2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9RbAoJ-rhpscIjBRtTji4lc_FORTkBaJsRVstrJ96d6K08_dAa-EaMTnu-rpk07qsZnAQhweFV9SU7NxRuJs793MLT0m7eh6FHupY-lpwBMrd014Hrag4QiRUBFxShaJtiM_uIBtlrHc8/s320/b2b_step2.png" width="320" /></a></div>
<div>
Step 3: Choose B2B or Healthcare profiles depending on requirement. Let's choose B2B</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUvuzjM_QiF-3AU-6pdmWYaFm_-XD333WVF51Sz3G3crFCAZ3ZKEfzZ9FjmvS1HHvYpr3hivh8nozzZjPcONPbFU_JqMccpa3eZtSCiM4bqJ-Y0OlajcPhETLETdzXWFv-FjzuKPGsrNbN/s1600/b2b_step3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUvuzjM_QiF-3AU-6pdmWYaFm_-XD333WVF51Sz3G3crFCAZ3ZKEfzZ9FjmvS1HHvYpr3hivh8nozzZjPcONPbFU_JqMccpa3eZtSCiM4bqJ-Y0OlajcPhETLETdzXWFv-FjzuKPGsrNbN/s320/b2b_step3.png" width="320" /></a></div>
<div>
Step 4: Follow the instructions and click Finish to close the B2B installation wizard</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBg4AhMQeCwvYx1YFuqv_B_ODFEYzOTHUw76oJswOlI99OvQ5-S9nUXX2Kd40nKrAyJG_DSvzV3aIta96Fhsw9triAH4MEL4eFo_KARQMFYJvxhP31sSBgryu8Y98IHlnr1ILEhZdLe8Ey/s1600/b2b_step7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBg4AhMQeCwvYx1YFuqv_B_ODFEYzOTHUw76oJswOlI99OvQ5-S9nUXX2Kd40nKrAyJG_DSvzV3aIta96Fhsw9triAH4MEL4eFo_KARQMFYJvxhP31sSBgryu8Y98IHlnr1ILEhZdLe8Ey/s320/b2b_step7.png" width="320" /></a></div>
<div style="text-align: left;">
<br />
I haven't detailed the MFT installation. However, should you need, it is a very straightforward installation.<br />
<br /></div>
<b><u>Installing XE 11g Database:</u></b><br />
<br />
Unzip the OracleXE112_Win64.zip and follow the instructions to install XE database.<br />
<br />
Step 1: Execute setup.exe<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAnbIOHlGYYjVmGR8aKwLzPpxztORJSksGmeCNrU18GPplnVaF6Z48tomLKB9YIke44vTwFT53rGG6x7lITkpkVZ5cwzMCobOJ4doFUwx5TX3uAoUvAh-Ur6EydJLJQNd54N_3r2ETWgo_/s1600/DB_11g_Step1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAnbIOHlGYYjVmGR8aKwLzPpxztORJSksGmeCNrU18GPplnVaF6Z48tomLKB9YIke44vTwFT53rGG6x7lITkpkVZ5cwzMCobOJ4doFUwx5TX3uAoUvAh-Ur6EydJLJQNd54N_3r2ETWgo_/s320/DB_11g_Step1.png" width="320" /></a></div>
Step 2: Accept the license agreement<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_5SNEm5Wbnm-i1dMdAF6UCY-NuA8ckg-oWNryw5U_b2lvjzbGi9PfZTlMEEcBxMXFDavrlFAs98CrZ2B_etBSDFRxUvvoBvts9PO84-be33R0YbZNUvenTU_DnqU1ed4OkiN6mtYT1oiH/s1600/DB_11g_Step2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_5SNEm5Wbnm-i1dMdAF6UCY-NuA8ckg-oWNryw5U_b2lvjzbGi9PfZTlMEEcBxMXFDavrlFAs98CrZ2B_etBSDFRxUvvoBvts9PO84-be33R0YbZNUvenTU_DnqU1ed4OkiN6mtYT1oiH/s320/DB_11g_Step2.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Step 3: Choose the destination folder where XE must be installed<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs9to3DEs5g59FQFcev8WC-50Mzu3AP5W0nwEmboVetQnc6WiW0k5jP2Hb6u33qEkJOx24_pD5eWLIbg1x0d4axh2MfAP775eTtOijcfeFp0uIOKIiJSTsLvu5tjGpOazRsest9BfXhVn2/s1600/DB_11g_Step3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs9to3DEs5g59FQFcev8WC-50Mzu3AP5W0nwEmboVetQnc6WiW0k5jP2Hb6u33qEkJOx24_pD5eWLIbg1x0d4axh2MfAP775eTtOijcfeFp0uIOKIiJSTsLvu5tjGpOazRsest9BfXhVn2/s320/DB_11g_Step3.png" width="320" /></a></div>
<div class="separator" style="clear: both;">
Step 4: Enter the SYS password</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbKCY7OQFP_h-n1kh4GhxJoqGcuzOu3nMVdHw_fAwLZrz-ht1v209jspTPfNcCFAzADflMypHxUgL_z7IrLE0t0-gZJNO1X84pfx1Ja4WP4tL1EPV013pwJwnrIuGElmKsmNM2QofCyeLo/s1600/DB_11g_Step4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbKCY7OQFP_h-n1kh4GhxJoqGcuzOu3nMVdHw_fAwLZrz-ht1v209jspTPfNcCFAzADflMypHxUgL_z7IrLE0t0-gZJNO1X84pfx1Ja4WP4tL1EPV013pwJwnrIuGElmKsmNM2QofCyeLo/s320/DB_11g_Step4.png" width="320" /></a></div>
<div class="separator" style="clear: both;">
Step 5: Review and click Install</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8POsGn0jEhzYacba_l70sCqK_cTngssPyDDkCloBx6wD7_TTPxs-3tKIGNXpH4o7nzsWzK3OO_zqSO06NYZsWtD5vI7uOi7GIiZnu6PvrvZiIrPh8G_WnOkXbaxsPqgCnZiiNba0ySxh2/s1600/DB_11g_Step5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8POsGn0jEhzYacba_l70sCqK_cTngssPyDDkCloBx6wD7_TTPxs-3tKIGNXpH4o7nzsWzK3OO_zqSO06NYZsWtD5vI7uOi7GIiZnu6PvrvZiIrPh8G_WnOkXbaxsPqgCnZiiNba0ySxh2/s320/DB_11g_Step5.png" width="320" /></a></div>
<div class="separator" style="clear: both;">
Step 6: Click Finish to finish the database installation</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi105m_ThDsXKNBmNYOeWOR7pDCqVp6Mfo-tujFdrZ-QScVCo7r3pHizuSiwaN9qF-opGmFpWkJ7uHQBosLO5Hph_ZMv7V81tYaXhAQuAHFxty1_4Wdpg5KvpUKNswOSkx3IAO2oFwriPq2/s1600/DB_11g_Step7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi105m_ThDsXKNBmNYOeWOR7pDCqVp6Mfo-tujFdrZ-QScVCo7r3pHizuSiwaN9qF-opGmFpWkJ7uHQBosLO5Hph_ZMv7V81tYaXhAQuAHFxty1_4Wdpg5KvpUKNswOSkx3IAO2oFwriPq2/s320/DB_11g_Step7.png" width="320" /></a></div>
<div>
<br /></div>
<div style="text-align: left;">
<b><u>Creating RCU schemas for compact domain:</u></b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Step 1: Execute rcu.bat from the following location - $ORACLE_HOME\oracle_common\bin</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitsy3UfVkT74adj95ij7hqFS3Jh1BKo_mzYd-9dxEaE6CWBCMHm3OHiee0ZDdVdOFv6HrLjRX-jsPx8jP6UoHmqSqEI-egKav3wOBvNT0gaGW9wmcYwvwuR8EfEpJ0yYvavMozWmFz90BU/s1600/rcu_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitsy3UfVkT74adj95ij7hqFS3Jh1BKo_mzYd-9dxEaE6CWBCMHm3OHiee0ZDdVdOFv6HrLjRX-jsPx8jP6UoHmqSqEI-egKav3wOBvNT0gaGW9wmcYwvwuR8EfEpJ0yYvavMozWmFz90BU/s320/rcu_1.png" width="320" /></a></div>
<div>
<br /></div>
<div>
Step 2: Leave the default selection on Create Repository and click Next<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz3SVPawrsXenwbTegteBCVDQjztrBYTXfSCtIYB0LlIbxLv1P8Sj7sBcqy_A4_Hz6BVf_ax9TpZMGkiEW7fGMl7EV6FX58RZLrHxsx_i0VwB0FRTJZmIMI2CiUN7oPGP2hRrAlA-muSrw/s1600/rcu_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz3SVPawrsXenwbTegteBCVDQjztrBYTXfSCtIYB0LlIbxLv1P8Sj7sBcqy_A4_Hz6BVf_ax9TpZMGkiEW7fGMl7EV6FX58RZLrHxsx_i0VwB0FRTJZmIMI2CiUN7oPGP2hRrAlA-muSrw/s320/rcu_2.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 3: Provide the database connect information and click next</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLQmLX43aAYWIIuLGkLaQncAaHPCYliejiB6yygfJzM6A7QOcmGFUVDLszY5_tAHezWIeJdMVSd9XsxBpXU9T0ObpZr-q20UJMoGSq1n17NwhiDhDM4FQ5kRseLCOvyOO4CeGzg3rnTq8o/s1600/rcu_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLQmLX43aAYWIIuLGkLaQncAaHPCYliejiB6yygfJzM6A7QOcmGFUVDLszY5_tAHezWIeJdMVSd9XsxBpXU9T0ObpZr-q20UJMoGSq1n17NwhiDhDM4FQ5kRseLCOvyOO4CeGzg3rnTq8o/s320/rcu_3.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 4: Ignore the warning. XE is not a "certified" database but will work fine in development environments.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFRoRhLr3j9l_xQX6OCHhamFLq4pm8EFo-Lyg-0KfSepU8sJZDVgMXwpOEFucaOzL5dX-E0_ymug2Tn58U5CiWFyWa62BOpRD9DIZH5tOf50RIsb4jCsNgwYnLKPDmQYsd0YLiqj3K50AH/s1600/rcu_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="137" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFRoRhLr3j9l_xQX6OCHhamFLq4pm8EFo-Lyg-0KfSepU8sJZDVgMXwpOEFucaOzL5dX-E0_ymug2Tn58U5CiWFyWa62BOpRD9DIZH5tOf50RIsb4jCsNgwYnLKPDmQYsd0YLiqj3K50AH/s320/rcu_4.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 5: Default prefix is DEV. You can change this if you need. Select the SOA Infrastructure schema from the list which will select the required schemas</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfmPFJF-3uf5rCGZIUzgZZH4K5M3Y0i5X8dAX6iFy8WPapVHfqJS3qLdzqLqHGXAkU1S4qSbH_kqKHV-MOdADqxqAfvAUSELbQQY2zCZNQ_1Z6vGLp_hQkEIizXj7J6XCK5nGAxBI7-Lmc/s1600/rcu_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfmPFJF-3uf5rCGZIUzgZZH4K5M3Y0i5X8dAX6iFy8WPapVHfqJS3qLdzqLqHGXAkU1S4qSbH_kqKHV-MOdADqxqAfvAUSELbQQY2zCZNQ_1Z6vGLp_hQkEIizXj7J6XCK5nGAxBI7-Lmc/s320/rcu_5.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 6: Provide a password that will be used for all the RCU schemas</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfOs_zHMVGYbRpObX8xPeHSyeZ4u7_KF4zF1CzVITA5kdbZjem-UrA5AsuoTmnuiQ7heY3vEaCDm04q7RcDs4oIzyoH_mivdmNy1RSNYZvnV-SyS7QXhjvBvadQQObXAZ6aPhtf1qrt1cz/s1600/rcu_6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfOs_zHMVGYbRpObX8xPeHSyeZ4u7_KF4zF1CzVITA5kdbZjem-UrA5AsuoTmnuiQ7heY3vEaCDm04q7RcDs4oIzyoH_mivdmNy1RSNYZvnV-SyS7QXhjvBvadQQObXAZ6aPhtf1qrt1cz/s320/rcu_6.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 7: Here you can select the size for the database profile. Default is small and should be fine for development environments. Optionally you can choose to enable/disable healthcare integration</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJGwbxPH6CUdOIcqclcmeVeJ__zzJHtnDxEcn-KfdqcPjoz228eRYzVZ5olcqqWlO9RarnVYr7xC5IZjR5cTH7YKXvvAR1tWlpJ7M3L83AYdnWti7Al10BwwF3B2Dt92eM6ODuoBaBs5nR/s1600/rcu_7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJGwbxPH6CUdOIcqclcmeVeJ__zzJHtnDxEcn-KfdqcPjoz228eRYzVZ5olcqqWlO9RarnVYr7xC5IZjR5cTH7YKXvvAR1tWlpJ7M3L83AYdnWti7Al10BwwF3B2Dt92eM6ODuoBaBs5nR/s320/rcu_7.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 8: Follow the instructions and proceed with creation of database schemas for our compact FMW domain. Click close in the final summary screen.</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIqIhd5IR4XW4IombcWGFcXlKTxS_ki40HDEOouRGbC4t44U23l8KkBss2MV0IY_16hqlQVpRvQx4wK-Pb12IftHxbLtn-Nk7lQAeKlhmAvgOCKnZVKlm-7BKD0QDhRkezJC4YVjbGVDR9/s1600/rcu_10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIqIhd5IR4XW4IombcWGFcXlKTxS_ki40HDEOouRGbC4t44U23l8KkBss2MV0IY_16hqlQVpRvQx4wK-Pb12IftHxbLtn-Nk7lQAeKlhmAvgOCKnZVKlm-7BKD0QDhRkezJC4YVjbGVDR9/s320/rcu_10.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><u>Create and Configure Compact SOA Domain:</u></b></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In this section let's create and configure a compact SOA domain.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
To enable compact domain option, set the following environment variable before executing the config.cmd script</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
> set CONFIG_JVM_ARGS=-Dcom.oracle.cie.config.showProfile=true</div>
<div class="separator" style="clear: both; text-align: left;">
> cd $ORACLE_HOME\oracle_common\common\bin</div>
<div class="separator" style="clear: both; text-align: left;">
> config.cmd</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Step 1: Choose the "Create a new compact domain" option and provide a domain name/location</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4cAHU_JkRKq-KOFIdzkJaRjjMEhi1AGVIbdmhwDR771IBPZnlREy1F9aGEiomqhb9VxZqXG2EUDLiMOlWttu-dm0ijb-bUnQ3QzGCgeKtmGEOo-I-RYV92YsCCATtwBHyenEmb5O46MfE/s1600/config_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4cAHU_JkRKq-KOFIdzkJaRjjMEhi1AGVIbdmhwDR771IBPZnlREy1F9aGEiomqhb9VxZqXG2EUDLiMOlWttu-dm0ijb-bUnQ3QzGCgeKtmGEOo-I-RYV92YsCCATtwBHyenEmb5O46MfE/s320/config_1.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 2: This is an important step where you must choose the templates with which the compact domain will be created. Choose all the required components. Note that the templates would show up based on the installations in the current domain.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK8WqwBjVLUlLe2CKVeu1XFpnOroHmvKXdXRMvD7PB-kCw1nq1DXaqjAG9CVTexyiTX9WSam9_qB-n1guL3vZcZsWjsKAp9bl_VOdyocK3yDljaG4Q_zJgkn4gNFzXJbhjGGeIrdaO_L05/s1600/config_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK8WqwBjVLUlLe2CKVeu1XFpnOroHmvKXdXRMvD7PB-kCw1nq1DXaqjAG9CVTexyiTX9WSam9_qB-n1guL3vZcZsWjsKAp9bl_VOdyocK3yDljaG4Q_zJgkn4gNFzXJbhjGGeIrdaO_L05/s320/config_2.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 3: Choose a folder location where applications would reside</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDqEkXGEN_OMhx4Nm82Lac2XsDfkDQYTiIEr2a_n-v60FXnC97FGn52UcVM9X2wqZV-DeEgGKc33ocPfSjBfFTjmSJ_hCMwCv5guI2579j3ud4t1mShpLolDJH6g-5iJOM0KZBEtYW5kXO/s1600/config_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDqEkXGEN_OMhx4Nm82Lac2XsDfkDQYTiIEr2a_n-v60FXnC97FGn52UcVM9X2wqZV-DeEgGKc33ocPfSjBfFTjmSJ_hCMwCv5guI2579j3ud4t1mShpLolDJH6g-5iJOM0KZBEtYW5kXO/s320/config_3.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 4: Provide a administrator username and password.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5gITypV2txem-MUJlEgHVfUW5UG0SEcn0PytmnK-Wb1xSP_J56qLdl6ylOK84RHZ_FmVmL9eNrmOoiPNJiSz6fvfvSNiayvadyq3nrbYmM9FSFYPo_lfeQ_jjJStbMIgYPR7NVzYq-ZQK/s1600/config_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5gITypV2txem-MUJlEgHVfUW5UG0SEcn0PytmnK-Wb1xSP_J56qLdl6ylOK84RHZ_FmVmL9eNrmOoiPNJiSz6fvfvSNiayvadyq3nrbYmM9FSFYPo_lfeQ_jjJStbMIgYPR7NVzYq-ZQK/s320/config_4.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 5: Choose Development mode / Production Mode (basically if you choose production mode, you will be prompted for the administrator username and password every time you start the weblogic server). Choose the JDK that we installed earlier which will be picked up by default.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYYeanppFnV-dNn88iTOTnrLj6rfzJdGMJGyYSwSjgePT6oR0kk-PAXWvFo_wY3PU3cwpyqmGfsofj6Siy0lpBFqFUfoEFpBT2vO75Mp6RIdyNU-8u4Wsju9s5NHolwL-nVHo89941Tocu/s1600/config_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYYeanppFnV-dNn88iTOTnrLj6rfzJdGMJGyYSwSjgePT6oR0kk-PAXWvFo_wY3PU3cwpyqmGfsofj6Siy0lpBFqFUfoEFpBT2vO75Mp6RIdyNU-8u4Wsju9s5NHolwL-nVHo89941Tocu/s320/config_5.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 6:Provide the database details and click Get RCU Configuration. Once you get a success message proceed to next step.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsFMeVYJn6MYEmDdFhnZnQLOYFtbMm5ysNdb7SteE5_MuyRlYGtlcPhS685WG1koPsEBRLLCeaJnXD7hnxg5gZ_Rte5qyHXUtL5baZASUXuQg-aK6ei4Ehz1EWrNFBJiwXhZyrDvPAH1mz/s1600/config_6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsFMeVYJn6MYEmDdFhnZnQLOYFtbMm5ysNdb7SteE5_MuyRlYGtlcPhS685WG1koPsEBRLLCeaJnXD7hnxg5gZ_Rte5qyHXUtL5baZASUXuQg-aK6ei4Ehz1EWrNFBJiwXhZyrDvPAH1mz/s320/config_6.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 7: In the JDBC component schema page, select all the schema components and click next</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbE-U5Ve7qpbRG81liBfWr89Y8U3tCNQ_t74d9OMuD6Ne4ShXKKYJC5H1wmlnoPeYF4Mzz00QH0zbhLsYzHlXcCoHnRf8j0JP7kOlgyCSjympPUaA4Fh0RZPPipI2iyhderobT8JSr_WIo/s1600/config_7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbE-U5Ve7qpbRG81liBfWr89Y8U3tCNQ_t74d9OMuD6Ne4ShXKKYJC5H1wmlnoPeYF4Mzz00QH0zbhLsYzHlXcCoHnRf8j0JP7kOlgyCSjympPUaA4Fh0RZPPipI2iyhderobT8JSr_WIo/s320/config_7.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 8: A test would run against the database for the schema connectivity. Once you get a success for all the components proceed further.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhco5gybhpzXqfo9n3sYvdMG3av6BmWoleYKxAxtRiHFooCrdbHdbvREUlblsP9fcUNWhqv47b5wEoueJTQqpAwxHc575mwg75Eny6sm63H21H45QmNaHbZruikL0fx9qdceNTm5ZoN2Ff9/s1600/config_8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhco5gybhpzXqfo9n3sYvdMG3av6BmWoleYKxAxtRiHFooCrdbHdbvREUlblsP9fcUNWhqv47b5wEoueJTQqpAwxHc575mwg75Eny6sm63H21H45QmNaHbZruikL0fx9qdceNTm5ZoN2Ff9/s320/config_8.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 9: For a compact domain with a "Admin" only server which will host all the middleware services leave the defaults on step 9 and click next. If you have a need to update the configuration such as adding managed servers, update default ports you can check the appropriate configuration and update.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWxCt3hEqHk9eYFps2JYkchwpKHt0zHQnQKwuGi0Gtk-pIDXnC1YqTMympRSmdc8iz9LzYKBRdgmPPWliRUPGAlGTih2srwaPpTIhVVzYvos0xYFsh1kwdQ8Wm7K5yzQ68znwecRvqXKit/s1600/config_9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWxCt3hEqHk9eYFps2JYkchwpKHt0zHQnQKwuGi0Gtk-pIDXnC1YqTMympRSmdc8iz9LzYKBRdgmPPWliRUPGAlGTih2srwaPpTIhVVzYvos0xYFsh1kwdQ8Wm7K5yzQ68znwecRvqXKit/s320/config_9.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 10: Click Create to create a compact SOA domain</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXJJwGGQpBsFRNZBcLUmYY9meqHRaveyAAWf6i-zD_zt2SKyzmnGvtIZyLyDpPOpaYmex6Jkb7n1FF7DbjcBaRGCwNRt4Pc5eGYZgoBakJ1NhPITrQlQ-yDgtUPHsGPKnpkm7RKvup7d0I/s1600/config_10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXJJwGGQpBsFRNZBcLUmYY9meqHRaveyAAWf6i-zD_zt2SKyzmnGvtIZyLyDpPOpaYmex6Jkb7n1FF7DbjcBaRGCwNRt4Pc5eGYZgoBakJ1NhPITrQlQ-yDgtUPHsGPKnpkm7RKvup7d0I/s320/config_10.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Step 11: Ensure the domain creation succeeds and click Finish to close the config wizard.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXsY0Bi5PkW40ByssQXNAb-Av3VYOQUQrqa-I_XD1aXG4HGrqWebljnJKzcyT-akzd6_xv9wsCWCviCJ8NmdHo-DiGNb4YXx9v8BmK5TCRWmF30LZcdY6jR1F7h_mLWdP2zzWx_TAJTzl3/s1600/config_11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXsY0Bi5PkW40ByssQXNAb-Av3VYOQUQrqa-I_XD1aXG4HGrqWebljnJKzcyT-akzd6_xv9wsCWCviCJ8NmdHo-DiGNb4YXx9v8BmK5TCRWmF30LZcdY6jR1F7h_mLWdP2zzWx_TAJTzl3/s320/config_11.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizO-Q9q0c1E0FfxCv_gAuwm3GouTsHdgEHf0k3WaQU5WCUzsua8hPtZJJ_o884z9kldKlTHFhj7dyuRusmBsEkyNiIDVJfJ1ZK6PIqmlsFywoN4v7Qiz8XyWOYBNgtNelys0jCrDN0cXek/s1600/config_12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizO-Q9q0c1E0FfxCv_gAuwm3GouTsHdgEHf0k3WaQU5WCUzsua8hPtZJJ_o884z9kldKlTHFhj7dyuRusmBsEkyNiIDVJfJ1ZK6PIqmlsFywoN4v7Qiz8XyWOYBNgtNelys0jCrDN0cXek/s320/config_12.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
That completes the creation of a SOA compact domain.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Now, if you start the weblogic server by issuing startWebLogic.cmd command, you will notice that the Java DB instance would start automatically. Since this is a compact domain and it will run off the Oracle XE database instance, we don't need the Java DB.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Start the weblogic with the noderby flag to prevent the Java DB from starting up.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
> cd $ORACLE_HOME\user_projects\domains\compact_domain\bin</div>
<div class="separator" style="clear: both; text-align: left;">
> startWebLogic.cmd noderby</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Once the server starts up, establish connectivity to all the services to test the installation;</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
WLS Console: http://localhost:7001/console</div>
<div class="separator" style="clear: both; text-align: left;">
EM Console: http://localhost:7001/em</div>
<div class="separator" style="clear: both; text-align: left;">
SOA Composer: http://localhost:7001/soa/composer</div>
<div class="separator" style="clear: both; text-align: left;">
B2B Console (if installed): http://localhost:7001/b2bconsole</div>
<div class="separator" style="clear: both; text-align: left;">
BAM Console: http://localhost:7001/bam/console</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
One advantage with compact domain is that you can also create a integrated weblogic domain from JDeveloper which could be handy for a lot of development activities.</div>
</div>
</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com5tag:blogger.com,1999:blog-5705818669612605666.post-36264840060842695702015-09-16T10:02:00.000-04:002015-09-16T10:02:35.556-04:00Are we ready for the cloud leap?<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: #232629; font-family: Georgia, serif; font-size: 18px; font-stretch: inherit; line-height: 32px; margin-bottom: 32px; outline: 0px; padding: 0px; vertical-align: baseline;">
Cloud computing has come a long way from just being a buzz word. With the burgeoning of cloud companies and service providers across the planet, are we ready for the cloud leap yet?</div>
<div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: #232629; font-family: Georgia, serif; font-size: 18px; font-stretch: inherit; line-height: 32px; margin-bottom: 32px; outline: 0px; padding: 0px; vertical-align: baseline;">
Let’s reflect on a life-changing innovation that happened in the last decade – the evolution of smart phones. One can monitor health, pay utility bills, transfer funds, call a taxi and post an fb update on-the-go and in seconds. From just being a consumer focused platform that brought <em style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; font-family: inherit; font-stretch: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">everything</em> to our palms, it has matured into a first-class citizen of most enterprises today. It is hard to imagine appliction architectures today without a mobile strategy. Almost all customers I work with has a mobile strategy – at least in principle – and are getting their key end-user focused functions on mobile to keep pace with competition, if not outpace them. For instance, it is impossible for a bank to thrive in today’s aggressive environment without a mobile app that supports ‘Check Deposits’. Trendsetters like Uber, Instagram, Myntra, Hotel Tonight went mobile only strategizing their business model to consumer demand. That was the revolution of the last decade.</div>
<div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: #232629; font-family: Georgia, serif; font-size: 18px; font-stretch: inherit; line-height: 32px; margin-bottom: 32px; outline: 0px; padding: 0px; vertical-align: baseline;">
Is cloud the next big thing? ......</div>
<div style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; box-sizing: border-box; color: #232629; font-family: Georgia, serif; font-size: 18px; font-stretch: inherit; line-height: 32px; margin-bottom: 32px; outline: 0px; padding: 0px; vertical-align: baseline;">
Read more @ <a href="https://www.linkedin.com/pulse/we-ready-cloud-leap-sathya-narayanan-a-g" target="_blank">Are we ready for the cloud leap?</a></div>
</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com3tag:blogger.com,1999:blog-5705818669612605666.post-40593582333765798102015-02-16T23:03:00.000-05:002015-02-16T23:10:22.027-05:00Integrate OSB with Oracle MFT<div dir="ltr" style="text-align: left;" trbidi="on">
Recently, I had an opportunity to work with a customer on MFT integration with OSB.<br />
<br />
Some pain points were;<br />
1) Ever-increasing FTP servers across their enterprise which was increasingly becoming tough to manage and maintain.<br />
2) Custom code for compression/decompression logic before/after file transfers<br />
3) Bunch of third-party utilities for scheduling file transfers<br />
4) Java code exposed as API for PGP encryption/decryption<br />
<br />
Obviously they had a lot of integration touch-points while putting together a file transfer solution - which also meant multiple points of failure and not to mention the maintenance/debugging nightmare if something were to go wrong.<br />
<br />
One of the cool features of Oracle MFT is that it supports out-of-the-box integration with many technologies including OSB. For many OSB users, the following could be some of the use-cases where they could take advantage of MFT and reap benefits;<br />
<br />
Traditional OSB implementations used File/FTP adapters for file transfers - No real visibility into the transfers and not the best of designs to manage/maintain.<br />
<br />
With Oracle MFT exposed as a webservice it is now just a seamless webservice invocation - with the added benefits such as real-time visibility, OOTB scheduling, Compression, PGP encryption, ease of maintenance to name a few..<br />
<br />
<b><u><span style="color: #cc0000;">Use-Case 1: OSB triggers a MFT transfer</span></u></b><br />
<br />
In this use-case OSB would trigger a MFT transfer. MFT would then fan-out the transfer;<br />
a) Decompress, Decrypt and store in file system<br />
b) Initiate a SOA process to do further processing (human task etc..)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz0Nz6gF9sQ4JaaV-5Zsc73rtJb8NIvb1h3ndW7oT7nvw0e3wH0zYVQh5GgsucoEhCHKonqqk9xG1FZ7DxT-JixdYCZtUpiTY8RA2yyhEnD5YUijtvujZFvtpyYeGh-VGKOUv1rZ5UDObS/s1600/MFT_OSB_Source_Design.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz0Nz6gF9sQ4JaaV-5Zsc73rtJb8NIvb1h3ndW7oT7nvw0e3wH0zYVQh5GgsucoEhCHKonqqk9xG1FZ7DxT-JixdYCZtUpiTY8RA2yyhEnD5YUijtvujZFvtpyYeGh-VGKOUv1rZ5UDObS/s1600/MFT_OSB_Source_Design.png" height="110" width="320" /></a></div>
<br />
<br />
<b><span style="color: #cc0000;">Creating a MFT Source:</span></b><br />
<br />
Step 1: Login to Oracle MFT console (http://hostname:port/mftconsole)<br />
<br />
Step 2: Go to the Design tab. Click on the Sources and create a new OSB source as shown below;<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN-mIDzTL6DWtPX4OeJBMTnzcB8OWbVQJ4kFYITprTKcah9njamxTMCiJs6H2q-GUWeRUUTbNU7vsYiizBh7KAOcHNbeRKx7HUBqdUeI8L4jTMBvl1LYQNarqetYD3fmclpEwL5xRpxv7S/s1600/MFT_OSB_Src.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjN-mIDzTL6DWtPX4OeJBMTnzcB8OWbVQJ4kFYITprTKcah9njamxTMCiJs6H2q-GUWeRUUTbNU7vsYiizBh7KAOcHNbeRKx7HUBqdUeI8L4jTMBvl1LYQNarqetYD3fmclpEwL5xRpxv7S/s1600/MFT_OSB_Src.png" height="320" width="296" /></a></div>
<br />
<br />
<b><span style="color: #cc0000;">Creating a MFT Target:</span></b><br />
<br />
Step 3: Now, click on the Targets and create a new MFT target (This can be a webservice, SOA service, FTP, sFTP, File etc..).<br />
In this case, we would be creating 2 targets - one SOA target and a File target as shown below;<br />
<br />
Note: For the SOA target - I just created a simple SOA composite with MFT adapter...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTh-9vS1ptzYr3RpHEdhFq5nk1iKkejzfpdZG1ILnKUmixeDQT3N2lr9NWGiJIpeUwuE6axVdnQvl8o1jjGw14Hc7nbARJ4YGpfae6g5ccibTrqUKZM3VvqWqARXd0rxnCibtNdbE3FvVD/s1600/MFT_File_Target.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTh-9vS1ptzYr3RpHEdhFq5nk1iKkejzfpdZG1ILnKUmixeDQT3N2lr9NWGiJIpeUwuE6axVdnQvl8o1jjGw14Hc7nbARJ4YGpfae6g5ccibTrqUKZM3VvqWqARXd0rxnCibtNdbE3FvVD/s1600/MFT_File_Target.png" height="320" width="307" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjugqTXgzeElx8XJmJyjRFn93TAl3LzLAujQSejyevWt2tOYX07he0-UB-WFtD7yQkoKR8Cq5rIeoyX6a7sp5qI7e0xbHbE752XYRHg9UjPMpyWnB3eFKSHwOxu6XuRP7XWkSg2BBw85iB6/s1600/MFT_SOA_Target.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjugqTXgzeElx8XJmJyjRFn93TAl3LzLAujQSejyevWt2tOYX07he0-UB-WFtD7yQkoKR8Cq5rIeoyX6a7sp5qI7e0xbHbE752XYRHg9UjPMpyWnB3eFKSHwOxu6XuRP7XWkSg2BBw85iB6/s1600/MFT_SOA_Target.png" height="320" width="238" /></a></div>
<br />
<br />
<b><span style="color: #cc0000;">Now. let's create a Transfer</span></b> - nothing more than linking the source & target on a canvas.<br />
<br />
Step 4: Click on the Transfers and create a new MFT. In the MFT canvas, drag and drop the <b>OSBSrc </b>to the source panel. Similarly, drag and drop the <b>OrderSOATarget </b>& <b>PutFile </b>targets to the target panel. Note that "decompress" and "decrypt" pre-processing actions are added to the targets. These are out-of-the-box capabilities that you can leverage with Oracle MFT.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimj-rqBI2ifwOA_P2PFkXKO7IExjXLTUMaHvI1fFCWvsH6Th39X-5euXGW7KGxp0BCSM8mpjPg9VKzDGu34BY5e1LvlmFFGE4B0XfUeWgUM1WCoXgOqGRCgYBv8y-fgkBV2OSLqCjjJejM/s1600/MFT_Orders_Transfer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimj-rqBI2ifwOA_P2PFkXKO7IExjXLTUMaHvI1fFCWvsH6Th39X-5euXGW7KGxp0BCSM8mpjPg9VKzDGu34BY5e1LvlmFFGE4B0XfUeWgUM1WCoXgOqGRCgYBv8y-fgkBV2OSLqCjjJejM/s1600/MFT_Orders_Transfer.png" height="188" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig_l9Uq9iqjut-IK9n5EVvyBt6rZI-QD-7IYv4efJ4fUNQfxFvgc8LRK7O81Z3Dk2z6V8sJTT04ORlx2k39uLCGq0iJLyo7urc8Md-sDd1ohaxGcAbDoEXnRHo6OQJXjWDy82b5OASVWXK/s1600/MFT_Orders_Transfer_View.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig_l9Uq9iqjut-IK9n5EVvyBt6rZI-QD-7IYv4efJ4fUNQfxFvgc8LRK7O81Z3Dk2z6V8sJTT04ORlx2k39uLCGq0iJLyo7urc8Md-sDd1ohaxGcAbDoEXnRHo6OQJXjWDy82b5OASVWXK/s1600/MFT_Orders_Transfer_View.png" height="197" width="320" /></a></div>
<br />
<br />
That's all. Now just define a business service in OSB as usual that will trigger the transfer in Oracle MFT. You can obtain the MFT (<b>OSBSrc</b>) source webservice URL by just opening the source.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH-_69Fdn_XB0pDc4jrABOW8aRaRFB6FzKhA0x3Olsvr2CiKwLmmpIdZA4RzbiRu7gMivo28yePDvLCjX58guu8gV2AFqZBIHMwuzQQUm2Ma7x9K-WZLzj9C-HZt1oUyLGi-3qLl1F2fJU/s1600/MFTOSBURL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH-_69Fdn_XB0pDc4jrABOW8aRaRFB6FzKhA0x3Olsvr2CiKwLmmpIdZA4RzbiRu7gMivo28yePDvLCjX58guu8gV2AFqZBIHMwuzQQUm2Ma7x9K-WZLzj9C-HZt1oUyLGi-3qLl1F2fJU/s1600/MFTOSBURL.png" height="107" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB8XmllOQi8aTY6QeOOVFw39G2cixux4F7KI9xZC_oNW1KjvVio1noY6WBzsk2n2V3Me1iCJSb7vF0N5ZKGSXJUwIqybvSkv4m6qX2P_q2u-_B0C54-fBfHHGVCvgiGTBTuYf1PW-uwzEO/s1600/MFT_OSB_BS.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB8XmllOQi8aTY6QeOOVFw39G2cixux4F7KI9xZC_oNW1KjvVio1noY6WBzsk2n2V3Me1iCJSb7vF0N5ZKGSXJUwIqybvSkv4m6qX2P_q2u-_B0C54-fBfHHGVCvgiGTBTuYf1PW-uwzEO/s1600/MFT_OSB_BS.png" height="170" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<br />
<b><u><span style="color: #cc0000;">Use-Case 2: Oracle MFT invokes OSB proxy service</span></u></b><br />
<br />
Here we will pick a file from the embedded FTP server (FTP & sFTP servers are embedded and comes out-of-the-box with Oracle MFT), and invoke a OSB target.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzlt7qK1LKrpQ_8ugIrXog3vUEMrOmVB_tH_c_XrFvZnBGz2W3Z8J4DdfvbJ8LMoWpDT-XRBU9ShMopb2jSRDVOYUZJUnlfvxDa_bRGTNzs4R-GLGvfeDMbloQWOPAOJKQcO667sfOTHcx/s1600/MFT_OSB_Target_Design.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzlt7qK1LKrpQ_8ugIrXog3vUEMrOmVB_tH_c_XrFvZnBGz2W3Z8J4DdfvbJ8LMoWpDT-XRBU9ShMopb2jSRDVOYUZJUnlfvxDa_bRGTNzs4R-GLGvfeDMbloQWOPAOJKQcO667sfOTHcx/s1600/MFT_OSB_Target_Design.png" height="94" width="320" /></a></div>
<br />
Step 1: Click on Sources and create a new source of type "<b>FTP Embedded</b>" as shown below;<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-ZU3qln3vD0SHy0jt_UAJOBYuzk6cOWWzwh8iRb6_i87NPHrviycj2XL5rgQAaTNnMH6QQlkAIZAOkgJdVAT2mTr28-e0XDrV8cv5TVmx2HZ1FhOMjwx5sTU8_de2CcqnXf0DX6ZTmTR7/s1600/MFT_File_Src.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-ZU3qln3vD0SHy0jt_UAJOBYuzk6cOWWzwh8iRb6_i87NPHrviycj2XL5rgQAaTNnMH6QQlkAIZAOkgJdVAT2mTr28-e0XDrV8cv5TVmx2HZ1FhOMjwx5sTU8_de2CcqnXf0DX6ZTmTR7/s1600/MFT_File_Src.png" height="271" width="320" /></a></div>
<br />
Step 2: Click on Targets and create a new target of type "<b>OSB</b>" as shown below<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif7Ui3ZVC40nyn3YCOeBWRbp7aq7j4TrUA5Iis0JjoSSwLeQRha9MJUlKw6am-IXYIXjE_tVJ7KesVNkawcXKtmQrE_95nw5YThcqnavYgLrrmvAR-Eru7qK5RwcLXOGfBT9RxEhzaFZa7/s1600/MFT_OSB_Target.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif7Ui3ZVC40nyn3YCOeBWRbp7aq7j4TrUA5Iis0JjoSSwLeQRha9MJUlKw6am-IXYIXjE_tVJ7KesVNkawcXKtmQrE_95nw5YThcqnavYgLrrmvAR-Eru7qK5RwcLXOGfBT9RxEhzaFZa7/s1600/MFT_OSB_Target.png" height="320" width="239" /></a></div>
<br />
Step 3: Click on the Transfers and create a new MFT. In the MFT canvas, drag and drop the <b>FileSrc </b>to the source panel. Similarly, drag and drop the <b>OSBTgt </b>to the target panel<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhadKkepBd8s9FdzIA6cduqkrUVBgj5QWeaw7oG5-JKXQk0-Vw5K21NDYYh4ephMWHM05ofoS1W8VCtVn8DCcksw2iqtqT1il5U4VIeEG-6_MxjY5eKfsj7MgIFZYSg4rlmxSPT_W1c6SG3/s1600/MFT_OSB_Transfer_View.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhadKkepBd8s9FdzIA6cduqkrUVBgj5QWeaw7oG5-JKXQk0-Vw5K21NDYYh4ephMWHM05ofoS1W8VCtVn8DCcksw2iqtqT1il5U4VIeEG-6_MxjY5eKfsj7MgIFZYSg4rlmxSPT_W1c6SG3/s1600/MFT_OSB_Transfer_View.png" height="157" width="320" /></a></div>
<br />
Done. Now, let's see how to create a OSB proxy service that will consume the MFT transfer.<br />
<br />
Step 4: Login to OSB console. Create a proxy service based on the WSDL available @ $FMW_Home/mft/integration/wsdl/MFTSOAService.wsdl (While source/target type is chosen as OSB or SOA, MFT exposes the web service based on this WSDL contract)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz9CrvJriJqvnHp22Yf_CFe_VCA_CxUHVYx84sQR1JHaUICFegtVwpvmuXQ1BtXvLYFS3CToRGGjcByFRpw2OIJV3eFSQ859Ap-4V_pF2pA0vJUcEPduuqIL_ROZfSjKVKwO1o9YRvqMVt/s1600/MFT_OSB_PS.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz9CrvJriJqvnHp22Yf_CFe_VCA_CxUHVYx84sQR1JHaUICFegtVwpvmuXQ1BtXvLYFS3CToRGGjcByFRpw2OIJV3eFSQ859Ap-4V_pF2pA0vJUcEPduuqIL_ROZfSjKVKwO1o9YRvqMVt/s1600/MFT_OSB_PS.png" height="158" width="320" /></a></div>
<br />
Note: Ensure that the proxy service URL and the MFT OSBTgt URL matches.<br />
<br />
As easy as that.</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com16tag:blogger.com,1999:blog-5705818669612605666.post-82383488119145283862015-01-24T22:22:00.000-05:002015-02-16T23:03:35.533-05:00Oracle MFT - The Managed File Transfer<div dir="ltr" style="text-align: left;" trbidi="on">
With the 12c release for Fusion Middleware, Oracle released the long-awaited, feature-rich managed file transfer solution titled Oracle MFT. At the outset, some key value propositions of this product are;<br />
<br />
<ol style="text-align: left;">
<li>Extremely Simple to use, build & configure</li>
<li>End-to-End visibility on file transfers</li>
<li>As with any other Oracle FMW stack of products, seamless integration options</li>
<li>High Availability MFT (leveraging WebLogic capabilities)</li>
<li>Highly Secure (Leverage WLS OPSS instead of typical FTP OS layer security)</li>
<li>OOTB embedded FTP & sFTP servers (Those of you looking to consolidate on ever increasing FTP & sFTP servers in your enterprise...)</li>
<li>Automate File Transfers using the built-in Enterprise Scheduler Service (ESS)</li>
<li>Transfer very large files (pass-by-reference) - limited only by disk space and network speed</li>
<li>Fan-out, chaining and custom callouts</li>
</ol>
<br />
Having worked with quite a few customers on this new Oracle technology, I can certainly tell that these features have generated a huge interest. Prior to Oracle MFT, it was really hard to find a product that could achieve all of the above requirements...<br />
<br />
Let's delve little deep into these points...<br />
<br />
<span style="color: #cc0000;"><b>Extreme Simplicity</b></span><br />
<br />
No IDE to design/configure transfers.<br />
Business user friendly unified web-based, highly intuitive graphical interface for design, monitoring & administration of all your file transfers.<br />
Zero learning curve.<br />
<br />
To create a transfer -> Just create your source and target - drag & drop them in the transfer canvas. You are good to go !! Incredibly, it's that simple...<br />
<br />
Free-up developers: really? Yes.<br />
How many times have you configured the cumbersome back-end scheduler jobs?<br />
How many technical resources you hired/trained on various scripting languages just to manage and handle file transfers?<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Kl5d-nAcsgK5NhbHK8zga790BPl3VpAvuV5yj-t0_xzm525Nukq51AvwUcdV-_R1Z-cPQf7RkYSC2s678kC4UXIpPhGyARCvZvz6hNs2nYptozjqxxIriRCOMGAnSQJi2AGrfiFGRAZj/s1600/MFT_Design.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Kl5d-nAcsgK5NhbHK8zga790BPl3VpAvuV5yj-t0_xzm525Nukq51AvwUcdV-_R1Z-cPQf7RkYSC2s678kC4UXIpPhGyARCvZvz6hNs2nYptozjqxxIriRCOMGAnSQJi2AGrfiFGRAZj/s1600/MFT_Design.png" height="193" width="320" /></a></div>
<b style="color: #cc0000;">End-to-End Visibility</b><br />
<br />
MFT console offers out-of-the-box monitoring dashboards with drill-down capabilities. Users can monitor overall file transfer metrics such as;<br />
<br />
<ul style="text-align: left;">
<li>Most Active Transfers</li>
<li>Average, Min & Max Payload size, Transfer Speeds & Transfer Time</li>
<li>Recent Errors/Failure Ratio</li>
<li>Advanced File Search - based on file name, date, user, status etc..</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit1ezigvnivej7mUiNuQGk6XxSdMomqlgVStUXYgNNRRmMmOQxFVXszmkqIUFzEEePMKtQ0pU9EXgFPAYrajrj9Ep414HsYN0QkGuN4P054AIw1O5-2DkRLaBXKFUksvpYhPkLkzkUtJce/s1600/MFT_Monitor_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit1ezigvnivej7mUiNuQGk6XxSdMomqlgVStUXYgNNRRmMmOQxFVXszmkqIUFzEEePMKtQ0pU9EXgFPAYrajrj9Ep414HsYN0QkGuN4P054AIw1O5-2DkRLaBXKFUksvpYhPkLkzkUtJce/s1600/MFT_Monitor_1.png" height="172" width="320" /></a></div>
<div>
<br /></div>
<br />
You can also monitor a single file transfer instance graphically with fine grained details on the transfer. Additionally, Oracle MFT provides "Resubmit" option where users can resubmit a file transfer from various stages (Source, Transfer or Target).<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLixjTLDpIO3moKkmBY708UJw5SJQ0xrYr29S_ZlRt3PtltO6Zq9ruCPRj1M1HzQz7IVLfexGpC2WHQMUFGRHIDb8Mhy-6Mq_dROMJLXYkJPlEuJVbIg2UYFNMAy8xy5JnTRocQXi67vME/s1600/MFT_Monitor_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLixjTLDpIO3moKkmBY708UJw5SJQ0xrYr29S_ZlRt3PtltO6Zq9ruCPRj1M1HzQz7IVLfexGpC2WHQMUFGRHIDb8Mhy-6Mq_dROMJLXYkJPlEuJVbIg2UYFNMAy8xy5JnTRocQXi67vME/s1600/MFT_Monitor_2.png" height="172" width="320" /></a></div>
<br />
<span style="color: #cc0000;"><b>Extensibility</b></span><br />
<br />
Oracle MFT provides OOTB integration with the following source/target types in the current release. Obviously many more are coming in...<br />
<ul style="text-align: left;">
<li>FTP Embedded (Read/Write from/to the embedded FTP server)</li>
<li>sFTP Embedded (Read/Write from/to the embedded sFTP server)</li>
<li>FTP Remote (Read/Write from/to a remote FTP server)</li>
<li>sFTP Remote (Read/Write from/to a remote sFTP server)</li>
<li>File (Read/Write from/to the shared file storage)</li>
<li>SOAP (Send/Receive to/from a SOAP based web service)</li>
<li>SOA (Send/Receive to/from a SOA composite) - SOA 12c provides an MFT adapter. Optionally, you can also connect to a SOA/OSB 11g instance through webservice</li>
<li>Service Bus (Send/Receive to/from an OSB proxy/business service)</li>
<li>B2B (Connect to a B2B with MFT as a channel)</li>
<li>Healthcare (Connect to Healthcare HL7)</li>
<li>ODI (Connect to Oracle Data Integrator)</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivfsiX8W_hiJ95fX-cxjV0Z8kQyjWhF0tiCgsQOd9uUtlcMxAj_VAPAlXC_xKJsqyjF0e8X4mPUJhaUK5cXK5Af0rchh8h1FwuU7eMPNsQREgKY7B94kyvmLZ2a1nC2borsg7_zmcKsEG-/s1600/mft_types.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivfsiX8W_hiJ95fX-cxjV0Z8kQyjWhF0tiCgsQOd9uUtlcMxAj_VAPAlXC_xKJsqyjF0e8X4mPUJhaUK5cXK5Af0rchh8h1FwuU7eMPNsQREgKY7B94kyvmLZ2a1nC2borsg7_zmcKsEG-/s1600/mft_types.png" height="200" width="175" /></a></div>
<br />
<span style="color: #cc0000;"><b>High Availability</b></span><br />
<br />
Oracle MFT runs on Oracle WebLogic 12c and can be clustered. This provides organizations with an HA MFT capability. Oracle MFT also ships with an MFT proxy server that resides outside the firewall to redirect external requests.<br />
<br />
<span style="color: #cc0000;"><b>Highly Secure</b></span><br />
<br />
Since MFT runs on WebLogic, it leverages Oracle WebLogic OPSS.<br />
What this means is that: all your FTP/sFTP users in your LDAP can now connect to MFT (obviously the access rights can be managed through the MFT console).<br />
<br />
In stark contrasts to traditional FTP/sFTP servers, you don't have to create OS level users & manage access privileges. Optionally, for each transfer, you can configure Oracle MFT to allow access to payload only to specific users/groups.<br />
<br />
In additions to these capabilities, users can leverage out-of-the-box compression, decompression, PGP encyption & decryption capabilities of Oracle MFT.<br />
<br />
<b><span style="color: #cc0000;">Consolidation</span></b><br />
<br />
Many customers have very less control on FTP & sFTP server proliferation across their enterprise. More often than not, IT doesn't have full control / visibility on administration & management of the FTP servers. Oracle MFT with its embedded FTP & sFTP server clearly helps with consolidation of FTP/sFTP servers.<br />
<br />
This not only reduces TCO tangibly, but also brings down significant costs associated with administration/management efforts.<br />
<br />
<span style="color: #cc0000;"><b>Automate & Schedule Transfers</b></span><br />
<br />
How many scheduling software tools do you have in your enterprise?<br />
How difficult is it to integrate your scheduler with file transfers?<br />
How much time & effort does your IT/development spend in configuring/scripting of scheduler services?<br />
How much visibility does it offer?<br />
<br />
And,<br />
<br />
What if; you have one comprehensive & highly customizable enterprise scheduler service which is tightly integrated with all your file transfers, is extremely easy to configure/schedule through GUI and provides end-to-end visibility through a console?<br />
<br />
With Oracle Enterprise Scheduler Service (ESS) now being a first-class citizen & tightly integrated, Oracle MFT just does that.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheAX27ICmKUjaR2E6GpoqYvcgU-RIuvG90CN5xdfcYCY8GGqxzzP9KQa0ICuTyUfs3wqnxZcCwb0UOboNeOlz22C2LGu2QRXt-QUXBRCvJMuF6adxw_ttB-qc3Wpfk7Uz1qx4DT5slFrSe/s1600/MFT_ESS.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheAX27ICmKUjaR2E6GpoqYvcgU-RIuvG90CN5xdfcYCY8GGqxzzP9KQa0ICuTyUfs3wqnxZcCwb0UOboNeOlz22C2LGu2QRXt-QUXBRCvJMuF6adxw_ttB-qc3Wpfk7Uz1qx4DT5slFrSe/s1600/MFT_ESS.png" height="320" width="311" /></a></div>
<br />
<span style="color: #cc0000;"><b>Large File Transfers</b></span><br />
<br />
Oracle MFT supports file pass-by-reference. This means that your SOAP services do not have to pass file to your webservice inline if it beyond a certain size - configurable while designing the transfer. Oracle MFT also provides out-of-the-box compression & decompression capabilities. Using custom actions you can also batch/de-batch large files for fast processing.<br />
<br />
<b><span style="color: #cc0000;">Fan-out, Chaining & custom callout</span></b><br />
<br />
Oracle MFT supports fan-out: which means it can send files to multiple targets simultaneously. Also another cool feature if MFT process chaining. You can chain multiple MFT transfers where one MFT transfer can be another MFT's source.<br />
<br />
Additionally, Oracle MFT also supports custom callouts. This allows POJOs to be executed at source and target (pre/post process).<br />
<br />
Ready for a happy file transfer with Oracle MFT? Let me know your feedback in the comments section :)</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com23tag:blogger.com,1999:blog-5705818669612605666.post-54569794176254888022014-05-30T09:43:00.000-04:002014-07-17T02:27:36.979-04:00Installing OER 11g on an existing SOA 11g domain<div dir="ltr" style="text-align: left;" trbidi="on">
In this blog post, I will provide detailed step-by-step instructions to install OER 11g (11.1.1.7) on an existing SOA domain.<br />
<br />
Pre-Requisites: SOA 11g installed and domain configured. I used 11.1.1.7 version (latest version as on date of writing this post)<br />
<br />
You can choose to have a single server install where AdminServer doubles up as SOA server or have 2 managed servers (Admin & SOA) on your domain. You will have to install OER as a separate managed server. I personally couldn't succeed with a OER single server install (Admin + SOA + OER on the same managed server).<br />
<br />
<b><u><span style="color: #cc0000;">Installing OER 11.1.1.7</span></u></b><br />
<br />
Step 1: Connect to the database on your server as SYS user and execute the following scripts. This step is an important pre-requisite as it creates the tablespace and schema to store OER asset/artifact metadata<br />
<br />
Note: Ensure that the path to DATAFILE parameter exists<br />
<br />
<u>Create Tablespaces:</u><br />
<br />
CREATE TABLESPACE OER_DATA<br />
DATAFILE '<span style="color: #cc0000;">/u01/app/oracle/oradata/XE/oer_data.dbf</span>' SIZE 300M<br />
AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED<br />
EXTENT MANAGEMENT LOCAL AUTOALLOCATE<br />
LOGGING<br />
ONLINE<br />
SEGMENT SPACE MANAGEMENT AUTO;<br />
<br />
CREATE TABLESPACE OER_LOB<br />
DATAFILE '<span style="color: #cc0000;">/u01/app/oracle/oradata/XE/oer_lob.dbf</span>' SIZE 300M<br />
AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED<br />
EXTENT MANAGEMENT LOCAL AUTOALLOCATE<br />
LOGGING<br />
ONLINE<br />
SEGMENT SPACE MANAGEMENT AUTO;<br />
<br />
CREATE TABLESPACE OER_INDEX<br />
DATAFILE '<span style="color: #cc0000;">/u01/app/oracle/oradata/XE/oer_index.dbf</span>' SIZE 300M<br />
AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED<br />
EXTENT MANAGEMENT LOCAL AUTOALLOCATE<br />
LOGGING<br />
ONLINE<br />
SEGMENT SPACE MANAGEMENT AUTO;<br />
<br />
<u>Create OER Schema:</u><br />
<br />
CREATE USER OER IDENTIFIED BY OER_PWD<br />
DEFAULT TABLESPACE OER_DATA<br />
TEMPORARY TABLESPACE TEMP;<br />
<br />
<u>Apply Grants:</u><br />
<br />
GRANT CREATE MATERIALIZED VIEW TO OER;<br />
GRANT CREATE SEQUENCE TO OER;<br />
GRANT CREATE SESSION TO OER;<br />
GRANT CREATE SYNONYM TO OER;<br />
GRANT CREATE TABLE TO OER;<br />
GRANT CREATE TRIGGER TO OER;<br />
GRANT CREATE VIEW TO OER;<br />
GRANT UNLIMITED TABLESPACE TO OER;<br />
<br />
Step 2:<br />
Download the appropriate installer for your server. If you are on a 64-bit machine, irrespective of whether it is Windows or Linux, you can choose to download the generic installer.<br />
<br />
Unzip the <b>ofm_oer_generic_11.1.1.7.0_disk1_1of1.zip</b> file into a server location<br />
<br />
Step 3:<br />
Ensure java is on your environment PATH variable and execute the following command<br />
<br />
<pre class="brush:xml;">java -D64 -jar OER111170_generic.jar
</pre>
<br />
Step 4:<br />
In the welcome screen of the OER installer, click Next<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLe1bJBOHf1Kl4zQj3mGyc8HSbHSe6zWkUACk_5bK8RFTg5GhqqkfUj0i0NkBekOQjp2p9wS-ya-zSAIIjpgEig5uGnOmpb_9WYGmNsgbPZSK1FD9_p0K5MbpLRJnMkH9DBr7fFls0MwM3/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLe1bJBOHf1Kl4zQj3mGyc8HSbHSe6zWkUACk_5bK8RFTg5GhqqkfUj0i0NkBekOQjp2p9wS-ya-zSAIIjpgEig5uGnOmpb_9WYGmNsgbPZSK1FD9_p0K5MbpLRJnMkH9DBr7fFls0MwM3/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products.png" height="286" width="400" /></a></div>
<br />
Step 5:<br />
Choose your existing FMW home (in this case your home directory where SOA is installed - Since we are installing OER on the same domain as SOA) and click Next<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6uyYuP6Op-XTDVQWoCCtuGxLIw6K-Pi2RT-Y8g1fTNyAiMedGpxV3scIh4qeM2ejaLs_Zbo-pzQBdu455wRkqL54js-Hjyv4_CBnMC2q0g2Wcg8gpdqtwVSanfmI-ExtO8mO8b4BI3cSu/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6uyYuP6Op-XTDVQWoCCtuGxLIw6K-Pi2RT-Y8g1fTNyAiMedGpxV3scIh4qeM2ejaLs_Zbo-pzQBdu455wRkqL54js-Hjyv4_CBnMC2q0g2Wcg8gpdqtwVSanfmI-ExtO8mO8b4BI3cSu/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-1.png" height="286" width="400" /></a></div>
<br />
Step 6:<br />
Validate the Oracle Enterprise Repository install location and click Next<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6bkPF6JxlwK6rBMxnyeqniqvQL-F-QcQ_Xqlw_Gp9-MOWlP2r00WAU1EdNMItL6tz6xB0gRfsX93YS1aoG5UFUY6Z8mZGr_Yr20VvPvdloNi2o9MTLWhPjgOmQHe5erUIPDUB4Mcur9lh/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6bkPF6JxlwK6rBMxnyeqniqvQL-F-QcQ_Xqlw_Gp9-MOWlP2r00WAU1EdNMItL6tz6xB0gRfsX93YS1aoG5UFUY6Z8mZGr_Yr20VvPvdloNi2o9MTLWhPjgOmQHe5erUIPDUB4Mcur9lh/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-2.png" height="286" width="400" /></a></div>
<br />
Step 7:<br />
Choose WebLogic Server 11 in the "Choose Application Server" dialog and click Next<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfrV61w3ZLZMKB-nC2oTrYLqCEonM81yvZhKCneavga3vAffJ3qEAWBSRVRGcuo36AY8PYt5l_5GqG3HzoIQQUhrpzLCLooP8hkJxtxXunuJgFMoRaa5JjcsJrmC1PZiqIX-NIhWKa_ehM/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfrV61w3ZLZMKB-nC2oTrYLqCEonM81yvZhKCneavga3vAffJ3qEAWBSRVRGcuo36AY8PYt5l_5GqG3HzoIQQUhrpzLCLooP8hkJxtxXunuJgFMoRaa5JjcsJrmC1PZiqIX-NIhWKa_ehM/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-3.png" height="286" width="400" /></a></div>
<br />
Step 8:<br />
In the "Initialize Repository Properties" screen, enter the following values and click Next<br />
<br />
OER managed server port number: 7101 (default, but you can choose to change it here)<br />
Fully qualified server name: Enter the fully qualified server hostname<br />
Repository application name: oer<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2DoQgjNMC9q_G60swnsPLIkB_15zmc2_f4gt0pfqbr_0PqzeVrqQIMVdOnRW_RT3b6TwfmsJ1nq_UQorsg1Taryr4l8TnOmEpm69Fc7xVWv97-Ao-ldrC0GCLMnZ5jpSIveS5MjdBubEw/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2DoQgjNMC9q_G60swnsPLIkB_15zmc2_f4gt0pfqbr_0PqzeVrqQIMVdOnRW_RT3b6TwfmsJ1nq_UQorsg1Taryr4l8TnOmEpm69Fc7xVWv97-Ao-ldrC0GCLMnZ5jpSIveS5MjdBubEw/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-4.png" height="286" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx62dIZ3pMBBl45HETKdvIsYb6Yj7TepnhMXbDMeJYLPWyk1SkVPwjlhEwcznurdYL6QEdMQQeWQij3yKbKyv7yS3xoiRMkoLY8pfRYuM-Hlnkdh2KKS3leBJ8FYOI99eV0I3VOTEWFNac/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx62dIZ3pMBBl45HETKdvIsYb6Yj7TepnhMXbDMeJYLPWyk1SkVPwjlhEwcznurdYL6QEdMQQeWQij3yKbKyv7yS3xoiRMkoLY8pfRYuM-Hlnkdh2KKS3leBJ8FYOI99eV0I3VOTEWFNac/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-5.png" height="286" width="400" /></a></div>
<br />
Step 9:<br />
In the "Configure Database" screen, choose Yes to configure the database for OER and click Next<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYpXmrqVNtuTe_yuXAiQLpFBicHds9_TSwW6EjRe-rQFcpKdWocJoFzo-ZPHUgDN_dmdcPkJ6_-gFB1InWi4-kkSsT6zOVCYrjLRhybGy1rTItplhk5PWhYBvV-HeUx-KSvguQ_9Ib6Sy0/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYpXmrqVNtuTe_yuXAiQLpFBicHds9_TSwW6EjRe-rQFcpKdWocJoFzo-ZPHUgDN_dmdcPkJ6_-gFB1InWi4-kkSsT6zOVCYrjLRhybGy1rTItplhk5PWhYBvV-HeUx-KSvguQ_9Ib6Sy0/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-6.png" height="286" width="400" /></a></div>
<br />
Step 10:<br />
Enter the following values in the "Provide Database Tablespace Names" screen<br />
<br />
Data tablespace: oer_data<br />
BLOB tablespace: oer_lob<br />
Index tablespace: oer_index<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUyrrDeNfd4NiRpf-3vbIkRB2j58jzFS4nAPkpNiV3LUvuT1dLYC8PeBc7OAuSJlIRrCoeRkHOe5ipXraY9Q2pxfppVvaCv6TDSpG9ZlJ0kLymxFHChI4UpqqriP18aLFSV5-mZOZJUHqz/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUyrrDeNfd4NiRpf-3vbIkRB2j58jzFS4nAPkpNiV3LUvuT1dLYC8PeBc7OAuSJlIRrCoeRkHOe5ipXraY9Q2pxfppVvaCv6TDSpG9ZlJ0kLymxFHChI4UpqqriP18aLFSV5-mZOZJUHqz/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-7.png" height="286" width="400" /></a></div>
<br />
Step 11:<br />
In the "Initialize Repository Database Properties" browse for the ojdbc6.jar driver file - This file can be found at the database installation location: <DB_Home>/jdbc/lib<br />
<br />
Provide the DBMS (SID) name, host, port and OER username and password and click Next<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio0_e5uDw7_t7XKCIw2_-keh4Vg_no7MGOs8V5UiODWzXqkRoZBNuP9tMFQX4llBERv1fF-6RCzCv47jzBsn5LP05NP6WygQv_EyrAafl60OtzFuInxBI-dWJvO3Y36PLc-E7OZ3DmgwDf/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio0_e5uDw7_t7XKCIw2_-keh4Vg_no7MGOs8V5UiODWzXqkRoZBNuP9tMFQX4llBERv1fF-6RCzCv47jzBsn5LP05NP6WygQv_EyrAafl60OtzFuInxBI-dWJvO3Y36PLc-E7OZ3DmgwDf/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-8.png" height="286" width="400" /></a></div>
<br />
Step 12:<br />
You must now see a successful installation message.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-EYikkrhoeXEDBw6wQbKMszJPoYFw_ekVR4JTntAiDEgxmwwJIA35UFmSIlvHDSYzk3STinlpykdkTRofQ-0Nz5jGQ3XLd-y_D5pALDazTQwgL2Lger4VPEYf6OdKTY-D7aQ3lJYtESzf/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-EYikkrhoeXEDBw6wQbKMszJPoYFw_ekVR4JTntAiDEgxmwwJIA35UFmSIlvHDSYzk3STinlpykdkTRofQ-0Nz5jGQ3XLd-y_D5pALDazTQwgL2Lger4VPEYf6OdKTY-D7aQ3lJYtESzf/s1600/Screenshot-Oracle+Enterprise+Repository+-+Oracle+Products-9.png" height="286" width="400" /></a></div>
<br />
<b><u><span style="color: #cc0000;">Extend SOA Domain to host OER</span></u></b><br />
<br />
Step 13:<br />
Go to <Middleware_Home>/wlserver_10.3/common/bin and execute config.sh<br />
./config.sh<br />
<br />
Step 14:<br />
In the "Configuration Wizard" home screen, choose the option "Extend an existing WebLogic domain" and click Next<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtDKwB1FZ1vtrzpMU_L-CUphG8FY9kietXKsclCCTIHmJu3S29S_PxKEL8bFtX6D_Lzun9ww14ymy83e5DxK2URpU6g7AZSWlObSWsoomkplrwkSFgeptBoJkCciDUQZKMYqX_Dnbg8OSD/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtDKwB1FZ1vtrzpMU_L-CUphG8FY9kietXKsclCCTIHmJu3S29S_PxKEL8bFtX6D_Lzun9ww14ymy83e5DxK2URpU6g7AZSWlObSWsoomkplrwkSFgeptBoJkCciDUQZKMYqX_Dnbg8OSD/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard.png" height="286" width="400" /></a></div>
<br />
Step 15:<br />
Choose your WebLogic domain where SOA suite is installed<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirqEzTu469W-PsfDVhvhxR9e3DuUcQAiYbNF0p980EityaY2ISJ-GzsSKpmpPqbVigh3en7bQxWgqhkimDxeoNdJvxep-YZ1jfqoZuALfAnYgww1O53TyJebkYCGxKdBwQmESafQ0eJ1MP/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirqEzTu469W-PsfDVhvhxR9e3DuUcQAiYbNF0p980EityaY2ISJ-GzsSKpmpPqbVigh3en7bQxWgqhkimDxeoNdJvxep-YZ1jfqoZuALfAnYgww1O53TyJebkYCGxKdBwQmESafQ0eJ1MP/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard-1.png" height="286" width="400" /></a></div>
<br />
Step 16:<br />
Scroll down the list of products, select Oracle Enterprise Repository - 11.1.1.7.0 from the list and click Next<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEntUCnfw2LNCumnVgTWOlp7llChsnBjJfPInndwtKtwdtm2crO3VwjxfeHxUGJDSLTd8AZd8ph5QKpzIh022Jk7NlUsjiqbW-SDyFqsr9tx7eMze2DOudLL6DCQ2UWWzZVJQQA_RbZZXM/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEntUCnfw2LNCumnVgTWOlp7llChsnBjJfPInndwtKtwdtm2crO3VwjxfeHxUGJDSLTd8AZd8ph5QKpzIh022Jk7NlUsjiqbW-SDyFqsr9tx7eMze2DOudLL6DCQ2UWWzZVJQQA_RbZZXM/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard-2.png" height="286" width="400" /></a></div>
<br />
Step 17:<br />
Leave defaults and click Next in the following screens until you reach the "Select Optional Configuration" page<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Step 18:<br />
In the "Select Optional Configuration" screen, select "Managed Servers, Clusters and Machines" option and click Next<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBlOnAWBJJTSJtYZi_PfoUcJBh9Ac3X4XGnRya7gSFYsyj7Ga1ebpMJGR56BJp2z5Dh_YpvSqrSx-7BN_J_PQ2-wNYVTZqtJsCzUMKal5AfL7Q6SLLQ1Fe-mbJ02Qd4xY7AAIfC5ZNTVo-/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard-7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBlOnAWBJJTSJtYZi_PfoUcJBh9Ac3X4XGnRya7gSFYsyj7Ga1ebpMJGR56BJp2z5Dh_YpvSqrSx-7BN_J_PQ2-wNYVTZqtJsCzUMKal5AfL7Q6SLLQ1Fe-mbJ02Qd4xY7AAIfC5ZNTVo-/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard-7.png" height="286" width="400" /></a></div>
Step 19:<br />
Leave defaults in the following screens and in the Configuration Summary page, click on "Extend"<br />
<br />
You must see "Domain Extension Applied Successfully" message<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijYaKdG3E7u-KQdmcAKyMyTp1GyQKWIcahbaht2OhcRxaqEo68Sp716MPZkR1Fdf1k5dP5QzwPK4iT8KE0njwYFB-cjiVZ4qrgmWXi-bfq99hqo8B4sWn15oyzD0GsRgjDk5ZkZhjVMewj/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard-15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijYaKdG3E7u-KQdmcAKyMyTp1GyQKWIcahbaht2OhcRxaqEo68Sp716MPZkR1Fdf1k5dP5QzwPK4iT8KE0njwYFB-cjiVZ4qrgmWXi-bfq99hqo8B4sWn15oyzD0GsRgjDk5ZkZhjVMewj/s1600/Screenshot-Fusion+Middleware+Configuration+Wizard-15.png" height="286" width="400" /></a></div>
<br />
Now that your domain has been extended, the domain configuration corrupts a few configuration settings that prevents a successful server startup. Follow the instructions below to get OER started successfully.<br />
<br />
Observation 1:<br />
<br />
I observed that the UMSJMSSystemResource-jms.xml presents duplicate entries which prevents a successful server startup. To resolve this, go to <Domain_Home>/config/jms folder and check and remove the duplicate entries as highlighted below. [Note: Take a backup of this file]<br />
<br />
<pre class="brush:xml;"><queue name="OraSDPM/Queues/OraSDPMEngineCmdQ_auto_3">
<sub-deployment-name>UMSJMSServer505614749</sub-deployment-name>
<jndi-name>OraSDPM/Queues/OraSDPMEngineCmdQ</jndi-name>
</queue>
<queue name="OraSDPM/Queues/OraSDPMEngineSndQ1_auto_3">
<sub-deployment-name>UMSJMSServer505614749</sub-deployment-name>
<jndi-name>OraSDPM/Queues/OraSDPMEngineSndQ1</jndi-name>
</queue>
<queue name="OraSDPM/Queues/OraSDPMEngineRcvQ1_auto_3">
<sub-deployment-name>UMSJMSServer505614749</sub-deployment-name>
<jndi-name>OraSDPM/Queues/OraSDPMEngineRcvQ1</jndi-name>
</queue>
<queue name="OraSDPM/Queues/OraSDPMDriverDefSndQ1_auto_3">
<sub-deployment-name>UMSJMSServer505614749</sub-deployment-name>
<jndi-name>OraSDPM/Queues/OraSDPMDriverDefSndQ1</jndi-name>
</queue>
<queue name="OraSDPM/Queues/OraSDPMAppDefRcvQ1_auto_3">
<sub-deployment-name>UMSJMSServer505614749</sub-deployment-name>
<jndi-name>OraSDPM/Queues/OraSDPMAppDefRcvQ1</jndi-name>
</queue>
<queue name="OraSDPM/Queues/OraSDPMWSRcvQ1_auto_3">
<sub-deployment-name>UMSJMSServer505614749</sub-deployment-name>
<jndi-name>OraSDPM/Queues/OraSDPMWSRcvQ1</jndi-name>
</queue>
</pre>
<br />
Observation 2:<br />
<br />
The memory setting of your SOA domain would be affected because the setOERDomainEnv.sh script gets called every time. Sophisticated way of handling this would be at the setSOADomainEnv.sh where you can validate the $SERVER_NAME and configure the USER_MEM_ARGS for each Managed Server appropriately. Else, just increase the USER_MEM_ARGS in the setOERDomainEnv.sh script.<br />
<br />
Now, you are all set to start your OER server and start SOA Governance !!</div>
Sathya AGhttp://www.blogger.com/profile/17711711259619024371noreply@blogger.com2