Posts Tagged ‘Bug’

Bug Blog 9: WebCenter Analytics Timeouts

Wednesday, January 26th, 2011

In our last post, we touched on the unusual nature of BEA’s acquisition of Plumtree, and how BEA largely kept the portal product lines separate with ALUI and WLP.  But that’s not a completely fair assertion: BEA did have a longer-term goal, integrating the two portal “front-ends” through various back-end tricks (such as Ensemble and WSRP).  Similarly, while you may have read that post as a somewhat bleak assessment that my opinion is WCI is dying a slow, painful death, in reality Oracle has stated plans to provide integration services between the products through similar means.  So you could use a WCI front-end with integration through Ensemble and WSRP to other WebCenter Services such as Blogs and Wikis.

The reality, though, is that these types integrations take time – and sometimes, lots of it.  As evidence of this, look no further than Aqualogic Analytics.  When BEA acquired Plumtree, one of the gaping holes in WLP was Analytics, or usage reporting of the product.  Plumtree Analytics was becoming a solid product, but it was very tightly integrated into the Plumtree portal.  So the decision was made to try and abstract some of the major pieces out, with the thinking that these abstractions could be useful elsewhere.  For example, the ill-fated Security Services (once used by the also ill-fated PEP line and now just built into Analytics) and the existing Directory Services came of this integration attempt.  The idea was that by abstracting out security and user management:

  1. These services would be available to other applications that were developed down the line
  2. Analytics would be more compatible with WebLogic Portal, which also had an LDAP repository to access user and group information

While I think that if more time had been available for the integration to become more seamless, the problem is that no one won in this attempt because it was aborted too early.  I have no idea whether WLP still supports Analytics integration, the old Security Services are now just built into the product as a phenomenally complicated set of DB tables that make little sense, and Directory Services are a dramatically inefficient way to access user and group information.

Case in point – I’ve had a couple of clients report Analytics timeouts for some users, but other users were seeing the proper report:

How does this relate to the whole Plumtree/BEA/Oracle integration saga? The old Plumtree Analytics application used a SQL query called something like QUERY_USER_FLATTENED_GROUPS.  Basically, this was a Plumtree Portal-specific SQL query that, given a user ID, would spit out all nested groups that that user was a member of.  So if a user was a member group A, and Group A was a member of Group B, the query would return both Group A and B.

The ALUI version of Analytics, though, utilized Directory Services so that group membership didn’t need to come from PT-specific SQL queries.  It could come from generic LDAP queries.  The problem is, LDAP doesn’t have a mechanism like QUERY_USER_FLATTENED_GROUPS, so for any given user, Analytics needs to query LDAP for the groups a user is in.  And then, Analytics needs to check to see which groups THOSE groups are a member of.  And so on, and so on.  You’d be surprised – through inheritance, you may be a member of thousands of groups, and rather than a single SQL query, you’re now dealing with tens of thousands of LDAP calls.

Bottom line:  Integrations and product convergence can work, but they’re phenomenally complicated, because every piece of abstraction added can cause unanticipated side effects.  Which is probably why Oracle is taking this whole process pretty slowly.

Full Bug Report after the break for your convenience. (more…)

The Sad, Sordid Story of WCI Analytics and Its Three Critical Fixes

Sunday, January 2nd, 2011

Back in April, I wrote a WebCenter Interaction Patch and Hotfix Round-up. Since then, a couple of additional critical fixes have been released for Analytics. And you probably need them.

If, after upgrading to WCI Analytics, you’re not seeing any new events being recorded, check any one of your Analytics Views in your database. Chances are, you’re seeing a NULL value for VisitID:

Oracle has released three separate critical fixes trying to get this finally working, and from my experience you need to install the last two listed in the table below.

The real problem is, this isn’t just a matter of swapping out files, since for each month that passes before you notice this problem, more tables will continue to have these invalid values. And Oracle’s fix in the last patch set is FAR from ideal if you want to get those VISITIDs recreated. I won’t bore you with the details (trust me, you’ll be bored enough running this crazy fix), but suffice it to say that there are no less than 15 steps. And during those steps, potentially dozens of SQL scripts are generated (depending on how many months you need to created). For each month that you need to restore, you have to stop the collector, run a couple scripts, start the collector, then let it run a while to recreate everything. Wait a while, verify the number of untagged events you have, repeat:

