<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5477731108590363529</id><updated>2026-09-12T07:44:13.198-05:00</updated><category term="ADF"/><category term="WebCenter Portal"/><category term="ADF BC"/><category term="Code Snippet"/><category term="WebCenter"/><category term="Performance"/><category term="Task Flow"/><category term="Weblogic"/><category term="Responsive Web Design"/><category term="JavaScript"/><category term="Navigation"/><category term="Presentation"/><category term="ADF Faces"/><category term="Security"/><category term="Binding"/><category term="Bug"/><category term="Collaborate"/><category term="Install"/><category term="JRockit"/><category term="Linux"/><category term="Navigation Model"/><category term="OAF"/><category term="OAM"/><category term="Spaces"/><category term="Table"/><category term="WebCenter Content"/><category term="Authentication"/><category term="CSS"/><category term="ClientListener"/><category term="Cloud Integration"/><category term="Connector"/><category term="DCC"/><category term="Data Integration"/><category term="IE"/><category term="Informatica"/><category term="JDBC"/><category term="JDK"/><category term="JVM"/><category term="Jdeveloper"/><category term="Patch"/><category term="Region"/><category term="Rest"/><category term="ServerListener"/><category term="Session"/><category term="Skin"/><category term="Technical Paper"/><category term="API"/><category term="Application Module"/><category term="Authenticator"/><category term="BI Publisher"/><category term="Compatibility"/><category term="Concur"/><category term="Concurrency"/><category term="Conference"/><category term="Connection Pooling"/><category term="Content"/><category term="Content Presenter"/><category term="Customization"/><category term="Data Source"/><category term="Deployment"/><category term="ECC"/><category term="EL"/><category term="Error"/><category term="Folder"/><category term="Front End"/><category term="IAM"/><category term="IOUG"/><category term="Identity Management"/><category term="Interview"/><category term="JFlow"/><category term="JPA"/><category term="JQuery"/><category term="JSP"/><category term="Java"/><category term="Jmeter"/><category term="KScope"/><category term="LOV"/><category term="Leak"/><category term="Let&#39;s Encrypt"/><category term="Login"/><category term="Logout"/><category term="Managed Bean"/><category term="Memory"/><category term="Multilingual"/><category term="OS X"/><category term="OTN"/><category term="Okta"/><category term="OpenLDAP"/><category term="OpenWorld"/><category term="Parallel"/><category term="PayPal"/><category term="Profile"/><category term="React"/><category term="Report"/><category term="SSL"/><category term="SSO"/><category term="Search"/><category term="Styles"/><category term="UCM"/><category term="Validator"/><category term="Video"/><category term="View Criteria"/><category term="VirtualBox"/><category term="WebCenter PS6"/><category term="X11"/><category term="ZeroSSL"/><category term="adfc_diagram"/><category term="apache"/><category term="breadcrumb"/><category term="logging"/><category term="version"/><category term="web server"/><title type='text'>Zheng Tech Blog</title><subtitle type='html'>To attain knowledge, add things everyday. To attain wisdom, remove things every day.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/14288674713409788758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNNnuKq492bHrj8bnMRNUYRpKpHgXkxrty1hb6UJLEA__VGriS6SZ5Y2cLSwJhU9XWQPas5OloFrVAkdlo7Hww7E88y-FZjSvapUunvCJUsnYNeWbT_m69D0RXwHsVrA/s220/DSCF0232-t.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>96</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-7069576755721830458</id><published>2020-10-23T11:16:00.008-05:00</published><updated>2020-10-23T11:16:59.211-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="logging"/><category scheme="http://www.blogger.com/atom/ns#" term="web server"/><title type='text'>Logging Actual Client IP Address on the Apache Server</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;background-color: white; color: #2e2e2e; font-family: proxima-nova, Arial, Helvetica, sans-serif; font-size: 16px;&quot;&gt;To extract and log the actual client IP address from the X-Forwarded-For header of a request using an Apache server, make the following changes to the server:&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;techlib-article-text position-relative&quot; id=&quot;product-article-content&quot; property=&quot;articleBody&quot; style=&quot;background-color: white; box-sizing: inherit; color: #2e2e2e; font-family: proxima-nova, Arial, Helvetica, sans-serif; font-size: 16px; line-height: 24px; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: inherit;&quot;&gt;&lt;ol style=&quot;box-sizing: inherit; margin-bottom: 1rem; margin-top: 0px;&quot;&gt;&lt;li style=&quot;box-sizing: inherit;&quot;&gt;Log into the Apache server.&lt;/li&gt;&lt;li style=&quot;box-sizing: inherit;&quot;&gt;Go to&amp;nbsp;&lt;span style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;/etc/httpd/conf&lt;/span&gt;&amp;nbsp;or&amp;nbsp;&lt;span style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;/usr/local/apache2/conf path&lt;/span&gt;&amp;nbsp;and open the file&amp;nbsp;&lt;span style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;httpd.conf&lt;/span&gt;.&lt;/li&gt;&lt;li style=&quot;box-sizing: inherit;&quot;&gt;Search for the string: “&lt;span style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;LogFormat “%h %l %u %t \&quot;%r\&quot; %&amp;gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot;&quot; combined&lt;/span&gt;”&lt;/li&gt;&lt;li style=&quot;box-sizing: inherit;&quot;&gt;Change the&amp;nbsp;&lt;span style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;%h&amp;nbsp;&lt;/span&gt;to&lt;span style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;&amp;nbsp;%{X-Forwarded-For}i&lt;/span&gt;. The string now appears as “&lt;span style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;LogFormat &quot;%{X-Forwarded-For}i %l %u %t \&quot;%r\&quot; %&amp;gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot;&lt;/span&gt;&quot;&amp;nbsp;&lt;span style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;combined&lt;/span&gt;”&lt;/li&gt;&lt;li style=&quot;box-sizing: inherit;&quot;&gt;Save the file and restart apache or httpd.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/7069576755721830458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/7069576755721830458' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/7069576755721830458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/7069576755721830458'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2020/10/logging-actual-client-ip-address-on.html' title='Logging Actual Client IP Address on the Apache Server'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-6072049285447014576</id><published>2020-07-19T12:21:00.001-05:00</published><updated>2020-07-19T12:21:07.917-05:00</updated><title type='text'>Command Line for Making EAR/WAR/JAR Changes on the Fly</title><content type='html'>&lt;div class=&quot;sect1&quot; id=&quot;NTLDV272&quot; style=&quot;background-color: white; color: #222222; font-family: Tahoma, sans-serif; font-size: small; max-width: 70em;&quot;&gt;&lt;h2 class=&quot;sect1&quot; style=&quot;font-size: 19.76px; line-height: normal;&quot;&gt;Extracting the Contents of the EAR&lt;/h2&gt;&lt;p style=&quot;max-width: 70em;&quot;&gt;To extract the contents of the EAR:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p style=&quot;max-width: 70em;&quot;&gt;Navigate to the directory containing the EAR,&amp;nbsp;&lt;span class=&quot;bold&quot; style=&quot;font-weight: bold;&quot;&gt;ear-file&lt;/span&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;max-width: 70em;&quot;&gt;On the command line, enter the following to view the contents of the EAR:&lt;/p&gt;&lt;pre class=&quot;oac_no_warn&quot; style=&quot;background-color: #eeeeee; border-radius: 4px; color: black; font-size: 11.6188px; padding: 0.5ex 1ex;&quot; xml:space=&quot;preserve&quot;&gt;jar tf ear-file
&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;max-width: 70em;&quot;&gt;On the command line, enter the following to extract the contents of the EAR:&lt;/p&gt;&lt;pre class=&quot;oac_no_warn&quot; style=&quot;background-color: #eeeeee; border-radius: 4px; color: black; font-size: 11.6188px; padding: 0.5ex 1ex;&quot; xml:space=&quot;preserve&quot;&gt;jar xf ear-file
&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;a id=&quot;i489477&quot; name=&quot;i489477&quot; style=&quot;background-color: white; color: #222222; font-family: Tahoma, sans-serif; font-size: small;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: Tahoma, sans-serif; font-size: small;&quot;&gt;&lt;/span&gt;&lt;div class=&quot;sect1&quot; id=&quot;NTLDV273&quot; style=&quot;background-color: white; color: #222222; font-family: Tahoma, sans-serif; font-size: small; max-width: 70em;&quot;&gt;&lt;h2 class=&quot;sect1&quot; style=&quot;font-size: 19.76px; line-height: normal;&quot;&gt;Updating and Repackaging an EAR File&lt;/h2&gt;&lt;p style=&quot;max-width: 70em;&quot;&gt;To update a file and repackage the contents into an EAR file:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p style=&quot;max-width: 70em;&quot;&gt;Navigate to the base directory of all the files and folders that are to be part of the EAR.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;max-width: 70em;&quot;&gt;On the command line, enter the following to extract the contents of the EAR:&lt;/p&gt;&lt;pre class=&quot;oac_no_warn&quot; style=&quot;background-color: #eeeeee; border-radius: 4px; color: black; font-size: 11.6188px; padding: 0.5ex 1ex;&quot; xml:space=&quot;preserve&quot;&gt;jar cf ear-file input-files
&lt;/pre&gt;&lt;p style=&quot;max-width: 70em;&quot;&gt;For example,&lt;/p&gt;&lt;pre class=&quot;oac_no_warn&quot; style=&quot;background-color: #eeeeee; border-radius: 4px; color: black; font-size: 11.6188px; padding: 0.5ex 1ex;&quot; xml:space=&quot;preserve&quot;&gt;jar cf myear.ear *&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/6072049285447014576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/6072049285447014576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/6072049285447014576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/6072049285447014576'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2020/07/command-line-for-making-earwarjar.html' title='Command Line for Making EAR/WAR/JAR Changes on the Fly'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-707112438181412040</id><published>2020-04-01T12:38:00.002-05:00</published><updated>2020-04-01T12:48:11.927-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADF"/><category scheme="http://www.blogger.com/atom/ns#" term="Navigation"/><category scheme="http://www.blogger.com/atom/ns#" term="Navigation Model"/><title type='text'>Implementation of ADF XML Menu Model</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
This post will cover the coding details of implementing an ADF XML menu model.&lt;br /&gt;
&lt;br /&gt;
Do you need to manage all your navigation menus in a centralized file including its label, URL, title and other custom attributes you may have? If so, the solution is to use ADF XML menu model.&lt;br /&gt;
&lt;br /&gt;
ADF XML menu&amp;nbsp; model is the same concept as the built in WebCenter Navigation Model in Oracle WebCenter Portal. It uses a XML file to hold the navigation metadata - id, label, title, destination/url and other custom attributes you may need.&lt;br /&gt;
&lt;br /&gt;
The XML file is the data model layer. Using XML menu, you can generate various kinds of navigation user interface components, such as navigation links, bars, tabs, breadcrumbs, etc. You can also apply business logic to conditionally control the rendering of the navigation menu. The business logic including security can be applied at either the XML model layer or the UI presentation layer depending on where it fits your purpose. You can create multiple navigation hierarchy (nested navigations) in your XML menu model.&lt;br /&gt;
&lt;br /&gt;
Without further ado, here are the details you like to know on implementation of such XML menu model in ADF application.&lt;br /&gt;
&lt;br /&gt;
1. Create ADF Menu Model&lt;br /&gt;
&lt;br /&gt;
ADF menu model is created on top of the unbounded task flow in application. By default one application comes with one unbounded task flow, but you can create additional if needed. If you have a use case requiring different independent sets of menu models, then you should create additional unbounded task flows as the unbounded task flow and menu model go as 1 to 1. At ADF runtime, multiple unbounded task flows will be compiled into one for the application they sit in.&lt;br /&gt;
&lt;br /&gt;
Select the target unbounded task flow, right click on it and select &quot;Create ADF menu model...&quot;. It would create an XML file placeholder.&lt;br /&gt;
&lt;br /&gt;
2. Update Model with Your Data&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;The generated xml file is where you need to compile your navigation data. It comes with a top level &quot;menu&quot; element and inside it, it can be &quot;itemNode&quot;, &quot;groupNode&quot; or &quot;sharedNode&quot;.&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;itemNode:&amp;nbsp;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;Specifies a node that performs navigation upon user selection. An itemNode can have children itemNodes.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;groupNode:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;Groups child components; the&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background-color: #f9f9fb; border: none; box-sizing: border-box; font-weight: bold; line-height: 1.615; margin-bottom: 1em; overflow-wrap: normal !important; padding: 2px; white-space: pre !important;&quot;&gt;groupNode&lt;/code&gt;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;&amp;nbsp;itself does no navigation. Child nodes node can be&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background-color: #f9f9fb; border: none; box-sizing: border-box; font-weight: bold; line-height: 1.615; margin-bottom: 1em; overflow-wrap: normal !important; padding: 2px; white-space: pre !important;&quot;&gt;itemNode&lt;/code&gt;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;&amp;nbsp;or another&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background-color: #f9f9fb; border: none; box-sizing: border-box; font-weight: bold; line-height: 1.615; margin-bottom: 1em; overflow-wrap: normal !important; padding: 2px; white-space: pre !important;&quot;&gt;groupNode&lt;/code&gt;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;sharedNode:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;References another&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background-color: #f9f9fb; border: none; box-sizing: border-box; font-weight: bold; line-height: 1.615; margin-bottom: 1em; overflow-wrap: normal !important; padding: 2px; white-space: pre !important;&quot;&gt;XMLMenuModel&lt;/code&gt;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;&amp;nbsp;instance. A&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;background-color: #f9f9fb; border: none; box-sizing: border-box; font-weight: bold; line-height: 1.615; margin-bottom: 1em; overflow-wrap: normal !important; padding: 2px; white-space: pre !important;&quot;&gt;sharedNode&lt;/code&gt;&lt;span style=&quot;background-color: white; color: #222222;&quot;&gt;&amp;nbsp;element is not a true node; it does not perform navigation nor does it render anything on its own.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;An itemNode comes with a variety of build-in metadata. But they still can fall short for your use cases. A good thing about this model is you can create as many as custom attributes as needed. For example:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: normal;&quot;&gt;&amp;lt;itemNode id=&quot;exmapleId&quot; label=&quot;#{bundle.EXAMPLELABEL}&quot; rendered=&quot;#{sessionScope.IsRendered eq &#39;Y&#39;}&quot;&amp;nbsp;&lt;span style=&quot;color: #222222;&quot;&gt;url=&quot;/faces/mypage&quot;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;As exampled, you can use expression language as the attribute values.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;3. Create Managed Bean for the Menu Model&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;During step 1, when creating the ADF menu model, a managed bean for XMLMenuModel will be automatically configured in faces-config.xml. This is all good if you don&#39;t have any custom attributes in the menu model. But in case you do, here is the info you like to refer to.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;Create a Java bean extending &quot;org.apache.myfaces.trinidad.model.XMLMenuModel&quot;, and in the bean, you will need to cover some key methods to expose the navigation node and custom attributes. Here is a pretty comprehensive example:&lt;/span&gt;&lt;br /&gt;

&lt;!-- HTML generated using hilite.me --&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131&lt;/pre&gt;
&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; Object &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getNodeById&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;XMLMenuModel menuModel&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String nodeId&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
    Object returningNode &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    
    FacesContext context &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; FacesContext&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getCurrentInstance&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    ELResolver resolver &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; context&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getApplication&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getELResolver&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    ELContext elContext &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; context&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getELContext&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;menuModel &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; returningNode&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; i &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt; i &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt; menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getRowCount&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt; i&lt;span style=&quot;color: #333333;&quot;&gt;++)&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
      menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setRowIndex&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;i&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
      Object parentNode &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getRowData&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
      String parentNodeId &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; resolver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getValue&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;elContext&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; parentNode&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;parentNodeId&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;nodeId&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        returningNode &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; parentNode&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;isContainer&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;!&lt;/span&gt;menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;isContainerEmpty&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;())&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;enterContainer&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
        &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;int&lt;/span&gt; j &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt; j &lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt; menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getRowCount&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt; j&lt;span style=&quot;color: #333333;&quot;&gt;++)&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
          menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;setRowIndex&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;j&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
          Object childNode &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getRowData&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
          String childNodeId &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; resolver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getValue&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;elContext&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; childNode&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
          &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;childNodeId&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;nodeId&lt;span style=&quot;color: #333333;&quot;&gt;))&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
            returningNode &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; childNode&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
          &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
        menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;exitContainer&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; returningNode&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; String &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getUrlById&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String nodeId&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
    PortalMenuModel menuModel &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;PortalMenuModel&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;ADFUtils&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;evaluateEL&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#{portal_menu}&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    Object node &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getNodeById&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;menuModel&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; nodeId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;

    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;node &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

    String url &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; menuModel&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getCustomProperty&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;node&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    url &lt;span style=&quot;color: #333333;&quot;&gt;+=&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&amp;amp;&quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; getNodeIdUrlParam&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;node&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; url&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; Map&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; getUrlById&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; HashMap&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
          &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
          &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; String &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Object key&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
              String str &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;key&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
              str &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getUrlById&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;str&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
              &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; str&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
          &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;};&lt;/span&gt;
  &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; String &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getLabelById&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String nodeId&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
    PortalMenuModel menuModel &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;PortalMenuModel&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;ADFUtils&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;evaluateEL&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#{portal_menu}&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    Object node &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getNodeById&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;menuModel&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; nodeId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
    
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;node &lt;span style=&quot;color: #333333;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
    
    FacesContext context &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; FacesContext&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getCurrentInstance&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    ELResolver resolver &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; context&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getApplication&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getELResolver&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    ELContext elContext &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; context&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getELContext&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; resolver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getValue&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;elContext&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; node&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;label&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
  &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; Map&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; getLabelById&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; HashMap&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; String&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
          &lt;span style=&quot;color: #555555; font-weight: bold;&quot;&gt;@Override&lt;/span&gt;
          &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; String &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Object key&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
              String str &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;key&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
              str &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getLabelById&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;str&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
              &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; str&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
          &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;};&lt;/span&gt;
  &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; String &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;findURLByIdWithContextRoot&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String nodeId&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; HTTPUtils&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getContextPath&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()+&lt;/span&gt;getUrlById&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;nodeId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
  &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;redirectToPageLinkId&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String nodeId&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
      FacesContext fctx &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; FacesContext&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getCurrentInstance&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
      ExternalContext ectx &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; fctx&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getExternalContext&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
          String url &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getUrlById&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;nodeId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
          ectx&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;redirect&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt; HTTPUtils&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getRequest&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getContextPath&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt;  url&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt; 
          fctx&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;responseComplete&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;IOException e&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
          logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Exception occurred in PortalMenuModel while redirecting without url params:&quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; e&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMessage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; 
  &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #333399; font-weight: bold;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;redirectToPageLinkId&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;String nodeId&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; Map&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; urlParam&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
      FacesContext fctx &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; FacesContext&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getCurrentInstance&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
      ExternalContext ectx &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; fctx&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getExternalContext&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
      &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
          Iterator&lt;span style=&quot;color: #333333;&quot;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt; paramIterator &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; urlParam&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;keySet&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
          StringBuilder sb &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;new&lt;/span&gt; StringBuilder&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
          &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;paramIterator&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;hasNext&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;())&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
              String key &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; paramIterator&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
              sb&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;&amp;amp;&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; key &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;=&quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; urlParam&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;key&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
          &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
          String url &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; getUrlById&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;nodeId&lt;span style=&quot;color: #333333;&quot;&gt;);&lt;/span&gt;
          ectx&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;redirect&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt; HTTPUtils&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getRequest&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getContextPath&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;()&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt;  url &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; sb&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt; 
          fctx&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;responseComplete&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;IOException e&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
        logger&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;error&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;Exception occurred in PortalMenuModel while redirecting with url params:&quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; e&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getMessage&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;());&lt;/span&gt;
      &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt; 
  &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;

  &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;static&lt;/span&gt; String &lt;span style=&quot;color: #0066bb; font-weight: bold;&quot;&gt;getNodeIdUrlParam&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;Object node&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;{&lt;/span&gt;
    FacesContext context &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; FacesContext&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getCurrentInstance&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    ELResolver resolver &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; context&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getApplication&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getELResolver&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    ELContext elContext &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; context&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getELContext&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;

    String nodeIdParam &lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt; resolver&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;getValue&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;elContext&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; node&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;uniqueId&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color: #0000cc;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;();&lt;/span&gt;
    &lt;span style=&quot;color: #008800; font-weight: bold;&quot;&gt;return&lt;/span&gt; NODE_ID_PARAM &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;=&quot;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;+&lt;/span&gt; nodeIdParam&lt;span style=&quot;color: #333333;&quot;&gt;;&lt;/span&gt;
  &lt;span style=&quot;color: #333333;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;In the example, the menu model instance is retrieved by expression &quot;#{portal_menu}&quot; which you can define it in the unbounded task flow in a request scope.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;4. Render the Navigation on UI&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;The last step is to put the XML menu model data reference into the UI layer. There are quite a few different UI components that can be used for this. &lt;a href=&quot;https://docs.oracle.com/cd/E18196_01/11.1.2.4.0/menus_toolbars.html&quot; target=&quot;_blank&quot;&gt;Here &lt;/a&gt;is the cheat sheet for the ADF menu components.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #222222;&quot;&gt;Alternatively, you can use &amp;lt;af:iterator&amp;gt; to iterate through the menu model and render them using a simple go link. For example:&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;1
