Passing User Context When Invoking ADF BC SOAP Web Services

Introduction ADF web applications often use session-scoped user context information that is also used in the ADF Business Components (ADF BC) layer. For example, the user language might be used to query language-specific data from the database. This article explains how this user context can be set up when accessing the ADF BC layer through […]

ADF-WebCenter Responsive-Adaptive Design Beyond

Introduction A topic that comes up frequently in many ATEAM customer engagements is what are the best practices for producing a responsive design for a WebCenter application. There are many informative blogs and presentations on how to achieve this through-out the web. The methodology and strategies used by the authors will often depend on the […]

Getting Portlet Queue Full Message on WebCenter Portlets

Introduction WebCenter Portal defines default parameters for portlets usage, which are very well suited for most of the cases. If the portal is under high load or performance test, portlets consumed from the portal could throw intermittently unavailable exceptions. In the portal log error message states that the queue is full and the pool is not […]

Going Mobile with ADF: Programmatically Invoking SOAP Web Services with Complex Types

Introduction This 5th article in the “Going Mobile with ADF” series explains how you programmatically invoke a SOAP web service from an ADF Mobile application. It illustrates how to handle in Java the complex type that might be returned by the web service, as well as how to set up the complex types that might […]

A Hidden Gem of ADF Faces 12c: The <af:target> Tag

Introduction In JDeveloper 12c, the <af:target> tag has been added, a very powerful new ADF Faces tag which can make your life much easier and more productive when building ADF Faces pages. This post discusses how you use this new tag, and explains how specific functional requirements that used to be mind-boggling to implement, are now […]

Customizing Session Time Out Pop Ups

Introduction In past posts, ATEAM has detailed how to customize the default behavior of the out-of-the-box (OOTB) session time out popups: tips-on-dealing-with-the-session-time-out-popup how-to-create-a-custom-session-timeout-page-for-webcenter-spaces An item that has frequently been asked to ATEAM is how to customizing the default strings that are in the OOTB session time out popups. This blog post will detail the steps […]

Going Mobile with ADF – Implementing Data Caching and Syncing for Working Offline Part I

Introduction With over 90% of internet traffic now coming from mobile devices, there is a huge pressure on companies to make their customer-facing applications suitable for rendering on smart phones and tablets. A-team is involved with a number of customers who are looking for ways to adapt their existing Oracle ADF applications and make them […]

Going Mobile with ADF – Running ADF Faces on Mobile Phones and Tablets

Introduction With over 90% of internet traffic now coming from mobile devices, there is a huge pressure on companies to make their customer-facing applications suitable for rendering on smart phones and tablets. A-team is involved with a number of customers who are looking for ways to adapt their existing Oracle ADF applications and make them […]

Going Mobile with ADF – Understanding the Options

Introduction With over 90% of internet traffic now coming from mobile devices, there is a huge pressure on companies to make their customer-facing applications suitable for rendering on smart phones and tablets. A-team is involved with a number of customers who are looking for ways to adapt their existing Oracle ADF applications and make them […]

High availability considerations for WebCenter Portal and ADF

Introduction High availability is very important in large WebCenter installations. It allows users to gracefuly switch from one node to another node in the cluster. This allows user to keep their session in case a node goes down. In order for this to work, some conciderations need to be made when implementing a WebCenter Portal […]

Improving ADF Page Rendering Time : Progressively Loading Taskflows

Introduction On a normal ADF page with multiple task flows, each of the individual task flows need to be initialized and their initial views created before the page can render. This makes it important to consider how the page design, and task flow usage affect the page load time when designing the UI for your ADF based […]

Optimizing WebCenter Portal Mobile Delivery

Introduction Page weight and page load times are two of the most common performance metrics used to measure a Portal’s performance. These are significant factors behind a portal’s success especially in the context of mobile devices. This article walks you through identifying and analyzing some common WebCenter Portal performance bottlenecks related to page weight and […]

New ADF Architecture TV YouTube Channel Launched

The ADF Product Management team has just announced the ADF Architecture TV YouTube channel.  The channel will publish new episodes on ADF design, architecture, development and deployment best practices each week, for a total of about 100 episodes. The channel has specifically been designed with small, discrete episodes on topics encompassing the whole ADF development […]

ADF Mobile – Browsing Using Swipe Actions

Introduction Using swipe actions to browse through a set of data or images is a common user interface pattern on mobile devices. This article explains a simple technique to add support for these swipe actions to your ADF Mobile pages in a declarative way. As part of this technique you will also learn how to […]

ADF Mobile – Preserving the Current Row Across Pages