How long does it take? Quoting from the Readme file: “Tagging old event data can take days or weeks to complete depending on the volume of your event records. Internal tests repaired the data at a rate of 150k to 300k events per hour.”. DAYS or WEEKS!?

In practice, I’ve run through each of these in about a day, going back about 6 months on moderately sized installations. But you should plan on getting these updates in there sooner than later, because the longer you wait, the longer it’s going to take you to repair all those busted tables. (more…)

Bug Blog 6: Fix Broken File Downloads in 10gR3 (Part Trois)

Sunday, June 20th, 2010

*sigh*.  You’ve upgraded from ALUI to WCI 10gR3, and your Knowledge Directory links got all screwed up, didn’t they?  HTML files now throw an open/save dialog, some documents don’t open, you can’t copy links by just right-clicking them and choosing “Copy Shortcut”, and IE throws a popup blocker when you click a link in the Knowledge Directory, doesn’t it? 

You got the “To help protect your security, Internet Explorer blocked this site from downloading files to your computer” blues, huh?

I’ve tried creating a Plumtree Filter, and that worked pretty well, but not quite enough.

I’ve tried tweaking the Portal’s Javascript files, and THAT worked pretty well, but again, not quite well enough.

So, today, my friend’s, third time’s a charm:  rather than trying to fix this on the server side, we’re going to knock out this issue once and for all on the client side.  Check out those previous blog entries for a more detailed description of the problem, but basically, it’s because the portal uses a crazy convoluted way of opening documents via javascript. 

What we’re going to do today is stick some javascript in the footer of the page.  This JavaScript is going to simply find all those back-asswards links and replace them with NORMAL <a href=xxx target=_new> links.  If you add it to the footer of your site (specifically, the footer used for the KD, but the code is smart enough not to do anything if it’s on all pages), it should be able to take care of the rest.  Just make sure you add it to the Presentation Template and not the Content Item, because you-know-who only knows what a mess the out-of-the-box rich text editor is with javascript and adaptive tags.

The code after the break should be self-explanatory, but as always, if you’ve got a question or comment, feel free to post it here.  Also note that this code only fixes the download links; it doesn’t kill that “Open/Save” dialog box for things like HTML files.  For that you’ll still need the Plumtree Filter. (more…)

Kill those pesky MSXML 5.0 warnings in ALUI and WebCenter Interaction

Saturday, June 12th, 2010

This is annoying, right? 


Ah, we’ve all seen that wacky IE warning: “This website wants to run the following add-on: ‘MSXML 5.0 from ‘Microsoft Corporation’…”  Sure you could just accept it and move on, like we’ve been doing for years:


… but your users were trained better than that, right?  They know not to accept an add-on unless they know what it does.  And, well, since even I have no idea what this does, let’s take a look at how to just get rid of this message.  I found this little gem of a fix in Oracle’s Support Center; apparently this has been a bug since Jan 2007: (more…)

Bug Blog 5: Broken Filters in WebCenter Analytics 10.3.0

Thursday, May 27th, 2010

WebCenter Analytics 10.3.0 has a feature to “Select All/Top/Bottom Options” when you edit various roles.  In theory, this is a nice feature because it allows you to select, well, “all”, “top” or “bottom” of different kinds of lists.  In practice, it’s tragically broken, and you’ll have absolutely no idea why if you look at the logs without upping the logging threshold to debug.  In fact, even once you turn on debugging in the logs, you’re still not in much better shape.

The Symptom: Filters don’t work when the “Select All/Top/Bottom Options” option is turned on for a Role in Analytics Administration.

The Solution: Turn off the “Select All/Top/Bottom Options” for the various roles within Analytics (under “Select Utility: Analytics Administration”), and restart the Analytics UI service.

The Use Case:

I have “Select All/Top/Bottom Options” turned on.  My UI for the “Page Traffic Report Preferences” seems decent enough – I’ve got a drop-down showing different types of pages and an option to filter on certain communities.  Here I’ve picked all pages, and chosen only TWO communities from the list:

… but when I view the Page Traffic Report on my community, in the report I see every single page in the entire portal – no filter applied:


Publisher JavaScript/JSpell Problems? Fix ’em here.

Sunday, May 23rd, 2010

Ah, Plumtree Publisher.  We had a good run; I’ve loved you, I’ve hated you.  I’ve even tried to throw you a bone by developing a better editor to replace your terrible WYSIWYG editor in AquaLogic Publisher 6.5, and a utility to replacing glaringly absent features. But I mean, c’mon, it’s like you don’t even try any more.