2
3
4
5&lt;/pre&gt;
&lt;/td&gt;&lt;td&gt;&lt;pre style=&quot;line-height: 125%; margin: 0;&quot;&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;af:iterator&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;var=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;node&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;id=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;i1&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;value=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#{portal_menu}&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;af:goLink&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;destination=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#{portal_menu.urlById[node.id]}&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;af:outputText&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;id=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;ot1&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;value=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;#{Bundle[node.customPropList[&#39;navTitle&#39;]]}&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000cc;&quot;&gt;escape=&lt;/span&gt;&lt;span style=&quot;background-color: #fff0f0;&quot;&gt;&quot;false&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700;&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/af:goLink&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #007700;&quot;&gt;&amp;lt;/af:iterator&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/707112438181412040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/707112438181412040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/707112438181412040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/707112438181412040'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2020/04/implementation-of-adf-xml-menu-model.html' title='Implementation of ADF XML Menu Model'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-4594992959910712933</id><published>2020-03-28T13:36:00.001-05:00</published><updated>2020-04-02T12:17:39.201-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IAM"/><category scheme="http://www.blogger.com/atom/ns#" term="Let&#39;s Encrypt"/><category scheme="http://www.blogger.com/atom/ns#" term="Okta"/><category scheme="http://www.blogger.com/atom/ns#" term="SSO"/><category scheme="http://www.blogger.com/atom/ns#" term="ZeroSSL"/><title type='text'>Setup Okta Custom URL Domain </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;background-color: white; border: 0px; box-sizing: inherit; clear: both; color: #242729; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; font-size: 15px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;strong style=&quot;border: 0px; box-sizing: inherit; font-family: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;TL:DR&lt;/strong&gt;&lt;/div&gt;
In this post, I will walk through the information and steps required to setup Okta custom domain. It also reveals the issues that may get in the way and how to address them.&lt;br /&gt;
&lt;br /&gt;
Okta is a leading cloud IAM solution and offers a free developer account. Anyone can register and use its service as long as the active monthly user count doesn&#39;t go over 1000 in the developer&#39;s account. After registration, Okta will assign an URL domain in a format of &quot;https://dev-xxxxxx.okta.com&quot; (xxxxxx is a random number assigned), where you can login and manage your own Okta services. If you are a paid customer, then you would be able to choose a custom naming in such way as &quot;https://custom.okta.com&quot;.&lt;br /&gt;
&lt;br /&gt;
It&#39;s essential to setup a custom URL domain so that your Okta domain would look like a subdomain of your own such as &quot;https://login.mydomain.com&quot;. Setting up a custom domain would provide you:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Use custom domain as the issuer for the Okta default or custom authorization server so that you can have the authorization process appears as the same domain as your web application&lt;/li&gt;
&lt;li&gt;Customization of Okta SignIn widget and this cannot be done without a custom domain&lt;/li&gt;
&lt;li&gt;Not necessarily exposing Okta as your IAM solution vendor&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The prerequisite of setting up custom domain for your Okta account are:&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Ownership of the domain and sub-domain to serve as the Okta custom domain&lt;/li&gt;
&lt;li&gt;HTTPS/TLS certificate, private key and chain files that to be applied to your domain and sub-domain. The private key has to be PEM encoded in 2048 bits.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Most of the website management services such as Wordpress or hosting services such as Netlify, GoDaddy would provide the HTTPS out of the box for your site using &quot;Let&#39;s Encrypt&quot;, but they would not allow to download the certificates behind the site. And, neither can you gain shell access to the servers to create and install your own certificates. Then the only option it leaves out is to create the certs in your own machine and upload them to the hosting servers, which most of the vendors would be able to provide on their management panel.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://zerossl.com/&quot; target=&quot;_blank&quot;&gt;ZeroSSL &lt;/a&gt;is a free SSL tool just does the HTTPS/TLS certs generation. ZeroSSL offers the online tool to generate certificates and the private key. But the online tool only generates 4096-bit private key and Okta requires the private key to be PEM encoded in 2048 bits. Therefore we will have to download the tool and generate them manually with custom options.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Generate Certificates and Keys&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Here are the steps required to creates HTTPS/TLS certs for your hosting site as well as Okta for custom URL domain.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1. Download ZeroSSL tool. For simplicity, take the windows version as it&#39;s portable and requires no installation at&amp;nbsp;&lt;a href=&quot;https://github.com/do-know/Crypt-LE/releases&quot;&gt;https://github.com/do-know/Crypt-LE/releases&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
2. Generate certs and keys using the following command:&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;.\le64.exe --key account.key --csr mydomain.csr --csr-key mydomain.key --crt mydomain.crt --domains &quot;login.yourdomain.com,yourdomain.com&quot; --generate-missing --handle-as dns --legacy --api 2 --live&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Explanation:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;account.key: account private key&lt;/li&gt;
&lt;li&gt;mydomain.key: domain private key. account.key and mydomain.key are private keys and can be generated using openssl. The downloaded tool &quot;le&quot; can also generate them.&lt;/li&gt;
&lt;li&gt;mydomain.csr: certificate signing request file for the domain requested&lt;/li&gt;
&lt;li&gt;mydomain.crt: certificates for the domain requested&lt;/li&gt;
&lt;li&gt;mydomain.ca: not in command line but will be generated at the end as option &quot;--legacy&quot; is used. This is called the issuer&#39;s certificate file, or CA certificate or intermediate cert.&lt;/li&gt;
&lt;li&gt;handle-as dns: this option asks for domain verification instead of http verfication. Http verification will generate two files which need to be uploaded to your website. Domain verification option will generate challenge key/value pair for TXT record verification on your domain.&lt;/li&gt;
&lt;li&gt;generate-missing: this option will generate specified files if they don&#39;t exist yet&lt;/li&gt;
&lt;li&gt;legacy: this is important and it&#39;s mandatory to successfully upload generated certs to Okta custom domain setup. As Okta requires 2048 bit key, legacy option will result in using 2048 bit key and placing the issuer&#39;s certificate separately in its own .ca file.&lt;/li&gt;
&lt;li&gt;api 2: this option will use version 2 API. Wildcard in domain is only supported in v2.0 such as &quot;*.mydomain.com&quot;&lt;/li&gt;
&lt;li&gt;live: this option is used to run the actual generation process. It&#39;s advised to &quot;test&quot; the process without the live option first.&lt;/li&gt;
&lt;/ul&gt;
Check&amp;nbsp;&lt;a href=&quot;https://zerossl.com/usage.html&quot;&gt;https://zerossl.com/usage.html&lt;/a&gt;&amp;nbsp;for more reference if needed.&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
During the process, the command will generate two challenge key/value pairs as two domains (sub-domain and main domain) are defined in the command. The key/value pairs need to be inserted to your domain management using TXT record for verification. Only after the domain is verified, the subsequent certs can be generated successfully.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
After the certs are generated, first thing to do is to update them in your own domain. Next I will show how to config the custom domain in Okta.&lt;br /&gt;
&lt;br /&gt;
Note that the generated certs will expire in 90 days. It&#39;s important to renew the certificates a few days before it expires. Auto renew can be setup only if the shell access is available to your domain servers.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://www.okta.com/sites/default/files/your-custom-url.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;150&quot; data-original-width=&quot;600&quot; height=&quot;80&quot; src=&quot;https://www.okta.com/sites/default/files/your-custom-url.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Config Okta for Custom URL Domain&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
Login your Okta account, and switch to &quot;Developer Console&quot; if you are in the Classic UI mode, by clicking the top left dropdown list.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6HIx0_62UvDuV_ts-uuKAYLgGKvqb_fGnkYB1D025Fl5ZGudzwe2_FqXHsvinntT-wnqvwdnWFiLyDCssECtjkM28_2WwpRKqbI18kBSoepU-M4pGY14-PPDmX451UxywsVhBWfwLqpD7/s1600/1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;94&quot; data-original-width=&quot;228&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6HIx0_62UvDuV_ts-uuKAYLgGKvqb_fGnkYB1D025Fl5ZGudzwe2_FqXHsvinntT-wnqvwdnWFiLyDCssECtjkM28_2WwpRKqbI18kBSoepU-M4pGY14-PPDmX451UxywsVhBWfwLqpD7/s1600/1.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Go to menu Customization and then &quot;Domain Name&quot;, and Click on &quot;Edit&quot;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjziIIpMLkKxgYz737TKcZC17RcEzBwD_Y9t3QPnw4ipMl4KeZS8SX5Iik4uNOGWm8KSlBsYElySPFQCZb7n91_LHG9pquusejj3iFFN1lv0Mmmxk9Megz1aKskJC91mPpmfM9sK5AYFTvr/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;322&quot; data-original-width=&quot;753&quot; height=&quot;136&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjziIIpMLkKxgYz737TKcZC17RcEzBwD_Y9t3QPnw4ipMl4KeZS8SX5Iik4uNOGWm8KSlBsYElySPFQCZb7n91_LHG9pquusejj3iFFN1lv0Mmmxk9Megz1aKskJC91mPpmfM9sK5AYFTvr/s320/2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Click on &quot;Get Started&quot;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggsCQWispYcWvSlCed0FR1FYJmBzxYiYPQAclGDJpD0W81GdpF0Gk5yyZAoRRKTjFO2XSbSgBYi_Ox_V4ubuZkvt8Hc9WuP1LPbSePhu4bX7LsWD75i3Z8_mGVYx2zSlAG8B5fT9pZi7qf/s1600/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;452&quot; data-original-width=&quot;758&quot; height=&quot;190&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggsCQWispYcWvSlCed0FR1FYJmBzxYiYPQAclGDJpD0W81GdpF0Gk5yyZAoRRKTjFO2XSbSgBYi_Ox_V4ubuZkvt8Hc9WuP1LPbSePhu4bX7LsWD75i3Z8_mGVYx2zSlAG8B5fT9pZi7qf/s320/3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Enter the sub-domain that is used for Okta custom domain. In the example it is &quot;login.mydomain.com&quot;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxuggnr3sZSDLfyBk0bblqwQ6kPAkXWWKjJJImvPxsSKqvu1U21rL7syLQ1AKgV9kAfrQH9tguNl0Azb5kfweMhmALQ_GeMhbzdH4XqQlsG_uJNXpxz_WM_XKvSvd1kLbjp00OkzVwwR7l/s1600/4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;408&quot; data-original-width=&quot;638&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxuggnr3sZSDLfyBk0bblqwQ6kPAkXWWKjJJImvPxsSKqvu1U21rL7syLQ1AKgV9kAfrQH9tguNl0Azb5kfweMhmALQ_GeMhbzdH4XqQlsG_uJNXpxz_WM_XKvSvd1kLbjp00OkzVwwR7l/s320/4.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Okta will generate a TXT record to be inserted to your domain for verification. After inserting the TXT record, click on &quot;Verify&quot;. It will show &quot;Verified&quot;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixz9iddOj8j3q2L7VWwCGVU8JrgFD31r03iGzmS7JJ9gxDS3bqJYrQoJsG8Vo3qq42IIE5ciOI9GkHbou3ajj3p1pCZh63uVPaxOTc30h_X7H_KD8xx4-72G74UhY2HroCDoVjePjgAep8/s1600/5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;462&quot; data-original-width=&quot;626&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixz9iddOj8j3q2L7VWwCGVU8JrgFD31r03iGzmS7JJ9gxDS3bqJYrQoJsG8Vo3qq42IIE5ciOI9GkHbou3ajj3p1pCZh63uVPaxOTc30h_X7H_KD8xx4-72G74UhY2HroCDoVjePjgAep8/s320/5.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Copy/Paste the certificate and key generated in the previous step. In this example,&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Certificate: mydomain.crt&lt;/li&gt;
&lt;li&gt;Private Key: mydomain.key&lt;/li&gt;
&lt;li&gt;Certificate Chain: mydomain.ca&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbDH387fguIGCGfftDnkQIl7msOaeuce-C-pq_Php5ttpWAMeFe35O_bWNACC_yPq2qTxsMpyqQ9fL1LZ4VAeByb6hb6pb8A3wR6a0bPc6uUeV5kugWqRNFlNCr0QOxRwte70r_ZzNE6eC/s1600/6.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;836&quot; data-original-width=&quot;1031&quot; height=&quot;259&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbDH387fguIGCGfftDnkQIl7msOaeuce-C-pq_Php5ttpWAMeFe35O_bWNACC_yPq2qTxsMpyqQ9fL1LZ4VAeByb6hb6pb8A3wR6a0bPc6uUeV5kugWqRNFlNCr0QOxRwte70r_ZzNE6eC/s320/6.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Make the custom domain as an alias for your Okta sign in host by creating a &quot;CNAME&quot; in your domain management.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiagpbuddt71cEbO5xCcBPZ4P4fownuC1aYoMgSkzKRtoeu40XGMmt0iUYZIKT34QdE8n4G59RFOVTBPbJA1A8Qw5CfiuLgxlJcviTDszsjCi84Z2hKwzsxowalHbi9qA4KtrSmuQKVYMrO/s1600/7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;553&quot; data-original-width=&quot;622&quot; height=&quot;284&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiagpbuddt71cEbO5xCcBPZ4P4fownuC1aYoMgSkzKRtoeu40XGMmt0iUYZIKT34QdE8n4G59RFOVTBPbJA1A8Qw5CfiuLgxlJcviTDszsjCi84Z2hKwzsxowalHbi9qA4KtrSmuQKVYMrO/s320/7.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
Click &quot;Finish&quot; and then it completes the setup of custom URL domain.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbb025XrysC5cZibar6BSTeQszkct4tamJ6H5WKip9CxuYz-2AO1hw37lLPkyzX_3acU87GF-o-BRbD0MmMWgB3eXJTZVlb55zMDfXdJs74hTUo4z0Ab1f7-iz0jVsXmE2T7uWNWw315Un/s1600/8.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;409&quot; data-original-width=&quot;748&quot; height=&quot;174&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbb025XrysC5cZibar6BSTeQszkct4tamJ6H5WKip9CxuYz-2AO1hw37lLPkyzX_3acU87GF-o-BRbD0MmMWgB3eXJTZVlb55zMDfXdJs74hTUo4z0Ab1f7-iz0jVsXmE2T7uWNWw315Un/s320/8.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
With custom URL domain setup complete, I can login the Oka account by visiting the custom domain.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipwsC_z8CnHKainA5FPDWUGpToSDWd5ea6Hz1U7yw-5Jjsp-p3NtjC_yqldMWU9ee9vdBTW4SkjVqGrJD0hyphenhyphenklPJ42ku-xKZaZwGUkdkxPo7YhrHIchJKgpujl-LVUGBemFlSNfldsjo2D/s1600/Snip20200328_9.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1504&quot; data-original-width=&quot;1180&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipwsC_z8CnHKainA5FPDWUGpToSDWd5ea6Hz1U7yw-5Jjsp-p3NtjC_yqldMWU9ee9vdBTW4SkjVqGrJD0hyphenhyphenklPJ42ku-xKZaZwGUkdkxPo7YhrHIchJKgpujl-LVUGBemFlSNfldsjo2D/s320/Snip20200328_9.png&quot; width=&quot;251&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Note the &quot;Not Secure&quot; certificate warning is supposed to be cleared away in 48 hours after Okta propagates certificates over to the custom domain, but it could take longer in reality.&lt;br /&gt;
&lt;br /&gt;
Now I can customize the sign in page to tailor it to my own brand, look and feel, etc. From the Okta menu, go to Customization and then &quot;Signin Page&quot;.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjigqEKqPBi0fNJ5zkBzTOAfSRlcSSaThiBTVpRisXz7N-4l41togI-dm7okklYooNSdqIy-h9MYnqXNTNwiK3q28PGwbEKj6OzOTG_RFDL4HGAx7owv_DgjG7MT3NXInDOC71H5BlHC5-M/s1600/9.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;839&quot; data-original-width=&quot;1061&quot; height=&quot;253&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjigqEKqPBi0fNJ5zkBzTOAfSRlcSSaThiBTVpRisXz7N-4l41togI-dm7okklYooNSdqIy-h9MYnqXNTNwiK3q28PGwbEKj6OzOTG_RFDL4HGAx7owv_DgjG7MT3NXInDOC71H5BlHC5-M/s320/9.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
I am also able to use the custom domain as the issuer for the Okta default or custom authorization server so that any clients assigned to the authorization server will go through the custom domain instead of okta domain.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik5tRbgMQ90GWqa0JrWXHepJsX3DWNJB5O-10rhkC8iq7hY9x8bZgg7Y-f_jKS-49zGfzlxsoALYye8taMShA_VW22YEsiJzytEZR_FEccd0COK9R6CMH4ejdF6OhXWf-Zvv9TZBTpYtuC/s1600/10.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;317&quot; data-original-width=&quot;1029&quot; height=&quot;98&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik5tRbgMQ90GWqa0JrWXHepJsX3DWNJB5O-10rhkC8iq7hY9x8bZgg7Y-f_jKS-49zGfzlxsoALYye8taMShA_VW22YEsiJzytEZR_FEccd0COK9R6CMH4ejdF6OhXWf-Zvv9TZBTpYtuC/s320/10.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
To update your web app to use the custom authorization server, switch to &quot;Classic UI&quot;, go to your application setup and Sign on page. Edit the OpenID Connect ID Token section, and choose the custom domain as the issuer. Now your application sign-in process will go through the custom domain.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsUwgk_Qy53gjOH2EGVoqGJER1_xz_UNGnTsxB5DEOB7KMbR36FWrh_UU91UsQX6pLnOtpM3xBJlken0DWktWYlKKTQm1nIcFtNs5eqcMPCBQatuDfSHfSGqSMXcHIct4DzY8LJujVtX9u/s1600/11.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;455&quot; data-original-width=&quot;750&quot; height=&quot;194&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsUwgk_Qy53gjOH2EGVoqGJER1_xz_UNGnTsxB5DEOB7KMbR36FWrh_UU91UsQX6pLnOtpM3xBJlken0DWktWYlKKTQm1nIcFtNs5eqcMPCBQatuDfSHfSGqSMXcHIct4DzY8LJujVtX9u/s320/11.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
This ends the complete process of setting up Okta custom domain.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/4594992959910712933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/4594992959910712933' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/4594992959910712933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/4594992959910712933'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2020/03/setup-okta-custom-url-domain.html' title='Setup Okta Custom URL Domain '/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6HIx0_62UvDuV_ts-uuKAYLgGKvqb_fGnkYB1D025Fl5ZGudzwe2_FqXHsvinntT-wnqvwdnWFiLyDCssECtjkM28_2WwpRKqbI18kBSoepU-M4pGY14-PPDmX451UxywsVhBWfwLqpD7/s72-c/1.PNG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-5485405666934856120</id><published>2020-03-23T10:51:00.000-05:00</published><updated>2020-03-23T10:51:12.970-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADF"/><category scheme="http://www.blogger.com/atom/ns#" term="adfc_diagram"/><category scheme="http://www.blogger.com/atom/ns#" term="Task Flow"/><title type='text'>About adfc_diagram files in ADF</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
In short, files that end with &quot;adfc_diagram&quot; file type are metadata files to keep track of element position in an ADF task flow.&lt;br /&gt;
&lt;br /&gt;
ADF task flow offers a process-flow like visual panel for developers to re-position the elements (page/fragment, router, Java bean methods, etc). The file ending with &quot;adfc_diagram&quot; is the one tracking the positions of all elements so that next time the task flow is open the saved visual positions are presented.&lt;br /&gt;
&lt;br /&gt;
Another blog spot on the same matter:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://javalopez.blogspot.com/2015/03/should-i-commit-adfcdiagram-files.html&quot;&gt;http://javalopez.blogspot.com/2015/03/should-i-commit-adfcdiagram-files.html&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/5485405666934856120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/5485405666934856120' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5485405666934856120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5485405666934856120'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2020/03/about-adfcdiagram-files-in-adf.html' title='About adfc_diagram files in ADF'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-1250190843257404573</id><published>2020-03-21T12:24:00.000-05:00</published><updated>2020-03-21T14:36:22.108-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Front End"/><category scheme="http://www.blogger.com/atom/ns#" term="React"/><title type='text'>Full Screen Youtube Video on Play - React</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Youtube video is ubiquitous. Embedding Youtube videos into a web page is as straightforward as it sounds. What also seems natural is to full-screen the video on touching the play icon of the video on mobile devices. This feature is important for mobile user experience as the full screen control is quite small to &quot;aim&quot;.&lt;br /&gt;
&lt;br /&gt;
Google results on this topic showed many people had been looking for a solution on this and couldn&#39;t get a simple way to work out, as Youtube doesn&#39;t provide an API to full screen videos.&lt;br /&gt;
&lt;br /&gt;
In this post, I am showing a relatively simply way to achieve this user experience with fairly few lines of code. Code example is shown below.&lt;br /&gt;
&lt;br /&gt;
In the example, I use React as there are many nice plugins ready to start. Here is a list of them:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;screenfull: a simple wrapper of cross browser JavaScript implementation of full screen API.&amp;nbsp;&lt;a href=&quot;https://www.npmjs.com/package/screenfull&quot;&gt;https://www.npmjs.com/package/screenfull&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;device-detector-js: a way of detecting user device with a wide range of device coverage.&amp;nbsp;&lt;a href=&quot;https://www.npmjs.com/package/device-detector-js&quot;&gt;https://www.npmjs.com/package/device-detector-js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;react-youtube: a thin layer of implementation of Youtube iframe player API.&amp;nbsp;&lt;a href=&quot;https://www.npmjs.com/package/react-youtube&quot;&gt;https://www.npmjs.com/package/react-youtube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: &amp;quot;arial&amp;quot;; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; import React from &quot;react&quot;;  
 import screenfull from &quot;screenfull&quot;;  
 import YouTube from &quot;react-youtube&quot;;  
 import DeviceDetector from &quot;device-detector-js&quot;;  
 import PropTypes from &quot;prop-types&quot;;  
 import { makeStyles } from &quot;@material-ui/core/styles&quot;;  
 export default function YTPlayer(props) {  
  const dd = new DeviceDetector();  
  const mobile = dd.usesMobileBrowser();  
  const fullScreen = event =&amp;gt; {  
   var iframe = event.target.getIframe();  
   if (screenfull.isEnabled) {  
    screenfull.request(iframe);  
   }  
  };  
  const opts = {  
   height: &quot;100%&quot;,  
   width: &quot;100%&quot;,  
   controls: &quot;1&quot;  
  };  
  const useStyles = makeStyles({  
   videoDiv: {  
    width: &quot;100%&quot;,  
    height: &quot;100%&quot;  
   }  
  });  
  const classes = useStyles();  
  return (  
   &amp;lt;YouTube  
    containerClassName={classes.videoDiv}  
    videoId={props.id}  
    opts={opts}  
    onPlay={() =&amp;gt; (mobile ? fullScreen : {})}  
   /&amp;gt;  
  );  
 }  
 YTPlayer.propTypes = {  
  id: PropTypes.string  
 };  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
