Wednesday, June 3, 2009

OIM - Exchange connector creating multiple mail stores

You may be surprised to see that Exchange connector sometimes creates multiple mailboxes. I spent so much time to figure out why it is happening.



I would say it is Exchange 2003's one of ha ha.. behaviour

If you have a welcome/Initial email sent from the nonconditional task such as create mailbox task . This is a the culprit.

Never create a mailbox and send an email at the same time (if you are doing this through code) . You should instead write a scheduled task to send emails this task should check that if the Exchange resource is provisioned or not if it is provisioned then only send an email.


you have to do this because, Exchange server takes its own sweet time to create a mailbox. so be carefull when you see a wierd behaviour of Exchange server. when using an Excahnge connector with Oracle Identity Management.

com.thortech.xl.dataobj.util.tcAttributeSource.getAttrColumnName

Value: java.lang.NullPointerException
at com.thortech.xl.dataobj.util.tcAttributeSource.getAttrColumnName(Unknown Source)


There are many reason you get this error when trusted recon is done. and there is a little way to find why this is happening.

One reason why this happens is when you change the form field label in User Profile you should go in process definition of each field and remap the attributes.

Ex: Say you have a field called UD_USR_PHONE and label is "Phone" . This field has been mapped in your reconciliation.

Now your client says I don't this label I want new label called "Full Phone" instead of just "Phone".

You should go in every process definition where you might have mapped phone & re-map it to full phone. If you do not do this exercise you will get above error.

Wednesday, April 22, 2009

OIM - System Administrator initial login time is greater than usual

When Sys Admin tries to login to OIM basically executes tree queries to display the counts for his pending approvals , open tasks etc to avoid this you can do following

From Design console go to System Configuration
search for "XL.WebAdminHome.CounterDisplay.Type"
change values from "DayLimit" to "CheckLink"

if this property is not available in design console then do following.

See Oracle Metalink Doc 741590.1 for all the details, In short do following:

Edit the WEB-INF/classes/xlWebAdmin.properties
and change the webadminhome.message.skipPendingApprovalsOpenTasksCounter to true, and the run the patch_websphere.sh script to build and deploy the new war.

AD Date Issue

When you are calling that attribute ADSI is grabbing the value of “accountExpires” and casting the number of 100-nanosecond intervals since Jan 1, 1601 to an understandable datetime.

So far when I look at the “accountExpires” date in Softerra (doing a literal lookup on the date value and converting), or looking in my C# code—I get back the 4/21/2009 4:00:00 AM CST or equivalent 4/20/2009 11:00:00 PM GMT dates.

The really odd thing is that basically ADSI’s internal conversion routine is not following whatever accepted conversions are for .NET or Java.

Here is my C# code:

protected void Page_Load(object sender, EventArgs e)
{
//assume 'user' is DirectoryEntry representing user to check
DateTime expires = DateTime.FromFileTime(GetInt64(@"cn=wertman\, pam,ou=users,ou=cnc,OU=AIT,DC=us,DC=aegon,DC=com", "accountExpires"));
Response.Write(expires);
}

private Int64 GetInt64(string userDN, string attr)
{
DirectoryEntry root = null;
using (root = new DirectoryEntry(
@"LDAP://crdcusdc01.us.aegon.com:389/" + userDN,
username,
password,
bindingAuth
))
{
DirectorySearcher ds = new DirectorySearcher(
root,
String.Format("({0}=*)", attr),
new string[] { attr },
SearchScope.Base
);

SearchResult sr = ds.FindOne();

if (sr != null)
{
if (sr.Properties.Contains(attr))
{
return (Int64)sr.Properties[attr][0];
}
}
return -1;
}
}

C# code is a curtosy of one of my colleagues - Mark Morrison.

WebSphere JMSManagedQueueSessionFactory in OIM

Actually, this is a known idiot light thrown by IBM:
http://download-west.oracle.com/docs/cd/B32479_01/doc.903/b32458/toc.htm#CHDEIIBG
"3.2.2 Benign Exception Warning Message Appears in WebSphere Log After Installing Release 9.0.3 and Starting the Application Server (Bug 5607996)
After installing Release 9.0.3 on WebSphere 5.1.1.12 and starting the application server, a benign exception warning message appears in the WebSphere log regarding the following:
J2CA0007W: An exception occurred while invoking method setsetMcfPassword on com.ibm.ejs.jms.JMSManagedQueueSessionFactory

This is a known WebSphere exception warning message and can safely be ignored. Refer to IBM's WebSphere Application Server support Web site for more information."
Here is the full mea culpa from IBM:
http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg1PK32670
Best fix is to migrate all servers to WAS 6.1/OIM 9.1 combo.

Remedy

From the Remedy docs : “Because Java handles the deallocation of memory automatically (using garbage collection), another key difference between the C API and the AR System Java API is that when references to an object no longer exist, that object is assumed to no longer be needed, and then the memory occupied by that object is reclaimed. So, freeing allocated memory and shutdown/cleanup of the general structure of a C API program do not have a counterpart in an AR System Java API program. However, in an AR System Java API program, you must use the clear method to release context (user and server) information as well as other methods of the classes you use, and to use the releaseInstance method of the factory object to reclaim memory that has been allocated to a factory object. The underlying resources are not touched by garbage collection. They must be released.”


However, to the relevant point of connectionPooling—I do not see the CLEAR() method EVER called. In your helper methods of disconnect() I do you see you setting context to null; however, what you want is to instead set arServer.Clear() rather than arServer = null.

http://spider.kineticdata.com/arApi63/com/remedy/arsys/api/ARServerUser.html#clear()

Creating Javadocs using ANT

Here is potentially a very easy way :
http://www.geocities.com/richard_hoefter/eclipse2ant/