If you, dear reader, have written similar missives to the oft-maligned Publisher editor, this tip is for you.  Specifically, if you’re getting JavaScript errors in various Publisher administrative pages and it seems hopelessly broken, chances are the problems are with the new jSpell spellchecker (you’ll see file names like jspellSettings_UTF-8.js in the IE error window):

This problem typically occurs when you have multiple experience definitions and are accessing your WebCenter portal with different base URLs.  The reason is that Publisher creates absolute URLs to the spell checker JavaScript files, and the portal’s link transformation seems to be broken by creating the wrong base URLs for the gateway (more on this another time; I can only rant about one thing at a time…).  Consequently, Internet Explorer refuses to run the Javascript when it’s being executed from a different base URL.


Bug Blog 4: Fix Broken File Downloads in 10gR3 (Part Deux)

Monday, May 3rd, 2010

Last week I provided portal filter code to fix some elements of opening documents in WebCenter Interaction’s Knowledge Directory (and Search and Snapshot Queries).  This week is another follow-up on that theme, and I’ll provide another piece of code to continue cleaning up the mess that is the Knowledge Directory Downloading Clusterf*ck (in IE at least).

Ever gotten this little present after doing an upgrade to 10gR3, when trying to open a document in the Knowledge Directory using IE7 or IE8?


Ah, the old “To help protect your security, Internet Explorer blocked this site from downloading files to your computer.”  What’s even more ridiculous, if you “accept” the download, it STILL doesn’t work because IE tries to reload the page, and WCI is very stupid about how it opens this popup window (see how that address bar shows “about:blank”?).  It seems this only happens in IE, and only if you have adaptive layouts disabled with “open documents in new window” enabled, so it doesn’t affect everyone.  But I die a little on the inside every time I see that stupid thing: yes, my friends, I am an empty, hollow shell of a consultant.

Fortunately, I decided to seek redemption for WCI and myself by proxy, and checked out the HTML source for a typical file open link.  It’s kinda hilarious:

<a href="#" onclick="var currentWin = PTCommonOpener.openInNewWindow('', 'Opener_18_1322446', 800, 600, true); currentWin.location= 'http://server/portal/'; return false;">Doc Name</a>

Whhaaaaaaa…!?  Sure I know there are dozens of ways you can open a document in a popup window, and many have their advantages (for example, by using JavaScript you can control the size and layout of the window), but I’d be hard-pressed to come up with a worse way to open a document.  I’ve always hated the fact that you can’t just hover over the link to see the URL, and can’t right-click and copy the shortcut to mail to someone later. (Tip: use adaptive layouts and these problems go away!).  Or they could have at least just done a method in that onclick event.  OK, so they wanted to use a wrapper method – that’s fine – but the PTCommonOpener.openInNewWindow actually takes a URL paramater, so they could have just passed the URL into that function, rather than creating a new, EMPTY document and then trying to use Javascript to load the document into that window.  At very least they could have put the document URL in the “href” parameter so it’d work without JavaScript (and be 508-compliant) and users could copy the links with a simple right-click.

OK enough rambling.  On to a solution: (more…)

Bug Blog 3: Fix Broken File Downloads in 10gR3

Thursday, April 29th, 2010

Wow, was WebCenter Interaction 10gR3 a step backwards in opening documents, or what?  I’ve seen wide-spread problems opening docs in the Knowledge Directory, Search Results, and Snapshot Queries, and even written two posts on the topic already.

There are two main problems: poorly implemented document open handlers (which I’ll discuss in my next post), and that pesky Content-Disposition header that tries to force the browser to throw up an “Open/Save” dialog instead of just opening inline (which is definitely useful for HTML and Office files in particular, where users just want to view the documents in their browser without having to save ’em first).  A third but ancillary issue is that occasionally the portal gets the MIME type of the document wrong in the Content-Type header, which is typically using application/octet-stream and doesn’t give the browser any clue about what type of file it is.

In the past posts I’ve described using BigIP iRules to remove the Content-Disposition header, but I ran into another client issue recently where just killing this header isn’t enough.  Take the following response headers for a document transfer that is NOT using the iRule to kill the Content-Disposition header:

This PowerPoint file, when clicked on in the portal, will throw the open/save dialog, but what if we wanted it to give the browser the option to open in-line?  We’d get rid of that Content-Disposition header.  Here’s the problem:  if we do that, the portal is returning a Content-Type of application/octet-stream.  Which means, without the file extension in Content-Disposition, the browser has no idea what type of document this is, so it throws up a “FIND PROGRAM/Save” dialog box instead of an “OPEN/Save” dialog box.

The solution to this problem would be to drop the Content-Disposition header, but use the file extension to fix the Content-Type while we’re at it (to application/  But now our iRules are getting complicated, and not everyone has BigIP anyway.  Fortunately, my love/hate relationship with shifted much more to the former when i found this: How to Eliminate the ‘Save/Open with’ Prompt when Opening HTML Files [ID 971003.1].  Then, of course, it shifted back to the latter when I realized that I found this article by complete dumb luck navigating the terrible interface, and the article is nowhere to be found searching through Google. But that’s another story.

At any rate, a solution was clear: you can write a .NET or Java FILTER to manipulate headers before they’re returned to the browser!  As such, I took the code from that article and expanded on it with a .NET filter of my own, which will:

  1. Remove the Content-Disposition header selectively on different file types
  2. Change the Content-Disposition header to use “inline” instead of “attachment” instead of just deleting the header (this seems to work with some browsers; a brief discussion on the differences is here)
  3. Fix the Content-Type header if the file name extension doesn’t map the MIME type the portal thinks it is
  4. Do all this through a filter and a dynamically loadable varpack that allows different configurations based on the type of file being served.

So while it’s a bit optimized in the sense that it only looks at responses being gatewayed through the portal, it’s still kind of a hack because personally, I think this should be an option in the portal in the first place rather than adding the additional overhead of a filter.

But, nonetheless, it seems to work well, and you can download the code here and the varPack file here.

If you’d like assistance with actually building and deploying this, or porting to Java – drop me a line.

Wall of Shame Rant: Oracle Support and Maintenance

Saturday, March 27th, 2010

In my last Wall of Shame rant, I blasted some shady spammer and had no qualms about it.  But this time is different:  I’m writing this post in a sincere effort to get Oracle to look at some of its policies and procedures, specifically around support.  Oracle has some stellar products and decent support, and in defense of Oracle’s support organization, support people have a tireless, thankless job, dealing with irate customers who think that software should never have problems.  So, while occasionally customers have it tough, customer support often has it much tougher (NSFW for a LOT of language; kudos to that Dell support guy for keeping his cool and staying on the line).

Oracle support, I salute you for the tireless, thankless job you have, but please stop telling clients their problems will be fixed with an upgrade when you’re not sure it will, or worse, know that it won’t.  Also, please honor Oracle’s support policy and don’t withold patches until a client gets to the latest version of the software, knowing that by the time they do, another patch release will probably come out, starting the whole cycle all over.  Of course, it’d be different if the upgraded version actually fixed the problem, but in the below rant, my client couldn’t even submit a patch request that affected the 10gR3 version of Analytics because they weren’t on the “latest version”, which was ridiculous because the latest version didn’t fix the problem either.


Bug Blog 2: Give the Guest user access to KD Root

Wednesday, February 17th, 2010

The Guest user in the Plumtree – and ALUI, and now WCI portal – is a mixed bag.  On the one hand, I usually advise my clients to never give this user – or the EVERYONE group – access to anything in your portal if you don’t want your information showing up somewhere it shouldn’t.

On the other hand, this advice can bite you.  Have you ever gotten an “Error displaying Dropdown menu tabs” error in the nav bar when using the JS drop-down menus?


Well, in at least one case the problem is simple:  Give that EVERYONE (or at least the respective GUEST users) access to the root directory of your Knowledge Directory.  No need to give that user access to any cards or folders – just the root directory itself.  It seems the code in 10gR3 chokes if it can’t read this directory when trying to display the Directory drop-downs.  In fact, this is similar to Bill Benac’s Bug about missing footers in 10gR3 breaking the page (incidentally, I’ve run into the same problem with headers) – it seems 10gR3 isn’t quite as “forgiving” as previous versions were regarding error handling.

This quick fix should restore your menu:


… but there are other reasons you can run into this error.  I’ve got another post pending on some other root causes of this problem (spoiler alert: give SELECT privileges to the EVERYONE group for your headers!); in it I’ll offer some instructional advice on how to diagnose the root cause of problems like this.