To use the above component, simply put the Youtube video id into it such as:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: &amp;quot;arial&amp;quot;; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; &amp;lt;YTPlayer id=&quot;LjhCEhWiKXk&quot; /&amp;gt;  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/1250190843257404573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/1250190843257404573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/1250190843257404573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/1250190843257404573'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2020/03/full-screen-youtube-video-on-play-react.html' title='Full Screen Youtube Video on Play - React'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-2005296053332215259</id><published>2019-11-15T09:43:00.005-06:00</published><updated>2019-11-15T09:43:58.436-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="X11"/><title type='text'>X11 doesn&#39;t work after sudo to another user</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
This is kind of old trick but after years of not using X11 at all, I will need to refresh.&lt;br /&gt;
&lt;br /&gt;
Most of the times at my client, linux access is given with my own user name with ability to sudo to a regular service user. On a need of X11 GUI, it&#39;s mandatory to add the authorization info of my own user name into the sudo user name so X11 window can be started on top of the sudo user.&lt;br /&gt;
&lt;br /&gt;
But first of all, make sure the X11 forwarding is enabled by adding the following to /etc/ssh/sshd_config&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;X11Forwarding yes&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Before the authorization info is added, the following error may show up in the terminal when trying to bring up X11 window.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;X11 proxy: Authorisation not recognised&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Here is how to add the authorization.&lt;br /&gt;
&lt;br /&gt;
1. go back to the user who has access to the linux box and get the following info -&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;gt;&amp;gt; echo $DISPLAY&lt;/span&gt;&lt;br /&gt;
this will print out the display variable of the current user&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;gt;&amp;gt;xauth list&lt;/span&gt;&lt;br /&gt;
this will print out the authorization info to connect to the X server of the current user&lt;br /&gt;
&lt;br /&gt;
2. sudo to the service user&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;gt;&amp;gt; export DISPLAY=Value_from_step_1&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;gt;&amp;gt; xauth add auth_info_from_step_1&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
3. test use &quot;xclock&quot;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/2005296053332215259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/2005296053332215259' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/2005296053332215259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/2005296053332215259'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2019/11/x11-doesnt-work-after-sudo-to-another.html' title='X11 doesn&#39;t work after sudo to another user'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-2548736505489511421</id><published>2019-08-26T11:40:00.000-05:00</published><updated>2019-08-26T11:40:23.681-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADF"/><category scheme="http://www.blogger.com/atom/ns#" term="ADF BC"/><category scheme="http://www.blogger.com/atom/ns#" term="JDBC"/><category scheme="http://www.blogger.com/atom/ns#" term="Leak"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Weblogic"/><title type='text'>JDBC Connection Leak in ADF app on a WebLogic Server</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
It&#39;s an old topic but worthy to post as it happens frequent enough in codes that I observed.&lt;br /&gt;
&lt;br /&gt;
The bottom line of the issue that I am going to describe here is a coding issue, to it applies to WebLogic 11g as well as 12c.&lt;br /&gt;
&lt;br /&gt;
An ADF app deployed on a remote WebLogic Server went to an error page frequently. Checking the log, I found it&#39;s complaining on &quot;JBO-26061: Error while opening JDBC connection&quot;. The next thing I did is checking the data source of the ADF App configured on the WebLogic Server console.&lt;br /&gt;
&lt;br /&gt;
On the Data Source -&amp;gt; Monitoring -&amp;gt; Statistics, the &quot;Active Connection Average Count&quot;, &quot;Active Connections Current Count&quot; and &quot;Active Connection High Count&quot; all showed &quot;15&quot;, which is the default max capacity of a connection pool. This shows all the connections are taken and no more connection available. I go to Monitoring -&amp;gt; Testing, select on the affected server and click on &quot;Test Data Source&quot;, such error will shown &quot;&lt;span style=&quot;background-color: #e0eaf1; font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 11.7px;&quot;&gt;weblogic.common.resourcepool.ResourceLimitException: No resources currently available&lt;/span&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
At this moment, it&#39;s pretty clear that the ADF App takes all the connections and not releases them properly. In another word, there could be a JDBC connection leak. There is a column &quot;Leaked Connection Count&quot; in the same table as &quot;Active Connections Current Count&quot;. It is showing &quot;0&quot; but don&#39;t let it fool you as it&#39;s no magic for the console to tell you there is a leak right now without doing some tweaking.&lt;br /&gt;
&lt;br /&gt;
Now go to the data source Configuration -&amp;gt; Connection Pool, expand &quot;Advanced&quot;, there will be a setting for &quot;Inactive Connection Timeout&quot; with default &quot;0&quot;. As soon as I set it for &quot;15&quot;, I started to see the &quot;Leaked Connection Count&quot; start to grow. This &quot;15&quot; means after &quot;15 seconds&quot; of the server detecting an idle JDBC connection, it forcefully release the connection back to the pool and then mark it as a leaked connection.&lt;br /&gt;
&lt;br /&gt;
The culprit of the issue still resides in the application. Do a search for &quot;connection&quot; or &quot;statement&quot; in the application (model layer) and see if there is any usage of manual creation of any connection, statement or result set object without properly closing them.&lt;br /&gt;
&lt;br /&gt;
A document reference on properly closing JDBC objects :&amp;nbsp;&lt;a href=&quot;https://docs.oracle.com/cd/E13222_01/wls/docs103/jdbc/troubleshooting.html#wp1024080&quot;&gt;https://docs.oracle.com/cd/E13222_01/wls/docs103/jdbc/troubleshooting.html#wp1024080&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/2548736505489511421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/2548736505489511421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/2548736505489511421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/2548736505489511421'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2019/08/jdbc-connection-leak-in-adf-app-on.html' title='JDBC Connection Leak in ADF app on a WebLogic Server'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-3167303811234452831</id><published>2018-05-30T16:20:00.004-05:00</published><updated>2018-05-30T16:20:45.943-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Concur"/><category scheme="http://www.blogger.com/atom/ns#" term="Connector"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Informatica"/><category scheme="http://www.blogger.com/atom/ns#" term="Rest"/><title type='text'>CONCUR INTEGRATION WITH INFORMATICA CLOUD: A TECHNICAL REVIEW</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Article originally published &lt;a href=&quot;https://www.primitivelogic.com/insights/concur-integration-with-informatica-cloud-a-technical-review/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Concur is one of the industry’s most widely used travel and expense management solutions, used by more than 32,000 organizations globally. For companies that are implementing or have implemented Concur, one critical step necessary to fully unleash the power of the platform is the integration process.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;After implementing Concur, companies often spend a large amount of time on tedious manual work, such as adding new users on new hire events, user off-boarding, manager changes, department changes, etc. These &quot;maintenance&quot; tasks seem trivial at first, but they actually require a major time commitment from Concur administrators, who could be focusing on other critical tasks. Besides, managing Concur’s interaction with other systems, such as HR or financial ledger platforms, introduces more challenges, as these tasks are not straightforward and solutions are not directly provided by any of the applications involved in the integration.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Does this sound familiar? Many companies experience these challenges on a daily basis. Without a sound integration solution in place, managing such a powerful and efficient travel and expense system can be challenging.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;a href=&quot;https://www.primitivelogic.com/tech-partners/informatica/&quot; style=&quot;background-color: transparent; box-sizing: border-box; text-decoration-line: none; transition: all 0.3s ease-in-out;&quot;&gt;Informatica Cloud&lt;/a&gt;&amp;nbsp;is the industry-leading integration platform-as-a-service (iPaaS) and data management solution, designed to connect with enterprise-ready data and applications across cloud, on-premise, big data, social, and mobile environments. Primitive Logic is proud to be an award-winning Informatica Partner (&lt;a href=&quot;https://www.primitivelogic.com/press/primitive-logic-receives-2016-outstanding-informatica-partner-of-the-year-award/&quot; style=&quot;background-color: transparent; box-sizing: border-box; text-decoration-line: none; transition: all 0.3s ease-in-out;&quot;&gt;Outstanding Partner of the Year 2016&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://www.primitivelogic.com/press/informatica-presents-primitive-logic-the-2015-cloud-emerging-growth-partner-of-the-year-award/&quot; style=&quot;background-color: transparent; box-sizing: border-box; text-decoration-line: none; transition: all 0.3s ease-in-out;&quot;&gt;Cloud Emerging Growth Partner of the Year 2015&lt;/a&gt;), with experience implementing hundreds of integrations. In this article, I’ll share our experience and the technical insights we gained in leveraging Informatica Cloud for successful Concur integrations.&lt;/span&gt;&lt;/div&gt;
&lt;h3 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.25rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 22px; margin: 50px 0px 24px;&quot;&gt;
Understand Integration Goals&lt;/h3&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;When it comes to data integration, regardless of the applications involved, your first task is to understand the business and technical goals you want to achieve. You’ll also want to consider the other applications that will have to integrate with Concur.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;To better understand the business goals of the integration — and the challenges involved — consider the following questions:&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px; margin-top: 0px;&quot;&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;What business value (or return of investment) will this integration bring, in both the short and long term?&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;What is the current process we’re looking to integrate? What are the pain points?&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;What&#39;s the end state of this automated integration? Are we looking to roll out the integration in phases?&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Gaining a better understanding of your business goals and how they align with technical needs is an important first step in designing a solid integration approach. To understand your technical needs, consider the following questions:&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px; margin-top: 0px;&quot;&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;What are the data objects involved with the integration? Specifically, what types of data (data attributes on these objects) are involved? Are they structured, semi-structured, or unstructured?&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;How should the integration be triggered — real-time, event-based, scheduled, or on-demand?&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;What&#39;s the size of the data in scope? Will we need to run the integration in bulk mode?&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;How do we want to be notified on the outcome of the integration, and what information should this notification include?&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;How would this integration recover from exceptions — human intervention, auto-recovery, or a combination of both?&lt;/span&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Answering these questions will help you further define the scope of the integration process and narrow down your design options for satisfying your requirements and achieving your goals.&lt;/span&gt;&lt;/div&gt;
&lt;h3 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.25rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 22px; margin: 50px 0px 24px;&quot;&gt;
Match the Approach to the Need&lt;/h3&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Let’s review the integration options around Concur — the thoughts behind each option, the reasons why each should be used in different scenarios, and how each ties back to the business and technical needs we discussed in the previous section.&lt;/span&gt;&lt;/div&gt;
&lt;h4 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.125rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 500; line-height: 1.1; margin: 40px 0px 15px;&quot;&gt;
Concur Connectors by iPaaS&lt;/h4&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Most iPaaS offerings provide pre-built application connectors that are ready to use — an important consideration when choosing your platform. Informatica provides two versions of Concur connectors, ConcurV1 and ConcurV2.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;It&#39;s rare for a provider to offer multiple versions of connectors at the same time; however, with Concur connectors, there is a good reason for it. Most connectors are built by the iPaaS vendor on top of the API offered by the solution provider. Concur, as the solution provider, has multiple versions of its API (&lt;a href=&quot;https://developer.concur.com/api-reference&quot; rel=&quot;noopener&quot; style=&quot;background-color: transparent; box-sizing: border-box; color: #3460c7; text-decoration-line: none; transition: all 0.3s ease-in-out;&quot; target=&quot;_blank&quot;&gt;Concur API Portal&lt;/a&gt;) running at the same time for different sets of functions. That&#39;s why we see two versions of Concur connectors from Informatica.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;It&#39;s essential to understand which Concur data objects are in the scope of your integration, as you can then evaluate the right connector for the right operation for these objects. For example, for the User object in Concur, different API endpoints offer different sets of functions:&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px; margin-top: 0px;&quot;&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;a href=&quot;https://developer.concur.com/api-reference/user/&quot; rel=&quot;noopener&quot; style=&quot;background-color: transparent; box-sizing: border-box; color: #3460c7; text-decoration-line: none; transition: all 0.3s ease-in-out;&quot; target=&quot;_blank&quot;&gt;Version 1 API&lt;/a&gt;&amp;nbsp;offers three operations on the User object: read, create, and update. It also supports updating the user password (separate from other User attribute updates).&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;a href=&quot;https://developer.concur.com/api-explorer/v3-0/Users.html&quot; rel=&quot;noopener&quot; style=&quot;background-color: transparent; box-sizing: border-box; color: #3460c7; text-decoration-line: none; transition: all 0.3s ease-in-out;&quot; target=&quot;_blank&quot;&gt;Version 3 API&lt;/a&gt;&amp;nbsp;offers only the search operation on the User object. (Note: There is no Version 2 API for the User object.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;As noted, the two versions of API for User objects are designed for different services. Version 3 API provides robust search capability, while only limited user information can be retrieved in the output. Version 1 API on the User object is not as performant as Version 3, but provides a full span of user information with read, update, and create capabilities. To match the Concur connectors, Informatica wraps the Version 1 User API in ConcurV1 and Version 3 in ConcurV2.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;As you can see, Concur Rest API is the backbone of all Concur connectors. However, since Concur connectors do not inherit all API functions, they pose several limitations:&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px; margin-top: 0px;&quot;&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Connectors lack support for custom attributes. Going back to the example of the User object in Concur, if you create a user with additional custom attributes that are not listed in the API reference doc, the connector will not work.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;The connector can only deal with one object at a time. If you update users and user profiles in sequence (a common use case), the connector will not work.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Connector provisioning always incurs a licensing cost.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.125rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 500; line-height: 1.1; margin: 40px 0px 15px;&quot;&gt;
Concur Rest API&lt;/h4&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;If you encounter limitations using Concur connectors for the above use cases, you may want to work with the Concur Rest API directly and design customized solutions to address your specific use cases.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Advantages of working with the Concur Rest API include&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px; margin-top: 0px;&quot;&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Custom Attributes: It’s common to set up custom attributes in Concur to fit records into your business use cases, which leaves the Concur Rest API as the only option for automating processes.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Working with Multiple Objects in Parallel or in Sequence:&lt;/span&gt;&amp;nbsp;Most business processes involve multiple data objects. For example, for a new hire event, three objects need to be created: a user, a user profile, and a travel profile. The ability to orchestrate multiple object operations is critical for governing data integrity in an automated manner and keeping future maintenance work to a minimum.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Cost Reduction:&lt;/span&gt;&amp;nbsp;As I mentioned above, each connector comes with a cost. Using generic connectors and the Concur Rest API or custom connectors (discussed in more detail below) are good alternatives to expensive application-specific connectors, leading to long-term savings.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Performance Benefits:&lt;/span&gt;&amp;nbsp;With Rest API, you can choose to deal only with the data of interest instead of all data exposed by the API. This reduces the data size and results in improved performance of the overall transactions.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Informatica offers two options for implementing Concur Rest API:&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px; margin-top: 0px;&quot;&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Informatica Rest V2 Connector:&lt;/span&gt;&amp;nbsp;This generic connector can be configured and set up to work with any Rest API endpoint. It supports a variety of authentication options and utilizes swagger definition to configure the data objects and operations involved in the transaction. The Rest connector can work as a source, a target, or a mid-stream in any typical integration operation of the Rest API call, such as read, write, or delete. It automatically converts hierarchy data from the application to relational data or vice versa, which can subsequently be used in downstream applications. (I recently published a&amp;nbsp;&lt;a href=&quot;https://www.primitivelogic.com/insights/a-quick-talk-on-generic-cloud-app-integration-with-informatica-cloud/&quot; style=&quot;background-color: transparent; box-sizing: border-box; color: #3460c7; text-decoration-line: none; transition: all 0.3s ease-in-out;&quot;&gt;technical talk with in-depth focus on the Rest V2 connector&lt;/a&gt;.)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;Informatica Cloud Application Integration (ICAI, formerly Informatica Cloud Real Time):&lt;/span&gt;&amp;nbsp;This option allows you to construct the Concur Rest API as a service in a service-oriented integration process, encompassing event processing, service orchestration and process management. ICAI allows you to streamline complex business use cases in a workflow-like process and invoke them in real or near-real time. As an output of the integration process, it also provides flexibility around custom error handling and customized notification content.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.125rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 500; line-height: 1.1; margin: 40px 0px 15px;&quot;&gt;
Concur SFTP&lt;/h4&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Concur SFTP can be used for both inbound and outbound integration, for data imports as well as exports. It is also a viable option for bulk data loads and extracts.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Concur SFTP works as either a source or a target within Informatica cloud integration and also interacts with other applications. You can implement it as a service in Informatica Cloud Application Integration and monitor it in real time, invoking an integration process upon a new file dropped on the SFTP site.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Although information on the data objects that the SFTP supports is not publicly accessible, it&#39;s clear that not all objects are supported. Concur SFTP is also an option with a relatively low cost.&lt;/span&gt;&lt;/div&gt;
&lt;h4 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.125rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 500; line-height: 1.1; margin: 40px 0px 15px;&quot;&gt;
Concur App Center Connectors&lt;/h4&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Concur manages a list of connectors in the Concur App Center, most of which were created by travel and expense partners. These connectors are designed mainly for consumers to import their personal data and aren&#39;t suitable for enterprise-level application or system integrations.&lt;/span&gt;&lt;/div&gt;
&lt;h3 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.25rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: 22px; margin: 50px 0px 24px;&quot;&gt;
Avoiding Common Caveats&lt;/h3&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;To conclude this overview, I&#39;d like to share some caveats, or “gotchas,” that can complicate Concur integrations.&lt;/span&gt;&lt;/div&gt;
&lt;h4 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.125rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 500; line-height: 1.1; margin: 40px 0px 15px;&quot;&gt;
Skipping the Sandbox&lt;/h4&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;To save on cost, some companies choose not to have a sandbox and to provision only the Concur production instance. This can create a problem, as Concur could be dealing with multiple sets of data that could become corrupted, and other integrated systems generally have both production and sandbox instances. By omitting the sandbox, you run the risk of production data becoming corrupted. Besides, certain objects in Concur cannot be deleted but only be disabled or set to “inactive.” This increases the amount of redundant, “noisy” data, which can be difficult to manage and may affect data integration with other systems, as data integrity will be compromised.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;There is no ideal solution in this case other than getting a sandbox, even temporarily for integration design, development, and testing. Otherwise, specific considerations need to be taken on architecting and design to minimize the injection of redundant data — such as introducing a data flag to categorize individual transactions (update on existing data vs. create with new data) — so that we can reset these data accordingly after development and testing. Additionally, good planning is needed for test data to minimize the impact of the noisy data and avoid impacting data integrity.&lt;/span&gt;&lt;/div&gt;
&lt;h4 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.125rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 500; line-height: 1.1; margin: 40px 0px 15px;&quot;&gt;
Custom Fields Created in a Web Browser&lt;/h4&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;As we discussed above, it&#39;s a common practice to customize the Concur application by adding custom data fields, which administrators can do through the Concur application in a web browser. However, not all custom fields created by web browsers are necessarily supported right away by the Concur Rest API. As a result, the API may not support all the custom attributes that are in use at any given time. You can submit a support ticket, but it could take some time before Concur releases an API update.&lt;/span&gt;&lt;/div&gt;
&lt;h4 style=&quot;background-color: white; box-sizing: border-box; color: #3c3d41; font-family: Montserrat, sans-serif; font-size: 1.125rem; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-weight: 500; line-height: 1.1; margin: 40px 0px 15px;&quot;&gt;
API Changes&lt;/h4&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Finally, the backbone of application integration is the underlying API, which evolves over time. It could definitely affect your integration if the API version is deprecated or even updated with different behavior during the process. Be mindful and stay on top of new API releases.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; box-sizing: border-box; color: #6b6b6b; font-size: 14px; line-height: 22px; margin-bottom: 10px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;If your organization is planning to implement Concur, keep in mind that the integration process is a vital step that must be carefully and mindfully planned. Begin by clarifying your business goals and technical needs, then select the approach that will fit your requirements (and be sure to avoid the “gotchas”). Executing a well-designed integration will help ensure that your organization gets the most benefit out of this powerful platform.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/3167303811234452831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/3167303811234452831' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/3167303811234452831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/3167303811234452831'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2018/05/concur-integration-with-informatica.html' title='CONCUR INTEGRATION WITH INFORMATICA CLOUD: A TECHNICAL REVIEW'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-3787276846896428092</id><published>2017-08-04T13:22:00.000-05:00</published><updated>2017-08-06T10:57:01.908-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Connector"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Informatica"/><category scheme="http://www.blogger.com/atom/ns#" term="Rest"/><title type='text'>A Quick Talk On Generic Cloud App Integration With Informatica Cloud</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The Informatica Cloud Integration platform is the industry&#39;s complete cloud integration platform as a service (iPaaS). Informatica has been continuously playing as the leader role in this space for the 4th consecutive year (&lt;a href=&quot;https://www.informatica.com/ipaas-magic-quadrant.html#fbid=U9wFYVPQv8R&quot; target=&quot;_blank&quot;&gt;Gartner&#39;s margic quadrant for enterprise integration platform&lt;/a&gt;). It&#39;s definitely your top choice for data integration management.&lt;br /&gt;
&lt;br /&gt;
With the emerging SaaS application on the market, it&#39;s essential for integration platform to provide a flexible and efficient connector to integrate various cloud applications in a generic manner. Indeed there are many specific connectors built for individual applications by Informatica (Tier 1 and Tier 2 connectors) or vendors themselves (OEM connectors). But let&#39;s face it: most cloud applications evolves quickly on new features and their APIs get updated quicker than you realize. How quickly the connectors can turn around with the most recent API updates? The answer is definitely the connector update lags behind, as most connectors get updated once a year or longer than that.&lt;br /&gt;
&lt;br /&gt;
For what&#39;s worth, Informatica introduced the Rest V2 connector in fall of 2016. The V2 connector is an successor of its ancestor which is just named as &quot;Rest Connector&quot;. It allows to connect with the latest Rest API of the cloud application directly to read or write data. You can fully leverage it no matter the cloud application is a source, a target or a lookup system. It offers great improvements on flexibility, efficiency, ease of use besides performance. Considering the majority use of Rest API as the industry standard for emerging cloud services, this Rest V2 connector can fill in the role of a generic connector for cloud applications with Rest API. In this article, I will reveal the great features and caveats followed by uncovering some hidden gems of the Rest V2 connector that many may not have realized yet.&lt;br /&gt;
&lt;br /&gt;
One of the great features of the Rest V2 is the introduction of hierarchy data support. As we know, the Rest API deals with either XML or JSON data which are hierarchy data structure. Before the appearance of Rest V2, transformation of hierarchy and relational data is cumbersome and even requiring writing your own script to transform the data as part of the integration process. At the Informatica fall release of 2016, the same time Rest V2 is introduced, the Hierarchy Builder/Parser is brought to life to fill the gap. Hierarchy builder is to build hierarchy data from relational data and hierarchy parse does the opposite way. Let&#39;s take a look at how hierarchy builder/parser works.&lt;br /&gt;
&lt;br /&gt;
First, a hierarchy schema needs to be created. It is used by hierarchy builder/parser to present the data structure. To create a hierarchy schema, one will need to have a XML schema file (.xsd) or a JSON sample file (.json). Note the XML schema file is not necessarily provided by the vendor and one has to create it based on the XML payload.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1yg6vZBjpUobmDGA8SXsiBQlg5OwIpPgVgCE12HTZq0e__MEjdxu-HAmeiYhJTd8ZVeI1nCpp73k-6g3xUfghVgehJc2iaRx_AVlibLpzFGhD7nJTrySkuEnvdqlXG3j3SVph27_bpvrn/s1600/1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;472&quot; data-original-width=&quot;841&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1yg6vZBjpUobmDGA8SXsiBQlg5OwIpPgVgCE12HTZq0e__MEjdxu-HAmeiYhJTd8ZVeI1nCpp73k-6g3xUfghVgehJc2iaRx_AVlibLpzFGhD7nJTrySkuEnvdqlXG3j3SVph27_bpvrn/s320/1.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
After the creation of hierarchy schema, a hierarchy builder/parser can be used in a data mapping to map hierarchy data to relational data or vice versa.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCLz41BlRstJFA82G0g6j1vYJhnxF0_B-ThpjULbYpnVL-JFWiCveGsXVygCFO2A3o07l1JWiTeJpSP1ltJECHUMqWCmMms7CeWI-MUGWySL4T-Y8C-vtM2mBue0bj0SNaCdQ_lyzqRqDw/s1600/2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;665&quot; data-original-width=&quot;1600&quot; height=&quot;132&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCLz41BlRstJFA82G0g6j1vYJhnxF0_B-ThpjULbYpnVL-JFWiCveGsXVygCFO2A3o07l1JWiTeJpSP1ltJECHUMqWCmMms7CeWI-MUGWySL4T-Y8C-vtM2mBue0bj0SNaCdQ_lyzqRqDw/s320/2.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
That seems quite easy, compared to writing your own script to transform. But let&#39;s look at the Rest V2 connector as it&#39;s even better.&lt;br /&gt;
&lt;br /&gt;
The core of Rest V2 connector configuration is the Swagger support. I have to thumb up on Informatica on the betting of Swagger because of its popularity and great potential as industry standard for API framework. Not all vendor provides swagger definition for their API. But no worry, Informatica provides this tool to you right inside your Informatica cloud web console. It&#39;s under Configure -&amp;gt; Swagger files. If you don&#39;t see this option, please contact with your Informatica support to enable it. You will need to have Rest V2 connector license to use it.&lt;br /&gt;
&lt;br /&gt;
While creating the Swagger file, you basically defines the API details - URL, verb (POST/GET etc), authentication (username/password, token, etc), Headers, Query parameters, Body and sample response file. A couple of caveats in this process are:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;The JSON response file is required even you are dealing with XML response. In this case, you will need to convert the XML response in JSON format. There are many online tools to do that.&lt;/li&gt;
&lt;li&gt;If your raw body is XML format and you have issues creating the Swagger, after making sure nothing is wrong on your end, you may want to contact Informatica support requesting them to create the Swagger for you. Informatica support does have their own internal tool to create swagger file. Informatica will improve the Swagger tool based on my conversation with them and most likely it&#39;s no longer an issue soon.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhleF-sBFFSJ93oFPey2Aew5-D-ti1x4RnX6191jY_YuxFcIcKA20E1p-tOqD_CDbd220ivyrqCFzzhVOR4zU5PKgTlpnkHTtuvAh0mcyb-xYF6fdYMGdT3bCsVtbtkpkHObZKDEVRqQ1Z9/s1600/3.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;592&quot; data-original-width=&quot;734&quot; height=&quot;258&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhleF-sBFFSJ93oFPey2Aew5-D-ti1x4RnX6191jY_YuxFcIcKA20E1p-tOqD_CDbd220ivyrqCFzzhVOR4zU5PKgTlpnkHTtuvAh0mcyb-xYF6fdYMGdT3bCsVtbtkpkHObZKDEVRqQ1Z9/s320/3.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
After the Swagger file, create the Rest V2 connection which is quite easy as majority of the info needed for the API is filled in the Swagger file.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkIy3pTnkTrqo_DQX29Xmf_2TzuM-dOW-MCOcZWtMSBD1p_sYuv3pG45OB8GKilKO4C5OWuiw-x4qHIDCak89vxrwOPIMdyHttlDvy-kK6YIpHLCtG_eMZiANZM5ox4OIvY2ODNeYO2uOl/s1600/4.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;503&quot; data-original-width=&quot;562&quot; height=&quot;286&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkIy3pTnkTrqo_DQX29Xmf_2TzuM-dOW-MCOcZWtMSBD1p_sYuv3pG45OB8GKilKO4C5OWuiw-x4qHIDCak89vxrwOPIMdyHttlDvy-kK6YIpHLCtG_eMZiANZM5ox4OIvY2ODNeYO2uOl/s320/4.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Now the Rest V2 Connector is ready to use in the data mapping. The Rest V2 can be used a source to read data or the target to write data in this case. Of course the API you put in the initial Swagger file has to comply with read or write operation. The hierarchy data mapping can be achieved in the Rest V2 Connector as a source/target itself. No need to use hierarchy builder or parser.&lt;br /&gt;
&lt;br /&gt;
To save the best to the last, the great power of using Rest V2 connector is to use it as a midstream. Let&#39;s work on a use case: say I need to pull data from A system and push to B system via Rest API. If I were using Rest V2 as the target for B system. At the end of the flow, how do I know the data is successfully taken in B? I will need to start another pipeline or another data mapping task to examine the log file and take action from here. When using it as a midstream, the response of the Rest call can be transmitted to the next step for follow up action in the same streamline flow. This is a differentiator and made me believe all Rest V2 connector should not serve as target but midstream instead.&lt;br /&gt;
&lt;br /&gt;
Another hidden gem on the Rest V2 connector as a midstream, is the capability of processing multiple Rest calls. This is definitely a great sweet feature. For any Rest call, one payload corresponds to one request and generates one response. If you have multiple payloads to be processed in one integration, essentially you need a loop function to loop through individual records and make the Rest call for each record. Without Rest V2 connector, this is impossible as there is no such loop function in Informatica data integration. The alternative would be to use Informatica Cloud Real Time (ICRT) which provides a workflow type of designer that a task can be jumped from one step to another based on certain condition - basically to achieve loop function. With Rest V2 connector, there is no additional configurations needed and it can process multiple records in one step - taking multiple records as inputs, make Rest calls for each record, and generate all response as outputs. While using it as a midstream, we can easily follow up on actions with the Rest call outputs in the same streamline flow.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/3787276846896428092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/3787276846896428092' title='31 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/3787276846896428092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/3787276846896428092'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2017/08/a-quick-talk-on-rest-v2-connector-from.html' title='A Quick Talk On Generic Cloud App Integration With Informatica Cloud'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1yg6vZBjpUobmDGA8SXsiBQlg5OwIpPgVgCE12HTZq0e__MEjdxu-HAmeiYhJTd8ZVeI1nCpp73k-6g3xUfghVgehJc2iaRx_AVlibLpzFGhD7nJTrySkuEnvdqlXG3j3SVph27_bpvrn/s72-c/1.PNG" height="72" width="72"/><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-8671518993185906326</id><published>2016-08-24T14:47:00.001-05:00</published><updated>2016-08-24T14:50:11.762-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Jdeveloper"/><category scheme="http://www.blogger.com/atom/ns#" term="version"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>WebCenter Portal and Jdeveloper Version Contrast</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
For easy reference, here is a list of version contrast between patchset, WebCenter Portal, Jdeveloper with corresponding WebCenter extensions.&lt;br /&gt;
&lt;br /&gt;
(the info is extracted from &lt;span style=&quot;font-family: inherit;&quot;&gt;Oracle doc&amp;nbsp;&lt;span style=&quot;background-color: white; text-align: right;&quot;&gt;1627574.1)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot; style=&quot;color: black; width: 635px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th class=&quot;km&quot; style=&quot;background-color: #dee6ef; border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Patchset + Bundle Patch&lt;/span&gt;&lt;/th&gt;&lt;th class=&quot;km&quot; style=&quot;background-color: #dee6ef; border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;WebCenter Portal&lt;/span&gt;&lt;/th&gt;&lt;th class=&quot;km&quot; style=&quot;background-color: #dee6ef; border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;JDeveloper&lt;/span&gt;&lt;/th&gt;&lt;th class=&quot;km&quot; style=&quot;background-color: #dee6ef; border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;WebCenter Extension&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;12c&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;12.2.1.0.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;12.2.1.0.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Framework: 12.2.1.0.0.151013.2001&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Core: 12.2.1.0.0.151005.0601&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot9 + BP3&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.160119&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.0.160107.0701&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot9 + BP2&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.8&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.0.151005.2311&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot9 + BP1&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.2&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.0.150701.0100&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot9&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.0*&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.9.0.150521.2301*&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot8 + BP8&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.8&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0.150618.0701&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot8 + BP7&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.7&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0.150331.0703&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot8&amp;nbsp;+ BP6&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.6&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0.141219.1406&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot8&amp;nbsp;+ BP5&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.5&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0.141001.1208&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot8&amp;nbsp;+ BP4&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.4&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0.140627.1403&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot8&amp;nbsp;+ BP3&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.3&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0.140404.0207&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot8&amp;nbsp;+ BP2&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.2&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0.131217.0204&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot8&amp;nbsp;+ BP1&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.1&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0.130926.1405&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;dot8&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.8.0.130707.1955&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS6 + BP1&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.1&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0.130702.0214&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS6&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.7.0.130301.0422&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS5 + BP6&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.6&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0.130326.0044&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS5 + BP5&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.5&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0.121221.0259&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS5 + BP4&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.4&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0.120928.1201&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS5 + BP3&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.3&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0.120626.1201&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS5&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.6.0.111214.0952&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS4 + BP4&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.5.4&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.5.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.4.0.120306.2202&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS4&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.5.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.5.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.4.0.110415.0606&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS3&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.4.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.4.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.4.0.101223.1848&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS2 + BP3&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.3.3&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.3.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.3.0.101208.0400&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS2&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.3.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.3.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.3.0.100707.1000&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS1 + BP4&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.2.4&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.2.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.2.0.100510.1800&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;PS1&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 148px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.2.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.2.0&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;km&quot; style=&quot;border-bottom-color: rgb(196, 209, 230); border-bottom-style: solid; border-bottom-width: 1px; border-right-color: rgb(196, 209, 230); border-right-style: solid; border-right-width: 1px; padding: 4px; vertical-align: top; width: 147px;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;11.1.1.2.0.100311.1200&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;* Guide to Developing Portals with Oracle WebCenter Portal and Oracle JDeveloper refers to the vesion of WebCenter Portal extensions as 11.1.1.8.0 (Chapter 2, 2.2.2 Installing the WebCenter Portal Extension for JDeveloper). These extensions were renamed to be in sync with the version of JDeveloper used for Development.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/8671518993185906326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/8671518993185906326' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/8671518993185906326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/8671518993185906326'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2016/08/webcenter-portal-and-jdeveloper-version.html' title='WebCenter Portal and Jdeveloper Version Contrast'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-3308722609749403663</id><published>2016-04-20T10:20:00.000-05:00</published><updated>2016-04-20T10:20:06.477-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Folder"/><category scheme="http://www.blogger.com/atom/ns#" term="Profile"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Content"/><title type='text'>Overview of &quot;Profile&quot; and &quot;Folder&quot; in WebCenter Content</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;WordSection1&quot;&gt;

&lt;div class=&quot;MsoNormal&quot;&gt;
In this post, I will go over the basics of two features in WebCenter Content (WCC) - Profile and Folder - and then talk about their own design considerations and usages, and finally discuss their differences.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
In WCC, the &lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Profile&lt;/b&gt; (a.k.a metadata profile or content profile, to
differentiate from user profile) is an approach of metadata modeling. The
profile is a powerful tool that can be used to manage the metadata fields to
achieve efficient processing of content items, such as check-in, update,
search, etc. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Essentially, content profiles consist of set of rules that
manage the display of the metadata fields of content items. Through content
profiles, you can control what metadata fields should be displayed/hidden,
required or not, read-only/editable, initialized with default value or not, and
grouped based on the action to the content – whether you are viewing the
content information, checking in, updating or searching. Profile provides the
capability to customize the user interface of the metadata presented to the
users. This is important as the profile can not only improve the user
experience but also improve the data quality and accuracy. If a user is
presented with too many irrelevant fields when dealing with a content item, the
experience could be daunting and very likely the user would not provide quality
data input. It doesn&#39;t need to take long before your content system filled with
more and more irrelevant data and is abused in a sense. Bad profiling could
definitely hurt searching experience as well. Consider a profile is defined in
a way that captures irrelevant and inaccurate data, the overall search output
would be misleading. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
One of the frustrations I heard from customers was
users wanted multiple profiles on a content item. In WCC, only one profile can
be associated with a content item. You may find it a drawback from your unique
business use cases or the way you handle the content processing. However, it’s
designed in this way for a purpose. You can consider the profile is to define
the type of a content item. Any content item belongs to a certain type but not
more than one types. The capability of aggregating multiple profiles into one
content item could very much likely lead to data abuse and subsequently many
other undesired outcomes. Another frustration was “specific resources are
required to build or update the profiles”. From what we have
discussed, a new profile should be created only if there is a new type of content
item required in the system. A profile should stay as static as possible and be
updated only if the type of the content item changes with your business
context. If the business context doesn’t require any new types of content or
any existing types to be retired, the profile should not be built or updated
frequently. You may need to look into the initial design and definition of the
profiles to match the business needs. Since profile is the approach of metadata modeling, the proper metadata design is essential for daily content
management. Metadata in WCC should match your enterprise taxonomy to achieve
best outcome on content organization.&lt;/div&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG/&gt;
  &lt;o:PixelsPerInch&gt;96&lt;/o:PixelsPerInch&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val=&quot;Cambria Math&quot;/&gt;
   &lt;m:brkBin m:val=&quot;before&quot;/&gt;
   &lt;m:brkBinSub m:val=&quot;&amp;#45;-&quot;/&gt;
   &lt;m:smallFrac m:val=&quot;off&quot;/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val=&quot;0&quot;/&gt;
   &lt;m:rMargin m:val=&quot;0&quot;/&gt;
   &lt;m:defJc m:val=&quot;centerGroup&quot;/&gt;
   &lt;m:wrapIndent m:val=&quot;1440&quot;/&gt;
   &lt;m:intLim m:val=&quot;subSup&quot;/&gt;
   &lt;m:naryLim m:val=&quot;undOvr&quot;/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState=&quot;false&quot; DefUnhideWhenUsed=&quot;false&quot;
  DefSemiHidden=&quot;false&quot; DefQFormat=&quot;false&quot; DefPriority=&quot;99&quot;
  LatentStyleCount=&quot;380&quot;&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;0&quot; QFormat=&quot;true&quot; Name=&quot;Normal&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; QFormat=&quot;true&quot; Name=&quot;heading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;heading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;heading 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;heading 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;heading 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;heading 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;heading 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;heading 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;9&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;heading 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;toc 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;toc 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;toc 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;toc 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;toc 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;toc 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;toc 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;toc 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;toc 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Normal Indent&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;footnote text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;annotation text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;header&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;footer&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;index heading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;35&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;caption&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;table of figures&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;envelope address&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;envelope return&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;footnote reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;annotation reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;line number&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;page number&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;endnote reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;endnote text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;table of authorities&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;macro&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;toa heading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Bullet&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Number&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Bullet 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Bullet 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Bullet 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Bullet 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Number 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Number 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Number 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Number 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;10&quot; QFormat=&quot;true&quot; Name=&quot;Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Closing&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Signature&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;Default Paragraph Font&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Body Text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Body Text Indent&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Continue&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Continue 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Continue 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Continue 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;List Continue 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Message Header&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;11&quot; QFormat=&quot;true&quot; Name=&quot;Subtitle&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Salutation&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Date&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Body Text First Indent&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Body Text First Indent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Heading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Body Text 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Body Text 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Body Text Indent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Body Text Indent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Block Text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Hyperlink&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;FollowedHyperlink&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;22&quot; QFormat=&quot;true&quot; Name=&quot;Strong&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;20&quot; QFormat=&quot;true&quot; Name=&quot;Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Document Map&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Plain Text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;E-mail Signature&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Top of Form&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Bottom of Form&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Normal (Web)&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Acronym&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Address&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Cite&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Code&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Definition&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Keyboard&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Preformatted&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Sample&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Typewriter&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;HTML Variable&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Normal Table&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;annotation subject&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;No List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Outline List 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Outline List 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Outline List 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Simple 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Simple 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Simple 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Classic 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Classic 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Classic 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Classic 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Colorful 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Colorful 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Colorful 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Columns 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Columns 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Columns 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Columns 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Columns 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Grid 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Grid 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Grid 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Grid 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Grid 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Grid 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Grid 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Grid 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table List 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table List 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table List 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table List 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table List 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table List 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table List 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table List 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table 3D effects 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table 3D effects 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table 3D effects 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Contemporary&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Elegant&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Professional&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Subtle 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Subtle 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Web 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Web 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Web 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Balloon Text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; Name=&quot;Table Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Table Theme&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Level 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Level 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Level 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Level 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Level 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Level 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Level 7&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Level 8&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; UnhideWhenUsed=&quot;true&quot;
   Name=&quot;Note Level 9&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; Name=&quot;Placeholder Text&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;1&quot; QFormat=&quot;true&quot; Name=&quot;No Spacing&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; Name=&quot;Light Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; Name=&quot;Light List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; Name=&quot;Light Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; Name=&quot;Medium Shading 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; Name=&quot;Medium Shading 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; Name=&quot;Medium List 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; Name=&quot;Medium List 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; Name=&quot;Medium Grid 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; Name=&quot;Medium Grid 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; Name=&quot;Medium Grid 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; Name=&quot;Dark List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; Name=&quot;Colorful Shading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; Name=&quot;Colorful List&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; Name=&quot;Colorful Grid&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; Name=&quot;Light Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; Name=&quot;Light List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; Name=&quot;Light Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; Name=&quot;Medium Shading 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; Name=&quot;Medium Shading 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; Name=&quot;Medium List 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; SemiHidden=&quot;true&quot; Name=&quot;Revision&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;34&quot; QFormat=&quot;true&quot;
   Name=&quot;List Paragraph&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;29&quot; QFormat=&quot;true&quot; Name=&quot;Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;30&quot; QFormat=&quot;true&quot;
   Name=&quot;Intense Quote&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; Name=&quot;Medium List 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; Name=&quot;Medium Grid 1 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; Name=&quot;Medium Grid 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; Name=&quot;Medium Grid 3 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; Name=&quot;Dark List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; Name=&quot;Colorful Shading Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; Name=&quot;Colorful List Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; Name=&quot;Colorful Grid Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; Name=&quot;Light Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; Name=&quot;Light List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; Name=&quot;Light Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; Name=&quot;Medium Shading 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; Name=&quot;Medium Shading 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; Name=&quot;Medium List 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; Name=&quot;Medium List 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; Name=&quot;Medium Grid 1 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; Name=&quot;Medium Grid 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; Name=&quot;Medium Grid 3 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; Name=&quot;Dark List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; Name=&quot;Colorful Shading Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; Name=&quot;Colorful List Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; Name=&quot;Colorful Grid Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; Name=&quot;Light Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; Name=&quot;Light List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; Name=&quot;Light Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; Name=&quot;Medium Shading 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; Name=&quot;Medium Shading 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; Name=&quot;Medium List 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; Name=&quot;Medium List 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; Name=&quot;Medium Grid 1 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; Name=&quot;Medium Grid 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; Name=&quot;Medium Grid 3 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; Name=&quot;Dark List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; Name=&quot;Colorful Shading Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; Name=&quot;Colorful List Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; Name=&quot;Colorful Grid Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; Name=&quot;Light Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; Name=&quot;Light List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; Name=&quot;Light Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; Name=&quot;Medium Shading 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; Name=&quot;Medium Shading 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; Name=&quot;Medium List 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; Name=&quot;Medium List 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; Name=&quot;Medium Grid 1 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; Name=&quot;Medium Grid 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; Name=&quot;Medium Grid 3 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; Name=&quot;Dark List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; Name=&quot;Colorful Shading Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; Name=&quot;Colorful List Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; Name=&quot;Colorful Grid Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; Name=&quot;Light Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; Name=&quot;Light List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; Name=&quot;Light Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; Name=&quot;Medium Shading 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; Name=&quot;Medium Shading 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; Name=&quot;Medium List 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; Name=&quot;Medium List 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; Name=&quot;Medium Grid 1 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; Name=&quot;Medium Grid 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; Name=&quot;Medium Grid 3 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; Name=&quot;Dark List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; Name=&quot;Colorful Shading Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; Name=&quot;Colorful List Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; Name=&quot;Colorful Grid Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;60&quot; Name=&quot;Light Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;61&quot; Name=&quot;Light List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;62&quot; Name=&quot;Light Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;63&quot; Name=&quot;Medium Shading 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;64&quot; Name=&quot;Medium Shading 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;65&quot; Name=&quot;Medium List 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;66&quot; Name=&quot;Medium List 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;67&quot; Name=&quot;Medium Grid 1 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;68&quot; Name=&quot;Medium Grid 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;69&quot; Name=&quot;Medium Grid 3 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;70&quot; Name=&quot;Dark List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;71&quot; Name=&quot;Colorful Shading Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;72&quot; Name=&quot;Colorful List Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;73&quot; Name=&quot;Colorful Grid Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;19&quot; QFormat=&quot;true&quot;
   Name=&quot;Subtle Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;21&quot; QFormat=&quot;true&quot;
   Name=&quot;Intense Emphasis&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;31&quot; QFormat=&quot;true&quot;
   Name=&quot;Subtle Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;32&quot; QFormat=&quot;true&quot;
   Name=&quot;Intense Reference&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;33&quot; QFormat=&quot;true&quot; Name=&quot;Book Title&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;37&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; Name=&quot;Bibliography&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;39&quot; SemiHidden=&quot;true&quot;
   UnhideWhenUsed=&quot;true&quot; QFormat=&quot;true&quot; Name=&quot;TOC Heading&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;41&quot; Name=&quot;Plain Table 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;42&quot; Name=&quot;Plain Table 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;43&quot; Name=&quot;Plain Table 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;44&quot; Name=&quot;Plain Table 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;45&quot; Name=&quot;Plain Table 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;40&quot; Name=&quot;Grid Table Light&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot; Name=&quot;Grid Table 1 Light&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;Grid Table 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;Grid Table 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;Grid Table 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;Grid Table 5 Dark&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot; Name=&quot;Grid Table 6 Colorful&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot; Name=&quot;Grid Table 7 Colorful&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;Grid Table 1 Light Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;Grid Table 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;Grid Table 3 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;Grid Table 4 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;Grid Table 5 Dark Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;Grid Table 6 Colorful Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;Grid Table 7 Colorful Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;Grid Table 1 Light Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;Grid Table 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;Grid Table 3 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;Grid Table 4 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;Grid Table 5 Dark Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;Grid Table 6 Colorful Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;Grid Table 7 Colorful Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;Grid Table 1 Light Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;Grid Table 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;Grid Table 3 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;Grid Table 4 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;Grid Table 5 Dark Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;Grid Table 6 Colorful Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;Grid Table 7 Colorful Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;Grid Table 1 Light Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;Grid Table 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;Grid Table 3 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;Grid Table 4 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;Grid Table 5 Dark Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;Grid Table 6 Colorful Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;Grid Table 7 Colorful Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;Grid Table 1 Light Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;Grid Table 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;Grid Table 3 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;Grid Table 4 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;Grid Table 5 Dark Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;Grid Table 6 Colorful Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;Grid Table 7 Colorful Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;Grid Table 1 Light Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;Grid Table 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;Grid Table 3 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;Grid Table 4 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;Grid Table 5 Dark Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;Grid Table 6 Colorful Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;Grid Table 7 Colorful Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot; Name=&quot;List Table 1 Light&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;List Table 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;List Table 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;List Table 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;List Table 5 Dark&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot; Name=&quot;List Table 6 Colorful&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot; Name=&quot;List Table 7 Colorful&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;List Table 1 Light Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;List Table 2 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;List Table 3 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;List Table 4 Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;List Table 5 Dark Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;List Table 6 Colorful Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;List Table 7 Colorful Accent 1&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;List Table 1 Light Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;List Table 2 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;List Table 3 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;List Table 4 Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;List Table 5 Dark Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;List Table 6 Colorful Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;List Table 7 Colorful Accent 2&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;List Table 1 Light Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;List Table 2 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;List Table 3 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;List Table 4 Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;List Table 5 Dark Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;List Table 6 Colorful Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;List Table 7 Colorful Accent 3&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;List Table 1 Light Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;List Table 2 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;List Table 3 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;List Table 4 Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;List Table 5 Dark Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;List Table 6 Colorful Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;List Table 7 Colorful Accent 4&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;List Table 1 Light Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;List Table 2 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;List Table 3 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;List Table 4 Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;List Table 5 Dark Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;List Table 6 Colorful Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;List Table 7 Colorful Accent 5&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;46&quot;
   Name=&quot;List Table 1 Light Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;47&quot; Name=&quot;List Table 2 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;48&quot; Name=&quot;List Table 3 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;49&quot; Name=&quot;List Table 4 Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;50&quot; Name=&quot;List Table 5 Dark Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;51&quot;
   Name=&quot;List Table 6 Colorful Accent 6&quot;/&gt;
  &lt;w:LsdException Locked=&quot;false&quot; Priority=&quot;52&quot;
   Name=&quot;List Table 7 Colorful Accent 6&quot;/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
table.MsoNormalTable
 {mso-style-name:&quot;Table Normal&quot;;
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:&quot;&quot;;
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin:0in;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:12.0pt;
 font-family:Calibri;
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;



&lt;!--StartFragment--&gt;

&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;!--EndFragment--&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Speaking of the number of the profiles, there is no good or bad number. It just needs to fit your business needs. The
50-100 range is the average number of profiles for all US WCC implementations
(the statistics is not published anywhere but from a technical summit with
Oracle WCC team). The extreme case I have seen with a client is over thousands
of profiles in the WCC system and it works just fine. There is a performance caveat with very high number of the profiles in the WCC system. I encountered such performance issue in one of my WCC implementations and the issue has been addressed by Oracle team. For details, please check &lt;a href=&quot;http://jjzheng.blogspot.com/2013/09/super-slowness-on-content-presenting.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Folder&lt;/b&gt;, in WCC,
is a way to structure and organize content items. It’s worthy to note that in
WCC the folders are standalone “virtual” structures. Content items are not
physically stored in any folder. Every content item in a folder has a metadata
field (xCollectionId) to store a numeric folder ID that links the content item
to a folder. It behaves like a symbolic link in WCC system.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Content folders offer a conventional hierarchy structure
that provides easy access to a content item in WCC. They are just like the
directories on your local laptop that point to virtual locations of the content
system. With folders in WCC, you can just perform actions like you do in the
conventional file system. Quoted in Oracle documentation, “The familiar folder
and file model provides a framework for organizing and accessing content stored
in the repository. Functionally, folders and files are very similar to those in
a conventional file system. You can copy, move, rename, and delete folders and
files. You can also create shortcuts to folders or files so you can access a
content item from multiple locations in the hierarchy. You can think of the
files in the Folders interface as symbolic links or pointers to content items
in the repository. The operations you perform in the Folders interface, such as
searching or propagating metadata, effectively operate on the associated
content items.”&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoFooter&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoFooter&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
The hierarchical folder interface is achieved by a component installed in WCC. This component is called FrameworkFolders. It is a scalable
enterprise solution and is intended to replace the earlier Contribution Folder
interface (called Folders_g component). For a comparison of FrameworkFolders
and Folders_g, you can visit this &lt;a href=&quot;http://jjzheng.blogspot.com/2014/05/frameworkfolders-support-has-come-to.html&quot;&gt;link&lt;/a&gt;
for more details.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;There are different types of folders can be used to organize
content to fit your different needs.&amp;nbsp;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;Traditional Folders: it’s the general folder we
have discussed that you use to organize your content just like the one you use
in your computer.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;Query Folders: it’s a folder you can create
based on a search/query result. It contains collections of document based on
the search criteria you defined. You can save the query folder just like you
create a regular folder.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;Retention Folder: it’s
a type of query folder with retention rules.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;b&gt;Comparison&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Conceptually, the Folder and Profile are distinct on their
functionality and their design purpose. Profile can be considered as a way to define a content “type”.
Folder, like the conventional folder in your laptop, is a way to aggregate and
organize content. You can store content items with the same profile in the same
folder or different folders. You can have a folder containing content items
with the same profile or different profiles. I will use an example to better
illustrate the usage of the profile and folder.&amp;nbsp;
Say in your company you have the following types of content items: legal
document, sales document, and reports. You also have the following departments:
HR, IT and Sales. All departments may have their own legal documents and
reports. Sales document would almost fall into the sales department not the
other two. In this case, you may want to take the content types as the profiles
and aggregate the content into folders as per the departments. You don’t want
to create profile based on departments because the department can have all
kinds of content items and it’s not just one static type. If somehow you define
the profile as per department, you will find yourself in a way that has to
create/update profiles all the time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Folder and Profile do reveal some similarities in ways that
how content is managed. You can manage content items based on a folder or a
profile.&amp;nbsp; For example, you can search
content items either by a folder or a profile; you can batch process content
items in a folder or a profile, such as manage workflow, govern security,
update content information, etc. On the other hand, folder and profile do have
many differences from the way they are designed.&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;Folder, just like a file, can have its own
metadata. You can also propagate metadata from a folder to the subfolder and
the content items within it. But for profile, it is a way to manage metadata and
you cannot apply metadata on top of a profile.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;Folder has its own security. Each folder has an
owner who can modify its metadata and delete it if needed. But the folder owner
doesn’t have any additional privileges over the content items inside the
folder. Profile has little to do with security directly. But since Profile is
to manage the metadata, it could manage profile indirectly. The “Security
Group” and “Account” metadata can be used to manage security of a content item.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;With folder, you can perform basic content
retention scheduling by creating a retention query folder, assigning retention
attributes to the folder, and then configuring the retention schedule. There is
also a specific folder type – retention folder in WCC – which is based on query
folder with rules for content retention. Since Profile is to manage the
metadata, it has little to do with retention directly.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;In workflow, actions can be applied on top of
content items either within a folder or associated with a profile. In this
perspective, folder and profile have similar effects.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;WCC doesn’t have standalone tagging service. But
you can create custom metadata for this purpose. Folder has its own metadata,
so you can apply the custom tag on top of a folder. Profile, again, as a way to
model metadata, can be used to manage any metadata field, including the
tagging.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;In a quick summary,&amp;nbsp;Profile and Folder are two different concepts in WCC. Although they may reveal some level of&amp;nbsp;similarities in how content can be managed, their design basis are quite distinct. Profile can be considered as a way to define the &quot;type&quot; of a content item&amp;nbsp;and provide a customizable user interface for users to manage their content. Folder provides a virtual&amp;nbsp;&lt;/span&gt;hierarchical&lt;span style=&quot;text-indent: -0.25in;&quot;&gt;&amp;nbsp;structure just like the conventional file system in your computer to help to organize and manage content. They should be used and&amp;nbsp;designed&amp;nbsp;as per the essentials of their function, to avoid inefficient content management.&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;mso-list: l0 level1 lfo1; text-indent: -.25in;&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/3308722609749403663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/3308722609749403663' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/3308722609749403663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/3308722609749403663'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2016/04/overview-of-profile-and-folder-in.html' title='Overview of &quot;Profile&quot; and &quot;Folder&quot; in WebCenter Content'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-6442960072670429015</id><published>2016-04-11T16:20:00.003-05:00</published><updated>2016-05-06T14:25:18.596-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADF"/><category scheme="http://www.blogger.com/atom/ns#" term="Concurrency"/><category scheme="http://www.blogger.com/atom/ns#" term="Parallel"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>Build A Concurrent Web Page With A Simple Example</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Today, by using a simple example, I am going to demonstrate on how to build a concurrent web page in ADF using Jdeveloper.&lt;br /&gt;
&lt;br /&gt;
From time to time, I see requirements from various contexts with such needs to build concurrencies on web pages. The performance can be greatly benefited since multiple processes are executed at the same time so that the response time is greatly improved. It&#39;s also very suitable for the use cases that the processes are not associated with any user interface interactions, such as sending an email to user after performing some action but the web page does not need to know if/when the email is sent. Such processes can be executed in a separate thread from the main thread dealing with the web page rendering and other user interactions. Even if you don&#39;t have hard requirement on such concurrency needs, why waste it? Nowadays, all servers are built with multi-core computation capabilities and designed for parallel processing. In years the speed of the CPU is not getting much faster but the number of the processing cores are getting more. If you are not taking advantage of it, it would be your waste.&lt;br /&gt;
&lt;br /&gt;
Implementing such concurrency in Java EE application does not seem to be complicated, especially considering the fact that Java concurrency has been introduced since Java 1.5. But, such implementation seems to be somewhat formidable to the development team from my experience. The reason could be without careful handing and design of the Java concurrency, your expected performance gain could lead to an (much worse) opposite degradation. It could also be because there is a lack of examples to demonstrate such use case and that&#39;s definitely the purpose of this post to compensate it.&lt;br /&gt;
&lt;br /&gt;
In this example, I have a page built in ADF with 3 sections - left, central and right section. Each section has their independent content and requires different period of time to process. Let&#39;s say the left will take 2 seconds, central will take 3 seconds and right will take 5 seconds to return the data.&lt;br /&gt;
&lt;br /&gt;
I will start with the default approach (no concurrency) followed by two others on how to improve our web page response time.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The default&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
There is no concurrency here. Everything runs sequentially. My page looks like this:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh12oJ6aZ2WTkQSd-oqa07Ci8ejYwnBTMjuzfWAKB_C3OS2GTTTaFySPKnFquF41XzT7PFzmgGOTxB-WILjFpQwYqwEUGR1_TK_BlKJdoWQgaPoSgbyi4C8mwg5IH3u_JXGfWrr9HnK8JlP/s1600/Screen+Shot+2016-04-11+at+2.22.04+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;227&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh12oJ6aZ2WTkQSd-oqa07Ci8ejYwnBTMjuzfWAKB_C3OS2GTTTaFySPKnFquF41XzT7PFzmgGOTxB-WILjFpQwYqwEUGR1_TK_BlKJdoWQgaPoSgbyi4C8mwg5IH3u_JXGfWrr9HnK8JlP/s400/Screen+Shot+2016-04-11+at+2.22.04+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Since everything runs in sequence, so the response time takes 2 (left) + 3 (central) + 5 (right) = 10 seconds minimal. It actually take 10.59 seconds - not a surprise.&lt;br /&gt;
&lt;br /&gt;
If you are wondering what&#39;s the code behind the scene on the content rendering, here it is:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVdHtBKm_6jCwq9j6ckV42INVernFgcdavwczL-gFQCzU4AqwhFbQdjiR9JRkg0iDrDZvFmjXrYXD11BbSmkWhhQ-zwbIxWiHL6MgaoeGw_SSkM-pDfvLog0Kg1YJLKF6X2VS4hZE2SiM7/s1600/Screen+Shot+2016-04-11+at+2.25.09+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVdHtBKm_6jCwq9j6ckV42INVernFgcdavwczL-gFQCzU4AqwhFbQdjiR9JRkg0iDrDZvFmjXrYXD11BbSmkWhhQ-zwbIxWiHL6MgaoeGw_SSkM-pDfvLog0Kg1YJLKF6X2VS4hZE2SiM7/s400/Screen+Shot+2016-04-11+at+2.25.09+PM.png&quot; width=&quot;393&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Now it&#39;s time to explore the better solution.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Better&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In this approach, I would use &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html&quot; target=&quot;_blank&quot;&gt;ExecutorService&lt;/a&gt;&amp;nbsp;to mange the creation and termination of the Java threads to perform the parallel processing. Since there is 3 sections in the page that I need to run in parallel, I will create the thread pool with 3 threads. Then I would need to submit individual tasks to the executor service to perform. The task is basically the work unit that needs to be done for each section. Since our task needs return values, I am going to use &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html&quot; target=&quot;_blank&quot;&gt;Callable&lt;/a&gt; interface to implement the task. We can get a reference of the task submission which is the &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html&quot; target=&quot;_blank&quot;&gt;Future&lt;/a&gt; object. With the Future object, we can get the output of the task when it completes.&lt;br /&gt;
&lt;br /&gt;
CentralContentTask codes -&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhBqQsXBG9Z8g8zHvlVrseVhnUgrS5AjqVpX1kfoUEa4L0YubFWgMcX2Rp7NYDOG-6us3aFT_kSZ1ojZ7sScudtwr00e35CkX3voGMAIrTyRCe2mPtLZGI2UlkxQWa__Izf0m3QDWn2X93/s1600/Screen+Shot+2016-04-11+at+2.56.01+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;171&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhBqQsXBG9Z8g8zHvlVrseVhnUgrS5AjqVpX1kfoUEa4L0YubFWgMcX2Rp7NYDOG-6us3aFT_kSZ1ojZ7sScudtwr00e35CkX3voGMAIrTyRCe2mPtLZGI2UlkxQWa__Izf0m3QDWn2X93/s400/Screen+Shot+2016-04-11+at+2.56.01+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
As you can see, I only need to put the task code into the call() method that I need to implement which is defined by Callable interface.&lt;br /&gt;
&lt;br /&gt;
In the managed bean to render the web page, here is the logic that used to manage threads by ExecutorService - task submission, termination, output retrievemcent, etc.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCdqpzFlaEkT3MQbchmn-Mq_Hahluct052AYZZ9zAOOc4yNxCg8jWizX1dreSP1LptdxFBEQ4dcXg-6R2uDDfuL-6ZbZeE5R0scM8lBYoKeoi8ZBWLC_7hFDEC0WiKsCDawlL18zoexhVf/s1600/Screen+Shot+2016-04-11+at+2.59.10+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;256&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCdqpzFlaEkT3MQbchmn-Mq_Hahluct052AYZZ9zAOOc4yNxCg8jWizX1dreSP1LptdxFBEQ4dcXg-6R2uDDfuL-6ZbZeE5R0scM8lBYoKeoi8ZBWLC_7hFDEC0WiKsCDawlL18zoexhVf/s400/Screen+Shot+2016-04-11+at+2.59.10+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Please note: it is very important to shut down the ExecutorService after task submission. Otherwise the memory leak would happen. There is no need to wait until the task complete to shut down. You can also shut down the executor service immediately regardless of task complete status by using shutDownNow() but that&#39;s not we are going to pursuit.&lt;br /&gt;
&lt;br /&gt;
After, we get the output of the task by get() on the Future object. This method will make the thread to wait until the task complete and return the output.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s run the page and see our response time -&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcb4MF5KodBeaIFSKEwDLfzNYaSkJFW55SaS6PWOsD6OiFoy9MyeeYGqNaePmJFPJDZLRGYmnZnS1W7kxzBj82AG4br43LfFgwLuHNxjiPYEQMYBrr0eOWn3fLNn5zRX3RAgHwNkxSxtbC/s1600/Screen+Shot+2016-04-11+at+2.32.22+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;230&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcb4MF5KodBeaIFSKEwDLfzNYaSkJFW55SaS6PWOsD6OiFoy9MyeeYGqNaePmJFPJDZLRGYmnZnS1W7kxzBj82AG4br43LfFgwLuHNxjiPYEQMYBrr0eOWn3fLNn5zRX3RAgHwNkxSxtbC/s400/Screen+Shot+2016-04-11+at+2.32.22+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
It takes 5.37 seconds to load the page. As we are running 3 processes in parallel, the total time will be the one with the longest processing time, which is 5 seconds.&lt;br /&gt;
&lt;br /&gt;
It&#39;s much better. But not enough? Can we push all 3 processes to the back without interfering the page rendering?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Ultimate&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The idea is to separate the main thread which is rendering the web page from the parallel processing the 3 sections. It&#39;s fairly simple and we actually have already done that in previous code. The only thing blocking the main thread is using the Future.get() to return the output of the task. We will need to avoid that in the main thread. So the question becomes how could we retrieve the output of the task &amp;nbsp;that takes a period of time and push back to the web page we already rendered?&lt;br /&gt;
&lt;br /&gt;
The answer is the &lt;a href=&quot;http://docs.oracle.com/cd/E21764_01/apirefs.1111/e12419/tagdoc/af_poll.html&quot; target=&quot;_blank&quot;&gt;ADF poll&lt;/a&gt; component. ADF poll can be used to various use cases that require pushing data to web pages after rendered. Here is how to leverage it in our use case.&lt;br /&gt;
&lt;br /&gt;
First, we add a &amp;lt;af:poll&amp;gt; on the web page with an interval 1 second and makes all 3 sections listen to this component.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhUDkvQ-PCvxY7ddRGy8UYp1TeLrTP33L9i7e_omPh78XFVL2IQYxjlp2U2O3UJubzxkNJDIgdfpyn0V-nN1W2tTMuCipY-T7RXMsF2lIUBKjdfTf86URg06JrDWM8ywvjJZ2w77ghA_hV/s1600/Screen+Shot+2016-04-11+at+3.42.04+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;17&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhUDkvQ-PCvxY7ddRGy8UYp1TeLrTP33L9i7e_omPh78XFVL2IQYxjlp2U2O3UJubzxkNJDIgdfpyn0V-nN1W2tTMuCipY-T7RXMsF2lIUBKjdfTf86URg06JrDWM8ywvjJZ2w77ghA_hV/s400/Screen+Shot+2016-04-11+at+3.42.04+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Second, we construct the refresh() method defined in the poll component to retrieve the output of the tasks.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEZ-FMtE2ITerroMyQUgyE1Oay867q2vuKCdhko7ddJw7R4_7CSNNN_TdsmCSIOnwm_YrbXodCpN2D3s7Xb2hb6xZlj81QaqpsozWBjaxRmpxzG-iL4wFQIqa22QuhQhQXkdUhyMYXvd2S/s1600/Screen+Shot+2016-04-11+at+3.44.15+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEZ-FMtE2ITerroMyQUgyE1Oay867q2vuKCdhko7ddJw7R4_7CSNNN_TdsmCSIOnwm_YrbXodCpN2D3s7Xb2hb6xZlj81QaqpsozWBjaxRmpxzG-iL4wFQIqa22QuhQhQXkdUhyMYXvd2S/s400/Screen+Shot+2016-04-11+at+3.44.15+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Here we use Future.isDone() to check if the task is complete or not before getting the output, so that the thread is not waiting if the task is not complete yet.&lt;br /&gt;
&lt;br /&gt;
Another note is after all 3 processes complete, we will need to stop the poll event. ADF poll offers a property &quot;timeout&quot; to expire the poll after a period of time. But at this time, this feature doesn&#39;t work well in ADF 11g including 11.1.1.9. This is a bug already filed but very likely it will NOT be fixed in ADF 11g. To disable the poll, we will use a workaround here to reset the poll interval to &quot;-1&quot; (negative) which will automatically disable the poll.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s take a look how long the page takes to render -&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7nhEvo-9oz7Zfu52W8hauvNQP-Zatar7bxZ9mB3_M6Rdlt1I58vjGkWKuIHaRmQt9BblJeHAex2L8YGIfflypQ-z8NP58iDhkIudl2qXo40UUGOj3PfMMJR66mJ5hYzuVNqnub_NtSFYL/s1600/Screen+Shot+2016-04-11+at+3.40.11+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;230&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7nhEvo-9oz7Zfu52W8hauvNQP-Zatar7bxZ9mB3_M6Rdlt1I58vjGkWKuIHaRmQt9BblJeHAex2L8YGIfflypQ-z8NP58iDhkIudl2qXo40UUGOj3PfMMJR66mJ5hYzuVNqnub_NtSFYL/s400/Screen+Shot+2016-04-11+at+3.40.11+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Yes, 407ms!&lt;br /&gt;
&lt;br /&gt;
Now all 3 processes are running behind the page and when they are ready, it&#39;s pushed to the page individually. If you watch the page, you will see the left content comes first, then the central content and finally the right content.&lt;br /&gt;
&lt;br /&gt;
In most time, the user perception is everything. In our last approach, we are able to give the user the page rendering with no time and gradually add the content when they are ready. It is an ultimate scenario. In cases that the user doesn&#39;t want to see the empty content to start with, we can put the process of the desired content back to the main thread with the page rendering, so that the web page always shows the desired content at the user&#39;s first sight. In that case the total response time will be a few hundreds of milliseconds plus whatever the process of the desired content will take.&lt;br /&gt;
&lt;br /&gt;
The sample example demoed in the post can be downloaded &lt;a href=&quot;https://github.com/jayjayzheng/javaconcurrencypage&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. It&#39;s built in Jdeveloper 11.1.1.9.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/6442960072670429015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/6442960072670429015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/6442960072670429015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/6442960072670429015'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2016/04/build-concurrent-web-page-with-simple.html' title='Build A Concurrent Web Page With A Simple Example'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh12oJ6aZ2WTkQSd-oqa07Ci8ejYwnBTMjuzfWAKB_C3OS2GTTTaFySPKnFquF41XzT7PFzmgGOTxB-WILjFpQwYqwEUGR1_TK_BlKJdoWQgaPoSgbyi4C8mwg5IH3u_JXGfWrr9HnK8JlP/s72-c/Screen+Shot+2016-04-11+at+2.22.04+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-5990446218651743153</id><published>2015-12-18T12:51:00.000-06:00</published><updated>2015-12-18T12:51:08.620-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Navigation Model"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>Caveat: URL Parameter in Navigation Model (WebCenter) Cannot Be Null Object</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In WebCenter Portal, you can define the URL parameter name/value pair in the URL parameters section in the Navigation Model. When you do that, the name/value pair will be added to the URL as a query string, such as &quot;?name=value&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh370LkH5o-XRD9lAJ66E-OzeFmI2cspEcSJdoU89opaFXq8y2sKkZtxuWXdeo3ALUCVSD3kUjX7usgF1hvU9nTFLhUhozgCszpvQ3qDQv0hkmp0A84JaR6c4OzrIUzAvGL4OIsEUf-13M3/s1600/Oracle_JDeveloper_11g_Release_1_-_MemoryModeling_jws___Portal_jpr____Users_JayJay_jdeveloper_mywork_MemoryModeling_Portal_public_html_oracle_webcenter_portalapp_navigations_default-navigation-model_xml.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;377&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh370LkH5o-XRD9lAJ66E-OzeFmI2cspEcSJdoU89opaFXq8y2sKkZtxuWXdeo3ALUCVSD3kUjX7usgF1hvU9nTFLhUhozgCszpvQ3qDQv0hkmp0A84JaR6c4OzrIUzAvGL4OIsEUf-13M3/s640/Oracle_JDeveloper_11g_Release_1_-_MemoryModeling_jws___Portal_jpr____Users_JayJay_jdeveloper_mywork_MemoryModeling_Portal_public_html_oracle_webcenter_portalapp_navigations_default-navigation-model_xml.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
As the header suggests, the URL parameter in the Navigation Model of WebCenter Portal application cannot be a NULL object.&lt;br /&gt;
&lt;br /&gt;
If the URL parameter is a static value, then it&#39;s not a concern. In case there is a need to dynamically populate the URL parameter in the navigation model, it&#39;s important to make sure the dynamical value cannot be NULL object. Because when the value is NULL, the navigation model does NOT know how to construct the query string. Note the NULL object is not equivalent to empty string. In this case, WebCenter Portal will not able to recognize the requested URL. In such case, it will redirect to the application context root which will induce the index page or whatever page you have define as the default page to render.&lt;br /&gt;
&lt;br /&gt;
To work around it, simply return an empty string if the dynamic value could be null in your logic.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/5990446218651743153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/5990446218651743153' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5990446218651743153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5990446218651743153'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2015/12/caveat-url-parameter-in-navigation.html' title='Caveat: URL Parameter in Navigation Model (WebCenter) Cannot Be Null Object'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh370LkH5o-XRD9lAJ66E-OzeFmI2cspEcSJdoU89opaFXq8y2sKkZtxuWXdeo3ALUCVSD3kUjX7usgF1hvU9nTFLhUhozgCszpvQ3qDQv0hkmp0A84JaR6c4OzrIUzAvGL4OIsEUf-13M3/s72-c/Oracle_JDeveloper_11g_Release_1_-_MemoryModeling_jws___Portal_jpr____Users_JayJay_jdeveloper_mywork_MemoryModeling_Portal_public_html_oracle_webcenter_portalapp_navigations_default-navigation-model_xml.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-1802510928480307145</id><published>2015-09-04T22:40:00.003-05:00</published><updated>2015-09-06T11:16:29.566-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADF"/><category scheme="http://www.blogger.com/atom/ns#" term="Memory"/><category scheme="http://www.blogger.com/atom/ns#" term="Navigation Model"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>Work with the ADF Control State on External Link URL in WebCenter Portal Navigation Model</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In the Navigation Model of a WebCenter Portal application (11g), there is an option to define a navigation resource by &quot;external link&quot;. In a normal case, you should NOT define any internal JSPX page using this option, but only if there is a need to navigate to a third party site - by what the name means, an external link. The internal JSPX page should be added to the Navigation Model by the &quot;page&quot; type.&lt;br /&gt;
&lt;br /&gt;
The impact of defining internal JSPX page as an external link is, the redundant memory footprint due to the ADF control state token recreations every time this external link is clicked. ADF control token is an identifier used by the Controller to track user&#39;s state so that all in process task flows for the same user can be retrieved. Normally, this ADF control state should be not recreated for the same user. With the external link type, the navigation behaves like entering the application in a blank new context so every navigation with external link type will auto generate a new ADF control token. Within the same user session, the recreations of the ADF control token mean redundant memory use. The less negative thing is the ADF control state will be garbage collected after user session is invalidated. So this memory issue is only scoped within user sessions and will not accumulate over time - well this is assuming your application doesn&#39;t have a crazy long timeout setting nor your users would stay active for long time (long or short, is relative. It&#39;s impossible to name a threshold without doing some load testing and analyses on the application, as at the end of the day every application is different). In this regard, it&#39;s not a memory leak in time. However, when there is a high concurrency of users navigating the application, this issue could be a concern.&lt;br /&gt;
&lt;br /&gt;
The main focus of this post is how to get around this memory issue with the external link type for internal JSPX page. You may ask what&#39;s the use case for this type of implementation - well, there is always some special unique use case down the road you might come across one day. Let&#39;s say one day you cannot use goLink and commandLink on the navigation model, but rather have to a programmatic redirect to some other page in your application with this ADF control state recreation issue.&lt;br /&gt;
&lt;br /&gt;
The foremost thing is to understand the navigation model - why using navigation model API would keep the ADF control token intact throughout the application. Let&#39;s start with a new WebCenter Portal framework application and understand what navigation model API would do.&lt;br /&gt;
&lt;br /&gt;
In the home.jspx page, add a navigation model goLink prettyURL syntax as the value of an output text like below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBJimC-RyIoWqJU_a6Y7MGm3WK-yFRq81sASQSvZv4mSmEqpVBF_osWiuJepNvmX6HGSaHWjQG8XAZOZ0Eo87OAQ_EK4vPtff51K2uhioXTomHtZRLGzacrTrtvACve0DI-eNV6L0dVtlk/s1600/Oracle_JDeveloper_11g_Release_1_-_MemoryModeling_jws___Portal_jpr____Users_JayJay_jdeveloper_mywork_MemoryModeling_Portal_public_html_oracle_webcenter_portalapp_pages_home_jspx.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;264&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBJimC-RyIoWqJU_a6Y7MGm3WK-yFRq81sASQSvZv4mSmEqpVBF_osWiuJepNvmX6HGSaHWjQG8XAZOZ0Eo87OAQ_EK4vPtff51K2uhioXTomHtZRLGzacrTrtvACve0DI-eNV6L0dVtlk/s640/Oracle_JDeveloper_11g_Release_1_-_MemoryModeling_jws___Portal_jpr____Users_JayJay_jdeveloper_mywork_MemoryModeling_Portal_public_html_oracle_webcenter_portalapp_pages_home_jspx.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
It&#39;s basically printing out the navigation model prettyURL of the home page. When the page renders, you would see -&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmivVgHnmy7d9piikQy1msj6pTt5O30GE01qIMnycC6Ok782Qnh8thWuTq7dLNMvBCiETIRZTRO5snOqhAoeMSskMX3Vn4jWMhEPEVQD70dCdYkhGKWwPME_5Sq000Q_Uvi4bWYZAz3Jx1/s1600/Home.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;268&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmivVgHnmy7d9piikQy1msj6pTt5O30GE01qIMnycC6Ok782Qnh8thWuTq7dLNMvBCiETIRZTRO5snOqhAoeMSskMX3Vn4jWMhEPEVQD70dCdYkhGKWwPME_5Sq000Q_Uvi4bWYZAz3Jx1/s640/Home.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The navigation model prettyURL returns &quot;/faces/home?_adf.ctrl-state=xxxxx&quot;. So &lt;b&gt;the secret of navigation model capable of keeping the same ADF control token around is to attach it as a query string in the URL on every navigation.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
After this is figured out, the rest should be easy. To use external link to reference an internal JSPX page, it&#39;s necessary to make the URL path relative so that your application can work properly on different environment. When defining an external link in navigation model, the URL field doesn&#39;t have the expression language facility (a nice popup that you can build objects using EL trees) but we still can use EL to construct the URL.&lt;br /&gt;
&lt;br /&gt;
Using the home.jspx as an example, here is the syntax we should use:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;#{request.scheme}://#{request.serverName}:#{request.serverPort}#{request.contextPath}/faces/home&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Here is the External Link definition in the navigation model -&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk-CHtuwWJnD-bLV0mILJLtb_TNUy3B5K2x5YBeJrIaXq_TxzoSBTipJz3352yEdo6tVSxVISVEbEMo_ckrBh2-MVhVuLGN8b4euXVpMwYEjyZmjDMZnSxkmVvFSq4ZPBBS20EdrVLHOQ4/s1600/Oracle_JDeveloper_11g_Release_1_-_MemoryModeling_jws___Portal_jpr____Users_JayJay_jdeveloper_mywork_MemoryModeling_Portal_public_html_oracle_webcenter_portalapp_navigations_default-navigation-model_xml.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;378&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk-CHtuwWJnD-bLV0mILJLtb_TNUy3B5K2x5YBeJrIaXq_TxzoSBTipJz3352yEdo6tVSxVISVEbEMo_ckrBh2-MVhVuLGN8b4euXVpMwYEjyZmjDMZnSxkmVvFSq4ZPBBS20EdrVLHOQ4/s640/Oracle_JDeveloper_11g_Release_1_-_MemoryModeling_jws___Portal_jpr____Users_JayJay_jdeveloper_mywork_MemoryModeling_Portal_public_html_oracle_webcenter_portalapp_navigations_default-navigation-model_xml.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Note we need to add the &quot;_adf.ctrl-state&quot; URL parameter below. Alternatively, you can also define the URL parameters as part of the URL like&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;#{request.scheme}://#{request.serverName}:#{request.serverPort}#{request.contextPath}/faces/home?_adf.ctrl-state=#{facesContext.externalContext.requestParameterMap[&#39;_adf.ctrl-state&#39;]}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The source of the external link definition looks like below:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3bfS1iESCztXCUOUPDT8SMNyJ_sZTgVM0ntvtALdlacthWbomvis6uuWs0esmKvvGCbsk_20ytWi-b2IQQN_AUr9H6ja1Fh_Fr4By1rHMSXJxoGExMmZ1XXC8i6I3GcBHmmZ-GD3_Czcp/s1600/2222.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;116&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3bfS1iESCztXCUOUPDT8SMNyJ_sZTgVM0ntvtALdlacthWbomvis6uuWs0esmKvvGCbsk_20ytWi-b2IQQN_AUr9H6ja1Fh_Fr4By1rHMSXJxoGExMmZ1XXC8i6I3GcBHmmZ-GD3_Czcp/s640/2222.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Note the actual prettyURL is not mandatory. &quot;/faces/home&quot; can also be replaced by &quot;/faces/oracle/webcenter/portalapp/pages/home.jspx&quot;.&lt;br /&gt;
&lt;br /&gt;
Now we can run the application. When clicking between the Home and &quot;Home External Link&quot;, the ADF control state never changes.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/1802510928480307145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/1802510928480307145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/1802510928480307145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/1802510928480307145'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2015/09/work-with-adf-control-state-on-external.html' title='Work with the ADF Control State on External Link URL in WebCenter Portal Navigation Model'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBJimC-RyIoWqJU_a6Y7MGm3WK-yFRq81sASQSvZv4mSmEqpVBF_osWiuJepNvmX6HGSaHWjQG8XAZOZ0Eo87OAQ_EK4vPtff51K2uhioXTomHtZRLGzacrTrtvACve0DI-eNV6L0dVtlk/s72-c/Oracle_JDeveloper_11g_Release_1_-_MemoryModeling_jws___Portal_jpr____Users_JayJay_jdeveloper_mywork_MemoryModeling_Portal_public_html_oracle_webcenter_portalapp_pages_home_jspx.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-6848757796192127504</id><published>2015-07-29T15:39:00.002-05:00</published><updated>2015-07-30T22:22:27.824-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADF"/><category scheme="http://www.blogger.com/atom/ns#" term="Authentication"/><category scheme="http://www.blogger.com/atom/ns#" term="Logout"/><category scheme="http://www.blogger.com/atom/ns#" term="Session"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>Understand WebCenter/ADF Session Invalidation and Removal</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
There are a couple of ways to invalidate the session in WebCenter Portal (or ADF) application. They are not the same. They all would invalidate the user session which is intended. The main difference is around whether the session will be removed after it&#39;s invalidated. In this post, I will walk through this.&lt;br /&gt;
&lt;br /&gt;
In WebCenter Portal framework application, the built-in page template already has a logout function provided. Let&#39;s take a look at it.&lt;br /&gt;
&lt;br /&gt;
Create a WebCenter portal application and open up the page template as below&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTv8xUyx-QQjOHYISivhkL_u4cnt14yitSn1GZ1K1E7VePjA6TwcHkGe4q_ndTRC8ZtR_G7a1pfUXoIIPuoTJWg75MXjAnL6KOveAzpjfXAKvkbAa5i0AvB2AtSpiFslY6h9TEMRttfiKI/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTv8xUyx-QQjOHYISivhkL_u4cnt14yitSn1GZ1K1E7VePjA6TwcHkGe4q_ndTRC8ZtR_G7a1pfUXoIIPuoTJWg75MXjAnL6KOveAzpjfXAKvkbAa5i0AvB2AtSpiFslY6h9TEMRttfiKI/s320/1.png&quot; width=&quot;186&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
In this JSPX file, you will find a logout command link with action specified as &quot;#{o_w_s_l_LoginBackingBean.doLogout}&quot;. The source code of this bean is not available unless you trace back to the shipped libraries that were installed with Jdeveloper.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8SpLoOs411hTU-_EOmbPEYQot8tGYaqRPGLFgXvME273EQ6ujjy1bmCq6h_SFi1qCmGgRtEcyGojCc4Crv7ZIFeWaCj11vnRH9e3ma1XcLlMBWTLzo03YpL18Z2vHgVcNQLzMLMU2VBvE/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8SpLoOs411hTU-_EOmbPEYQot8tGYaqRPGLFgXvME273EQ6ujjy1bmCq6h_SFi1qCmGgRtEcyGojCc4Crv7ZIFeWaCj11vnRH9e3ma1XcLlMBWTLzo03YpL18Z2vHgVcNQLzMLMU2VBvE/s320/2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#39;s take a look at the effect of the logout function. Run the portal application.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIYKfGCdbjH5usTa6FzOoBJExYkvyZTtAh1kG_xXYcjzSCjh4UEUeCnqFVi3kjQirWiTCTPfC5fkpOoO_XscYmurgUpEO_SqTDaZS_OwvjSjENAP_R4irpBRvxXm-NxEMLnYKiZGLWpTpc/s1600/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;85&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIYKfGCdbjH5usTa6FzOoBJExYkvyZTtAh1kG_xXYcjzSCjh4UEUeCnqFVi3kjQirWiTCTPfC5fkpOoO_XscYmurgUpEO_SqTDaZS_OwvjSjENAP_R4irpBRvxXm-NxEMLnYKiZGLWpTpc/s320/3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Open the local weblogic console, navigate to the deployment, find your application, go to application configuration, and select the monitor tab to look at the session statistics.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlMd_2UktNkmxLLHEEkIjBmVEbu-bLJtw1c9oZyhJ6F2bwt7P-cJ_2A3WBvrAFphcEsoZc7xKAUibbROE9UQeIF2vKWfzsbABOFcpdex4CQqFy-1dsNR2mAmToAN6tWfjnF377AT_shA2/s1600/Screen+Shot+2015-07-29+at+12.40.03+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;53&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOlMd_2UktNkmxLLHEEkIjBmVEbu-bLJtw1c9oZyhJ6F2bwt7P-cJ_2A3WBvrAFphcEsoZc7xKAUibbROE9UQeIF2vKWfzsbABOFcpdex4CQqFy-1dsNR2mAmToAN6tWfjnF377AT_shA2/s320/Screen+Shot+2015-07-29+at+12.40.03+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Before going forward, let&#39;s look at the definitions of the 3 columns we are interested in:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Sessions: Displays the current number of open sessions associated with this web application.&lt;/li&gt;
&lt;li&gt;Sessions High: Displays the highest number of concurrent open sessions associated with this web application that have ever been reached since the weblogic instance was started.&lt;/li&gt;
&lt;li&gt;Total Sessions: Displays the total number of open sessions ever associated with this web application.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
We can see there is 1 current open session. At this time the user is not logged in yet. So it&#39;s anonymous session. Please note this is true for an type of pages - JSP, JSPX or HTML, as long as they are part of the web application (war or ear). If you may need to avoid this anonymous session, assuming your application entry page is not dynamic, you can consider build such login page in HTML and store it in web server. In this case, there will no session attached when such page is visited.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s login.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixMEL-zXR3ATnR9-2pYY7XZ_b3Xh2hYWn51bv0ePO4QxKwI2zbQAgJVdLi-QuTc3d8dOK_bf2hcyEjnYN97aPMxx3qKnltg3rHGg0biokrw3o1OWg2-1IUy_AV7MrVD7k8qJDKXag55xp5/s1600/Screen+Shot+2015-07-29+at+12.47.46+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;84&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixMEL-zXR3ATnR9-2pYY7XZ_b3Xh2hYWn51bv0ePO4QxKwI2zbQAgJVdLi-QuTc3d8dOK_bf2hcyEjnYN97aPMxx3qKnltg3rHGg0biokrw3o1OWg2-1IUy_AV7MrVD7k8qJDKXag55xp5/s320/Screen+Shot+2015-07-29+at+12.47.46+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Check the session statistics again, we can see the current open session is still 1 but the session high and total session is 2. The anonymous session gets removed and a new authenticated user session created. That makes sense.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVB7TlRvgEjTh2TCIXl1d96ojScZQiaF7UONg7Z8eQtkKA0TvhvewmKteiSrZlp7jMpNcbn7Gp72-oFkgt0b3_wV7WRLy6tsj0Nnv2aAkBkTVMEj5_57VYQmm5eiQ2MXH688VxyDvRtZtG/s1600/Screen+Shot+2015-07-29+at+12.48.02+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;53&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVB7TlRvgEjTh2TCIXl1d96ojScZQiaF7UONg7Z8eQtkKA0TvhvewmKteiSrZlp7jMpNcbn7Gp72-oFkgt0b3_wV7WRLy6tsj0Nnv2aAkBkTVMEj5_57VYQmm5eiQ2MXH688VxyDvRtZtG/s320/Screen+Shot+2015-07-29+at+12.48.02+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Let&#39;s logout and check the session statistics again. Now the open session is 2, session high is 2 and total session is 4. What does this mean?&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguD60OFp8VW8bep16-I345GoBfnZsZv7X7Io1LQhWeYpStlc-8I1dhDqrSTWkCir_mflucAluvSu3i9mXzBN8ojVLYehAOAUTvcApTVB73BR20Gs3Dr-avfmP5O51K3E6PCvy52q2FVrSl/s1600/Screen+Shot+2015-07-29+at+2.39.16+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;49&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguD60OFp8VW8bep16-I345GoBfnZsZv7X7Io1LQhWeYpStlc-8I1dhDqrSTWkCir_mflucAluvSu3i9mXzBN8ojVLYehAOAUTvcApTVB73BR20Gs3Dr-avfmP5O51K3E6PCvy52q2FVrSl/s320/Screen+Shot+2015-07-29+at+2.39.16+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Let&#39;s review the numbers. Total session increases from 2 to 4. That means 2 new sessions created. But the open session increases from 1 to 2. That means there are 2 current open session, increased only 1 from previous state. One thing to note is after the logout, the page lands on the entry page again just like the page before the login.&lt;br /&gt;
&lt;br /&gt;
The explanation on above behaviors would be the previous authenticate session gets removed, but as soon as it&#39;s removed, an anonymous session is created. It&#39;s like the authenticated session gets converted to an anonymous session. Since the page is redirected to the login page, it&#39;s just like the initial rendering of the login page, there is a new anonymous session created. So it&#39;s 2 - one is not associated with the current UI (login page) and the other is associated. When the first anonymous session will be removed? It will be removed after the session timeout setting reached (set in web.xml). The second anonymous session will be removed after the server detects the user is idle for the session timeout setting reached.&lt;br /&gt;
&lt;br /&gt;
Well, you may say that&#39;s not desired. Correct, it&#39;s not. Let&#39;s look how can we avoid the redundant anonymous sessions.&lt;br /&gt;
&lt;br /&gt;
We have reviewed the second anonymous session is associated with page as it&#39;s part of the web application. Let&#39;s do a test and force the redirection to go to a page outside of the web application. To do such redirect, we will need to put in some custom code. I am going to reuse the WebCenter portal built-in logout function by taking the expression inside my managed bean.&lt;br /&gt;
&lt;br /&gt;
Here is the custom managed bean associated with the command link:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl3TtsLyBJjSlzJHURYVa4_8SyCt1KYfz0ImhJBQBujHRtiInk3_a2b3E0TTiNiC5tXmoN6ArSB80RtmnG1stZd8AKyRISiPfwRyZuIc6A5IdQbsxgQext4Sz5xJzyenUJDZ5_pNrSzl_r/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;184&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl3TtsLyBJjSlzJHURYVa4_8SyCt1KYfz0ImhJBQBujHRtiInk3_a2b3E0TTiNiC5tXmoN6ArSB80RtmnG1stZd8AKyRISiPfwRyZuIc6A5IdQbsxgQext4Sz5xJzyenUJDZ5_pNrSzl_r/s320/2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is the logic for the custom managed bean:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifxvCykOjFWW0OzDanqgu-AAy2e-OmU36bDKYV_6RBI-4uUv5BnFL-ocoUefJeFnnuLUmWji_NGjsiEhHstC40gCR6WUJZ4FiPDjBdNuMZG5J7o223keZG7goSP4LTHhaPQIEBEbFqZq2E/s1600/Screen+Shot+2015-07-29+at+3.13.45+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifxvCykOjFWW0OzDanqgu-AAy2e-OmU36bDKYV_6RBI-4uUv5BnFL-ocoUefJeFnnuLUmWji_NGjsiEhHstC40gCR6WUJZ4FiPDjBdNuMZG5J7o223keZG7goSP4LTHhaPQIEBEbFqZq2E/s320/Screen+Shot+2015-07-29+at+3.13.45+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHVJP03AaBgZhKnb5dQ7cW0peXnx8lbfT0W1TqRwASu0McjsAFSvxzXfX_TU14TiH-L6PgnuNaCjmU8vsj2bR48nAcu9HcX1g-N3JfEw8GVNtul8qM4ohMAgIkJShmtb2iSnCqCJruRG8L/s1600/Screen+Shot+2015-07-29+at+3.17.17+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;100&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHVJP03AaBgZhKnb5dQ7cW0peXnx8lbfT0W1TqRwASu0McjsAFSvxzXfX_TU14TiH-L6PgnuNaCjmU8vsj2bR48nAcu9HcX1g-N3JfEw8GVNtul8qM4ohMAgIkJShmtb2iSnCqCJruRG8L/s320/Screen+Shot+2015-07-29+at+3.17.17+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Basically, I used an utility method to resolve the expression function to logout. Then issue a redirect to the server host. Here is the page landed after the logout.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbwcUWFXRMAfH8fKWdemLCJCo2lu4RByy_JngcFsLMZ-LvvxLTlCHeFuhQCTR0HI_PRktqLywdycVZMU6J9V6WxBfN9-l5N9LZYcX1UNmEbEVRNw1fPLo_AsiMIJNOl55HeJick41DOixM/s1600/Screen+Shot+2015-07-29+at+3.19.23+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;218&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbwcUWFXRMAfH8fKWdemLCJCo2lu4RByy_JngcFsLMZ-LvvxLTlCHeFuhQCTR0HI_PRktqLywdycVZMU6J9V6WxBfN9-l5N9LZYcX1UNmEbEVRNw1fPLo_AsiMIJNOl55HeJick41DOixM/s320/Screen+Shot+2015-07-29+at+3.19.23+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Let&#39;s look at the session statistics again. Since the statistics are the same until the logout, here is just the statistics after issuing a logout.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4IxZ84A1MUfYTrAaGF8WxesWqa8eIbS6-u8u8ilLn1D_IlPnxlyVgD8V_vSYfnnL6wvPLMUVZgmLjwFZ90IiaqWsU3tszJsKwveJHA-26uAzll7-KKwwAa70FPVjfsfVoPNQhFyvpFvcf/s1600/Screen+Shot+2015-07-29+at+3.19.11+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;52&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4IxZ84A1MUfYTrAaGF8WxesWqa8eIbS6-u8u8ilLn1D_IlPnxlyVgD8V_vSYfnnL6wvPLMUVZgmLjwFZ90IiaqWsU3tszJsKwveJHA-26uAzll7-KKwwAa70FPVjfsfVoPNQhFyvpFvcf/s320/Screen+Shot+2015-07-29+at+3.19.11+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Now we can see there is only 1 open session with total session of 3. This open session is the anonymous session converted from authenticated users session.&lt;br /&gt;
&lt;br /&gt;
Next, let&#39;s look at how to avoid the anonymous session conversion but rather to remove it for good.&lt;br /&gt;
&lt;br /&gt;
After some trials, none of the JEE related methods work as expected. This includes HttpSession.invalidate(), HttpSession.setMaxInactiveInterval(), and a few other methods. No mistaken, the session indeed get invalidated and there is no security concern, but the redundant anonymous session (not associated with any front-end) hanging around is the complaint.&lt;br /&gt;
&lt;br /&gt;
The only working way is to use the ADF authentication servlet. Here is the code snippet to use:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9JijdAni8vWrcYvOh_2fo3o-I_Hve-fhSotPtIZHls5CjZMF4nk6JN36GV4sj8nb_gRY2hC5GvSSPXewD-Vqjwx-Wt_4n1JCNzLq0w0noEKdcnDEYS87x-0OhCJzwMCgXsr854jElMg_8/s1600/Screen+Shot+2015-07-29+at+3.27.33+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;182&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9JijdAni8vWrcYvOh_2fo3o-I_Hve-fhSotPtIZHls5CjZMF4nk6JN36GV4sj8nb_gRY2hC5GvSSPXewD-Vqjwx-Wt_4n1JCNzLq0w0noEKdcnDEYS87x-0OhCJzwMCgXsr854jElMg_8/s320/Screen+Shot+2015-07-29+at+3.27.33+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
In the code, I used &quot;/adfAuthentication?logout=true&amp;amp;end_url=../&quot; to call the ADF authentication servlet to invalidate the user (and remove the session) and redirect the page to host with parameter &quot;end_url&quot;. The ADF authentication servlet is defined in web.xml by default:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNpHO26jsWzt5ySKXarljg9CTro0VkejkzjLyEALdP443AIe_nnaHj3RBZPZaQr5bh-IngcXQJNCeaWEZY5U0NfC4A3JxqcywtO1EjrGbn0OGI7RScondMTRJBFBzLi_j5gtFZml9OWMUf/s1600/Screen+Shot+2015-07-29+at+3.30.24+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;174&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNpHO26jsWzt5ySKXarljg9CTro0VkejkzjLyEALdP443AIe_nnaHj3RBZPZaQr5bh-IngcXQJNCeaWEZY5U0NfC4A3JxqcywtO1EjrGbn0OGI7RScondMTRJBFBzLi_j5gtFZml9OWMUf/s320/Screen+Shot+2015-07-29+at+3.30.24+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Now let&#39;s use the new doLogout() method which uses ADF authentication Servlet to logout and review the session statistics after logout:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTddqk1cS8kk6XZDDn7WEDTCsP8dN9pGY_-qCKilY99__Cbrmvw5reDxNsdREPEFilMm0XLPZqvVV26urB5JwfkeVUHZIUWZcLCZ0l8kB5luNxNMTttc1Tgjhhk0q8ft9OoXyR6Jb6bs3j/s1600/Screen+Shot+2015-07-29+at+3.34.25+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;52&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTddqk1cS8kk6XZDDn7WEDTCsP8dN9pGY_-qCKilY99__Cbrmvw5reDxNsdREPEFilMm0XLPZqvVV26urB5JwfkeVUHZIUWZcLCZ0l8kB5luNxNMTttc1Tgjhhk0q8ft9OoXyR6Jb6bs3j/s320/Screen+Shot+2015-07-29+at+3.34.25+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Great. There is 0 open sessions and no redundant session hanging around.&lt;br /&gt;
&lt;br /&gt;
Summary:&lt;br /&gt;
&lt;br /&gt;
1. To avoid anonymous session before login or after logout, please redirect to pages outside of web application.&lt;br /&gt;
2. To avoid anonymous session hanging around being converted from authenticated session, please use ADF authenticate servlet to logout.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/6848757796192127504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/6848757796192127504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/6848757796192127504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/6848757796192127504'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2015/07/understand-webcenteradf-session.html' title='Understand WebCenter/ADF Session Invalidation and Removal'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTv8xUyx-QQjOHYISivhkL_u4cnt14yitSn1GZ1K1E7VePjA6TwcHkGe4q_ndTRC8ZtR_G7a1pfUXoIIPuoTJWg75MXjAnL6KOveAzpjfXAKvkbAa5i0AvB2AtSpiFslY6h9TEMRttfiKI/s72-c/1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-5101872672246405560</id><published>2015-07-21T14:49:00.000-05:00</published><updated>2015-09-04T23:52:57.334-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADF"/><category scheme="http://www.blogger.com/atom/ns#" term="KScope"/><category scheme="http://www.blogger.com/atom/ns#" term="Presentation"/><category scheme="http://www.blogger.com/atom/ns#" term="Responsive Web Design"/><title type='text'>Build Responsive ADF Web Application - Kscope15 Session</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
My Kscope15 session - Build Responsive ADF Web Application - the presentation can be downloaded at&amp;nbsp;&lt;a href=&quot;https://drive.google.com/file/d/0Bx-fIQETbpw5MXRreDRkLVktYzg/view?usp=sharing&quot;&gt;https://drive.google.com/file/d/0Bx-fIQETbpw5MXRreDRkLVktYzg/view?usp=sharing&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Thanks for those of you who provided the feedback.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFraJoqcfN25QFnpDMMldjLo9sqmkGVMQxinjkRzNx_PrGbRSOwXRTunNu9_EA4iSPja4JYERCo5PHGhabQIrb3wxNg-9bg2H-dV64hGq93AHxCH9HZAyOcUsZ6ldAo-ZskpdP104kB34P/s1600/Screen+Shot+2015-07-23+at+2.54.13+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;247&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFraJoqcfN25QFnpDMMldjLo9sqmkGVMQxinjkRzNx_PrGbRSOwXRTunNu9_EA4iSPja4JYERCo5PHGhabQIrb3wxNg-9bg2H-dV64hGq93AHxCH9HZAyOcUsZ6ldAo-ZskpdP104kB34P/s640/Screen+Shot+2015-07-23+at+2.54.13+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/5101872672246405560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/5101872672246405560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5101872672246405560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5101872672246405560'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2015/07/build-responsive-adf-web-application.html' title='Build Responsive ADF Web Application - Kscope15 Session'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFraJoqcfN25QFnpDMMldjLo9sqmkGVMQxinjkRzNx_PrGbRSOwXRTunNu9_EA4iSPja4JYERCo5PHGhabQIrb3wxNg-9bg2H-dV64hGq93AHxCH9HZAyOcUsZ6ldAo-ZskpdP104kB34P/s72-c/Screen+Shot+2015-07-23+at+2.54.13+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-4034790624468729298</id><published>2015-07-19T00:05:00.002-05:00</published><updated>2015-07-19T00:09:10.161-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Install"/><category scheme="http://www.blogger.com/atom/ns#" term="Jdeveloper"/><category scheme="http://www.blogger.com/atom/ns#" term="JDK"/><category scheme="http://www.blogger.com/atom/ns#" term="OS X"/><title type='text'>Install JDeveloper 11.1.1.9 on OS X with JDK7</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The info is taken from this post: &lt;a href=&quot;https://blogs.oracle.com/OracleWebCenterSuite/entry/install_jdeveloper_11_1_1&quot;&gt;https://blogs.oracle.com/OracleWebCenterSuite/entry/install_jdeveloper_11_1_1&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Thanks to Justin, it saved quite some efforts.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;-webkit-text-stroke-color: rgb(85, 85, 85); -webkit-text-stroke-width: initial; color: #555555; font-family: Calibri; font-size: 14px; margin-left: 36px; text-indent: -36px;&quot;&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;If you do not have Apple Java 1.6, download it&amp;nbsp;&lt;a href=&quot;https://support.apple.com/kb/DL1572?locale=en_US&quot;&gt;&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); color: black;&quot;&gt;here (Java for OS X 2014-001)&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-color: rgb(85, 85, 85); -webkit-text-stroke-width: initial; color: #555555; font-family: Calibri; font-size: 14px; margin-left: 36px; text-indent: -36px;&quot;&gt;
&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;2&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;Start the JDeveloper 11.1.1.9.0 installer using Apple Java 1.6.&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-color: rgb(85, 85, 85); -webkit-text-stroke-width: initial; color: #555555; font-family: Calibri; font-size: 14px; margin-left: 36px; text-indent: -36px;&quot;&gt;
&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;3&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;$(/usr/libexec/java_home -v 1.6)/bin/java -jar ~/Downloads/jdevstudio11119install.jar&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-color: rgb(85, 85, 85); -webkit-text-stroke-width: initial; color: #555555; font-family: Calibri; font-size: 14px; margin-left: 36px; text-indent: -36px;&quot;&gt;
&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;4&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;Follow the screens and when you reach the portion of the installer that asks for the JDK, point it to your JDK 1.7 location. In my case, I have used JDK 7u80.&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-color: rgb(85, 85, 85); -webkit-text-stroke-width: initial; color: #555555; font-family: Calibri; font-size: 14px; margin-left: 36px; text-indent: -36px;&quot;&gt;
&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;-webkit-text-stroke-color: rgb(85, 85, 85); -webkit-text-stroke-width: initial; color: #555555; font-family: Calibri; font-size: 14px; margin-left: 36px; text-indent: -36px;&quot;&gt;
&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;6&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;Complete the installation.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/4034790624468729298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/4034790624468729298' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/4034790624468729298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/4034790624468729298'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2015/07/install-jdeveloper-11119-on-os-x-with.html' title='Install JDeveloper 11.1.1.9 on OS X with JDK7'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-7026015695378964397</id><published>2014-10-21T14:12:00.003-05:00</published><updated>2014-10-21T14:12:42.659-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IE"/><category scheme="http://www.blogger.com/atom/ns#" term="Patch"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>IE11 Support has come to WebCenter 11.1.1.8 BP5</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
If you are on edge of using IE as your support browser, IE 11 support on WebCenter has come. The patch for it is initially released via BP4 and included in BP5. Please see the link for the details: &lt;a href=&quot;https://support.oracle.com/rs?type=doc&amp;amp;id=19194669.8&quot; target=&quot;_blank&quot;&gt;https://support.oracle.com/rs?type=doc&amp;amp;id=19194669.8&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/7026015695378964397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/7026015695378964397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/7026015695378964397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/7026015695378964397'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2014/10/ie11-support-has-come-to-webcenter.html' title='IE11 Support has come to WebCenter 11.1.1.8 BP5'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-1965037843175748977</id><published>2014-10-07T23:37:00.002-05:00</published><updated>2014-10-07T23:37:56.424-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADF BC"/><title type='text'>Required Flag for the View Object Bind Variable</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
When creating a bind variable for a view object in ADF, there are two properties can be configured - Updatable and Required.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The updatable flag should be enabled pretty much all the time as it allows you to change the bind variable value to run the query again. For the Required flag, it should be disabled unless you specifically need it - seems worthless to say ...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWrA-hmyGbhG4P_gU18KtGGpUUxGc4n_awHZtu3vc20ogWgCaHZh-JcN5hp_4pNJ1V1HrrTgNw57o0jH9CqHC3mpoiQrtvSU1dxRRK1dRYe-GRUoHH2TLoYPsRfSfinQaHW2Dy8a4mBQoI/s1600/Capture.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWrA-hmyGbhG4P_gU18KtGGpUUxGc4n_awHZtu3vc20ogWgCaHZh-JcN5hp_4pNJ1V1HrrTgNw57o0jH9CqHC3mpoiQrtvSU1dxRRK1dRYe-GRUoHH2TLoYPsRfSfinQaHW2Dy8a4mBQoI/s1600/Capture.PNG&quot; height=&quot;285&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
When the required is enabled, the bind variable will be defined as &quot;Kind=where&quot; - this can be examined in the view object xml file. This is pretty straightforward. &quot;Kind=where&quot; means this bind variable will always be added into the where clause when this VO is queried. Therefore it&#39;s always &quot;required&quot;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
When the required is disabled, the bind variable will be defined as &quot;Kind=viewcriteria&quot;. This means this bind variable is optional and can be added by applying the corresponding view criteria. Therefore it&#39;s not required.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In most cases, the bind variable should be optional. Unless this VO instance is meant to be queried with the specific where clause all the time.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/1965037843175748977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/1965037843175748977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/1965037843175748977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/1965037843175748977'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2014/10/required-flag-for-view-object-bind.html' title='Required Flag for the View Object Bind Variable'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWrA-hmyGbhG4P_gU18KtGGpUUxGc4n_awHZtu3vc20ogWgCaHZh-JcN5hp_4pNJ1V1HrrTgNw57o0jH9CqHC3mpoiQrtvSU1dxRRK1dRYe-GRUoHH2TLoYPsRfSfinQaHW2Dy8a4mBQoI/s72-c/Capture.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-6767151936669377379</id><published>2014-09-02T15:14:00.002-05:00</published><updated>2014-10-07T23:43:10.461-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Responsive Web Design"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>Oracle WebCenter Portal Mobilizing – Responsive or Adaptive, or Both?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 style=&quot;background-color: white; border: none; box-sizing: border-box; color: #4e535c; font-family: gothamlight, arial; font-size: 24px; font-weight: normal; line-height: 26px; margin: 0px auto 5px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: gothambook, arial; font-size: 14px; line-height: 19.6000003814697px;&quot;&gt;With today’s quickly evolving web and advanced rendering capabilities, enterprise continues to seek applications with which to run massive amounts of transactional data on mobile devices. Few applications can support the increasing mobility of interfacing technologies, and those that do require teams of engineers to build and maintain them across multiple platforms. This extra layer of complexity and cost can prohibit some enterprises, and dissuade others seeking more flexible and wide-reaching data infrastructure.&lt;/span&gt;&lt;/h2&gt;
&lt;h2 style=&quot;background-color: white; border: none; box-sizing: border-box; color: #4e535c; font-family: gothamlight, arial; font-size: 24px; font-weight: normal; line-height: 26px; margin: 0px auto 5px; padding: 0px;&quot;&gt;
&lt;/h2&gt;
&lt;h2 style=&quot;background-color: white; border: none; box-sizing: border-box; color: #4e535c; font-family: gothamlight, arial; font-size: 24px; font-weight: normal; line-height: 26px; margin: 0px auto 5px; padding: 0px;&quot;&gt;
&lt;a href=&quot;http://www.primitivelogic.com/newsroom/2014/09/02/oracle-webcenter-portal-mobilizing-responsive-or-adaptive-or-both&quot; style=&quot;background-color: transparent; font-family: gothambook, arial; font-size: 14px; line-height: 19.6000003814697px;&quot; target=&quot;_blank&quot;&gt;Read more ...&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/6767151936669377379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/6767151936669377379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/6767151936669377379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/6767151936669377379'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2014/09/oracle-webcenter-portal-mobilizing.html' title='Oracle WebCenter Portal Mobilizing – Responsive or Adaptive, or Both?'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-5844911789985211077</id><published>2014-07-13T23:02:00.002-05:00</published><updated>2014-07-13T23:02:21.901-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IOUG"/><category scheme="http://www.blogger.com/atom/ns#" term="Presentation"/><category scheme="http://www.blogger.com/atom/ns#" term="Responsive Web Design"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>IOUG Speaking - Build Your Responsive &amp; Mobilized Enterprise Portal</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Hi there,&lt;br /&gt;
&lt;br /&gt;
For those of you who missed out my Collaborate 14 presentation on WebCenter Responsive Web Design, here is another chance for you to regain the opportunity, for free!&lt;br /&gt;
&lt;br /&gt;
Here is the summary of the talk. You can register the event by the link provided at the bottom.&lt;br /&gt;
&lt;br /&gt;
Thanks!&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Thursday, July 17th, 2014 12:00&amp;nbsp;p.m. - 1:00&amp;nbsp;p.m. CDT&lt;/strong&gt;&lt;br /&gt;

Mobilizing emerges as a &quot;must-have&quot; feature for modern web 
experience. Oracle WebCenter Portal 11.1.1.8 introduces multi-channel 
portal experience to support mobilized web for smart devices. This 
session reveals the essential secret sauce of the new mobilizing support
 – responsive web design, and teaches how to extend the responsive 
template to support your custom needs. The session helps to determine 
your mobile enterprise portal strategy and teaches how to build the 
responsive from scratch to create your own mobilized enterprise portal 
on WebCenter Portal Framework applications. Further, the session 
analyzes real world customer cases to help you avoid the pitfalls and 
exploit first hand best practices.&lt;br /&gt;

&lt;em&gt;Featured Speakers: JayJay Zheng, Director, Primitive Logic&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;&lt;a href=&quot;https://www1.gotomeeting.com/register/891064969&quot; target=&quot;_blank&quot;&gt;You can register the event by&amp;nbsp; clicking | Register Here |&lt;/a&gt;&lt;/strong&gt; &lt;/em&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/5844911789985211077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/5844911789985211077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5844911789985211077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5844911789985211077'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2014/07/ioug-speaking-build-your-responsive.html' title='IOUG Speaking - Build Your Responsive &amp; Mobilized Enterprise Portal'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-5214229002709521783</id><published>2014-05-27T00:01:00.003-05:00</published><updated>2014-05-27T00:08:13.679-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Install"/><category scheme="http://www.blogger.com/atom/ns#" term="JDK"/><category scheme="http://www.blogger.com/atom/ns#" term="JVM"/><category scheme="http://www.blogger.com/atom/ns#" term="Weblogic"/><title type='text'>Caveats on Using WebLogic Server with JDK7</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Now JDK 7 has been out for a while (JDK 8 is out too as of writing). There are some caveats using WebLogic Server with JDK 7 you might want to know, not matter it&#39;s on 10.3.6 or 12c.&lt;br /&gt;
&lt;br /&gt;
1. Out of memory error on starting Admin Server. This error is caused by the fact that the new JVM requires more PermGen space. Depending on your RAM, you can set it &amp;gt;350m. In my case, I would set the perm size to 512M.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: monospace; font-size: 12px;&quot;&gt;-XX:MaxPermSize=512m&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: monospace; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
2. In some cases, the new compiler generates larger byte code. It is possible that a large method may exceed the 64KB limit per method. In this situation, you may need to refactor the method. This seems to only affect WebLogic 10.3.6&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
3.&amp;nbsp;Classes may have been removed that are from the internal package sun.*, or that have been marked as deprecated in a previous version of the JVM. If an application uses these removed methods, a ClassNotFound exception will occur.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
4.&amp;nbsp;JDBC 4.1 is introduced in JDK7. JDBC 4.1 methods are not currently supported in WebLogic Server with JDK 7. Calls to these methods will result in an SQLException indicating that the method is not supported.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If you are using WebLogic 10.3.6, after installing WebLogic Server, copy the following files from WL_HOME/modules to JAVA_HOME/jre/lib/endorsed, where WL_HOME is the WebLogic Server installation home directory:&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;javax.annotation_1.0.0.0_1-0.jar&lt;/li&gt;
&lt;li&gt;javax.xml.bind_2.1.1.jar&lt;/li&gt;
&lt;li&gt;javax.xml.ws_2.1.1.jar&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Reference:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://docs.oracle.com/cd/E23943_01/doc.1111/e14142/jdk7.htm&quot; target=&quot;_blank&quot;&gt;Using WebLogic Server 10.3.6 with JDK 7&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://docs.oracle.com/cd/E24329_01/doc.1211/e24492/jdk7.htm&quot; target=&quot;_blank&quot;&gt;Using WebLogic Server 12c with JDK 7&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/5214229002709521783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/5214229002709521783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5214229002709521783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/5214229002709521783'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2014/05/caveats-on-using-weblogic-server-with.html' title='Caveats on Using WebLogic Server with JDK7'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-2148259289795945671</id><published>2014-05-26T23:40:00.002-05:00</published><updated>2014-05-26T23:40:21.753-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Patch"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Content"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>FrameworkFolders Support has come to Oracle WebCenter Portal</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
As of late April 2014, FrameworkFolders support on Oracle WebCenter Portal has been enabled by &lt;a href=&quot;http://docs.oracle.com/cd/E29542_01/doc.1111/e27603/whatsnew.htm&quot; target=&quot;_blank&quot;&gt;Oracle WebCenter 11.1.1.8.3&lt;/a&gt;. Previously, Oracle WebCenter Portal only supported Folders_g.&lt;br /&gt;
&lt;br /&gt;
Now it&#39;s time to review the essentials on &lt;b&gt;what&lt;/b&gt;, &lt;b&gt;why&lt;/b&gt; and&lt;b&gt; how&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What&#39;s Framework Folders?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Introduced in WebCenter PS5, the framework folders (also called folders component) provide a hierarchical folder interface, similar to conventional file system, for organizing and locating some or all of the content in the repository. It&#39;s a scalable, enterprise solution and is meant to be a replacement for contribution folders (folders_g component).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Why it&#39;s better than Folders_g (FrameworkFolders vs. Folders_g)?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
With the FrameworkFolders component as the underlying folder architecture, many functionalities and features have been made available.&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Mass metadata updates with folders (metadata propagation): &amp;nbsp;&quot;Query Folders&quot; is added in the FrameworkFolders component. Query folders are folders that are populated simply by a query. Query folders contain the actual repository content items returned by the query. The contents of query folders can change dynamically as the contents of the repository change. By using the query folder and the propagate function, one can make mass metadata updates of folders in a very easy way.&lt;/li&gt;
&lt;li&gt;Unlimited content items: There is a limitation of 1000 content items in a folder or subfolders within a folder with Folders_g. There is no such limit with FrameworkFolders.&lt;/li&gt;
&lt;li&gt;Enhanced search functionality: With frameworkFolders, several enhanced features are available to make search easier and more performant. User can save a query result in a query folder, as well as records management by using RetentionQuery folder.&amp;nbsp;By default, you cannot search folders with folders_g. Now users can search for folders, content items within a folder with FrameworkFolders.&lt;/li&gt;
&lt;li&gt;Personal folder support: Added personal folder for each user and the content within a personal folder is only available for the user himself/herself.&lt;/li&gt;
&lt;li&gt;New user interface support: with the FrameworkFolders component, a new look and feel presentation layer of the content server is available. The new UI is built by ADF technology.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;How to get it?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
For an Oracle WebCenter Portal instance patched from an earlier release, you must continue to use Folders_g. For new installations of Oracle WebCenter Portal, it is recommended that you enable the FrameworkFolders component on Content Server for better performance and so as to be able to use any new Content Server features.&lt;br /&gt;
&lt;br /&gt;
The FrameworkFolders component can be enabled only for the installations that meet the following criteria:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;You must have a new Oracle WebCenter Portal 11.1.1.8.0 installation. Oracle WebCenter Portal must not have been patched from a previous release, that is, it should be a completely fresh instance.&lt;/li&gt;
&lt;li&gt;You must have a new installation of Oracle WebCenter Content 11.1.1.8.0, with the FrameworkFolders component enabled. Oracle WebCenter Content must not have been patched from a previous release, that is, it should be a completely fresh instance.&lt;/li&gt;
&lt;li&gt;Content Server should never have been configured to run with the Folders_g component. You must not enable FrameworkFolders if Folders_g was previously enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
To configure FrameworkFolders support for Oracle WebCenter Portal, you need to apply various patches to your new installations of Oracle WebCenter Content 11.1.1.8.0 and Oracle WebCenter Portal 11.1.1.8.0.&lt;br /&gt;
&lt;br /&gt;
To prepare Oracle WebCenter Portal for FrameworkFolders support:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Ensure there is no content within Oracle WebCenter Content and Oracle WebCenter Portal&lt;/li&gt;
&lt;li&gt;Download and apply the WebCenter Content MLR04 patch (latest as of today)&lt;/li&gt;
&lt;li&gt;Download and apply the WebCenter Portal BP3 patch 18085041&lt;/li&gt;
&lt;li&gt;Download and apply the WebCenterConfigure component patch 18387955&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Reference:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://jonathanhult.com/blog/2012/10/11g-folders-organized-optimized-modernized/&quot; target=&quot;_blank&quot;&gt;11g Folders – organized, optimized, modernized&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogs.oracle.com/kyle/entry/mass_metadata_updates_with_folders&quot; target=&quot;_blank&quot;&gt;Mass Metadata Update with Folders&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://quobell-wcc.blogspot.com/2012/08/webcenter-content-11116-folderframework.html&quot; target=&quot;_blank&quot;&gt;WebCenter Content 11.1.1.6 FrameworkFolders&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://docs.oracle.com/cd/E23943_01/doc.1111/e10978/c08_folders.htm&quot; target=&quot;_blank&quot;&gt;Using Folders and WebDAV&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://docs.oracle.com/cd/E23943_01/doc.1111/e11011/c08_frameworkfolders.htm&quot; target=&quot;_blank&quot;&gt;Folder Services&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/2148259289795945671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/2148259289795945671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/2148259289795945671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/2148259289795945671'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2014/05/frameworkfolders-support-has-come-to.html' title='FrameworkFolders Support has come to Oracle WebCenter Portal'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5477731108590363529.post-652472732433996377</id><published>2014-04-22T00:13:00.000-05:00</published><updated>2014-04-22T00:13:06.885-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Collaborate"/><category scheme="http://www.blogger.com/atom/ns#" term="Interview"/><category scheme="http://www.blogger.com/atom/ns#" term="Responsive Web Design"/><category scheme="http://www.blogger.com/atom/ns#" term="Video"/><category scheme="http://www.blogger.com/atom/ns#" term="WebCenter Portal"/><title type='text'>Interview with Bob Rhubart on Responsive WebCenter Portal @ Collaborate 14</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Short after my presentation on &lt;a href=&quot;http://jjzheng.blogspot.com/2014/04/build-your-responsive-mobilized.html&quot; target=&quot;_blank&quot;&gt;Responsive WebCenter Porta&lt;/a&gt;l @ Collaborate 14 in Vegas, I had a video interview with &lt;a href=&quot;https://www.linkedin.com/in/bobrhubart&quot; target=&quot;_blank&quot;&gt;Bob Rhubart&lt;/a&gt; who runs Oracle &lt;a href=&quot;https://blogs.oracle.com/archbeat/&quot; target=&quot;_blank&quot;&gt;ArchBeat &lt;/a&gt;- the official blog of the OTN Architect Community. In this 10 min talk, I had reviewed my presentation topic, the hot gossips in the hallway and the visions of hot topics in the next coming collaborate.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;510&quot; src=&quot;//www.youtube.com/embed/BeSAiTjdTtg&quot; width=&quot;754&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jjzheng.blogspot.com/feeds/652472732433996377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5477731108590363529/652472732433996377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/652472732433996377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5477731108590363529/posts/default/652472732433996377'/><link rel='alternate' type='text/html' href='http://jjzheng.blogspot.com/2014/04/interview-with-bob-rhubart-on.html' title='Interview with Bob Rhubart on Responsive WebCenter Portal @ Collaborate 14'/><author><name>JayJay Zheng</name><uri>http://www.blogger.com/profile/16152297865751937317</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefxhDJwkx3G8j8D8TTIpSeUGUPNyG623NcFXpvLnxyQ-ioc0r1b6ITxVVk3Pi1mTo8Rx58XqeD9wGnshRt7YzZ52ocNAyA63n4o1HkFb203izySCry05XhHaKwhuCbA/s220/Capture.PNG'/></author><thr:total>0</thr:total></entry></feed>