Introduction  Unlike “bigADF”, the current row in ADF Mobile is not preserved across pages that bind to the same data collection in your data control. The standard approach to preserve row currency is labor intensive and not straightforward. In this article we will explain a more advanced technique to preserve the row currency which is […]

Error Handling in ADF Mobile

Introduction When writing ADF Mobile applications, you need to handle application errors and exceptions. These errors might be unexpected, for example a failing connection to a remote server, or expected errors like violation of some application business rule. The errors or exceptions might occur in the primary request thread, or in a secondary thread running […]

New FREE ADF Mobile training released

Oracle has launched a new, interactive, online, and FREE ADF Mobile course: Developing  Applications with ADF Mobile. From the announcement: “The course blends media-rich content to bring you  interviews with the experts, engaging interactions, and inviting demos and graphics that keep  you interested as you learn all about ADF!  Developing Applications with ADF Mobile will  […]

ADF JavaScript Partitioning for Performance

Introduction ADF UI components are complex entities, each containing one or more html, css and javaScript (JS) elements. When a component is rendered the html tags are stamped on page with right css style classes attached. ADF is smart enough to download only the javaScripts belonging to the components rendered on the page. If individual […]

Adventures in WebCenter Skinning : af:table with Custom Pagination

Since the requirement on how to effectively skin a custom WebCenter Portal application frequently becomes a major topic in many of my customer egagements, I have decided to posts a series of blogs that will provide some insight on skinning some of the out-of-the-box (OOTB) ADF components.  The first component skinning example that I will cover is the ADF table. 

Most of the time when I see a custom skin implementation for a table, the code for the table is actually made up of a main header, proceeded by an iteration-type component – af:forEach or af:iterator – then proceeded by the row(s).  The actual row would be constructed as a container, which can hold other containers, that holds the record items.  This approach does make skinning the table much simpler, but there can be more components needed to construct the table itself.  Moreover, some of the OOTB af:table behavior, for example: column sorting, and filtering to name a few, will have to implemented as custom code.

The image below is how the sample table looks without any custom skining:

 

The image below is example of the same af:table with a custom skin.  Beyond the obvious look-n-feel (LnF) difference of a non-skinned table, there is also the addition of a custom pagination feature.  While the (default) scroll-bar behavior maybe acceptable for a web-based application, it is not a desirable feature for a typical web-site portal design.  In addition, in my experiences with customers on the WebCenter platform, the custom pagination behavior is one of the most requested requirements. 

Tips on Dealing with the Session Time Out Popup

During performancing tuning engagements, the ATEAM frequently recommends that the HTTP session timeout value for WebCenter custom portal applications be set to lower value (for example:10 minutes) than the out-of-the-box value of 45 minutes.  The lower number helps the server stay performant particularly during significant load.  The longer the session time, the longer the server will have to hold memory until the inactive session(s) expires.  Configuring the session timeout value is simple and can be done through the web.xml:

<session-config>
  session-timeout>10</session-timeout>
</session-config>

Once this value is set, a warning popup will appear (default) two seconds before the session is set to expire.  After the warning has expired, the final page expire message appears.

Having these messages appear are usually justified in many custom portal deployments.  However, in other custom portals, a session can equivalate to being logged in.  So in the instance of a “public” user, the appearance of these messages may not be an expected behavior.  The good news is that there is a easy configuration setting to disable these messages from appearing.  The following configuration settings in the web.xml do all of the work:

<context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>client</param-value>
</context-param>

<context-param>
  <param-name>
     oracle.adf.view.rich.sessionHandling.WARNING_BEFORE_TIMEOUT
  </param-name>
    <param-value>0</param-value>
</context-param>

The STATE_SAVING_METHOD value is set to “client”, and the value correlates to value needed for a page’s af:document tag.  This tag, has the stateSaving property set to “default”, which means get the value from the context param.  Notice in the WARNING_BEFORE_TIMEOUT value has been set to 0.  Out-of-the-box, the default value is 120 seconds.  Any value less than the default will disable the popup. 

The bad news is that the setting only handles the popup.  Any subsequent page action, partial-page event, or navigation through a commandLink* will produce the unhandled ViewExpiredException (ADF_FACES-60098) in the Faces, RESTORE_VIEW, lifecycle:

* Note: For a WebCenter custom portal application the use of goLinks that use the navigation model based prettyURL as the destination is preferred.  In addition, goLinks would not have this issue.

One way of handling this would be to extend the portal application to support a custom exception handler.  In this blog post, I would like to introduce an alternative approach.