Humanworkflow callback to different process

Hi All,
I have come up with a requirement
I am runing on SOA 10.1.1.3.3
I have BPELProcess1 which call BPELProcess2
In BPELProcess2, we create human tasks with its parent process( BPELProcess1) details
that means we modify below copy rules in *<taskname>_AssignSystemTaskAttributes* assign activity of BPELProcess2
<copy>
<from expression="We give BPELProcess1 instanceID>
<to part="payload" query="/taskservice:initiateTask/task:task/task:processInfo/task:instanceId" variable="initiateTaskInput"/>
</copy>
<copy>
<from expression="BPELProcess1"/>
<to part="payload" query="/taskservice:initiateTask/task:task/task:processInfo/task:processName" variable="initiateTaskInput"/>
</copy>
<copy>
<from expression="BPELProcess1"/>
<to part="payload" query="/taskservice:initiateTask/task:task/task:processInfo/task:processId" variable="initiateTaskInput"/>
</copy>
<copy>
<from expression="We give BPELProcess1 version"/>
<to part="payload" query="/taskservice:initiateTask/task:task/task:processInfo/task:processVersion" variable="initiateTaskInput"/>
</copy>
Human task is getting created and when we complete the task, callback is not coming to BPELProcess2 instead it is going to BPELProcess1(reason is obvious we have created task in BPELProcess2 with BPELProcess1 details, so callback is happening to BPELProcess1 )
I wanted to callback happen to BPELProcess2
I observed that there is one element <callback> in *initiateTaskInput* variable and I hope I can use it to achieve this.
Can anybody please brief me what <callback> element is about
*<callback>*
*</context>*
*</id>*
*</type>*
*</callback>*
Thanks,
Praveen

HI, see Naming Conventions for Background Jobs in docu:
http://help.sap.com/saphelp_sm32/helpdata/en/da/0318025d64a84b94542641ed77ee74/content.htm

