The First Step of a Journey that Began Five Years Ago

Note: I will update this article with a link to the application once the customer has done their own announcements in accordance with their external communication policies and procedures.

In the Beginning there was BEA WebLogic Portal

In 2008, Oracle acquired BEA Systems. 19 days after the official merger, Oracle announced that premiere support for WebLogic Portal would end in 2014. The current policy document (latest can be found on http://www.oracle.com/us/support/lifetime-support/index.html) has moved this date out to 2018, though they have been sticking to the “no new feature release” policy since the 10.3.2 release in 2010. 10.3.2 was intended to be 11g, except it came out a year later than originally announced at Open World in 2008 and was released as a “dot” release of 10g despite the fact that it had several major enhancements and new features.

I had been hired by BEA in 2006 as a WebLogic Portal consultant due to my extensive experience with the product as a consultant for netNumina Solutions. In 2009, Oracle released WebCenter 11g and I attended the Masters Training two weeks prior to the GA date where I learned just how very different the two portal products are.

Which Way Do We Go?

I have been unable to find any officially published direction for WebLogic Portal customers who wish to migrate to WebCenter Portal, though I have had numerous conversations with engineers, architects, consultants and product managers about how to go about this. These discussions revealed three general approaches.

One approach is to simply re-build the portal in WebCenter. This is quite viable for very small portals and avoids the pitfall of other approaches, which is the need to maintain two architectures. It is not a very practical approach for medium to large portals as it is a great deal of effort and expense over a long period of time to just to provide the same functionality.

Both the second and third approaches are about transitions. On method is to create the new WebCenter portal and build all new features there and link over to the legacy WebLogic Portal for existing features. This is very quick and easy to deliver but difficult to maintain.

The third approach is staged migration. This approach creates the a new WebCenter portal that is the where users log in and interact, with the legacy functionality being exposed using WSRP. This solution allows for the immediate introduction of the WebCenter architecture and minimizes maintenance cost. By following a policy where any legacy portlet that requires modification be first moved over to WebCenter, Business and Technology stake holders can plan the complete retirement of the WebLogic Portal infrastructure as best suits the Enterprise as a whole.

Every Journey Starts with a Sprint

This month marks the deployment of the third solution to production for my current client. It is a medium-sized, high-complexity portal and it was brought from inception to production in six months using a mixed-Agile approach. It consists of 20 portlets produced by the legacy WebLogic Portal application and two legacy JSF portlets that were migrated in two days because they include file download functionality that made them easier to migrate than to dig through the documentation to fix as WSRP. The portal also includes managed content from WebCenter Content and a shared navigation structure with a legacy Struts 1.1 application.

The Enterprise Portal Architecture for the customer is to migrate all legacy functionality from WebLogic Portal to WebCenter Portal over the next year in staged releases that will also include the introduction of new features and functionality.

If you found this interesting, please share.

© Scott S. Nelson

Stopping Sticky States in WebLogic Portal Beehive Producers in a WebCenter Portal Consumer

Recently had an issue where Beehive pageflows would retain their state when the user navigated to another page and returned. The business owners would not accept either the use of a button to start over or the ever-popular “Well, then don’t do that”. Understandable given it is a public site.

Without putting you through the tedium I went through to obtain the solution from Oracle Support (https://support.oracle.com/epmos/faces/DocumentDisplay?id=1419774.1 for those with an account, and thanks to Ming Kwok for providing it), turns out there is a setting accessible from the WebCenter Portal Page Definition that will cure this ill:

portletStateLifetime="ViewScope"

The above is an attribute of a portlet element. Note that in this project, all portlets are placed at design time (not fun with WebCenter, BTW). We did a bulk update of the entire application by doing a find and replace of

retainPortletHeader="false"

with

retainPortletHeader="false" portletStateLifetime="ViewScope"

Additional effort is required for JSF portlets, which a colleague is working on will be posted here when he completes his solution.

If you found this interesting, please share.

© Scott S. Nelson

Stopping _afrLoop Looping Refresh

While building out a new environment I found that my WebCenter portal application URL would go into a long cycle of refreshing the page at login when more than one managed server in the cluster was running.

To save many of you the long process of research I went through, the key piece to my puzzle was that SiteMinder is used for perimeter authentication. The fix for this combination (WebCenter and SiteMinder) is to change the WebLogic cookie name from JSESSION to anything else and ALL_CAPS. In my case, there was already a custom cookie name, but it was lower case.

While I did not test each part of the fix, I’ll include the rest and let someone else do so. That is, setting the cookie name as the same in both the Apache plug in and the WebCenter application. For the Apache plug-in, the cookie name is managed by WLCookieName. In the application, it is done by setting the cookie name in weblogic.xml:

<session-descriptor>
 <cookie-name>MYWEBCENTERCOOKIE</cookie-name> 
</session-descriptor>

Also, there were many posts suggesting to remove the Trinidad filter to address this. That is the wrong solution in most cases and will lead to new and annoying issues.

Official solution can be found at Oracle Support Document 1491984.1 (ADF Application Redirects Browser Indefinitely) can be found at: https://support.oracle.com/epmos/faces/DocumentDisplay?id=1491984.1. I found the all-caps naming convention on some post, and don’t know if it is necessary but do know that it is working now.

If you found this interesting, please share.

© Scott S. Nelson

Oracle DB Tip Link for the Non-Oracle DBA – Resetting Passwords

This blog saved my day: http://sai-surya-talk.blogspot.com/2011/06/resetting-oracle-xe-system-account.html

For a Linux adaptation of the above:

log in as a member of the oracle and/or dba group or sudo as same

echo $ORACLE_SID
echo $ORACLE_HOME

if either is blank,
set ORACLE_SID=XE (or your service id)
set ORACLE_HOME= (Eg:/u01/app/oracle/product/11.2.0/xe)

locate sqlplus

[RESULT FOUND PATH]sqlplus / as sysdba

Example:

/u01/app/oracle/product/11.2.0/xe/bin/sqlplus / as sysdba

alter user [SCHEMA_OWNER] identified by [SCHEMA_PASSWORD]

Example:

alter user WCSDGE_OCS identified by webLogic1

If you have lots of system-generated users such as from Oracle RCU, you can find them all with:

select * from all_users;
If you found this interesting, please share.

© Scott S. Nelson

Finding What is Not There in Eclipse

In my current project there is a need to add some parameters to portlet definition files. The first pass through we only updated the ones we knew needed the update. As is often the case, what we knew then and what we know now changed, and it became a better approach to simply add the values to all of the portlet definition files. Rather than sorting through one by one to find which had not been updated, I did a search and found a stackoverflow thread about how to do these searches in Eclipse. The thread included the following example of a regular expression for finding files that do not include a particular value:

(?s)A((?!YourSearchText).)*Z

For those who like pictures, below is how the search box is used with regex to find files missing the string:

EclipseRegExSearchExample

If you found this interesting, please share.

© Scott S. Nelson