Uncategorized

With the
release of the 11.1.1.6.2 BP1 SampleApp V207, I’ve taken a moment to dissect
the usage of the D3.js calendar contained within since it is one of the
examples frequently pointed out to showcase new visualisation capabilities.
Let’s dive a bit deeper into this to understand the way the D3 calendar works and what is necessary to embed this
in any other OBIEE installation.
As-Is in
SampleApp:
Checking
the Answers Criteria block, the analysis is quite straight-forward. “Color Low”
and “Color High” being simply presentation variables grabbing the values passed
from the “Red / Green Color Limit” prompts on the dashboard page.
The actual
functionality of the D3 calendar is contained and controlled by the two narrative
views of the analysis which I will be calling the “Context Narrative” and “Content
Narrative” respectively for the purpose of this post:

Context
narrative:


Key here are
the four JavaScript variables which will be used by the code within the content
narrative below. These are filled by the values collected from the 1st
line of the analysis data set (Rows to display = 1). Generally, when analysing
the D3.js examples, it is hugely helpful to add a simple table view to the
analysis in order to see what the data stream actually brings along from the OBI
server since most examples use mixtures of column references and variables.

VERY
IMPORTANT: year_range2 must always be the end year +1!
You don’t
have to provide these values through dashboard prompts and simply read the from
the data set, but having a means to restrict the data displayed is always comfortable.

Content
narrative:

Prefix:

<script type=”text/javascript” src=”/analyticsRes/d3/d3.v2.js”></script>
    <link type=”text/css” rel=”stylesheet” href=”/analyticsRes/d3/lib/colorbrewer/colorbrewer.css”/>
    <link type=”text/css” rel=”stylesheet” href=”/analyticsRes/d3/examples/calendar/calendar.css”/>

    <div id=”my_chart”></div>
    <script type=”text/javascript”>
var margin = {top: 19, right: 20, bottom: 20, left: 19},
    width = @{Width}{720}- margin.right – margin.left, // width
    height = @{Height}{136} – margin.top – margin.bottom, // height
    cellSize = @{CellSize}{12}; // cell size

var day = d3.time.format(“%w”),
    week = d3.time.format(“%U”),
    percent = d3.format(“.1%”),
    format = d3.time.format(“%Y-%m-%d”);

var color = d3.scale.quantize()
    .domain([cl1,cl2])
    .range(d3.range(9));

