OIm11g event handler-Bulk Orchestration
Hi All,
Can anyone help me with a sample code of bulk orchestration.
Can i just copy and paste my execute() code in bulkexecute?
My requirement is that my event handler shd work for a single user event
Thanks
-Mukul
In case of updating a user from the console directly, in the Event Handlers one can implement the method
public EventResult execute(long l1, long l2, Orchestration orchestration)This will get the CURRENT_USER_STATE and NEW_USER_STATE. For example, the user old attributes and the new changed attributes from the Orchestration class as :
hm = orchestration.getInterEventData();
oracle.iam.identity.usermgmt.vo.User oldUsr = (oracle.iam.identity.usermgmt.vo.User) hm.get(CURRENT_USER);
oracle.iam.identity.usermgmt.vo.User newUsr = (oracle.iam.identity.usermgmt.vo.User) hm.get(NEW_USER_STATE);But in case of reconciliation from the database,one may want to implement the method
public BulkEventResult execute(long arg0, long arg1, BulkOrchestration bulkOrchestration)There's a difference between single event and bulk event orchestration. In single event orchestration the interEventData gets populated with CURRENT_USER and NEW_USER_STATE, where each is an object storing the User's properties. But, bulk orchestration does not concern a single user. It's concern is multiple users in one event.
CURRENT_USER and NEW_USER_STATE are still there, but they are not a single User object. They are actually an array of Identity objects (Identity is a superclass of User).
Similar Messages
-
Event Handlers - Bulk Orchestration
I have the following code working in a post process event handler EventResult execute(), and need to "convert" it to work in BulkEventResult execute():
public EventResult execute(long processId, long eventId,
Orchestration orchestration) {
entityId = orchestration.getTarget().getEntityId();
params = new HashMap<String, Object>();
HashMap<String , Serializable> eventDataMap = new HashMap<String , Serializable>();
eventDataMap.putAll(orchestration.getInterEventData());
HashMap currentUserState = new HashMap();
HashMap newUserState = new HashMap();
currentUserState.putAll(((User) eventDataMap.get("CURRENT_USER")).getAttributes());
newUserState.putAll(((User) eventDataMap.get("NEW_USER_STATE")).getAttributes());
if(!((currentUserState.get("First Name")) == null)){
// Take Action 1
}else{
// Take Action 2
EntityManager entityManager = Platform.getService(EntityManager.class);
try {
entityManager.modifyEntity(orchestration.getTarget().getType(),entityId, params);
I understand from other posts that instead of User it is an array of Identity objects, but am having some trouble converting this into working code. Suggestions?If you know the how to get all identities than there should not be problem.
// get new user state from bulk
private Object getNewUserStates(BulkOrchestration orchestration){
logger.debug("UserAttrUpdateEvtHndler/getNewUserStates START");
Object newUserStates = null;
HashMap interEventData = orchestration.getInterEventData();
if (interEventData != null)
newUserStates = interEventData.get("NEW_USER_STATE");
return newUserStates;
in execute method
//Get all Identities
Identity[] newUserStatesIdntArr = (Identity[])(Identity[])getNewUserStates(orchestration);
//get all user key.
int userKeylength = userKeys.length;
// Iterate now
for (int j = userKeylength; --j >= 0;) {
try {
Identity newUserState = newUserStatesIdntArr != null ? newUserStatesIdntArr[j] : null;
String firsName= newUserState.getAttribute("First Name")==null?"":(String)newUserState.getAttribute("First Name");
// do your operation here.
-kuldeep -
How to create Event Handler in OIM11g
Hi all,
How can I create an event handler in OIM11g
Thank You in advance.there are three component required to generate this
1. plugin.xml
2. EventHandler class
3. eventhandler.xml to import into MDS schema which define OPERATION,ORDER..etc
you have to zip the first two and register using register utility in <IDM_HOME>server/bin and then import 3rd one into MDS using WeblogicImportMetaData.sh
for details follow below link
http://docs.oracle.com/cd/E14571_01/doc.1111/e14309/oper.htm
Step by step explanation from development to deployement
http://idmoim.blogspot.in/2011/07/developing-and-deploying-oim-11g-custom_29.html
--nayan
Edited by: Nishith Nayan on Feb 8, 2012 8:54 AM -
Can DISABLE preProcess Event Handler add to the Orchestration parameters?
I have a DISABLE pre-process event handler defined on the User object. I need to set the current date on a USR UDF attribute whenever the user is disabled or enabled or created. The CREATE handler works and the date value shows up on the user profile. However, when I try to set this attribute on the pre-process DISABLE or ENABLE event handlers, the new date does not show up. Here is the code I am using in my DISABLE/ENABLE event handler:
Date currentTime = new Date(System.currentTimeMillis());
orchestration.addParameter(USER_STATUS_DATETIME_ATTR_NAME, currentTime);
Where the orchestration object is from the execute() parameter list.
Any ideas as to why this is not working? Is adding to the orchestration not allowed for DISABLE or ENABLE event handlers? I know my handler is getting calls as I am logging the orchestration.getOperation() value.
Thanks for any suggestions.
-Dave
Edited by: user552098 on Nov 12, 2012 1:56 PMWhen you update the field, make sure you are using the field label name, and not the UDF value.
-Kevin -
Issues with Post Process Event Handler in oim11g
Hi I am trying to trigger a post process event handler to set middle name but couldn't succeed.
can you please point out the mistakes if there are any?
This is the Java code.
package oim.eventhandler;
import java.io.Serializable;
import java.util.HashMap;
import oim.util.FROLogger;
import oracle.iam.identity.usermgmt.vo.User;
import oracle.iam.platform.context.ContextAware;
import oracle.iam.platform.kernel.spi.PostProcessHandler;
import oracle.iam.platform.kernel.vo.AbstractGenericOrchestration;
import oracle.iam.platform.kernel.vo.BulkEventResult;
import oracle.iam.platform.kernel.vo.BulkOrchestration;
import oracle.iam.platform.kernel.vo.EventResult;
import oracle.iam.platform.kernel.vo.Orchestration;
public class setmiddlename implements PostProcessHandler {
public void initialize(HashMap<String, String> arg0) {
// TODO Auto-generated method stub
public boolean cancel(long arg0, long arg1,
AbstractGenericOrchestration arg2) {
// TODO Auto-generated method stub
return false;
public void compensate(long arg0, long arg1,
AbstractGenericOrchestration arg2) {
// TODO Auto-generated method stub
* public EventResult execute(long arg0, long arg1, Orchestration arg2) { //
* TODO Auto-generated method stub return null; }
public BulkEventResult execute(long arg0, long arg1, BulkOrchestration arg2) {
// TODO Auto-generated method stub
return null;
public EventResult execute(long processId, long eventId,
Orchestration orchestration) {
HashMap<String, Serializable> parameters = orchestration.getParameters();
// If the middle name is empty set the first letter of the first name as the middle initial
String middleName = getParamaterValue(parameters, "Middle Name");
if (middleName.trim().length()>0) {
String firstName = getParamaterValue(parameters, "First Name");
middleName = firstName.substring(0,1);
orchestration.addParameter("Middle Name", middleName);
return new EventResult();
private String getParamaterValue(HashMap<String, Serializable> parameters, String key) {
String value = (parameters.get(key) instanceof ContextAware)
? (String) ((ContextAware) parameters.get(key)).getObjectValue()
: (String) parameters.get(key);
return value;
################ PostProcessEventHandlers.XML#############
<eventhandlers xmlns="http://www.oracle.com/schema/oim/platform/kernel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oracle.com/schema/oim/platform/kernel orchestration-handlers.xsd">
<!-- Custom validation event handlers -->
<!-- Custom preprocess event handlers -->
<action-handler
class="oim.eventhandler.setmiddlename"
entity-type="User"
operation="CREATE"
name="setmiddlename"
stage="postprocess"
order="1000"
sync="TRUE"/>
</eventhandlers>
################ plugin.xml##############
<?xml version="1.0" encoding="UTF-8"?>
<oimplugins>
<plugins pluginpoint="oracle.iam.platform.kernel.spi.EventHandler">
<plugin pluginclass="oim.eventhandler.setmiddlename" version="1.0" name="setmiddlename"/>
</plugins>
</oimplugins>
################ weblogic.properties##############
wls_servername=oim_server1
application_name=OIMMetadata
metadata_from_loc=/data1/oim_install/Oracle/Middleware/Oracle_IDM1/server/temp/import/metadata/custom/PostProcess
metadata_files=/metadata/custom/PostProcess/PostProcessEventHandlers.xml
application_version=11.1.1.3.0
And the PostProcessEventHandlers.zip contains lib\PostProcess.jar
both PostProcessEventHandlers.zip and PostProcessEventHandlers.xml are placed in the "metadata_from_loc"
The registration was successful and I could see the entries in the PLUGINS table
ID: oim.eventhandler.setmiddlename
TYPE: oracle.iam.platform.kernel.spi.EventHandler
VERSION: 1.0
NAME: setmiddlename
ZIPID: 23
and PLUGIN_METADATA does not contain any values
PLUGIN_ZIP contains ZIPID as 23 and ZIP as (BLOB)
Did I miss anything?
what is the mistake that I am doing?
Edited by: 883725 on Sep 9, 2011 2:30 AM
Edited by: 883725 on Sep 9, 2011 2:31 AMI am getting this error when running weblogicDeleteMetadata.sh.
I have set the OIM Home and Weblogic home. Though Import and export works absolutely fine.
Any other way where I can connect directly to DB and delete the contents?
+Please enter your username [weblogic] :weblogic+
+Please enter your password [welcome1] :+
+Please enter your server URL [t3://localhost:7001] :t3://localhost:10070+
Connecting to t3://localhost:10070 with userid weblogic ...
Successfully connected to Admin Server 'AdminServer' that belongs to domain 'IDM_domain'.
Warning: An insecure protocol was used to connect to the
server. To ensure on-the-wire security, the SSL port or
Admin port should be used instead.
Location changed to domainRuntime tree. This is a read-only tree with DomainMBean as the root.
For more help, use help(domainRuntime)
Problem invoking WLST - Traceback (innermost last):
File "/data1/oim_install/Oracle/Middleware/Oracle_IDM1/server/bin/weblogicDeleteMetadata.py", line 21, in ?
File "/data1/oim_install/Oracle/Middleware/oracle_common/common/wlst/mdsWLSTCommands.py", line 109, in deleteMetadata
File "/data1/oim_install/Oracle/Middleware/oracle_common/common/wlst/mdsWLSTCommands.py", line 574, in executeAppRuntimeMBeanOperation
File "/data1/oim_install/Oracle/Middleware/oracle_common/common/wlst/mdsWLSTCommands.py", line 713, in saveStackAndRaiseException
WLSTException: MDS-00001: exception in Metadata Services layerMDS-91009: Operation "deleteMetadata" failure. Use dumpStack() to view the full stacktrace. -
Update password custom scheduled task orchestration event handler issue
Hello experts,
I am trying to run a custom scheduled to update user password in OIM 11.1.1.5
Consider there are 5 users in the input feed file
TSTUSR1
TSTUSR2
TSTUSR3
TSTUSR4
TSTUSR5
Problem i am facing is when update of change password fails for a user then for the subsequent users also its getting failed. Say for TSTUSR3 the change password is failed for some reason (consider user not present) then for TSTUSR4 and TSTUSR5 also it is getting failed.
Note: here the changepassword for TSTUSR4 and TSTUSR5 is getting called but i am getting some orchestration event handler exception as below.
<Mar 9, 2012 6:26:12 AM CET> <Warning> <oracle.iam.platform.kernel.impl> <IAM-00 80002> <Orchestration validation failed on the event handler - The password change operation failed.>
Exception occured during change password
oracle.iam.identity.exception.UserManagerException: The password change operatio n failed.
at oracle.iam.identity.usermgmt.impl.UserManagerImpl.changePassword(User ManagerImpl.java:3024)
at oracle.iam.identity.usermgmt.impl.UserManagerImpl.changePassword(User ManagerImpl.java:2959)
at oracle.iam.identity.usermgmt.api.UserManagerEJB.changePasswordx(Unkno wn Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJo inpointUsingReflection(AopUtils.java:310)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMetho dInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMetho dInvocation.proceed(ReflectiveMethodInvocation.java:149)
at com.bea.core.repackaged.springframework.aop.support.DelegatingIntrodu ctionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
at com.bea.core.repackaged.springframework.aop.support.DelegatingIntrodu ctionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMetho dInvocation.proceed(ReflectiveMethodInvocation.java:171)
at com.bea.core.repackaged.springframework.jee.spi.MethodInvocationVisit orImpl.visit(MethodInvocationVisitorImpl.java:37)
at weblogic.ejb.container.injection.EnvironmentInterceptorCallbackImpl.c allback(EnvironmentInterceptorCallbackImpl.java:54)
at com.bea.core.repackaged.springframework.jee.spi.EnvironmentIntercepto r.invoke(EnvironmentInterceptor.java:50)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMetho dInvocation.proceed(ReflectiveMethodInvocation.java:171)
at com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocat ionInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMetho dInvocation.proceed(ReflectiveMethodInvocation.java:171)
at com.bea.core.repackaged.springframework.aop.support.DelegatingIntrodu ctionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
at com.bea.core.repackaged.springframework.aop.support.DelegatingIntrodu ctionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMetho dInvocation.proceed(ReflectiveMethodInvocation.java:171)
at com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopPr oxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy331.changePasswordx(Unknown Source)
at oracle.iam.identity.usermgmt.api.UserManager_nimav7_UserManagerRemote Impl.__WL_invoke(Unknown Source)
at weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(Ses sionRemoteMethodInvoker.java:40)
at oracle.iam.identity.usermgmt.api.UserManager_nimav7_UserManagerRemote Impl.changePasswordx(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(Remote BusinessIntfProxy.java:85)
at $Proxy195.changePasswordx(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflecti on(AopUtils.java:307)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynami cAopProxy.java:198)
at $Proxy328.changePasswordx(Unknown Source)
at oracle.iam.identity.usermgmt.api.UserManagerDelegate.changePassword(U nknown Source)
And below is the code snippet i am using
try
CsvReader fileName = new CsvReader(actualPath);
fileName.readHeaders();
while (fileName.readRecord()) {
try
String username = fileName.get("USR_LOGIN").toUpperCase();
String password = fileName.get("USR_PASSWORD");
if(!isNullOrEmpty(username)&& !isNullOrEmpty(password) )
userAPI.changePassword(username, password.toCharArray(),true);
else
System.out.println("Record is empty");
err.add(fileName.getRawRecord());
} catch (Exception e) {
err.add(fileName.getRawRecord());
System.out.println("Exception occured during change password");
e.printStackTrace();
System.out.println("Continuing with next record");
catch (Exception e) {
e.printStackTrace();
Your input at the earliest would be helpful.
Thanks,
DK
Edited by: 875142 on Mar 8, 2012 10:56 PMIt shouldn't but this is an OIM issue. handle yourself the possible cause.
Myself experienced the same and it was because of policy failure.
Try to put below check before password update.
import oracle.iam.passwordmgmt.vo.ValidationResult;
import oracle.iam.identity.usermgmt.vo.User;
import oracle.iam.passwordmgmt.api.PasswordMgmtService;
User searchedUser = null;
ValidationResult validationResult = null;
PasswordMgmtService pwdMgmt = Platform.getService(PasswordMgmtService.class);
searchedUser = userAPI.getDetails(resultSet11g.getString("USR_LOGIN"), null, true);
//Check if password is as per attached password policy
validationResult = pwdMgmt.validatePasswordAgainstPolicy(password.toCharArray(), userLogin, searchedUser.getLocale());
logger.debug("Result" + validationResult.isPasswordValid());
if (validationResult.isPasswordValid()) {
//Change the password
userAPI.changePassword(username, password.toCharArray(),true);
I suggest even validate if user exist or not.you can handle it using serchedUser(in above code). The above code validating policy only.
--nayan -
User Recon and Event Handler Issue in OIM11g
Hello Experts,
I am developing a Trusted Source Recon (User) for a proprietary application. I have devloped two java classes and put them into a jar file and placed the same jar in both ScheduleTask and EventHandlers directory of OIM.
1.UserRecon class -- for User Recon
2. EventHandler class -- update user's password after reconciling the user using API.
In the User Recon class , I have defined a static HashMap variable to store the user and user's password as a class variable. The flow will be like this,
1. Query trsuted source
2. Reconcile user (except password because password can not be)
3. Update the map with userid (key) and password.
4. After reconciling , In the event handler use the same map to read user's password and set the password in OIM using API. (setXelleratePassword).
5.After successful password set remove the entry from Map.
The idea is to avoid making additional call to trusted source to retrieve the user's password.
This worked in OIM9102. But when I tested the same in 11g it did not work.... Though the User Recon class updates the record into the HashMap , In the eventhandler , the HashMap is always coming as "empty".
I did the below changes for 11g,
1. Modified the EventHandler class to suite for 11g.
2. Deployed the event handler as a plugin
3. Placed the same jar file in Schedule task directory of OIM 11g
I am unable find out where it is going wrong?? and tired of troubleshooting. Can you assist me ?
Thanks and Regards
INIYAINIYA wrote:
Hello Experts,
I am developing a Trusted Source Recon (User) for a proprietary application. I have devloped two java classes and put them into a jar file and placed the same jar in both ScheduleTask and EventHandlers directory of OIM.
1.UserRecon class -- for User Recon
2. EventHandler class -- update user's password after reconciling the user using API.
In the User Recon class , I have defined a static HashMap variable to store the user and user's password as a class variable. The flow will be like this,
1. Query trsuted source
2. Reconcile user (except password because password can not be)
3. Update the map with userid (key) and password.
4. After reconciling , In the event handler use the same map to read user's password and set the password in OIM using API. (setXelleratePassword).
5.After successful password set remove the entry from Map.
The idea is to avoid making additional call to trusted source to retrieve the user's password.
This worked in OIM9102. But when I tested the same in 11g it did not work.... Though the User Recon class updates the record into the HashMap , In the eventhandler , the HashMap is always coming as "empty".
I did the below changes for 11g,
1. Modified the EventHandler class to suite for 11g.
2. Deployed the event handler as a plugin
3. Placed the same jar file in Schedule task directory of OIM 11gHope there are two jars, if this is the case place the secondary jar in lib folder, than make it as plugin.
>
I am unable find out where it is going wrong?? and tired of troubleshooting. Can you assist me ?
put the printstacktrace, so that problem can be identify
sample code
HashMap hash= null;
try{
hash = get map from other class
//class be load at this point, if class is not loaded than you will get exception.
}catch(Throwable t){
// hope you will get some error or exception here
t.printstacktrace();
>
Thanks and Regards
INIYAPaste you sample code, if it couldn't help. -
Help needed in implementing validation event handler in OIM 11g
Hello experts,
I am trying to set username policy by implementing a validation event handler in OIM 11.1.1.5.
Following are the steps followed
1. Import metadata
Created a file called Eventhandler.xml as below and imported using weblogicImportmetadata.sh
<?xml version='1.0' encoding='UTF-8'?>
<eventhandlers xmlns="http://www.oracle.com/schema/oim/platform/kernel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oracle.com/schema/oim/platform/kernel orchestration-handlers.xsd">
<validation-handler class="test.iam.eventhandlers.CustomValidationEventHandler" entity-type="User" operation="CREATE" name="CustomValidationEventHandler" order="1000" sync="TRUE"/>
</eventhandlers>
2. Register plugin
plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<oimplugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<plugins pluginpoint="oracle.iam.platform.kernel.spi.ValidationHandler">
<plugin pluginclass="test.iam.eventhandlers.CustomValidationEventHandler" version="1.0" name="CustomValidationEventHandler" />
</plugins>
</oimplugins>
Just givng sys out in the below code to check whther it is getting triggerred during user create.
package test.iam.eventhandlers;
import java.util.HashMap;
import oracle.iam.platform.Platform;
import oracle.iam.platform.context.ContextAware;
import oracle.iam.platform.kernel.ValidationException;
import oracle.iam.platform.kernel.ValidationFailedException;
import oracle.iam.platform.kernel.spi.ValidationHandler;
import oracle.iam.platform.kernel.vo.BulkEventResult;
import oracle.iam.platform.kernel.vo.BulkOrchestration;
import oracle.iam.platform.kernel.vo.Orchestration;
public class CustomValidationEventHandler implements ValidationHandler {
@Override
public void initialize(HashMap<String, String> arg0) {
// TODO initialization
System.out.println("init validate event handler");
@Override
public void validate(long processId, long eventId, Orchestration orchestration)
throws ValidationException, ValidationFailedException {
System.out.println("Beginning of validation");
System.out.println("End of validation");
@Override
public void validate(long processId, long eventId, BulkOrchestration arg2)
throws ValidationException, ValidationFailedException {
// TODO - N/A
System.out.println("Bulk Orchestration not yet implemented");
Now when i create a user it is not allowing and i am getting system error in the front end and in the logs i could see something below
<May 28, 2012 3:03:29 PM CEST> <Error> <oracle.iam.identity.usermgmt.impl> <IAM-3050029> <The user cannot be created due to validation errors.
oracle.iam.platform.kernel.ValidationFailedException: Event handler CustomValidationEventHandler implemented using class/plug-test.iam.eventhandlers.CustomValidationEventHandler could not be loaded.
at oracle.iam.platform.kernel.impl.OrchProcessData.runValidationEvents(OrchProcessData.java:177)
at oracle.iam.platform.kernel.impl.OrchestrationEngineImpl.validate(OrchestrationEngineImpl.java:644)
at oracle.iam.platform.kernel.impl.OrchestrationEngineImpl.process(OrchestrationEngineImpl.java:497)
at oracle.iam.platform.kernel.impl.OrchestrationEngineImpl.orchestrate(OrchestrationEngineImpl.java:444)
at oracle.iam.platform.kernel.impl.OrchestrationEngineImpl.orchestrate(OrchestrationEngineImpl.java:378)
at oracle.iam.identity.usermgmt.impl.UserManagerImpl.create(UserManagerImpl.java:656)
at oracle.iam.identity.usermgmt.api.UserManagerEJB.createx(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
I have implemented preprocess and postprocess event handler before with similar kind of plugin registration, metadata import and everything worked fine. Not sure what is the problem here with validation event handler.
Thanks
DKInstead of registering the plug-in can u try placing it in the plugins folder under Oracle_IDM1/server folder.
at times restart is required. esp when the server is running in production mode.
Regards
user12841694 -
Validation Event Handler Not working with GTC Recon???
We have implemented a Validation Event Handler on user entity.
In the code we have implemented both the execute methods i.e. Orchestration andf Bulk Orchestration. We have created a UDF for Manager field and our validation handler checks whether the user in Manager UDF field is an Active user in OIM or not. In case the user is not an Active user, code will throw a Validation Failed Exception.
At the time of changing the Manager UDF value from the Console directly Validation Event Handler is getting triggered but with GTC Recon Validation Handler is not Working.
Previously i faced the same issue with the post process event handler but the problem get resoved when i implemented execute method with Bulk Orchestration. As per my understanding Bulk Orchestration exceute method gets called with GTC Recon and execute method with Orchestration gets called when changing the attribute value directly from the console.
In case of Validation Event Handler i have implemented both but still validation Event handler is not working with GTC.
Thanks in Advance....Any Help????
-
Event Handler not Triggered when user is assigned by Membership Rule
I have defined a post-processed event handler for RoleUser Entity.
The handler is triggered normally when a user is manually assigned a role.
However, it is not trigger, if users are assigned through membership rule.
I have tried both the single execute method and the bulk execute method.
OIM version: 11gR2Hi,
Check the list of orchestration handlers triggered for this operation in the Diagnostic Dashboard. Check whether, if your custom event handler is present in the list. If its isn't, then there must be something wrong with your Plugin.
Thanks,
RK. -
OIM 11gR2 - RoleUser PostProcess Event Handler not triggered
Hi,
I'm trying to create a postprocess event-handler for RoleUser entity so that when a role is assigned (or removed) to a user an UDF is populated with the list of its roles.
I developed my event-handler and registered it following instructions on http://docs.oracle.com/cd/E27559_01/dev.1112/e27150/oper.htm#OMDEV4749 but the event-handler is not triggered.
I've read and tried a lot of things but nothing seems to work.
I use System.out.println() and a Logger in the event-handler methods as well as breakpoints debugging via Eclipse, all this indicates the event-handler is not triggered.
I checked the event-handler is registered by using getEventHandlers(RoleUser,CREATE) method on IAMAppDesignMBean through Enterprise Manager. Result is :
Postprocess,-2147483648,PostProcessingInitiation,/metadata/iam-features-request/event-definition/EventHandlers.xml,true
Postprocess,FIRST,MyHandler,Plugin:MyHandler,false
Postprocess,FIRST,MyHandler,Plugin:MyHandler,false
Postprocess,FIRST,MyHandler,Plugin:MyHandler,false
Postprocess,FIRST,MyHandler,Plugin:MyHandler,false
Postprocess,1020,RoleGrantPostProcessActionHandler,/metadata/iam-features-identity/event-definition/EventHandlers.xml,false
Postprocess,9988,AsyncHandler,/metadata/iam-features-asyncwsclient/EventHandlers.xml,true
Postprocess,3000000,CallBackOAACGWithApprove,/metadata/iam-features-rolesod/EventHandlers.xml,true
Postprocess,2147483647,RequestCompleted,/metadata/iam-features-request/event-definition/EventHandlers.xml,true
Note that I dont understand why the handler appears four times..
Also, when I unregister it, it still appears one time.
Here is my event handler XML file (in META-INF folder of the plugin zip) :
<?xml version='1.0' encoding='utf-8'?>
<eventhandlers
xmlns="http://www.oracle.com/schema/oim/platform/kernel/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.oracle.com/schema/oim/platform/kernel orchestration-handlers.xsd">
<action-handler
class="package.MyHandler"
entity-type="RoleUser"
operation="ANY"
name="MyHandler"
stage="postprocess"
order="FIRST"
sync="TRUE" />
</eventhandlers>
plugin.xml file (root of plugin zip) :
<?xml version="1.0" encoding="UTF-8"?>
<oimplugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<plugins pluginpoint="oracle.iam.platform.kernel.spi.EventHandler">
<plugin
pluginclass="package.MyHandler"
version="1.0"
name="Myhandler" />
</plugins>
</oimplugins>
Java code (in a JAR in lib folder of plugin zip) :
public class MyHandler implements PostProcessHandler {
@Override
public EventResult execute(long processId, long eventId, Orchestration orchestration) {
System.out.println("Inside EventResult execute ");
LOGGER.log(Level.SEVERE, "Inside eventResult execute");
// Some code
return new EventResult();
@Override
public BulkEventResult execute(long processId, long eventId, BulkOrchestration orchestration) {
String operation = orchestration.getOperation().trim().toString();
System.out.println("<---------- Calling " + getClass().getName() + ": Operation[" + operation + "] Execute ---------->");
LOGGER.log(Level.SEVERE, "Inside BulkEventResult execute");
// Some code
return new BulkEventResult();
Maybe I'm missing something ? Any help would be really appreciated
Thanks,
Gael
EDIT :
Also note that I see these messages in the logs but I'm not sure it concern my event handler from what I read on some pages :
XML schema validation failed for XML eventhandlers and it will not be loaded by kernel.
[CALLBACKMSG] Found 0 possible matches for applicable policies for step POST_PROCESS, entity RoleUser, operation CREATE.
Related link : Post process event handler when a role is created or modified in OIMI eventually got it working but I'm not sure of how.. !
I changed the name of the handler (it was not "MyHandler" but something very long, I shortened it). I copy and paste exactly what was described here : Post process event handler when a role is created or modified in OIM. I did purge cache. I tried to apply it on another entity (Role), it was triggered, then I applied it back to RoleUser and it still works.
If it can help someone, my plugin zip contains :
plugin.xml :
<?xml version="1.0" encoding="UTF-8"?>
<oimplugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<plugins pluginpoint="oracle.iam.platform.kernel.spi.EventHandler">
<plugin pluginclass="fr.xxx.RoleUserProcessor"
version="1.0" name="RoleUserProcessor" />
</plugins>
</oimplugins>
META-INF/EventHandlers.xml :
<?xml version="1.0" encoding="UTF-8"?>
<eventhandlers xmlns="http://www.oracle.com/schema/oim/platform/kernel"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.oracle.com/schema/oim/platform/kernel orchestration-handlers.xsd">
<action-handler class="fr.xxx.RoleUserProcessor"
entity-type="RoleUser" operation="ANY" name="RoleUserProcessor" order="9999"
stage="postprocess" sync="TRUE" />
</eventhandlers>
lib/xxx.jar/RoleUserProcessor.java :
@Override
public EventResult execute(long processId, long eventId, Orchestration orchestration) {
LOGGER.log(Level.INFO, "Execution RoleUserProcessor EventHandler (mode non bulk)");
String operation = orchestration.getOperation().trim().toString();
LOGGER.log(Level.INFO, "Operation : " + operation);
return new EventResult();
@Override
public BulkEventResult execute(long processId, long eventId, BulkOrchestration orchestration) {
LOGGER.log(Level.INFO, "Execution RoleUserProcessor EventHandler (mode bulk)");
String operation = orchestration.getOperation().trim().toString();
LOGGER.log(Level.INFO, "Operation : " + operation);
return new BulkEventResult();
Thank you
Also, a thing that may help some people, I found out that the ORCHEVENTS table in OIM schema contains the history of handlers triggered. -
Hi,
Products
OIM 11.1.1.5 BP02
OAM 11.1.1.5
OID 11.1.1.5
Problem
I have written a post-process event handler which fires when a role is assigned to a user. The event handler calls a plugin which uses the UserManager API to generate and change the user's password.
I've tested this by assigning a role to the user via the OIM web console. I can see my log messages indicating that the event handler has fired and that the password has been changed.
However, I expected that when UserManager.changePassword completed, a notification email would then be sent to the user informing them of the new password, but no notification email has been sent.
The email notifications have been set up correctly, because I have changed the same user's password via the OIM web console and successfully received a Reset Password email.
So, my questions are:
1) Am I right in thinking that when you call UserManager.changePassword(), an out-of-the-box ResetPassword email notification should be sent to the user?
2) Has anyone got this working in 11.1.1.5?
Some more detailed info
In my plugin class I'm calling the following from both execute methods (EventResult and BulkEventResult):
char newpasswd[] = new RandomPasswordGeneratorImpl().generatePassword(user);
getUserManager().changePassword(userKey, newpasswd, false, null, true);
logger.info(("Successfully changed password"));
plugin.xml
<oimplugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<plugins pluginpoint="oracle.iam.platform.kernel.spi.EventHandler">
<plugin
pluginclass="oracle.iam.PostInsertPlugin"
version="1.0"
name="PostInsertPlugin">
</plugin>
</plugins>
</oimplugins>
$OIM_HOME/server/bin/weblogic.properties
wls_servername = oim_server1
app = OIMMetadata
metadata_from_loc=/home/oracle/eventhandlers
metadata_file=/metadata/roleuser/custom/EventHandlers.xml
/home/oracle/eventhandlers/import/metadata/roleuser/custom/EventHandlers.xml
<?xml version='1.0' encoding='utf-8'?>
<eventhandlers
xmlns="http://www.oracle.com/schema/oim/platform/kernel"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.oracle.com/schema/oim/platform/kernel orchestration-handlers.xsd">
<action-handler
class="oracle.iam.PostInsertPlugin"
entity-type="RoleUser"
operation="CREATE"
name="PostInsertPlugin"
stage="postprocess"
order="1002"
sync="TRUE"/>
</eventhandlers>
There are no errors in the OIM out and diagnostic logs apart from the following which occur at OIM startup:
[2013-01-07T16:29:23.425+00:00] [oim_server1] [ERROR] [IAM-0080075] [oracle.iam.platform.kernel.impl] [tid: [ACTIVE].ExecuteThread: '13' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: oiminternal] [ecid: 2e903d7ef060ab65:66b2de91:13c15d6d9ce:-8000-0000000000000002,0] [APP: oim#11.1.1.3.0] XML schema validation failed for XML /metadata/iam-features-OIMMigration/EventHandlers.xml and it will not be loaded by kernel.
[2013-01-07T16:29:24.267+00:00] [oim_server1] [ERROR] [IAM-0080075] [oracle.iam.platform.kernel.impl] [tid: [ACTIVE].ExecuteThread: '13' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: oiminternal] [ecid: 2e903d7ef060ab65:66b2de91:13c15d6d9ce:-8000-0000000000000002,0] [APP: oim#11.1.1.3.0] XML schema validation failed for XML /metadata/iam-features-callbacks/event_configuration/EventHandlers.xml and it will not be loaded by kernel.
Thanks
dty
Edited by: oim_user on Jan 7, 2013 5:37 PMNo notification will be sent if you changepassword using the method from usermanager api.
You have to trigger the resetpassword event manullay in your code.
Here is a sample code to create an event for reset password. Once you create event, invoke it from notification service - notify method.
NotificationEvent event = new NotificationEvent();
String[] receiverUserIds= {userLogin};
event.setUserIds(receiverUserIds);
event.setTemplateName("ResetPasswordNotification");
event.setSender(null);
HashMap<String, Object> resolvedData = new HashMap<String, Object>();
resolvedData.put("userLoginId", userLogin);
event.setParams(resolvedData); -
PostProcess event handler for trusted recon -11G Release2
Hi all,
I am disabling a user in post process eventhandler bulkExecution method. When the event handler is triggered does the user is already created at OIM? Do I modify the already created user? Or all changes done to any user during the orchestration process are commited at finalization... Can anyone tell me how things goes at the db side?
Thanks in advance
BR
AliyePost process event handler is fired after the user is created in database. You can verify by retrieving the usr_key attribute of user profile which is generated in database. So if you are disabling a user using post-process event handler, it means user is already created in database. As far as orchestration framework is concerned user is created during orchestration period and all event handlers and access policies are evaluated after that.
regards,
GP -
Custom event handler not executing
Hello.
I'm to set an event handler to execute after a user gets added a role. I have my plugin.zip file like this:
-lib/(myjar).jar
-plugin.xml
Plugin.xml looks like this:
<?xml version="1.0" encoding="UTF-8" ?>
<oimplugins>
<plugins pluginpoint="oracle.iam.platform.kernel.spi.EventHandler">
<plugin pluginclass="com.uti.oim.events.SqlRoleHandler" version="1.0" name="SqlRoleHandler" />
</plugins>
</oimplugins>
Placed it in the plugins directory in my dev environment.
customhandler.xml looks like this:
<?xml version='1.0' encoding='UTF-8'?>
<eventhandlers>
<action-handler class="com.uti.oim.events.SqlRoleHandler" stage="postprocess" sync="TRUE" entity-type="RoleUser" operation="CREATE" name="SqlRoleHandler" order="1000"/>
</eventhandlers>
What am I doing wrong? Thanks.I ran into an issue with event hanlders in 11g. This might apply to yours. I was unable to create both a preprocess and postprocess task on the same object. It always threw an error on the postprocess class that it can't be case as a pre process event handler. So the solution was removal of all preprocess and just go with postprocess and use the EntityManager class to make the updates to not trigger another update. We had to process post-create user tasks for bulk recon, and could not process it in pre, so our only option was to move it all to post.
-Kevin -
PreProcess Event Handler setting default password
Greetings.
We developed a custom preprocess event handler and is working fine, but I want to set a default password for a new user using the sentence orchestration.addParameter("Password","defaultpassword") However I got the message :
<Error> <oracle.iam.identity.usermgmt.impl.handlers.create> <IAM-3050009> <Unknown attribute for entity user.
oracle.iam.platform.entitymgr.UnknownAttributeException: User : [Password]
I think that is necesary use a method like setXelleratePassword or something like that.
How to set a default password in a preprocess event handler associated to the create user event?
Thanks!Hi
Try with this.
Use orchestration.addParameter("USR_PASSWORD","defaultpassword")
Maybe you are looking for
-
Sender SOAP Adaptor - how to use an imported WSDL file
I have to implement an inbound soap interface between my client and its external customer.This interface is in place with the legacy system,which has a webservice that the external customer invokes to send us data. Now the problem im facing is, the e
-
How to import songs from my iPod nano into my iTunes library
I don't know how
-
802.1x Blocking port (many deviсes to one port)
Hello! On ports of the Cisco 3750 there is authentication on 802.1x (Mab). I connect the "stupid" switch (that doesn't work with 802.1x) to port and logs of Radius-server and Cisco show that it was authenticated. Then I connect the device (laptop or
-
Printing photos on photo paper results in bleeding and wrong colors. black comes out as green and green is too vivid. printing on plain paper has less color distortion and is sharper. Advice?
-
HELP - 88.2 k 24-bit wav file is slowing down when imported to garageband
i have an 88.2 k 24-bit wav file that is slowing down when imported to garageband. How do i get around this problem?