Pages

Saturday, November 23, 2013

weblogic.jms.common.JMSException: No failover destination.


Problem: The Weblogic throws  weblogic.jms.common.JMSException: No failover destination while provision or de-provision the user in Oracle Identity Manager in the Clustered environment.  The exception details as follows:


Error:

oracle.iam.identity.exception.UserModifyException: Uncategorized exception occured during JMS processing; nested exception is weblogic.jms.common.JMSException: No failover destination.
        at oracle.iam.identity.usermgmt.impl.UserManagerImpl.modify(UserManagerImpl.java:943)
        at oracle.iam.identity.usermgmt.api.UserManagerEJB.modifyx(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor2327.invoke(Unknown Source)
        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)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
        at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at com.bea.core.repackaged.springframework.jee.spi.MethodInvocationVisitorImpl.visit(MethodInvocationVisitorImpl.java:37)
        at weblogic.ejb.container.injection.EnvironmentInterceptorCallbackImpl.callback(EnvironmentInterceptorCallbackImpl.java:54)
        at com.bea.core.repackaged.springframework.jee.spi.EnvironmentInterceptor.invoke(EnvironmentInterceptor.java:50)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
        at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
        at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
        at $Proxy401.modifyx(Unknown Source)
        at oracle.iam.identity.usermgmt.api.UserManager_nimav7_UserManagerRemoteImpl.__WL_invoke(Unknown Source)
        at weblogic.ejb.container.internal.SessionRemoteMethodInvoker.invoke(SessionRemoteMethodInvoker.java:40)
        at oracle.iam.identity.usermgmt.api.UserManager_nimav7_UserManagerRemoteImpl.modifyx(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor8553.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:85)
        at $Proxy194.modifyx(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor2326.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198)
        at $Proxy399.modifyx(Unknown Source)
        at oracle.iam.identity.usermgmt.api.UserManagerDelegate.modify(Unknown Source)
        at edu.sfsu.trusted.db.recon.oim.SfsuTrustedReconOIMCrudDao.updateAttributes(Unknown Source)
        at edu.sfsu.trusted.db.recon.oim.SfsuTrustedReconOIMCrudDao.createUser(Unknown Source)
        at edu.sfsu.trusted.db.recon.SfsuTrustedReconWrapper.processRecord(Unknown Source)
        at edu.sfsu.trusted.db.recon.SfsuTrustedReconWrapper.processRecon(Unknown Source)
        at edu.sfsu.trusted.db.recon.SfsuTrustedDBReconciliation.execute(Unknown Source)
        at oracle.iam.scheduler.vo.TaskSupport.executeJob(TaskSupport.java:145)
        at sun.reflect.GeneratedMethodAccessor6935.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at oracle.iam.scheduler.impl.quartz.QuartzJob.execute(QuartzJob.java:196)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
Caused by: weblogic.jms.common.JMSException: No failover destination.
        at weblogic.jms.dispatcher.DispatcherAdapter.convertToJMSExceptionAndThrow(DispatcherAdapter.java:110)
        at weblogic.jms.dispatcher.DispatcherAdapter.dispatchSyncTran(DispatcherAdapter.java:53)
        at weblogic.jms.client.JMSProducer.toFEProducer(JMSProducer.java:1289)
        at weblogic.jms.client.JMSProducer.deliveryInternal(JMSProducer.java:796)
        at weblogic.jms.client.JMSProducer.sendInternal(JMSProducer.java:541)
        at weblogic.jms.client.JMSProducer.sendWithListener(JMSProducer.java:394)
        at weblogic.jms.client.JMSProducer.send(JMSProducer.java:384)
        at weblogic.jms.client.WLProducerImpl.send(WLProducerImpl.java:970)
        at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:597)
        at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:574)
        at org.springframework.jms.core.JmsTemplate$3.doInJms(JmsTemplate.java:541)
        at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:471)
        at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:539)
        at oracle.iam.platform.async.messaging.MessageSenderImpl.send(MessageSenderImpl.java:75)
        at oracle.iam.platform.async.messaging.TaskRouter.route(TaskRouter.java:78)
        at oracle.iam.platform.async.messaging.MessagingExecutionService.submit(MessagingExecutionService.java:43)
        at oracle.iam.platform.async.impl.AsyncServiceImpl.submit(AsyncServiceImpl.java:75)
        at 


Cause:

1. OIM Adapter Time Out issue.

Symptoms:

1. Weblogic OIM Servers showed the Warning message in the Web Logic Console Server Pannel.
2. OIM throws SQL exceptions in the OIM Server log due to un available of the SQL jdbc connections.
3. Provision the user in target resource, but that resource info not available in the OIM Repository.
 
Solution:

Set the timeout functionality or Implement the Timeout functionality in the OIM resource adapters in the process task definition. For example resource adapters are Create User, Delete User, First Name Updated etc.



2 comments:

  1. Could you please provide an example of what you mean by "implement the timeout functionality"?

    ReplyDelete
    Replies
    1. Hi
      I meant by implementing the timeout functionality in the client side process task definition java task adapter. I got this exception when I invoking the Web Service client in the Create User Process Task Definition. We have a .net web service and deployed in IIS. This service will take care of the provisioning and De-provisioning functionality. I have never implemented the client side timeout in the web service client using java. Some times Web Service execute longer times because of network connectivity and the response is delayed. In OIM default timeout for the process task is 900 seconds and OIM won't disconnect the connectivity from the OIM Server to My IIS Web Server after timeout is reached in OIM Server. The IIS connections are still opened from the OIM Server to IIS and also database connection is opened in the OIM. After few days jms failover exception is thrown. I need to restart the web logic oim managed servers to resolve the issue.
      Finally I have implemented the Client Side Timeout for my .net web Service in the Process Task Definition. After implementing the clientside timeout functionality in web service client, the jms failover issue is resolved. Please let me know if you need more info.

      The Sample Code of the Timeout Setting for the web Service as follows:

      BindingProvider binding=(BindingProvider) service;
      Map context = binding.getRequestContext();
      context.put("com.sun.xml.ws.connect.timeout", connectTimeOut);
      context.put("com.sun.xml.ws.request.timeout", requestTimeOut);

      Delete