var svg = d3.select(“#my_chart”).selectAll(“svg”)
    .data(d3.range(year_range1, year_range2))
  .enter().append(“svg”)
    .attr(“width”, width + margin.right + margin.left)
    .attr(“height”, height + margin.top + margin.bottom)
    .attr(“class”, “RdYlGn”)
  .append(“g”)
    .attr(“transform”, “translate(” + (margin.left + (width – cellSize * 53) / 2) + “,” + (margin.top + (height – cellSize * 7) / 2) + “)”);
svg.append(“text”)
    .attr(“transform”, “translate(-6,” + cellSize * 3.5 + “)rotate(-90)”)
    .attr(“text-anchor”, “middle”)
    .text(String);
var rect = svg.selectAll(“rect.day”)
    .data(function(d) { return d3.time.days(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
  .enter().append(“rect”)
    .attr(“class”, “day”)
    .attr(“width”, cellSize)
    .attr(“height”, cellSize)
    .attr(“x”, function(d) { return week(d) * cellSize; })
    .attr(“y”, function(d) { return day(d) * cellSize; })
    .datum(format);
rect.append(“title”)
    .text(function(d) { return d; });
svg.selectAll(“path.month”)
    .data(function(d) { return d3.time.months(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
  .enter().append(“path”)
    .attr(“class”, “month”)
    .attr(“d”, monthPath);

    var csv =[];

 

What happens
here that I can influence?
This
controls the size of the rendered calendar. Parameters are passed from the dashboard
prompt via presentation variables. If you don’t want users to be able to choose
this, simply put static values.
 
Date format
is controlled here. VERY IMPORTANT: you must match the date format in this part
of the script to the date format provided within the data set:
means “format
= d3.time.format(“%Y-%m-%d”);”
If your
date picture is for example DD.MM.YYYY (e.g. 14.08.2012), then you need to
adjust the script to:
format = d3.time.format(“%d.%m.%Y “);

Specifies
the colour limits (.domain) as retrieved by the dashboard prompts.

Controls
the display of the year number in front of the rectangles representing the
year:
Leave the
rest as-is.
Narrative:
csv.push({“Date”:”@1″,”Metric”:”@2″});
Simply
retrieves the values for date and measure from the data set (per row!). Leave
this as-is.
Postfix:
  var data = d3.nest()
    .key(function(d) { return d.Date; })
    .rollup(function(d) { return d[0].Metric/100; })
    .map(csv);

  rect.filter(function(d) { return d in data; })
      .attr(“class”, function(d) { return “day q” + color(data[d]) + “-9”; })
    .select(“title”)
      .text(function(d) { return d + “: ” + percent(data[d]); });

function monthPath(t0) {
  var t1 = new Date(t0.getFullYear(), t0.getMonth() + 1, 0),
      d0 = +day(t0), w0 = +week(t0),
      d1 = +day(t1), w1 = +week(t1);
  return “M” + (w0 + 1) * cellSize + “,” + d0 * cellSize
      + “H” + w0 * cellSize + “V” + 7 * cellSize
      + “H” + w1 * cellSize + “V” + (d1 + 1) * cellSize
      + “H” + (w1 + 1) * cellSize + “V” + 0
      + “H” + (w0 + 1) * cellSize + “Z”;
}
</script>

What happens
here that I can influence?
For the SampleApp
example, this transforms the values retrieved from the data set into an index representation
for transformation into a percentile representation in the tooltip display.
If you want absolute
values, simply change
“.rollup(function(d) {
return d[0].Metric/100; })”
to
“.rollup(function(d) {
return d[0].Metric; })”

This colours the date
rectangles and the actual tooltip with date information and the added percentile
representation of the measure. Here, if you want absolute values, simply change
“.text(function(d) {
return d + “: ” + percent(data[d]); });”
to
“.text(function(d) {
return d + “: ” + data[d] });”
Leave the rest as-is.
So what do you need
all-in-all to transplant this into any OBIEE implementation?

1.) The
D3 libraries contained in the d3 and d3-cloud folders. Quickest way – if you
have the SampleApp lying around – is to just grab them from the analyticsRes
folder of the VirtualBox and slap them into your own analyticsRes

2.) An
analysis on the date (day!) grain with some measure. Since you can either
hard-code the time ranges, size and colour limits, those two are really the
bare minimum for this D3 calendar to work.
That’s it. Bob’s your
uncle.

UPDATE: Since the D3.js libraries are only dependent of the final browser interpreting the generated code (IE8 will NOT work!), you can transplant this into any version of OBIEE that you fancy. This functionality is NOT tied to OBIEE 11.1.1.6.

Uncategorized

 The long awaited “Oracle Business Intelligence Enterprise Edition 11g: A Hands-On Tutorial” (Packt publishing) by Christian Screen, Haroun Khan and Adrian Ward was finally released two weeks ago (Amazon) and I got the hard copy delivered today (haven’t tried the Kindle version yet…).

As I have been hanging around Oracle BI and its various ancestors since quite a while I was eagerly looking forward to this one – as well as Marks forthcoming book – for several reasons:
First of all it always boggled my mind as to just how someone would go about packing the OBIEE 11g “basics” into a couple of hundred pages when almost each topic on its own (WLS, security, infrastructure, RPD et.) would easily fill a complete book.
Secondly, as I split my time between projects and training I’m alway interested to see the different approaches taken to convey certain messages, teach certain topics and dispell certain sales claims.
Last but not least…I simply can’t spend that much time on writing these things together (see immediately below).

First impression after a cursory glance at the table of contents and browsing some chapters: thank the heavens that someone took the time to write all of this up an give me a whooping 600+ bound pages to slap people with rather than just saying “RTFM” 🙂 …especially when there wasn’t really any “M” of this kinds o far.

Going end-to-end from explaining the basic architecture, through the installation, the RPD and webcat, action framework and on to OLAP/Essbase integration, the book covers all the basic subjects with a seriously nice hat-tip “Reporting Databases” in chapter 7.
That last one definitely being a chapter which made me smile since more often than not one can see people storming off to “do business intelligence” (read: draw some reports and extryct some lists) without thinking about the basics: the data and the way it is modelled. Always reminds me of a mantra in the old Siebel Analytics courses: “Model first!”

The books is clearly written with the KISS principle in mind and manages to stick to that principle very nicely. The structure’s clear and proper and some of the graphs are especially funny for us old-timers as they point way back to NQuire. Links to detailled descriptions in the official Oracle documentation are provided where necessary and should never be disregarded. This being a hard-copy and OBIEE evolving at a steadily increasing pace, those can come in very handy when analysing a certain component or behaviour in a specific version of the product.

Also, the book provides good links to supporting material; including the complete database, web catalog and styles and skins used for the examples in the book. A very nice touch since this will allow anyone to reproduce things step-by-step rather than having to adapt the books content to his/her own situation or vice versa which is a huge plus for people newly hopping on to the OBIEE train.

I’ve kept it quite high-level since I suspect everyone is clever enough to read the detailled outline in the provided links here and since my judgement is quite simple: if you’re an OBIEE starter: get it. If will help you as a go-to place or aide-mémoire for most “how did this work again?” questions.
If you’re coming from 10g and looking forward to migrating to 11g: get it. It does a good job of painting the big picture, explaining the architecture, the components and how it all works together, thereby taking the edge off “the beast that is 11g” (admit it guys, it can be overwhelming).

Personally, I will definitely use it as supporting material / a hand-out for my beginners courses, bootcamps and onboarding of new team members like I do with Kimballs bible.

So kudos to Christian, Haroun and Adrian! Along with last weeks release of the new 11.1.1.6.2 BP1 Sampleapp v207 this will provide good material for the next couple of rainy days (read: me getting into troubles for hanging around work topics even at home ;-)).
Next up: Marks book. Really looking forward to that one now!

Uncategorized

After an OBIEE 11.1.1.6 in-place upgrade I accidentally found weird warnings in the startup log of WebLogic since the upgrade. “By accident” since the server started nicely and was available without loss of functionality or performance, so I never checked in detail what happens during startup.

The WLSStart.log contained the following nice list:

{May 1, 2012 9:36:03 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “discussion:Response” has no key column.  It will not be collected.}
{May 1, 2012 9:36:03 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_bi_instance:essbaseServerMetrics” has no key column.  It will not be collected.}
{May 1, 2012 9:36:03 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_bi_instance:wls_app_rollup” has no key column.  It will not be collected.}
{May 1, 2012 9:36:03 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_bi_instance:wls_web_rollup” has no key column.  It will not be collected.}
{May 1, 2012 9:36:03 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_bi_instance:wls_server” has no key column.  It will not be collected.}
{May 1, 2012 9:36:03 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_bi_instance:obis_rollup” has no key column.  It will not be collected.}
{May 1, 2012 9:36:03 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_bi_instance:obips_rollup” has no key column.  It will not be collected.}
{May 1, 2012 9:36:03 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_bi_instance:obips_requests_rate” has no key column.  It will not be collected.}
{May 1, 2012 9:36:05 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “webcache:request_filter_denied_stats” has no key column.  It will not be collected.}
{May 1, 2012 9:36:05 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_oim:overall” has no key column.  It will not be collected.}
{May 1, 2012 9:36:05 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “domain_oracle_oim:jdbc” has no key column.  It will not be collected.}
{May 1, 2012 9:36:05 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_soainfra:total_faults” has no key column.  It will not be collected.}
{May 1, 2012 9:36:06 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “portaltools:Response” has no key column.  It will not be collected.}
{May 1, 2012 9:36:06 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “weblogic_j2eeserver:jvm_runtime” has no key column.  It will not be collected.}
{May 1, 2012 9:36:06 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “weblogic_j2eeserver:jvm_compilation_time” has no key column.  It will not be collected.}
{May 1, 2012 9:36:06 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “weblogic_j2eeserver:jvm_memory_usage” has no key column.  It will not be collected.}
{May 1, 2012 9:36:06 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “weblogic_j2eeserver:jvm_class_loading” has no key column.  It will not be collected.}
{May 1, 2012 9:36:06 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “weblogic_j2eeserver:jvm_threads” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “essbaseapp:appMetrics” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “domain_oracle_oaam:OAAM_Datasource” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_forms:aggr_FormsResourceUsage” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_forms:NumberOfSessions” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_forms:JVMResourceUsage” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_forms:servlet_rollup_agg” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “reports:Reports_Server_Information” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “reports:Reports_Server_Performance” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “reports:Reports_Server_Response” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “reports:Reports_Servlet_Response” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “reports:Remote_Bridge_Elements” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “analytics:Response” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “portal:portal_page_engine_response_codes_delta” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “portal:portal_page_engine_response_codes” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “portal:portal_page_engine” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “activitygraph:Response” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “essbase:serverMetrics” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_federation:protocol_profiles_rollup” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_federation:protocol_profiles_events_rollup” has no key column.  It will not be collected.}
{May 1, 2012 9:36:07 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “oracle_federation:protocol_profiles_protocol_phase_events_rollup” has no key column.  It will not be collected.}
{May 1, 2012 9:36:08 AM CEST} {Warning} {oracle.dms.collector} {BEA-000000} {Metric table “personalization:Response” has no key column.  It will not be collected.}

Browsing through MOS I found MOS document ID 1434193.1 which states: 

Cause:
This is known to be caused by a change to the Metric Service.
This does not cause any functional problem and it is expected to be fixed in the future versions. An internal bug is logged and progressed to have this addressed.

Solution:
The warnings can be ignored as it has no affect on the Reports Servers and the its functionality. 

So really good to know in case you are browsing your log files for warnings and come across this.

Cheers!

Uncategorized

Just something of note. I stumble upon this from time to time and really don’t appreciate it:

Agents being called by other Agents (i.e. agent chaining) will NOT write any execution information into S_NQ_JOB or S_NQ_INSTANCE.
So no LAST_RUNTIME_TS in S_NQ_JOB nor new line in S_NQ_INSTANCE.

Really not useful when using these tables as sources in the RPD to check and schedule execution of Agents! E.g. when did which agent run last with which result and should I run it again?

Cheers!

Uncategorized

In-place upgrade within OBIEE 11 versions (from .3 to .5 o r .6 or from .5 to .6) can be a whole lot quicker than out-of-place ones but are also more interesting in terms of potential issues arising. After two uneventful in-place upgrades from 11.1.1.5 to 11.1.1.6 I had a more challenging third upgrade with some unexpected errors.

If you look at the official upgrade guide, all went fine up to item 6: “Upgrading system components“. Executing upgradenonj2eeapp.sh, however, threw an error while re-deploying:

./upgradenonj2eeapp.sh -oracleInstance /bishiphome/Middleware/instances/myinstance/ -adminHost localhost -adminPort 7001 -adminUsername weblogic

Command failed: NonJ2EEManagement Applicationdeployment failed.


Looking into the provision.log (situated in MW_HOME/instances/myinstance/diagnostics/logs/OPMN/opmn) read as follows:

[Deployer:149163]The domain edit lock is owned by another session in non-exclusive mode – this deployment operation requires exclusive access to the edit lock and hence cannot proceed. If you are using “Automatically Aquire Lock and Activate Changes” in the console, then the lock will expire shortly so retry this operation.


I ran the upgradenonj2eeapp.sh a second time to see what it would do:

SEVERE: Command failed:
oracle.as.config.ProvisionException: Exception while unregistering the instance
    at oracle.as.config.impl.OracleASInstanceImpl.unregister(OracleASInstanceImpl.java:290)
    at oracle.as.config.impl.OracleASInstanceImpl.unregister(OracleASInstanceImpl.java:250)
    at oracle.as.config.provisioner.commands.UnregisterInstanceCommand.execute(UnregisterInstanceCommand.java:34)
    at oracle.as.config.provisioner.InstallerCmdLine.run(InstallerCmdLine.java:146)
    at oracle.as.config.provisioner.InstallerCmdLine.main(InstallerCmdLine.java:46)
Caused by: oracle.as.config.impl.SimpleProvisionException: Failed to unregister instance instance1. It does not exist on the adminserver.

So, a real no-go situation. Luckily, the OBIEE EMG already had a post which contained part of the solution. Root cause of the initial error was that there was a lock on the configuration I hadn’t seen:
“Release Configuration” removed the immediate error source. Next step was re-running upgradenonj2eeapp.sh again to see what would happen and obviously the error “Failed to unregister instance instance1. It does not exist on the adminserver.” still persisted since initially the first half of the script had run through and un-registered my instance. So off to some opmnctl commands to undo the damage.

1.) Deploy the instance again:

./opmnctl redeploy -oracleInstance /bishiphome/Middleware/instances/myinstance -adminHost localhost -adminPort 7001 -adminUsername weblogic

Command requires login to weblogic admin server (localhost):
  Username: weblogic
  Password:

Redeploying NonJ2EEManagement Application…weblogic.Deployer invoked with options:  -adminurl localhost:7001 -username weblogic -name NonJ2EEManagement -source /bishiphome/Middleware/Oracle_BI1/opmn/applications/NonJ2EEManagement.ear -redeploy -upload -noexit

Task 1 initiated: [Deployer:149026]deploy application NonJ2EEManagement [Version=11.1.1] on AdminServer.
Task 1 completed: [Deployer:149026]deploy application NonJ2EEManagement [Version=11.1.1] on AdminServer.
Target state: redeploy completed on Server AdminServer

Done
Command succeeded.


2.) Register the instance again:

./opmnctl registerinstance

Command requires login to weblogic admin server (localhost):
  Username: weblogic
  Password:

Registering instance
Command succeeded.

 After these steps, I was able to run the actual shell for the upgrade process again:

./upgradenonj2eeapp.sh -oracleInstance /bishiphome/Middleware/instances/instance1/ -adminHost localhost -adminPort 7001 -adminUsername weblogic
Unregister instance…

Command requires login to weblogic admin server (localhost):
Username: weblogic
Password:

Unregistering instance
Command succeeded.
redeploy NonJ2EEManagement.ear…

Command requires login to weblogic admin server (localhost):
Username: weblogic
Password:

Redeploying NonJ2EEManagement Application…weblogic.Deployer invoked with options:  -adminurl localhost:7001 -username weblogic -name NonJ2EEManagement -source /bishiphome/Middleware/Oracle_BI1/opmn/applications/NonJ2EEManagement.ear -redeploy -upload -noexit

Task 2 initiated: [Deployer:149026]deploy application NonJ2EEManagement [Version=11.1.1] on AdminServer.
Task 2 completed: [Deployer:149026]deploy application NonJ2EEManagement [Version=11.1.1] on AdminServer.
Target state: redeploy completed on Server AdminServer

Done
Command succeeded.
re-register instance…

Command requires login to weblogic admin server (localhost):
Username: weblogic
Password:

Registering instance
Command succeeded.
Successfully upgraded NonJ2EEManagement.ear and the registeration.

 One of those little things that can ruin your evening…

Cheers!

Uncategorized

It has been 19 months since the GA of OBIEE
11g and its third incarnation (11.1.1.6) is celebrating its one-month-birthday
today. Time to make a point on the support situation for all OBIEE 10g
implementations out there:
The last 10gR3 versions (10.1.3.4.x) will
reach the end of the Permier Support lifecycle in 4 months, July 2012.
 
The full documentation for lifetime support
of Fusion Middleware products can be found here, on the Oracle website
(last updated February 2012). The screenshot above can be found on page
13 of the pdf.
So to wrap up: the product has had more than
one and a half years to mature, Oracle provided us with two new version
since the release and with the end of premier support quickly coming up,
this is really the moment to start thinking about upgrading your 10g solutions!
Uncategorized

It’s time again. This years BI forum (#biforum) is open for registration!

All information on topics, speakers and locations can be found here:
http://www.rittmanmead.com/biforum2012/

Direct registration links for Brighton and Atlanta respectively are here:
Booking form for UK BI Forum Event (Brighton, May 8th – 11th 2012)
Booking form for US BI Forum Event (Atlanta GA, May 15th – 18th 2012)

Thanks to Mark and his crew for continuing to host this awesome event!

Uncategorized

When hooking up OBIEE 11g to an LDAP, make sure to check some factors on the LDAP side of things as well. Not all errors have to come from your configuration in WLS:

  1. LDAP users intended to replace “OracleSystemUser”, “weblogic” and “BISystemUser MUST” all reside in the same base DN that’s used to search for users in the LDAP config
  2. They also MUST all be of the same objectClass as the one referenced in the LDAP config
  3. Creating “technical users” to distinguish them from “human users” and putting them in different branches and / or storing them as different object classes (e.g. “account” or rather than “person”)

First thing you should get is an LDAP browser with which to connect to the LDAP server to check validity of the connectivity ccount (i.e. the “Principal” for LDAP connectivity) as well as structures and object types. This will save you a lot of pain and suprising behaviour due to “ceative” LDAP management.

Cheers!

Uncategorized

Yes, I have quite a backlog of topics I should blog and thanks to Robin for pointing it out.

A quick reminder about using the right wlst.sh.

In a normal OBIEE installation, you will find multiple wlst.sh in the MIDDLEWARE_HOME:

    ./wlserver_10.3/common/bin/wlst.sh
    ./Oracle_BI1/common/bin/wlst.sh
    ./oracle_common/common/bin/wlst.sh

Make sure to always start your wlst scripts from

    ./oracle_common/common/bin/wlst.sh
   
in order to prevent erroneous behaviour. Running them from a different location will yield interesting errors like the one below – taken from a migrateSecurityStore example:

    TypeError: cannot concatenate ‘str’ and ‘NoneType’ objects

Cheers!