Aborting ALBPM process instance gracefully.

I am trying to implement cascade abort functionality for instances of ALBPM processes. Since ALBPM Studio currently doesn't provide any feature that you could set some property for associating sub processes during design time that child process life cycle can be controlled by parent process. So I need to find some process design + programmatic way to implement this functionality. Basically when top level instance is aborted that action should be cascaded to all the child/sibling processes that were initiated from the parent . This is the only way not to leave any orphan process around when top level instance(s) is terminated.
I tried multiple ways and every time I hit some ALBPM implementation obstacle that didn't allow me to implement any generic and efficient way of fulfilling this function. I believe this is very common case scenario, so I am wondering if any body any information to share with me.
-- Deha Peker
Edited by: dpeker on Sep 23, 2008 7:08 AM

Did you try using Notification Wait activity (Allow Interrupts enabled).
This is how I imagine this working : if in a parent process, any instance get aborted, we capture it in Process Exception flow from where we send an notification to Child Process through an automatic activity before the instance gets aborted.
In child process, we have a notification wait activity(Allow Interrupts enabled) which will get above notification from parent process, it will then pull the instance from main flow and you can abort it via ACTION = ABORT.
I hope the above should makes technical sense and helps you.
Thanks, Vikas

Similar Messages

  • BPM 11g - Abort process instance

    I have a BPMN process that does 3 things:
    1. Calls the third party interface
    2. Starts the Timer proces aynchronously. This timer process is to make sure that the task gets picked up up an admin user (Human Task);if we don't get the response within the agreed time limit.
    3. Awaits the response.
    So, when we get the response back from the backend system, it should do 2 things:
    1. Stop the timer process.This could either be in a waiting state (i.e if the timer hasn't expired) or might have moved to the Human task step.
    2. Notify the awaiting instance so that it is then moved onto the next step in the process.
    I have used correlationId to match the request and response.It is working (with Send/Receive task) and notifying the waiting instance, but I am not sure how to abort the running Timer process.
    Should I use an interrupting event subprocess in my Timer process, that if called should throw an exception. This will then move the Timer process instance to the Exception handling flow and that will lead to the termination of the process instance, or is there a better way to achieve this. TaskService is the other option I thought of, but to achieve this simple thing, I thought that would be an overkill. Is there a re-commended pattern to meet this requirement.
    Thanks
    Raj
    Edited by: user588394 on 21-Feb-2013 09:04

    Hi Raj
    1. Terminate means you want to End that Process no matter where it is at any instance of time. Say if I have BPM Process with 10 SwimLanes it can be at any of the Lanes with any User. I am taking simple Example with Human Tasks, but you can apply for other component like Timer servces etc.
    2. I hope you are aware of 2 things specially for Human Tasks: Action named "Withdraw" and a role named "Process Owner". For any human task, under Actions menu you should See a Withdraw option. You can code your application to capture this output using XOR gateway and if outcome is "WITHDRAW" directly end the process and go to End Node. If you have many places like this, there is easy way instead of running wires eveywhere. Create a simple throw even that goes to End Node. And after each human task check outcome if Withdraw, that that error, which will end the process. I hope you got the point.
    b) The reason I mentioned Process Owner is, generally I do NOT give Withdraw control to each User who can work on any Task. If accidentally that User do this action, thats it. The process ENDS and you can never retriive it back. So under .TASK file, I preven Withdraw action to Asssignee and Instead give this action only to OWNER (Process Owner). Process owner is like admin who can pretty much see any tasks and I would give him all the permissions like these Withdraw, Reassing, Suspend etc etc. This gives more controlled power to your application. Anyhow, in bpm workspace, login as process owner and search for any Task aged for long time and jus Withdraw it.
    You can do all the above using APIs also as far as you have Withdraw action going to the End Node.
    If your requirement is something else, ignore above notes. But still you can think along the above lines, if all you want is to Kill a Running Process anytime.
    Thanks
    Ravi Jegga

  • ALBPM:Polling of folder and create a process instance.

    Hi, everyone.
    I am quite new to ALBPM, but I want to make everyone a question:
    I have a requirement where i need to poll or view a folder at particular location and in the folder search for the files.
    And
    If the files are present i need to create a process instance.The polling is done after every 30 minute interval.This is a kind of scheduler.
    Please help me on this.
    Thanks a lot to everyone!!!
    Prakash.

    Hi Prakash,
    You can poll a folder using a Global Automatic activity.
    Once added, right click the activity -> "Properties" -> "General" -> "Polling by Interval". Enter a value like "20m" for 20 minutes or "3h" for 3 hours or "1M" for one month.
    The logic inside the Global Automatic can poll to see if a file exists in a certain folder on the server. In the logic shown below, I specified the "HOT_FOLDER" as a business paramater and set it to a valid directory that I knew files (XML files in this case) would posted to. When the Global Automatic hits a file that it's looking for, it reads it and moves it into another folder ("DESTINATION_FOLDER") so it's not read again the next time the Global Automatic automatically polls again.
    Here's the logic:
    // See if there are files in the hot folder
    logMessage "Checking the hotfolder " + HOT_FOLDER + " for new files"
    using severity = DEBUG
    goodFile as Boolean = false
    fileType as String
    fileName as String
    files as Fuego.Io.File[] = Fuego.Io.File.listFiles(sourcePathFile : HOT_FOLDER + "\\", silent : true)
    // Are there file(s) in the directory?
    if length(files) > 0 then
    for each file in files do
    if not file.directory && length(file.name) > 4 then
         fileType = substring(file.name, first : length(file.name) - 3, last : length(file.name))
         fileType = toUpperCase(fileType)
         logMessage "File type is: "+ fileType using severity = DEBUG
    if fileType = "XML" then
         goodFile = true
    else
    goodFile = false
    end
    else
    goodFile = false
    end
    if goodFile then
    // initialize object that will be passed into process
    questionaire as Business.Questionaire = Business.Questionaire()
    questionaire.question = Business.Question()
    // Ignore any sub-directories
    logMessage "A new file was found (name: " + file.name + ")"
    using severity = DEBUG
    logMessage "A new file was found (fullName: " + file.fullName + ")"
    using severity = DEBUG
    newFileName as String = DESTINATION_FOLDER + "\\" + file.name
    Fuego.File.move(sourcePath : file.fullName, destinationPath : newFileName,
    silent : true)
              questionaireXML as Business.QuestionaireXml = Business.QuestionaireXml()
    fileContents as String = ""
    xmlFile as TextFile = TextFile()
    open xmlFile
    using name = newFileName,
    lineSeparator = "\n"
    for each line in xmlFile.lines do
    fileContents = fileContents + line
    end
    close xmlFile
    logMessage "loading Questionaire"
    using severity = DEBUG
    // Generate PDF
    load questionaireXML
    using xmlText = fileContents
    contents as String[] = []
              templateNode as Any[] = selectNodes(questionaireXML, xpath : "/questionaire/template")
              for each t in templateNode do
              template as Integration.Questionaire.Template = Integration.Questionaire.Template(xmlText : t)
              logMessage "storing template info" using severity = DEBUG
              contents[] = "Template ID: " + template.id.children.first
              contents[] = "Report Name: " + template.reportName.children.first
              contents[] = "Date: " + template.reportDate.children.first
              contents[] = "Report Type: " + template.reportType.children.first
              // set attributes used in object passed into process
              questionaire.templateId = String(template.id.children.first)
              questionaire.templateName = String(template.reportName.children.first)
              questionaire.templateType = String(template.reportType.children.first)
              end
              customerNode as Any[] = selectNodes(questionaireXML, xpath : "/questionaire/customer")
              for each c in customerNode do
                   customer as Integration.Questionaire.Customer = Integration.Questionaire.Customer(xmlText : c)
              logMessage "storing customer info" using severity = DEBUG
              contents[] = "Customer: " + customer.name.children.first
              contents[] = "Address: " + String(customer.street.children.first) + ", " + String(customer.city.children.first)
              + ", " + String(customer.state.children.first)
              + ", " + String(customer.zip.children.first)
              questionaire.customerName = String(customer.name.children.first)
              questionaire.customerStreet = String(customer.street.children.first)
              questionaire.customerCity = String(customer.city.children.first)
              logMessage "State is: " + String(customer.state.children.first) using severity = DEBUG
              if length(String(customer.state.children.first)) = 2 then
                   questionaire.customerState = getStateName(questionaire, stateAbbreviation : String(customer.state.children.first))
              else
              questionaire.customerState = String(customer.state.children.first)
              logMessage "questionaire State is: " + questionaire.customerState using severity = DEBUG
              end
              questionaire.customerZip = String(customer.zip.children.first)
              end
              questionNode as Any[] = selectNodes(questionaireXML, xpath : "/questionaire/questions/question")     
    for each q in questionNode do
    question as Integration.Questionaire.Question = Integration.Questionaire.Question(xmlText : q)
    logMessage "storing question info" using severity = DEBUG
    contents[] = question.id.children.first + " " + question.questionText.children.first + " ("
    + String(question.questionType.children.first) + ")"
    ques as Business.Question = Business.Question()
    ques.id = String(question.id.children.first)
    ques.text = String(question.questionText.children.first)
    ques.type = String(question.questionType.children.first)
    ques.answerA = ""
    ques.answerB = ""
    ques.answerC = ""
    extend questionaire.questions using
    question = ques
    end
    newFileName = substring(file.name,0,length(file.name) - 4) + ".pdf"
    generate(PdfGenerator, outputFilename : DESTINATION_FOLDER + "\\" + newFileName, contents : contents, logoImageURL : null)
    // Create the instance
    params as Any[String]
    params["xmlFileContentsArg"] = fileContents
    params["questionaireXmlArg"] = questionaireXML
    params["questionaireArg"] = questionaire
    params["fileNameArg"] = newFileName
    logMessage "Creating instance" using severity = DEBUG
    Instance.create(arguments : params, argumentsSetName : "BeginIn")
    end
    end
    else
    logMessage "No files in directory: " + HOT_FOLDER using severity = DEBUG
    end

  • How to delete/abort/terminate a process instance. (Admin purpose)

    Hi All,
    I have following 2 problems while aborting a process. Any suggestion will be highly appriciated.
    1. As admin, I want to delete/terminate/abort a process even if its not marked abortable in the deployed BPM activity. (not sure, if papi provides such facility or any workaround is possible)
    2. Is it possble to abort a process, which is on automatic activity. (for some reason if its looping in the automatic activity)
    Thanks in advance for your help.
    Regards,
    Manohar Chhapolia

    If the activity does not have its abortable property enabled, PAPI won't be able to abort the instance. Consider adding a Grab activity with from all/to all and abort turned on.
    Grab the instance and then abort it.
    Dan

  • How to initaiate a ALBPM Process using Email

    Hi,
    I'm very new to this ALBPM.
    I have 2 quries for now.
    * Can I initiate a process on receiving a mail to the mailbox.(SMTP Configured Inbox)
    Like the way we send reminder mails to the SMTP configured mail box, Is it possible to initaiate a process automatically when that configured mail box receives a particular mail??
    * How to generate the reports for a Process Instance. \\ \\      I want to track the status of a particular process under execution \\      i.e, wanted to generate a report taking status of the process at each \\      stage.
    My requirement : we have process for creating a customer code.
    Process flow will have these states : receives requests -
    rejects/proceeds (we will review it if it incompletes sends back to
    customer or proceeds with creation) - updating/approvals / escalations - end.So I need to generate the report with the following:how many requests came in a day,how many are requests are created successfully, how many requests have been rejected,how many are escalated.
    Exactly I have the report of a request at what stage.it is
    like rejected/approval pending/created....
    At every stage I have to track the process and
    need to generate a report
    Can anyone please guide me in this as early as possible.
    Regards
    ~Kavitha...
    Edited by: user10230886 on Sep 9, 2008 4:28 AM

    Kavitha
    1. You may want to check that in what format you will be getting an email. You may have to use com object as usually info in email is sent in a VB form. If the email will be sent to you in an xml formt ( i assume that some engg group in between will convert the email for you in agreed format and transfer only required data to you).
    You can use Global Automatic activity to listen from mail server and on basis of that initiate a instance in the albpm process by generating arguments and mapping arguments to instance variable.
    MailServer mailServer = Fuego.Net.MailServer(protocol: mailIncomingProtocol,
    host: mailIncomingServer,
    user: mailIncomingUsername,
    passwd: mailIncomingUserPassword,
    folder: "INBOX",
    leaveMessages: true);
    foreach (message in mailServer.messages) {
    logMessage("Subject: " + message.subject + "; Message: " + message.message);
    String subject = message.subject;
    String theRequestID = subject.substring(subject.indexOf("(") + 1, subject.indexOf(")"));
    String firstLineOfMessage = message.message.substring(0, message.message.indexOf("\n"));
    logMessage("FirstLine: " + firstLineOfMessage);
    mailServer.removeMail(mail: message);
    Hope this will give you a good start.
    Also, for reporting, you can use BAM. Their are default dashboards which one can generate which show the workload.
    Thanks, Vikas

  • BPM 11g- Terminate process instance

    Hi,
    How can I terminate a process instance that could either be sitting in an Human Interactive or a Timer activity.
    TaskService is one solution but I don't want to take that route to achieve this simple requirement. Is there any recommended pattern to implement this.
    I also thought of an event boundary with interuupting event, but not sure what to write there..
    It was easy in Oracle BPm 10G where you could have a Notification Wait with interrupt and that is attached to an "Automatic" activity where we could say:
    this.action=ABORT;
    Thanks
    Raj

    Hi Raj
    1. Terminate means you want to End that Process no matter where it is at any instance of time. Say if I have BPM Process with 10 SwimLanes it can be at any of the Lanes with any User. I am taking simple Example with Human Tasks, but you can apply for other component like Timer servces etc.
    2. I hope you are aware of 2 things specially for Human Tasks: Action named "Withdraw" and a role named "Process Owner". For any human task, under Actions menu you should See a Withdraw option. You can code your application to capture this output using XOR gateway and if outcome is "WITHDRAW" directly end the process and go to End Node. If you have many places like this, there is easy way instead of running wires eveywhere. Create a simple throw even that goes to End Node. And after each human task check outcome if Withdraw, that that error, which will end the process. I hope you got the point.
    b) The reason I mentioned Process Owner is, generally I do NOT give Withdraw control to each User who can work on any Task. If accidentally that User do this action, thats it. The process ENDS and you can never retriive it back. So under .TASK file, I preven Withdraw action to Asssignee and Instead give this action only to OWNER (Process Owner). Process owner is like admin who can pretty much see any tasks and I would give him all the permissions like these Withdraw, Reassing, Suspend etc etc. This gives more controlled power to your application. Anyhow, in bpm workspace, login as process owner and search for any Task aged for long time and jus Withdraw it.
    You can do all the above using APIs also as far as you have Withdraw action going to the End Node.
    If your requirement is something else, ignore above notes. But still you can think along the above lines, if all you want is to Kill a Running Process anytime.
    Thanks
    Ravi Jegga

  • Synchronizing on Process Instance Object

    Hi,
    We have a process web service, which is used to create, notify and update BPM process instances.
    This process web service is accessed from Java code.
    The java code uses a re-try mechanism to talk to the process web service.
    We want this to be changed using wait-notify. But we have only the string value for Process Instance ID.
    Can anybody help me on how could we get the BPM process instance object with the Process Instance ID?
    I hope for this case we should synchronize on the BPM process Instance Object.
    Please find below the current code snippet with re-try which needs to be changed as wait-notify.
    for(int i = retryCount; i >= 0; i--) {
    try {
    sResult = wsClient.notifyUpdate(oEvent, oTG, sInstId);
    break;
    catch(Exception e) {
    if(i == 0) {
    throw e;
    logger.error(getClass().getName() + " - Failed to call wsClient.notifyUpdate()");
    try {
    logger.info(getClass().getName() + " - Retrying bpmUpdateProcessInstance ... " + (retryCount - i + 1) + " times in "
    + (System.currentTimeMillis() - startTimeMillis) + " millis.");
    Thread.sleep(retryInterval);      
    catch(InterruptedException ignore) {
         //silent catch is fine here
    }// end for loop

    Hi,
    Please correct me if I miss-understood your question.
    You want to know the process instance Id of a particular BPM process ?
    You want to do it through java code or in BPM process layer ?
    Which version of OBPM/ALBPM you are using ?
    Bibhu

  • ALBPM Process Administrator Error

    I have installed and configured the ALBPM Process Adminstrator 6.
    When I try to start the BPM Web Applications from the Admin Center of the ALBPM Process Administrator, I get the following warning:-
    log4j:WARN No appenders could be found for logger
    (org.apache.catalina.startup.Embedded).
    log4j:WARN Please initialize the log4j system properly.
    The Process Administrator starts and then stops..How do I eliminate this error..

    Hi,
    You can completely disregard this message. The Tomcat instance that is executed behind when you start the BPM Application Server, is trying to use a specific Log4J configuration that is not enabled. Is this the only problem or you also show that the underlying Tomcat container is not starting. In any event, the Admin Center application shows at the bottom several Tabs with logs from different web applications as well as the stderr and stdout of the underlying BPM Application Server Tomcat container.
    eduardoc.

  • Create Process Instance via DB insert?

    I would like to have a DB insert kick off a process instance.
    I am an ALBPM novice, but I'm guessing the solution would involve a DB insert trigger (Oracle) and a PAPI ProcessServiceSession.createProcessInstance() call.
    Does anyone know how to put it all together?
    Edited by jabize at 05/20/2008 7:36 AM

    You can do this way:
    1. Let the DB trigger insert a new row into a (new) table.
    2. Create a Global Automatic Activity (Type - Polling by Interval) in your process and set it up to poll for regular intervals, for example every 10 min...
    3. Catalog that table (or SQL Query) into ALBPM
    4. Write code for this global activity to read records from that table and create new Process Instance for each row found and delete this record.
    Thanks,
    Malar.

  • Process instances stop at timer event

    Hi,
    I modelled a process with intermediate timer event. When this timer expires an automatic activity is invoked which checks certain conditions. If these conditions are not met the process token returns to the timer until the conditions are met and another process path is entered. I observed quite a lot of process instances which stoped at this timer event, meaning: the timer doesn't expire any more and the entire process instance stands still. The reason for this seems to be:
    - database filled up (ok, this shouldn't happen. I accept that this has severe consequences)
    - restart of application or netweaver
    - running process archiving run
    Is there a way to reactivate these process instances other than aborting the current instance and starting a new one?
    Timer events use GalaxyTimerJob. I assume an appropriate database entry failed. Can I add this missing table entry by executing SQL commands or isn't it as easy as that?
    Thanks
    Regards
    Anja

    Hi Nick,
    yes, suspending and resuming doesn't change anything. 'Instance restart': you mean restarting NetWeaver? In fact, it seems to me, that fixes the problem for some process instances, but too many stay in their "corrupt" status.
    Can I execute some SQL statements to add this GalaxyTimerJob database entry? Even if there are such statements, would it be too critical as the various process instances might be in different states and the execution of such statements might rather brake than fix things?
    Regards
    Anja

  • About process instance administration

    Hi, everyone.
    We are trying to figure out to what extent can an administrator control a running process instance, either in workspace or by PAPI.
    Here is some questions:
    1) Can I send an instance to any activity even if there is not a Grab Activity defined in the process? If I can't do it in workspace, can I do it by PAPI?
    2) Can I edit instance variable whenever I want? If I place an interrupt Messege Wait Activity in every process, can I achieve this?
    3) Is it a good practice to set instance variable as a SqlObject so that I can edit it whenever I want?
    4) Can I end an instance if I did not set the Activity which the instance is current in as abortable?
    5) I am trying to achieve some of the above by the "action" predifined variable. But it seems that "action" can only be used in interrupt or exception?
    Any idea is welcome.
    Thank you~

    Hi Matt,
    1. AFAIK - we cannot do it in workspace.
    2. Yes, u can edit instance variable.
    3.No
    4. I am not aware
    5. I am not aware
    Have a nice time..

  • Maximum life-span of process instance

    Hi
    Is there any maximum life-span (duration) limit for an in-process instance in Oracle BPM?
    In other words, does OBPM supoort very long running business processes (e.g. processes that run for over 4 years etc).
    Please note- I am talking about life span in-process instance, and not completed or aborted instances.
    A pointer to any release documentation section in this regards would be a great help.
    Thanks
    Hemant

    Hi Hemant,
    Work item instances can remain active inside a process for years. There is no documentation that I'm aware of that specifically states this, but it's the way it has worked for the last 10 years. Large insurance and financial institutions using the product today have to have this capability.
    Dan

  • Can not view audit trail of BPMN Process instance in Enterprise Manager

    I can not view the audit trail of BPMN Process instance in Enterprise Manager. When I try to click on BPMN process link inside process instance flow trace a NoClassDefFoundError error occurs. How can I fix this?
    ####<Jan 23, 2014 1:44:24 AM MSK> <Error> <oracle.adfinternal.view.faces.config.rich.RegistrationConfigurator> <vm-vtb-04> <AdminServer> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <weblogic> <> <ab53c740f435f6de:-43ee6bbc:143bbd0bbe7:-8000-0000000000000319> <1390427064715> <BEA-000000> <ADF_FACES-60096:Server Exception during PPR, #2
    javax.servlet.ServletException: java.lang.NoClassDefFoundError: oracle/bpm/draw/diagram/ProcessDiagrammer
            at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:342)
            at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:27)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.sysman.emSDK.license.LicenseFilter.doFilter(LicenseFilter.java:102)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:205)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:131)
            at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:447)
            at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
            at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:447)
            at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:271)
            at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:177)
            at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.help.web.rich.OHWFilter.doFilter(Unknown Source)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.sysman.emas.fwk.MASConnectionFilter.doFilter(MASConnectionFilter.java:41)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.adf.library.webapp.LibraryFilter.doFilter(LibraryFilter.java:181)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.sysman.eml.app.AuditServletFilter.doFilter(AuditServletFilter.java:183)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.sysman.eml.app.EMRepLoginFilter.doFilter(EMRepLoginFilter.java:203)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.sysman.core.model.targetauth.EMLangPrefFilter.doFilter(EMLangPrefFilter.java:158)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.sysman.core.app.perf.PerfFilter.doFilter(PerfFilter.java:141)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.sysman.eml.app.ContextInitFilter.doFilter(ContextInitFilter.java:542)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:119)
            at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:324)
            at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460)
            at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
            at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
            at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:163)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
            at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
            at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)
            at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
            at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
            at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
            at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
            at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
            at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
            at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
            at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
    Caused By: java.lang.NoClassDefFoundError: oracle/bpm/draw/diagram/ProcessDiagrammer
            at java.lang.Class.getDeclaredMethods0(Native Method)
            at java.lang.Class.privateGetDeclaredMethods(Class.java:2436)
            at java.lang.Class.privateGetPublicMethods(Class.java:2556)
            at java.lang.Class.getMethods(Class.java:1412)
            at java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1284)
            at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1158)
            at java.beans.Introspector.getBeanInfo(Introspector.java:408)
            at java.beans.Introspector.getBeanInfo(Introspector.java:167)
            at javax.el.BeanELResolver$BeanProperties.<init>(BeanELResolver.java:153)
            at javax.el.BeanELResolver.getBeanProperty(BeanELResolver.java:574)
            at javax.el.BeanELResolver.getValue(BeanELResolver.java:281)
            at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:173)
            at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:200)
            at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
            at com.sun.el.parser.AstNot.getValue(AstNot.java:59)
            at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206)
            at org.apache.myfaces.trinidad.bean.FacesBeanImpl.getProperty(FacesBeanImpl.java:68)
            at oracle.adfinternal.view.faces.renderkit.rich.GoLinkRenderer.getDisabled(GoLinkRenderer.java:506)
            at oracle.adfinternal.view.faces.renderkit.rich.GoLinkRenderer.isDisabled(GoLinkRenderer.java:681)
            at oracle.adfinternal.view.faces.renderkit.rich.GoLinkRenderer.handleInaccessibility(GoLinkRenderer.java:584)
            at oracle.adfinternal.view.faces.renderkit.rich.GoLinkRenderer.encodeAll(GoLinkRenderer.java:131)
            at oracle.adfinternal.view.faces.renderkit.rich.CommandLinkRenderer.encodeAll(CommandLinkRenderer.java:158)
            at oracle.adf.view.rich.render.RichRenderer.encodeAll(RichRenderer.java:1432)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(CoreRenderer.java:358)
            at org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:840)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:937)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeChild(CoreRenderer.java:422)
            at oracle.adf.view.rich.render.RichRenderer.encodeChild(RichRenderer.java:2788)
            at oracle.adfinternal.view.faces.renderkit.rich.BreadCrumbsRenderer._renderLink(BreadCrumbsRenderer.java:420)
            at oracle.adfinternal.view.faces.renderkit.rich.BreadCrumbsRenderer._renderNode(BreadCrumbsRenderer.java:322)
            at oracle.adfinternal.view.faces.renderkit.rich.BreadCrumbsRenderer._renderContent(BreadCrumbsRenderer.java:269)
            at oracle.adfinternal.view.faces.renderkit.rich.BreadCrumbsRenderer.encodeAll(BreadCrumbsRenderer.java:162)
            at oracle.adf.view.rich.render.RichRenderer.encodeAll(RichRenderer.java:1432)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(CoreRenderer.java:358)
            at org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:840)
            at org.apache.myfaces.trinidad.component.UIXCollection.encodeEnd(UIXCollection.java:538)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:937)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeChild(CoreRenderer.java:422)
            at oracle.adf.view.rich.render.RichRenderer.encodeChild(RichRenderer.java:2788)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer._encodeHorizontalChild(PanelGroupLayoutRenderer.java:499)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer.access$100(PanelGroupLayoutRenderer.java:30)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer$EncoderCallback.processComponent(PanelGroupLayoutRenderer.java:659)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer$EncoderCallback.processComponent(PanelGroupLayoutRenderer.java:601)
            at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:170)
            at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:290)
            at oracle.adfinternal.view.faces.taglib.region.IncludeTag$FacetWrapper.processFlattenedChildren(IncludeTag.java:675)
            at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:160)
            at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:290)
            at org.apache.myfaces.trinidad.component.UIXComponent.encodeFlattenedChildren(UIXComponent.java:255)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer.encodeAll(PanelGroupLayoutRenderer.java:358)
            at oracle.adf.view.rich.render.RichRenderer.encodeAll(RichRenderer.java:1432)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(CoreRenderer.java:358)
            at org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:840)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:937)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeChild(CoreRenderer.java:422)
            at oracle.adf.view.rich.render.RichRenderer.encodeChild(RichRenderer.java:2788)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer._encodeHorizontalChild(PanelGroupLayoutRenderer.java:499)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer.access$100(PanelGroupLayoutRenderer.java:30)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer$EncoderCallback.processComponent(PanelGroupLayoutRenderer.java:659)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer$EncoderCallback.processComponent(PanelGroupLayoutRenderer.java:601)
            at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:170)
            at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:290)
            at org.apache.myfaces.trinidad.component.UIXComponent.encodeFlattenedChildren(UIXComponent.java:255)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer.encodeAll(PanelGroupLayoutRenderer.java:358)
            at oracle.adf.view.rich.render.RichRenderer.encodeAll(RichRenderer.java:1432)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(CoreRenderer.java:358)
            at org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:840)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:937)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeChild(CoreRenderer.java:422)
            at oracle.adf.view.rich.render.RichRenderer.encodeChild(RichRenderer.java:2788)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelBorderLayoutRenderer.renderSideFacet(PanelBorderLayoutRenderer.java:316)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelBorderLayoutRenderer._encodeAllWithSideFacets(PanelBorderLayoutRenderer.java:163)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelBorderLayoutRenderer.encodeAll(PanelBorderLayoutRenderer.java:83)
            at oracle.adf.view.rich.render.RichRenderer.encodeAll(RichRenderer.java:1432)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeEnd(CoreRenderer.java:358)
            at org.apache.myfaces.trinidad.component.UIXComponentBase.encodeEnd(UIXComponentBase.java:840)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:937)
            at org.apache.myfaces.trinidad.render.CoreRenderer.encodeChild(CoreRenderer.java:422)
            at oracle.adf.view.rich.render.RichRenderer.encodeChild(RichRenderer.java:2788)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer._encodeChild(PanelGroupLayoutRenderer.java:432)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer.access$300(PanelGroupLayoutRenderer.java:30)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer$EncoderCallback.processComponent(PanelGroupLayoutRenderer.java:682)
            at oracle.adfinternal.view.faces.renderkit.rich.PanelGroupLayoutRenderer$EncoderCallback.processComponent(PanelGroupLayoutRenderer.java:601)
            at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:170)
            at org.apache.myfaces.trinidad.component.UIXComponent.processFlattenedChildren(UIXComponent.java:290)
            at org.apache.myfaces.trinidad.component.UIXComponent.encodeFlattenedChildren(UIXComponent.java:255)

    Hi Matt
    Till you get exact answer, try indirect approach. I did view page source and could not find the details in the source code. Then I clicked on image to show in new browser and thats when I got this link: You can dig into this imageRenderer.jsp file that can be found in one of the WAR files shown below. Look into EARs also that my have WARs with this jsp. Mostly there should be some sort of Servlet also to display the audit trail. I just checked from bpm/workspace Process Tracking Tab. I did not looked from EM Console tracking tabs though.
    beaHome\Oracle_SOA1\soa\applications\OracleBPMWorkspace.ear has a OracleBPMWorkspace.war file. See if this direction helps
    http://devlinux04:8001/bpm/workspace/jsf/instance/imageRenderer.jsp?imagePath=/tmp/1pLcNmhd77v9XnLCrpNs6dyby3Vzpv4QR1LdPTTf6hpCTp8Fh2KH!-206223496!1302780477267/GraphicalAuditTrail1328100234265306320.png
    Thanks
    Ravi Jegga

  • How to look for duplicate process instances?

    In Oracle BPM 11g, is there a good way to look for duplicate process instances based on process data attributes? For example, I have entered an instance of a process for 'John Smith' with a date of '4/1/2010' and I want to see if there is another instance in the same process with these same data values to evaluate as a potential duplicate. I believe we can write a java service to invoke the API to do this, but I am wondering if there is a better way within the process design to do this (XPath extension functions or soemthing?). It seems like this would be a common need.

    I am really looking for an approach to looking for duplicate instances within my process flow, not from EM. So, if the user starts a new instance of a process, I can check for another instance that appears to be a duplicate and direct the flow to a human activity to review the potential duplicate and make a decision as to whether to continue processing the new instance or reject it. My guess is that we need to us a service task to invoke java code which uses the API to investigate other instances with the same values. But, I was hoping for a simpler solution....I have to think that this is not too uncommon.

  • [OIM 9.1.0.2] Process Instance.Key missing with provisionResource API

    Hi guys,
    I face issue when i provision resource, i checked and it doesn't works because when resource is provisioned ORC_KEY in OIU table is not setted and i don't know why.. Resource is created in "Ready" state.
    This is what i do:
    ResourceData resData = moUserUtility.provisionResource(UserKey, 522);
    String userOiuKey = resData.getOiuKey().toString();
    String userObiKey = resData.getObiKey().toString();
    $logger.debug("provisionUnipassResource - Getting userOiuKey : " + userOiuKey);     
    $logger.debug("provisionUnipassResource - Getting userObiKey : " + userObiKey);     
    //Getting objectKey of userObjectInstanceKey
    String ObjectKey = "";
    String ProcessInstanceKey = "";
    tcResultSet resultSetObjects = moUserUtility.getObjects(UserKey);
    for (int i1 = 0; i1 < resultSetObjects.getRowCount(); i1++) {
    resultSetObjects.goToRow(i1);
    ObjectKey = resultSetObjects.getStringValue("Object Instance.Key");
    ProcessInstanceKey = resultSetObjects.getStringValue("Process Instance.Key");
    if (Long.valueOf(ObjectKey).equals(userObiKey))
    $logger.debug("provisionUnipassResource - ProcessInstanceKey found with value [" + ProcessInstanceKey + "] for ObjectKey [" + ObjectKey + "]");     
    break;
    //Add form datas
    if ("".equals(ProcessInstanceKey)) {
    $logger.debug("provisionUnipassResource - Can't find ProcessInstanceKey");
    return "KO";
    else {
    long LongProcessInstanceKey = Long.valueOf(ProcessInstanceKey);
    moFormInstanceUtility.setProcessFormData(LongProcessInstanceKey, resourcetHash);
    $logger.debug("provisionUnipassResource - Resource has been created");          
    return "OK";
    Is someone can help me? May i do something wrong?
    Thanks in advance for your help
    Edited by: 993041 on 11 mars 2013 05:34
    Edited by: 993041 on 11 mars 2013 05:34

    Hi guys,
    I face issue when i provision resource, i checked and it doesn't works because when resource is provisioned ORC_KEY in OIU table is not setted and i don't know why.. Resource is created in "Ready" state.
    This is what i do:
    ResourceData resData = moUserUtility.provisionResource(UserKey, 522);
    String userOiuKey = resData.getOiuKey().toString();
    String userObiKey = resData.getObiKey().toString();
    $logger.debug("provisionUnipassResource - Getting userOiuKey : " + userOiuKey);     
    $logger.debug("provisionUnipassResource - Getting userObiKey : " + userObiKey);     
    //Getting objectKey of userObjectInstanceKey
    String ObjectKey = "";
    String ProcessInstanceKey = "";
    tcResultSet resultSetObjects = moUserUtility.getObjects(UserKey);
    for (int i1 = 0; i1 < resultSetObjects.getRowCount(); i1++) {
    resultSetObjects.goToRow(i1);
    ObjectKey = resultSetObjects.getStringValue("Object Instance.Key");
    ProcessInstanceKey = resultSetObjects.getStringValue("Process Instance.Key");
    if (Long.valueOf(ObjectKey).equals(userObiKey))
    $logger.debug("provisionUnipassResource - ProcessInstanceKey found with value [" + ProcessInstanceKey + "] for ObjectKey [" + ObjectKey + "]");     
    break;
    //Add form datas
    if ("".equals(ProcessInstanceKey)) {
    $logger.debug("provisionUnipassResource - Can't find ProcessInstanceKey");
    return "KO";
    else {
    long LongProcessInstanceKey = Long.valueOf(ProcessInstanceKey);
    moFormInstanceUtility.setProcessFormData(LongProcessInstanceKey, resourcetHash);
    $logger.debug("provisionUnipassResource - Resource has been created");          
    return "OK";
    Is someone can help me? May i do something wrong?
    Thanks in advance for your help
    Edited by: 993041 on 11 mars 2013 05:34
    Edited by: 993041 on 11 mars 2013 05:34

Maybe you are looking for