Similar Messages

  • Can use the same thread safe variable in the different processes?

    Hello,
    Can  use the same thread safe variable in the different processes?  my application has a log file used to record some event, the log file will be accessed by the different process, is there any synchronous method to access the log file with CVI ?
    David

    Limiting concurrent access to shared resources can be better obtained by using locks: once created, the lock can be get by one requester at a time by calling CmtGetLock, the other being blocked in the same call until the lock is free. If you do not want to lock a process you can use CmtTryToGtLock instead.
    Don't forget to discard locks when you have finished using them or at program end.
    Alternatively you can PostDeferredCall a unique function (executed in the main thread) to write the log passing the apprpriate data to it.
    Proud to use LW/CVI from 3.1 on.
    My contributions to the Developer Zone Community
    If I have helped you, why not giving me a kudos?

  • In what circumstances could my app service simultaneously process requests in different processes?

    Hi,
    We recently encountered a scenario in our Cloud Services Web Role web app where simultaneous api calls on the same item occurred, such that IIS automatically allocated them to be handled on separate threads inside the same w3wp process. We needed to handle
    this scenario by rejecting/ignoring whichever call came in second, so we just used a static ConcurrentDictionary object to track which items were currently "locked".
    But I'm concerned that as we scale up eventually Azure will start routing such calls to different w3wp processes or even different machines.  In such a case, a static in-memory object is obviously not going to do the job.  For now all I want to
    do is find out what happens in the scenario where two requests are handled by different processes/machines - so what's the easiest way to trigger an Azure web role into this behaviour?
    Thanks
    Dylan

    I've confirmed via MS support that my assumptions were basically correct - if you have Instances = 1 then all requests for a single web application will be handled by one instance of the relevant w3wp process.
    If Instances > 1 then they might be handled by w3wp processes on separate virtual machines. There's no known scenario where there would be multiple w3wp processes on one machine, so if you need to handle concurrency for a scalable web-app, you have to
    use some central resource that is available to all instances.

  • Creating pocess intance of a different process and passing arguments

    Creating Process instance of a different process:
    I have two different process: Main_Flow (id: MainFlow) and Second_Flow (id: SecondFlow). In the first process I am reading a csv file. Each line of the file has four columns. After reading each line I have to initiate Second_Flow and pass the read data from the file. (Pls find the code below for the whole process):
         fileReader = FileReader(arg1 : fullFileName);//filename is of file type and have file name and path
         Java.Io.BufferedReader reader = BufferedReader(arg1 : fileReader);
         String str;
         int countLines = 0;
         while ((str = reader.readLine()) != null)
              strColumn = str.split(delim : ",");
                   int ColumnCnt = 0;
                   while (ColumnCnt < 4)
                        //defining variables
                        String appNo;
                        String custNo;
                        String loanAmm;
                        String loanDate;
                        //logMessage("Value at Column: " + ColumnCnt + " is " + strColumn[ColumnCnt]);
                        if (ColumnCnt == 0)
                             arrLoanData["appNo"] = strColumn[ColumnCnt];
                        else if (ColumnCnt == 1)
                             arrLoanData["custNo"] = strColumn[ColumnCnt];
                        else if (ColumnCnt == 2)
                             arrLoanData["loanAmm"] = strColumn[ColumnCnt];
                        else if (ColumnCnt == 3)
                             arrLoanData["loanDate"] = strColumn[ColumnCnt];
                        arrLoanData["descriptionArg"] = "AutoInstance: " + formatTime('now', timeStyle : Time.SHORT);
                        arrLoanData["genByArg"] = "Automatic";
                        ProcessInstance.create(processId : "/SecondFlow", arguments : arrLoanData, argumentsSetName : "BeginIn");
                        ColumnCnt = ColumnCnt + 1;
              countLines = countLines + 1;     
    (“The code is in Java and not in PBL”)
    I have to pass appNo, custNo, loanAmm and loanDate as the arguments. The Argument will be of Any[String] type. The argument set name of Second_Flow is “BeginIn”. But I am not getting anything in Second_Flow.
    What can I do in the argument mapping of begin of Second_Flow to get the passed argument (array)?

    the argument 'arguments' for the method ProcessInstance.create receives a map of the arguments that the 'argumentSetName' argument set will receive.
    so for example if your second flow has 2 arguments, String name, Decimal value and String[] content your method invocation would be:
    ProcessInstance.create(processId : "/SecondFlow", arguments : {"name": strNameFromCsv, "value": valueFromCsv, "content": ["a","b","c","d"]}, argumentsSetName : "BeginIn");

  • Is there a different process to upload video podcast or is it the same?

    Is there a different process to upload video podcast or is it the same process?

    Exactly the same. The only difference lies in the code within the 'enclosure' tag which needs to match the file type, and most podcast creation programs and service will handle that for you. However you need to be aware that you are limited to .m4v, .mov or .mp4 files (not Windows Media, RealMedia or Flash).
    You may find my 'get you started' page on podcasting helpful:
    http://rfwilmut.net/pc

  • Non-Reentr​ant VI executing in different Process Stacks

    I am creating a DLL which can be called by several different processes on a machine at the same time. If I have a non-reentrant VI in the API, do the same restrictions apply between processes as if they were in the same process? For example, if I call "Get Shorty.vi" which is a non-reentrant VI from 2 places in the same process, at the same time, the first call will start executing, and the second call will wait till the first call is done. When called from 2 different process stacks, there is supposed to be total seperation of memory windows, so logic tells me that this restriction would not apply if that same VI were called from 2 different processes.
    The catch is that the VI Library installed by the run-time engine is used by both processes as well. Would this, in effect, cause the same behavior between 2 calls to the same VI both in process and out?
    Thanks for any help you can provide. This is not a easy to describe concept, so feel free to ask for clarification if needed.
    CyberTazer
    Software Systems Engineer

    I understand that the memory spaces are supposed to be completly seperate. The question is that if 2 processes call the same function in the same dll at the same time... will one process have to wait on the other process to finish before being allowed to execute? My feeling on this is no, it would not have to wait, but I am hoping that someone out there has a more difinitive answer.
    There is no shared memory mechanisms set up in this vi.. ie for persistant data between execution processes. I am not even sure if this is possible with LV dll's, but I thought I would throw that in there since I know it is possible in general.
    Thanks again for your help guys... keep em comming. Hopefully this will help clear up other peoples perceptions on how dll execution is handled in LV if we can nail this down a bit more.
    CyberTazer
    Software Systems Engineer

  • JNI Callback from remote process

    I have an application that calls back from C to Java in multiple situations. In some, I have been successful using the technique of calling AttachCurrentThread as described, for example, in various places, e.g.,
    http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniref.html#invoke
    and recently in this forum
    http://forum.java.sun.com/thread.jspa?threadID=763205&tstart=45`
    This is an accessibility application and one of the situations I need to callback from is a global keyboard hook. In this context, I call from Java to a C DLL which sets up the keyboard hook using the standard Windows procedure SetWindowsHookEx.
          SetWindowsHookEx(    
                      WH_KEYBOARD,    // type of hook to install
                     (HOOKPROC) mykeyboardProc,    // address of hook procedure
                    ( HINSTANCE__* )hDll,    // handle of application instance
                    0     // identity of thread to install hook for  (all threds)      );The keyboard hook functions in Windows by being "injected" into running applications so that it runs in their process space and therein, apparently, lies the problem.
    The keyboard hook gets callbacks from Windows whenever a key is pressed. This is the information I want to learn about back in Java. Our current approach is to have the keyboard hook write the key data to shared memory. Then the Java application makes polling calls into the previously mentioned C DLL which checks the shared memory and returns anything it finds. The C DLL is compiled with the current MinGW compiler.
    This procedure works alright-- I can access the information using shared memory in C and polling that from Java. It is, however, a tad slow. I'd like to use a callback from C directly to eliminate the extra layer of polling. I could, of course, do the polling in the C DLL and call back to Java from there. That would eliminate a process switch every time we poll, but would still leave the polling.
    In my attempts to set up a direct callback from the keyboard hook to Java, the C code uses AttachCurrentThread using the env pointer obtained from the JNI_OnLoad method. When my application has the focus and I type, I get print statements from the C DLL and the callbacks work fine. When any other application has focus, the callback does not work and there are no print statements. In fact, the keyboard hook crashes and stops responding to any key events.
    Since I do not get print statements when another application has focus (or they go into the ether), I do not know directly whether the JNI_OnLoad function actually gets called each time the DLL is loaded into another application. However, the JVM pointer I cache in the JNI_OnLoad function is NULL when I get a key event callback (when another application has focus). I tested this by putting an "exit" call if the cached JVM was NULL in the keyboard procedure (mykeyboardProc above). When any application has focus and I type a key, that application exits. From this I assume that JNI_OnLoad is not getting called, but since the cached JVM is NULL, that is irrelevant.
    One option I have attempted is to use JNI_GetCreatedJavaVMs to get a list of the JVMs running on the machine. From this, I hoped to somehow deduce which JVM was running my application and use its pointer. However, despite putting some of the the directories` with the jvm.dll into my library path:
       g++ -I/c/Programs/Java/JDK15~1.0_0/include
           -I/c/Programs/Java/JDK15~1.0_0/include/win32
           -L/c/Programs/Java/JDK15~1.0_0/jre/bin \
           ....I get the error:
    undefined reference to `JNI_GetCreatedJavaVMs@12'
    I would be grateful for any suggestions or solutions.
    Rick

    Thanks for the reply Jim,
    I've been compiling in the Msys environment.
    I created the jvm.def and generated the jvm.a as you
    suggested.
    This apparently required copying the jvm.dll from
    /c/Programs/Java/JDK15~1.0_0/jre/bin/client
    de]
    to my working directory.  Before I did that I got a
    message
    about stripping the path components from the dll
    name.
    Then I tried to make the DLL in the fashion I had
    been:g++ -I/c/Programs/Java/JDK15~1.0_0/include \
    -I/c/Programs/Java/JDK15~1.0_0/include/win32 \
    L/c/Programs/Java/JDK15~1.0_0/jre/bin/client \
    -shared -o JKeyboardInterface.dll \     
    jvm.a \
    JKeyboardInterface_wrapper.cpp \
    JKeyboardDllMain.cpp \
    JKeyboardInterface.cpp \
    -Wl,--out-implib,libJKeyboardInterface.a \
         -Wl,--add-stdcall-alias -mno-cygwin \
    -fno-rtti -fno-exceptions -s
    This resulted in this error:
    Creating library file: libJKeyboardInterface.a
    K:/DOCUME~1/rick/LOCALS~1/Temp/ccU1daaa.o:JKeyboardInt
    erface.cpp:(.text+0xafb):
    undefined reference to
    `_imp__JNI_GetCreatedJavaVMs@12'
    collect2: ld returned 1 exit status
    Hmmmmm. What happens if you remove the '-Wl,--out-implib,libJKeyboardInterface.a'? It seems to be failing in the step creating the static lib, which may prevent the DLL from being properly created.
    Since this was a different undefined reference, I
    re-did the jmv.def step
    using imp_JNI_GetCreatedJavaVMs@12 instead of
    JNI_GetCreatedJavaVMs@12
    This generated the same error.Yeah. I'm sure I never had to do anything like that.
    >
    Then I tried to use dllwrap with both versions of the
    jvm.a generated above::
    dllwrap --driver-name=c++ \
    --add-stdcall-alias \
    -o JKeyboardInterface.dll \
           jvm.a \
           JKeyboardInterface_wrapper.cpp \
           JKeyboardDllMain.cpp \
           JKeyboardInterface.cpp \With both versions of the jvm.a, I got the error:
    K:/DOCUME~1/rick/LOCALS~1/Temp/ccSccaaa.o:JKeyboardInt
    erface.cpp:(.text+0xafb):
    undefined reference to `JNI_GetCreatedJavaVMs@12'
    ollect2: ld returned 1 exit statusI'm not clear why the two approaches (g++ -shared and
    dllwrap) yield different reference problems.
    I've read that dllwrap is "deprecated" Probably.
    (http://www.mingw.org/MinGWiki/index.php/dllwrap).
    Do you have any other suggestions about how to do
    this?Have a look at:
    http://www.inonit.com/cygwin/
    Msys (which is Mingw) follows cygwin pretty closely.
    I'm not near a Windows machine to try this at the moment. All I can say is that I have an application using CreateJavaVM, compiled with MSYS and it works. CreateJavaVM has the same problems as GetCreatedJavaVMs that you are seeing. The root cause is that the jvm.lib shipped with the JDK for Windows is not compatible with GCC. Hence the need to create the jvm.a library.
    I build my code using an ANT script. It build the objects first and then links them. Deciphering the build script, it looks like the two steps would have the following command line syntax:
    Compile to object files:
    gcc -D REENTRANT -I <paths to include> somefiles.cpp somefiles.c
    (I have a mix of C and C++)
    Link object files to create DLL:
    gcc -shared -D REENTRANT --kill-at -lstdc++ somefiles.o jvm.a
    Try it in two steps and see if it makes a difference.
    >
    Is trying to use GetCreatedJavaVMs the correct
    approach here?
    If more than one exists, how do I determine which one
    I want to attach to and get an env pointer for?From you original post, it is difficult to understand exactly what you are trying to achieve.
    It seems like you are starting with a Java app that calls into some native code to create the keyboard hook. This hook will then call a callback method in native code when a key is pressed. You want the Java code to see this and act appropriately.
    In Java callbacks are usually handled with events. Just have your native code fire an event in Java and have a Listener on the Java side. I do this in some of my code. Say I have an event called FooEvent and a listener called FooListener. There is also an object called Bar which can fire FooEvents and have FooListeners attached to it. The Bar class has an addFooListener() method which is actually a native method. The native implementation sets up the callback stuff on the native side. When an event occurs on the native side, the callback function is called and it does something like this:
    jclass cls;
    jmethodID mid;
    cls = env->GetObjectClass(javaSource);
    mid = env->GetMethodID(cls, "fireSomeEvent", "()V");
    env->CallVoidMethod(javaSource, mid);In the code above, the 'cls' variable would be the Bar class object and the 'javaSource' variable is a global reference ot the Bar object to which the event listener was added. The 'env' variable is acquired by calling 'AttachCurrentThread' on a cached JavaVM pointer stored in a global reference.
    The Bar class has a fireSomeEvent() method, which calls the event listeners using the event generator idiom:
    http://www.javaworld.com/javaworld/jw-09-1998/jw-09-techniques.html
    The listener on the Java side gets notification when the event occurs and you can take the appropriate action. No polling, no shared memory.
    Jim S.

  • Different process revisions with inbound Database Adapters

    Hi,
    we've got a BPEL-process deployed in different revisions (1.0 and 1.1). The process state of Revision 1.0 is still "on", but it is marked as "inactive" because no new instances of this process are needed, but old instances are still running. Revision 1.1 of the process is marked as default revision with state "on/active".
    The processes are started by a database adapter, polling a single view that is based on a single table for new records and in the process flow we've got further adapters, waking up the process-instance, while waiting for input from other components of our system. The views are accessed by synonyms.
    Correlation of messages to the instances is done by correlation sets, based on data read from the view.
    Because of some refactorings in our application, we had to rename the views and simply create different synonyms, pointing on the renamed views, so that both processes can use it. The problem is now that we monitored, old process-instances of revision 1.0 which are not running further. Analyzing the problem, we find all messages for the old revision in the callback section of the administration-tab in the BPEL-Console, pointing to the new revision and the new view name, so this messages could never be delivered to old process-revision!
    What I can imagine is that the adapter has problems with accessing the same view with different synonyms. Or is it possible that there are some issues with the adapters activation agents?
    We are using SOA Suite version 10.1.3.4. Any help is appreciated.
    Thanks in advance
    Sven
    PS: Here a short example of the scenario regarding the view:
    Before: View: test1_v ( id, name ); accessible by synonym test1_v
    After: View: test2_v ( id, name ); accessible by synonyms test1_v and test2_v

    Hi,
    we've got a BPEL-process deployed in different revisions (1.0 and 1.1). The process state of Revision 1.0 is still "on", but it is marked as "inactive" because no new instances of this process are needed, but old instances are still running. Revision 1.1 of the process is marked as default revision with state "on/active".
    The processes are started by a database adapter, polling a single view that is based on a single table for new records and in the process flow we've got further adapters, waking up the process-instance, while waiting for input from other components of our system. The views are accessed by synonyms.
    Correlation of messages to the instances is done by correlation sets, based on data read from the view.
    Because of some refactorings in our application, we had to rename the views and simply create different synonyms, pointing on the renamed views, so that both processes can use it. The problem is now that we monitored, old process-instances of revision 1.0 which are not running further. Analyzing the problem, we find all messages for the old revision in the callback section of the administration-tab in the BPEL-Console, pointing to the new revision and the new view name, so this messages could never be delivered to old process-revision!
    What I can imagine is that the adapter has problems with accessing the same view with different synonyms. Or is it possible that there are some issues with the adapters activation agents?
    We are using SOA Suite version 10.1.3.4. Any help is appreciated.
    Thanks in advance
    Sven
    PS: Here a short example of the scenario regarding the view:
    Before: View: test1_v ( id, name ); accessible by synonym test1_v
    After: View: test2_v ( id, name ); accessible by synonyms test1_v and test2_v

  • In Bte can i use same Product for 2 different process

    in Bte can i use same Product for 2 different process

    hi
    as per i know yes but since there r two type of interface behaviour is defferent .
    For
    Publish & Subscribe interfaces 
    if any event occur in this type both the process can work simultaneously and they will not intervene each other
    whereas in
    Process interfaces
    at an time any one process can be active.
    Reward if usefull
    Cheers
    Snehi

  • Need different processes for Update and Delete buttons

    I'm using a customized version of the Issue Tracker sample application. I've added a table called project_person(project_id,person_id) so that a project can have multiple people assigned to it and so that one person can have multiple projects. I have a form report that lists all of the projects with an edit link which opens one project. On the individual project page, there are page items for each of the columns in the project table and a item for the person assigned to the project--this item is pulled from the separate project_person table. I have two buttons--Delete and Apply Changes. If you click on Apply Changes, the project table should be updated and then the project_person table if the assignment was changed. If you click on Delete, it should delete the project_person record first and then delete the project record. I created a new conditional pl/sql process that updated two tables if 'Apply Changes' button is cliicked. I then created a separate conditional process when the Delete button is clicked. This conditional process checks to see if a record in the project_person table exists, and if so, delete the record. Then delete the project record.
    The update process works fine. The delete process reloads the list of projects with a success message at the top without actually doing a delete and I have no idea why. Does anyone have any suggestions?
    I am not using the automatic row processing, but should I? Or is it ok to have the two separate conditions for the two different buttons?

    Hello again Miah,
    Check the "Sequence Number" for your processes. Typically, APEX will increment by 10, each time you create a Page Process as I recall. You can set this to be any number you want; even if you duplicate the sequence number (ie: you can have multiple Sequence 10 processes).
    Make sure that your Delete process is firing properly and walk through the logic in the source code to be sure that any "IF" or "WHERE" logic is satisfied. For example:
    Begin
      delete from emp_table
        where 1=2;
    End;If this was your page process code - you would receive a SUCCESS message because the PL/SQL code executed successfully, even though nothing will be deleted since 1 will NEVER equal 2.
    So, check Delete Source carefully.
    {size:14}{color:green}Can you post the code from your delete page process here?{color}{size}
    Good luck,
    Don.
    REWARDS: Please remember to mark helpful or correct posts on the forum, not just for my answers but for everyone! :)
    Edited by: dfcii© on Oct 27, 2009 10:55 AM

  • PO Rejection - ORDSP Idoc Errors in ECC with different process codes

    Hi All,
    We were testing the Scenario where the Supplier rejects a PO line item as part of the PO Collaboration. On rejecting the PO in SNC, it trigerred an ROC XML with AcceptanceStatusCode == RE. The same was passed on from XML to Idoc in the IDoc segment E1EDP01, field ACTION = "003".
    However, such ORDSP Idocs was failing on the ECC side during Inbound processing with the following errors:
    1. Acknowledgment for PO item 4400000XXX 00010 contains quantity variance: Message no. ME794
    2. Price unit 0 from IDoc differs from unit of purchase order 1: Message no. ME729
    3. Order price unit differs from unit EA from purchase order: Message no. ME728
    4. Order units differ : Message no. ME791
    5. Material number differs from that of ordered material : Message no. ME790
    Note : We dont get these errors for a normal confirmation. It happens only with Rejection.
    The deletion indciator could not be set in the ECC PO line item even after manually correcting the above errors in the Idoc and posting it.
    Then based on this SDN Post: [PO rejection in SNC does not update the items in MM with ORDRSP;, we changed the WE20 settings. i.e., for ORDSP Idoc changed the Process code from ORDR to ORDR_SUS. After this change, the the above errors were eliminated and the the rejection data was also updated on the ECC PO by setting a deletion indicator. But we are having the following issues:
    1. Though both the confirmation & rejection data are getting transferred successfully, the Idocs remain in status 52 (Application document not fully posted).
    2. The message in the status record is "Rejection of PO item 4400000XXX 00010 with reason: Message no. ME749
    3. Came across these 2 related SAP Notes:
       a. #1087422 : But this is not applicable as the note states that this error will occur only if we delete the PO line item before hand in ECC.
    b. # 66192 : This note suggets a custom solution. But actually all the info from the ORDSP Idoc are getting processed successfully (Rejection & Confirmation send in the same Idoc). Only the status of the Idoc (Status = 52) is concerning us.
    Looking forward for inputs / suggetions from those who have used the Rejection functionality in SNC without custom development.
    Regards,
    Bharath

    Hi Bharath
    Rejections is handled like that only, can you please check whether note 1529579 is helpful
    It is standard behavior, as it expects other segments to fill, but never the less the PO will be updated properly, its only problem
    with the status of the idoc....nothing wrong in the data updation. The above note should be handy.
    Regards
    Vinod

  • AQ Callbacks - Blocking background processes and best practices.

    We are running several queues within our company and one of them uses pl/sql callback functionnality.
    Basically, several triggers can enqueue a message when underlying tables are updated. The goal of the callback is to "treat" those messages, which means dequeuing the messages and passing them to some procedure (determined through a confguration table and the type of message). I don't know if i'm clear enough on this but it is as important.
    In general the mechanism works perfectly but we noticed in one of our databases that, after a relatively big amount of messages enqueuing (~ 500-1000 in one trasanction), there are numerous background processes blocked on system table SYS.AQ_SRVNTFN_TABLEI. In fact, the queue starts growing and messages are not dequeued anymore by the callback, that doesn't seem to be executed anymore at all.
    We actually were also unable to re-compile the package that holds the callback procedure nor removing/adding the reference of the subscriber to the queue with DBMS_AQ. It would hang there forever...
    We are running Oracle Database 10g Enterprise Edition Release *10.2.0.4.0* and the value of AQ_TM_PROCESSES = 0.
    I don't necesseraly have a complete and clear view of how the queue mechanism works behind the scenes so forgive for some foolish things I could say :-)
    Diagnosis:
    After some research, it seems the backgrounds processes are blocked on the system table SYS.AQ_SRVNTFN_TABLE on some index for MSGID.
    If I understand correctly how the system works, the callback gets executed for a specific MSGID as we use it in the callback procedure to dequeue this message.
    I've also discovered that the default value for the WAIT dequeue option is FOREVER...
    So my idea was that, for some reason, the callback tries to dequeue a message that does not exist in the queue and... waits forever for the message to "appear".
    This at first seemed pretty unlikely to me: why would the callback be executed if no message with provided MSGID exists... then you start doubting :-)
    Attempt to resolve:
    We've decided to alter the WAIT option to not let the dequeue in the callback wait forever.
    We have made some tests (outside the callback) with NO_WAIT and also with a wait of a few seconds. Both solution prooved right so we added a wait of 60s in the callback and added some tracing.
    Since then, no more background processes seems to hang there and we are able to alter the callback procedure normally. But with the added tracing, we noticed an unexplained behavior with the execution of the callback:
    - callback runs
    - ORA-25263: no message in queue QUEUE_OWNER.MULTISRC_NOTIFQ with message ID B4FFD1115523A46EE040007F0100304F
    - callback runs again and message is dequeued and treated correctly
    The first oracle error happens fast, not after 60s as the WAIT option specifies.
    Questions:
    <li>Is the way the callback method is implemented correct (see code below) ?</li>
    <li>Do we need to commit in the callback method ? What implies committing or not ?</li>
    <li>How wouold you explain the behavior of the callback after setting the dequeue WAIT to 60s and why it does not actually wait for 60s ?</li>
    <>
    <>
    <>
    <>
    The configuration of the queue and the callback is as follow:
    - the type of the payload is SYS.ANYDATA
    - an extra index is create on CORRID column
    begin
       -- create queue table
       begin
          DBMS_AQADM.CREATE_QUEUE_TABLE(QUEUE_TABLE        => 'QUEUE_OWNER.MULTISRC_NOTIFTAB'
                                       ,QUEUE_PAYLOAD_TYPE => 'SYS.ANYDATA'
                                       ,MULTIPLE_CONSUMERS => true);
       end;
       -- create and start queue
       begin DBMS_AQADM.CREATE_QUEUE(QUEUE_NAME => 'QUEUE_OWNER.MULTISRC_NOTIFQ', QUEUE_TABLE => 'QUEUE_OWNER.MULTISRC_NOTIFTAB'); end;
       begin DBMS_AQADM.START_QUEUE(QUEUE_NAME => 'QUEUE_OWNER.MULTISRC_NOTIFQ'); end;
       -- grant access to the queue to PDO
       -- add a subscriber to the queue and register the plsql to execute
       begin
          DBMS_AQADM.ADD_SUBSCRIBER(QUEUE_NAME => 'QUEUE_OWNER.MULTISRC_NOTIFQ'
                                   ,SUBSCRIBER => SYS.AQ$_AGENT('MULTISRC_NOTIFSUBSCR', null, null));
          DBMS_AQ.REGISTER(SYS.AQ$_REG_INFO_LIST(SYS.AQ$_REG_INFO('QUEUE_OWNER.MULTISRC_NOTIFQ:MULTISRC_NOTIFSUBSCR'
                                                                 ,DBMS_AQ.NAMESPACE_AQ
                                                                 ,'plsql://PDO.PO_NOTIFY.MULTISRC_NOTIF_SUBSCRIBER?PR=0'
                                                                 ,HEXTORAW('FF')))
                          ,1);
       end;
    end;
    create index queue_owner.multisrcq_corrid on queue_owner.multisrc_notiftab (CORRID)
    The callback procedure is as follow:
    procedure MULTISRC_NOTIF_SUBSCRIBER(context  raw,
                                          REGINFO  SYS.AQ$_REG_INFO,
                                          DESCR    SYS.AQ$_DESCRIPTOR,
                                          PAYLOAD  raw,
                                          PAYLOADL number) is
        L_METHOD constant varchar2(50) := 'MULTISRC_NOTIF_SUBSCRIBER';
        R_DEQUEUE_OPTIONS    DBMS_AQ.DEQUEUE_OPTIONS_T;
        R_MESSAGE_PROPERTIES DBMS_AQ.MESSAGE_PROPERTIES_T;
        V_MESSAGE_HANDLE     raw(16);
        O_PAYLOAD            ANYDATA;
        cursor C_TREATMENTS(P_ENTITY in varchar2) is
          select T.MNOT_PROCEDURE_C
            from TA_GEN.MULTISRC_NOTIF_TREATMENTS T
           where T.MNOT_ENTITY_C = P_ENTITY
             and T.MNOT_BEGIN_D < sysdate
             and ((T.MNOT_END_D > sysdate and T.MNOT_END_D is not null) or
                 (T.MNOT_END_D is null))
           order by T.MNOT_PRIORITY_N asc;
        WK_CORRID    varchar2(128);
        WK_ENTITY    TA_GEN.MULTISRC_NOTIF_TREATMENTS.MNOT_ENTITY_C%type;
        WK_PROCEDURE TA_GEN.MULTISRC_NOTIF_TREATMENTS.MNOT_PROCEDURE_C%type;
        CT_EXEC number(2) := 0;
      begin
        -- DGH: 15.12.11 / added a wait of 60 seconds for dequeue to avoid infinite waiting (default is FOREVER)
        R_DEQUEUE_OPTIONS.WAIT := 60;
        -- dequeue message
        R_DEQUEUE_OPTIONS.MSGID         := DESCR.MSG_ID;
        R_DEQUEUE_OPTIONS.CONSUMER_NAME := DESCR.CONSUMER_NAME;
        DBMS_AQ.DEQUEUE(QUEUE_NAME         => DESCR.QUEUE_NAME,
                        DEQUEUE_OPTIONS    => R_DEQUEUE_OPTIONS,
                        MESSAGE_PROPERTIES => R_MESSAGE_PROPERTIES,
                        PAYLOAD            => O_PAYLOAD,
                        MSGID              => V_MESSAGE_HANDLE);
        -- extract entity name
        WK_CORRID := R_MESSAGE_PROPERTIES.CORRELATION;
        WK_ENTITY := SUBSTR(WK_CORRID,
                            INSTR(WK_CORRID, '##') + 2,
                            (INSTR(WK_CORRID, '##', 1, 2) -
                            INSTR(WK_CORRID, '##')) - 2);
        -- execute treatment(s)
        open C_TREATMENTS(WK_ENTITY);
        loop
          fetch C_TREATMENTS
            into WK_PROCEDURE;
          exit when C_TREATMENTS%notfound;
          execute immediate 'begin ' || WK_PROCEDURE || '(:MSG); end;'
            using O_PAYLOAD;
          CT_EXEC := CT_EXEC + 1;
        end loop;
        close C_TREATMENTS;
      exception
        when others then
          if C_TREATMENTS%isopen then close C_TREATMENTS; end if;
          PO_NOTIFY.TRACE_MULTISRC_NOTIF(L_METHOD,
                                         sqlerrm,
                                         DESCR.MSG_ID,
                                         R_MESSAGE_PROPERTIES.CORRELATION,
                                         WK_ENTITY,
                                         WK_PROCEDURE);
          rollback;
      end MULTISRC_NOTIF_SUBSCRIBER;

    Helping you with the specific issue is going to be difficult without direct access to the servers but given the importance this system seems to have to your business why are you not running on a fully supported version (10.2 has been in extended support for more than 6 months) and even in the current configuration not patched to 10.2.0.5?
    My instinct would be to focus on moving to 11.2.0.3 as quickly as possible with a corresponding change to a current operating system version if your O/S is similarly out of date.

  • Semaphores in LV 5.1 ?? across different processes??

    Urgent!
    I have a very large and complex application, which I need to build into an executable.
    I need to have data from one or more files, which this exe writes periodically, available to another separate application.
    I need to protect the file from read during write and
    vice-versa, so was thinking of semaphores which I'm using inside the large app.
    So, I ran a trial.
    ( OS is NT4 and NT 5)
    Created two different (but identical except for vi name) VIs which each create, acquire, release, and destroy a semaphore of the same name.
    (the name comes from a global to ensure it is in fact the same.)
    They both work ok.
    One waits for the other to release the semaphore before proceding.
    Then I built an exe from
    each with app builder.
    Each of the exe's can create, acquire and destroy its
    own semaphore without affecting that of the other app.
    (Even though the semaphores are named the same.)
    All the info I can find on the LV semaphores indicate that they are just like mutexes except that they can be shared by more than one task (set by "size" input of the create semaphore vi).
    According to microsoft documentation, Mutexes and semaphores are kernel objects which can be used to synchronize across multiple processes(, threads, or tasks).
    So what gives? Is the implementation in LV different
    than the Windows kernel?
    Anyone have any ideas?
    Thanks
    Dave

    Semaphores are similar in behavior to mutexes but are not system mutexes;
    they rely on
    LabVIEW occurences which are local to the application.
    To solve your problem you could open files denying read/write access to
    other. Then if a file is already in use, other applications will receive
    access error when attempting to open the file.
    HTH
    Jean-Pierre Drolet
    "Dave Karon" a ecrit dans le message de news:
    [email protected]..
    > Urgent!
    > I have a very large and complex application, which I need to build
    > into an executable.
    > I need to have data from one or more files, which this exe writes
    > periodically, available to another separate application.
    > I need to protect the file from read during write and
    > vi
    ce-versa, so was thinking of semaphores which I'm using inside the
    > large app.
    > So, I ran a trial.
    > ( OS is NT4 and NT 5)
    > Created two different (but identical except for vi name) VIs which
    > each create, acquire, release, and destroy a semaphore of the same
    > name.
    > (the name comes from a global to ensure it is in fact the same.)
    > They both work ok.
    > One waits for the other to release the semaphore before proceding.
    > Then I built an exe from each with app builder.
    > Each of the exe's can create, acquire and destroy its
    > own semaphore without affecting that of the other app.
    > (Even though the semaphores are named the same.)
    > All the info I can find on the LV semaphores indicate that they are
    > just like mutexes except that they can be shared by more than one task
    > (set by "size" input of the create semaphore vi).
    > According to microsoft documentation, Mutexes and semaphores are
    > kernel objects which can be used to synchronize across multiple
    > processes(, threads, or task
    s).
    > So what gives? Is the implementation in LV different
    > than the Windows kernel?
    > Anyone have any ideas?
    >
    > Thanks
    > Dave
    LabVIEW, C'est LabVIEW

  • Error implementing dynamic callback from BPEL process

    Hi,
    I am trying to use dynamic callback from a BPEL process..
    Created a variable of type EndpointReference by importing the ws-addressing.xsd. in the partnerlink wsdl..
    I assigned the URL to the variable's address field ...
    <copy>
    <from expression="'http://172.31.171.123:8888/PubSubWLPOC-CallbackSvc2-context-root/EIPWFServiceCallbackPort'"/>
    <to variable="ep_var" query="/ns3:EndpointReference/ns3:Address"/>
    </copy>
    Gives no error till now...
    But when I try to assign the same variable to the partnerlink, I get an error..
    <assign name="Assign_7">
    <copy>
    <from variable="ep_var"/>
    <to partnerLink="MyWebService1"/>
    </copy>
    </assign>
    The error is like this(from the $SOA_HOME\bpel\domains\default\logs) :-
    java.lang.NullPointerException
    at com.collaxa.cube.engine.types.bpel.CXPartnerLink.copy(CXPartnerLink.java:246)
    at com.collaxa.cube.engine.ext.wmp.BPELAssignWMP.performCopyTo(BPELAssignWMP.java:1151)
    at com.collaxa.cube.engine.ext.wmp.BPELAssignWMP.__executeStatements(BPELAssignWMP.java:215)
    at com.collaxa.cube.engine.ext.wmp.BPELActivityWMP.perform(BPELActivityWMP.java:199)
    at com.collaxa.cube.engine.CubeEngine.performActivity(CubeEngine.java:3698)
    at com.collaxa.cube.engine.CubeEngine.handleWorkItem(CubeEngine.java:1655)
    at com.collaxa.cube.engine.dispatch.message.instance.PerformMessageHandler.handleLocal(PerformMessageHandler.java:75)
    at com.collaxa.cube.engine.dispatch.DispatchHelper.handleLocalMessage(DispatchHelper.java:217)
    at com.collaxa.cube.engine.dispatch.DispatchHelper.sendMemory(DispatchHelper.java:314)
    at com.collaxa.cube.engine.CubeEngine.endRequest(CubeEngine.java:5765)
    at com.collaxa.cube.engine.CubeEngine.callbackPerformer(CubeEngine.java:1885)
    at com.collaxa.cube.engine.delivery.DeliveryHelper.callbackPerformer(DeliveryHelper.java:845)
    at com.collaxa.cube.engine.delivery.DeliveryService.handleCallback(DeliveryService.java:794)
    at com.collaxa.cube.engine.ejb.impl.CubeDeliveryBean.handleCallback(CubeDeliveryBean.java:378)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    The confusing part is when I use xml fragment instead of the variable ep_var, it works fine ...
    But I cannot use the same as the callback can be made to any url(which is decided on runtime)
    Can someone pls help me with this ?
    saptarishi

    Hi,
    I have done following for dynamic call back and it works..
    <copy>
    <from>
    <_EndpointReference xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">
    <Address/>
    </EndpointReference>
    </from>
    <to variable="EndpointUrl"/>
    </copy>
    <copy>
    In the above assignment from part is an xml fragment assigned to Endpoint Url
    <copy>
    <from expression="'http://172.31.171.123:8888/PubSubWLPOC-CallbackSvc2-context-root/EIPWFServiceCallbackPort'"/>
    <to variable="ep_var" query="/ns3:EndpointReference/ns3:Address"/>
    </copy>
    </copy>
    <copy>
    <from variable="EndpointUrl"/>
    <to partnerLink="SFDC_plt"/>
    </copy>

  • How to control two different processes with one DAQ output board

    Hi! I posted this in the Signal Generators forum, but I'm reposting here in case someone on this board has suggestions for a way to get around my problem programmatically (ie. within LabVIEW). Thank you for any help you can provide.
    Patrick
    I have a PXI-6722 8-channel, 13-bit analog output board, and with this I want to independently control both the temperature (thermometer excitation/heater control) and magnetic field in my experiment. Unfortunately, it appears that I cannot do both simultaneously, which is totally unacceptable for my application.
    Currently I'm using separate VI's for field and temperature control. This is the start of the problem, because in DAQmx you can't have 2 output tasks on the same card at the same time. In order to remedy this situation, I used MAX to create a global task containing all 8 13-bit analog outputs. However, it now appears that each time I do a write operation on this task (from whichever VI) I must write to all of the task channels, rather than just the channels I want to change. This would be fine for the temperature controls as they are of the type "set an output voltage value and hold it until told differently," so I could re-write the currently held values for channels that are not being changed. Magnetic field control will not work in this way, because we need to do very smooth field sweeps which require an analog waveform to be sent and sampled at a high rate (so that the steps are as small as possible). So if, for example, a thermometer's excitation voltage or a heater's power need to be changed during a field sweep (as is often necessary to maintain a constant temperature, via PID), then the sweep will be disrupted, potentially causing a dangerous magnet quench.
    Does anyone have any ideas on how I could make this work? It seems very wasteful to buy a second output board when I still have lots of free channels on the first.
    Thanks,
    Patrick

    I'd probably create a third process that just updates all output values on the card whenever necessary.
    One way is to send messages via queues from the temperature and magnetic field control routines to the third process. The third process doesn't do anything unless it gets a message from one of the two other processes. The message should contain the channel task ID to change along with the new value. Use the LabVIEW queue VI's, using a type definition to specify the message type either when you create the queue or use the variant VI's. Once it gets a message, it updates the changed channels, not modifying the others (use a shift register to store an array with the current set of output values).
    Hope this helps.
    Jason

Maybe you are looking for

  • Question on The @EJB Annotaion

    Hello everyone, How does the @EJB annotation works? Does it already assign an instance of the EJB once a field is annotated by it? For example I have a code below; public class MyClass {     @EJB     StudentEJB studentEJB;     @EJB     EmployeeEJB em

  • How do you change iMessage for a single contact?

    When trying to message someone that was an iPhone user but changed to a HTC phone, for some crazy reason, iMessage is still the default how can the on contact be changed?

  • Ipod does not sync correctly with ITunes

    Hello, and thanks in adavce for responding. A couple days ago I connected my Ipod to a different PC with an older version of Itunes. I did not asociate the library nor synchronized the Ipod with it. When I connected my Ipod in my main PC where I keep

  • How to have two Firefox in the same machine?

    I have Firefox installed from the repo (Namoroka), but I also want to have another version to use exclusively with Tor. Downloading it from Mozilla's official website and running the executable doesn't work because it opens Namoroka. How should it be

  • I just got a MacBook Pro and and Screen Cracked? Help?

    JUst got a MacBook Pro and my friend, kinda Droped it. Any Help for replacemnt. Is it possible to get a free replacemnt.