Communication between multiple processes

Hi there!
I have once again a problem concerning paralel processing in ABAP.
The problem is that:
I want to write a programm which invokes a process that can recursive invoke another process and so on.
Let me try to picture it out:
-> means invokes
Main Program -> Thread1
Thread 1 -> Thread 2
Thread 2 -> Thread 3
Thread 2 -> Thread 4
Thread 4 -> Thread 5
Thread 5 -> Thread 6
As you can see I have several Threads invoking another Thread. The structure of Threads invoking each other will be dynamic. Now I face the following problem:
I want just a few threads to run at the same time (let's say for now 3) and there are dependencies between the Invoker and the invoked Thread (e.g. Thread 3 needs some information from Thread 2).
How can I let my Main Program know that all the data is ready? Does the WAIT UNTIL statement also applies for these nested threads?
How does Thread 5 e.g. know that there are already too much processes running and he has to wait?
Is there a possibility how I can queue these processes?
sth like:
Thread 1 - Thread 2 - Thread 3 - Thread 4 - Thread 5 - Thread 6
If prerequisites for Thread 3 are not fullfilled it would look like:
Thread 1 - Thread 2 - Thread 4 - Thread 5 - Thread 6
and so on...
The problem is the communication over the bounds of Threads. This dynamic structure is neccessary due to the large data amount that I have to handle. Due to restrictions I can only use a function group and a report. No database tables or stuff like that is allowed.
I hope I was able to point out my problem. If it was to unclear please let me know it, then I will try to specify it more.
Thank you in advance for your help.
Best Regards,
Sebastian

@ Sandeep:  Thanks for your answer I am going to have a look at that
@ Thomas: These nested Calls would be useful because of the amount of data that has to be processed. Think about a Tree with over 200.000 entries. For each entry there is the requirement for Check if corresponding dataset is right, if necessary Adapt data and Update on the database.
The approach with the nested threads would check a single node, looks whether there are child nodes and if so starts a thread for processing the child nodes. These would check each child node and if neccessary starts another thread and so on. Child nodes can only be changed if parent change was successful so I have the dependency right here.
Yesterday I had another idea that should work:
My Main Programm first checks the root node and then the direct childs of the root node (1st hierarchy level). Then invokes a thread for each child node which has again child nodes and for which changes applied (2nd hierarchy level. Each thread 'returns' a list of nodes for which once again the main program should invoke another thread and so on. (This would build up a queue for processing within the Main Program)
It is a similar approach to the think with nested threads but the control structure is more clear and there is no nesting of threads neccessary.
Thanks and Best Regards,
Sebastian

Similar Messages

  • Communication between multiple JVMs

    We have a Java toolkit that is shipped as a JAR file. The toolkit is ported from a C++ DLL running on Windows. Therefore, in both instances (Java and C++), we can't control who loads us or when.
    I need to communicate between different JVMs running on the same machine. The communication is very simple: "Is this user logged on in your JVM?" I send a string to the other JVM and I get back a boolean. I don't need to worry about crossing machine boundaries. Also, I'm not expecting to have a huge number of JVMs running. Maybe 3 or 4 could be likely. However, the solution does need to scale in case there are more than that. I'm not setting a limit on the number of JVMs either.
    The C++ code handled this situation very easily and elegantly. It created a named system semaphore (mutex) whenever a user logged on. The name of the mutex was the username. So, if there were multiple instances of the DLL running in separate processes (EXEs), we could easily tell if this user was logged on in another instance. We'd try to create the system semaphore - it would fail saying the name already exists. Therefore, we'd know the user was already logged on. The named system semaphore provided the means for a machine-global list - which is exactly what we wanted. It also had this extra benefit: if the process terminates normally or abnormally, the system semaphore is removed from memory. This means: the application is terminated, the user is no longer logged on, and we can relog this user on.
    Therefore, I have 2 requirements:
    1) A machine-global list where we can place a string. Keep in mind, it doesn't absolutely have to be a machine-global list. A suitable means to talk to other JVMs is acceptable too.
    2) If the process exits normally or abnormally, the string(s) get removed (for this JVM) from the list. Abnormal termination is the more important one to focus on because lots of people of varying skill levels use our toolkit. Abnormal terminations can be common.
    The first thought is to store these in a file. That solves #1, but not #2. I've seen the JIPC package. However, I'm not too crazy about requiring 3rd party developers to start up another program (JIPC) before they start up their application. As I said, we're just a toolkit so we can't control when or who loads us. It's not totally out of the question, but I'd prefer something else.
    I have a fairly involved solution that involves sockets. The first JVM creates a ServerSocket on a specific port and becomes the server. Subsequent JVMs also try to create the ServerSocket on the same port. They get a BindException because the ServerSocket already exists, so they know they're clients. Then, they create a client socket and talk to the server that way. This gets a little hairy when the server goes away. The clients will scramble to become the server and then all the other clients need to reconnect to the new server.
    This proposed solution sounds like it will address both requirements. However, I'm looking for something simpler. I'm asking this forum for help in case there's an easier way to do this. I don't have the breadth of experience with Java yet to know if there's a simpler way to fix this. If I have to go with the socket solution, I will. I just didn't want to overlook something simple that is already built into Java.
    Thanks for any tips or suggestions

    Thanks for the response.
    FileLock. We still have to target JDK 1.3 so we can't use FileLocks (at this point)
    JNI: That's an interesting idea. I suspect many people are using our software on Windows. Therefore, we could probably fix it in Windows the same as in the C++ code. If they're not on Windows, we could use the Sockets approach.
    I also had another idea: how about hashing the username string into some integer (or long) value. Then use the hashed value to lock some other resource: like the port number passed to ServerSocket. I know ServerSocket only accepts 0 - 0xFFFF so this obviously won't work. But is there some other system-wide thing we could lock given an integral value?

  • Communication Between Multiple Executables

    I'm building a system that needs to communicate with several different external executables (all were programmed in LabVIEW) at approximately the same time.  I say several because this number is not known until runtime, and I say approximately the same time because all of the executables will be communicating asynchronously.  Essentially I need to receive commands from each executable, put them in a queue of some sort, run a test with my system in the order the commands were received, and then send a result back to each executable.
    Because the number of external executables is not known until runtime, I was thinking about using a network published variable that would be an array of clusters.  I could then tell each executable which array element it should use to communicate with and then when data needs to be sent back and forth I could update or read from this array element in each executable as necessary.  In my VI, I would simply build a watcher that would constantly watch the array to see if new data came in, put this data in a queue, and then process it as necessary.  The communication back to the executables would be handled in the same way (perhaps with a second network published variable only to be used for results).
    The problem with this approach is that I would need to lock the network published variable (a functional global would really help here) while I'm writing to it from each of the executables so I could be sure that I wouldn't miss data.  The number of commands won't be high, but there is a chance that 2 commands could arrive at the same time.  I've played around with this in the Shared Variable Properties dialog ("Single Writer" and "Use Buffering"), but can't seem to get it right.
    I know that I could open a TCP communication port for each executable and then use that port to communicate directly between my program and the executable, but I was wondering if anyone had any other suggestions.  If you've got a suggestion, I'd love to hear about it.  Thanks.

    You can use a network queue. The attached code works very well for us. It is a modified version from some code I got from LAVA several years back. Just unzip this file into your user.lib directly. The queues work like normal queues except they work over TCP. This means your messages will be added to the receiving queue in the order they were sent. Simply dequeue the commands and execute them.
    Mark Yedinak
    "Does anyone know where the love of God goes when the waves turn the minutes to hours?"
    Wreck of the Edmund Fitzgerald - Gordon Lightfoot
    Attachments:
    Network Queue Class.zip ‏361 KB

  • GPIB Communication between multiple devices

    Hello, 
    I am trying to build an application in C# which will be able to send commands to more than one device on the GPIB BUS.
    For example I have 3 devices connected to the computer with addresses as:"GPIB0::18::INSTR","GPIB0::19::INSTR","GPIB0::28::INSTR"
    Now, I know how to communicate with a single device. 
    But is there a way I can send commands to multiple devices. So far I have the following. 
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Ivi.Visa.Interop;
    namespace Step_Attenuator
    public partial class Form1 : Form
    ResourceManager rMgr = new ResourceManager();
    Ivi.Visa.Interop.FormattedIO488 ioobj = new FormattedIO488();
    object resources = null;
    string address1 = "GPIB0::18::INSTR";
    string address2 = "GPIB0::19::INSTR";
    string address3 = "GPIB0::28::INSTR";
    public Form1()
    InitializeComponent();
    private void PsaComm()
    private void Form1_Load(object sender, EventArgs e)
    private void button1_Click(object sender, EventArgs e)
    ioobj.IO = (IMessage)rMgr.Open(address1);
    ioobj.WriteString("*RST");
    But now If I want to send a RST command to say device on address2, do I have to again open the session and send it?
    There are going to be a lot of commands to these devices. I am sure there is a much simpler way to do it. 
    Please pardon me if this seems to be a silly question. 
    Thank You. 

    Hi nmedelec,
    I made a research about “Ivi.Visa.Interop.FormattedIO488” and it seems that it is related with Ivi.Visa.Interop which is a third party product. If you have any issue about a third party, I would recommend you go to the office site for help.
    Thanks for your understanding.
    Best Regards,
    Edward
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

  • Communication between multiple remote flash instances

    I am relatively new to Flash development, but need to create a simple application that will essentially function as a remote slideshow broadcast service. One presenter will see the show (full screen) and will be able to proceed to the next slide, all other attendees will only see the show (no control) and will see the next slide when the presenter proceeds. I have a Flash Media Interactive Server which can be utilized. I understand that no one will be able to walk me through actual the development process, but was wondering whether someone could tell me what the best approach would be and where I could find tutorials to get started.
    Thanks a lot! Any help is greatly appreciated.

    UPDATE: I am particularly confused about what kind of communication method to use. I heard about Socket, SharedObjects, HTTPService, RTMP, RTMFP, etc. could someone advise which would be the best for this situation. I only need to send a very small bit of data.
    Thanks.

  • Communication between multiple VPN Sites

    Hello,
    i used 3 CEs and 2 PEs, build a hub and spoke MPLS VPN topology as follow, two the overlapped addresses 100.100.100.100 reside separately in VPN1 of R1 and VPN2 of R2. But traffic initiated by 100.100.100.100 from VPN1 toward VPN3 was always redirected through R5 to VPN2. Is there any solution of this issue?
    thanks!

    Hi
    You can not have overlapping addresses in a scenario like this, where You are leaking between vpn:s.
    When traffic is arrived towards 100.100.100.100 on r4 et0/0 there are no way for r4 to know wich of the 2 (r1 or r2) that the traffic is intended to go.
    /Mikael

  • Communication between multiple page flow portlets

    Hi, I am working on weblogic portal 8.1.
    I've been struggling to communicate between different page flow portlets,
    I have a login page flow portlet and i need to submit login details to indeex page after login action is done.
    I am able to do this by using PageUrl class and RequestDispatcher's forward method using definition label of the index page flow portlet.
    but it is not happening again when i logged out.
    If anybody have worked on it, please let me know the soltution.
    Thanks,
    Vidya sagar

    Not sure whether you tried this option(I tried it works for me).
    configuration has to be done is portlet-2:
    =========================
    Create an custom event namely(messageCustomEvent) and also add an action for it for invoking a portlet method getMessage in Portlet-2.
    //Place this method in Portlet-2
    public void getMessage(ActionRequest request, ActionResponse response,
    Event event) {
    CustomEvent customEvent = (CustomEvent) event;
    String message = (String) customEvent.getPayload();
    response.setRenderParameter("message0", message);
    configuration has to be done is portlet-1:
    =========================
    when click on Login in portlet1, in the pageflow code you fire an custom event as shown below
    PortletBackingContext context =
    PortletBackingContext.getPortletBackingContext(getRequest());
    context.fireCustomEvent("messageCustomEvent", form.getMessage());
    return new Forward("success");
    Thanks & Regards,
    Murali.
    ============

  • Communicating Between Multiple LabVIEW Executables on different computer using Shared Variables

    hi,
    I need to develop some executables which will be launched on different computer of a LAN. Some DATA are common. I need to share the data using shared variables.
    I usually used LabVIEW so I 'm familiar with shared variables but in this case, the RT target is a part of my
    project.
    I do I need to procceed in my case?
    thanks

    Ok but it's not my configuration and I haven't found my answer in the tutorial.
    You speak of a case where there is a computer and a RT target under the same LabView project. As I said earlier, I often use labview RT and shared variable between computer and RT target. But I assume here it's different.
    My question is : how do you acces to the SVE from 3 computers (without any RT target)? 
    1. If I create 3 labview projects using the same Shared Variable, do I need to use the same .lvlib on each project?
    2. Is it possible? 
    3. How can I configure where the SVE should be? When I use a RT target, It only depends where I put my Lvlib. But here there is 3 projects. 
    James
    Attachments:
    Sans titre.JPG ‏9 KB

  • Communication between multiple vrf context on fwsm

    i have 2 vrf context on fwsm of 6509 switch. i want to reach from vrf context1 inside to vrf context inside. how can i do it?
    vrf_context1_inside----6509_fwsm----vrf_context2_inside
    vrf_context1_inside must reach to vrf_context2_inside

    Thanks for the response.
    FileLock. We still have to target JDK 1.3 so we can't use FileLocks (at this point)
    JNI: That's an interesting idea. I suspect many people are using our software on Windows. Therefore, we could probably fix it in Windows the same as in the C++ code. If they're not on Windows, we could use the Sockets approach.
    I also had another idea: how about hashing the username string into some integer (or long) value. Then use the hashed value to lock some other resource: like the port number passed to ServerSocket. I know ServerSocket only accepts 0 - 0xFFFF so this obviously won't work. But is there some other system-wide thing we could lock given an integral value?

  • Communication between thread in the same process using file interface.

    Hi,
    I am developing  driver and i need to communicate between two thread.
    >can anyone guide me on implementing communication between two thread in the same process using File Interface. First thread will be driver and second will be application.I need to send IOCTL like commands using File interface ie is WriteFile(),ReadFile()
    from Host process to driver through file-interface(which run's in driver context).Host process should not be blocked for the duration of the driver to process the command.
    >File-interface will run in driver context and it will be responsible to receive command from application and pass it to the driver.
    what are the complexity introduced?
    >Can anyone also give me the link/reference to get more information on this topic?
    >How to replace IOCTL command's for instance baud _rate change command with a file interface for example with IRP.

    Here  is the detailed query:
    Hardware Abstraction Layer will interact with Driver(Both will be running in complete different process) .there is a IOCTL for command and  File interface for read and write.
    My requirement is:
    Both should run in the same process so HAL will run as one thread and driver as another thread in the same process .I don't want HAL to wait for completion of request and also i don't want driver to be blocked .
    We are planning to use a File Interface for communication between Hardware abstraction layer and Driver
    HAL will send the command or read/write operation to a file interface and driver will get the command or read/write request from the File interface
    There is a flexibility to change Hardware Abstraction layer and also the Driver
    Is it possible to use IOCTL between two thread under same process? if not what other options do we have.
    Can we use File interface to  send command (like IOCTL) between two thread?

  • Use ABAP code in "Decision Between Multiple Alernativesu201D in process chain

    Hi, does anybody know if it is possible to include ABAP code in formula definition when using u201CDecision Between Multiple Alernativesu201D in process chain.
    I wanted to read a specific parameter from one table in order to choose the next step in the process chain.
    If it is not possible, do you any workaround?
    Best regards,
    João Arvanas

    Hey.  You could create your own custom formula which you would code.  Then that formula is reuseable in the formula builder.  That should get you where you need to be.
    Here is a document on how to implement the custom formulas:
    http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/f095592f-42f7-2a10-6ab1-c836a559b48f?quicklink=index&overridelayout=true
    Hope this helps.
    Thanks

  • Problem communicating between Asynchronous BPMN processes

    Hello, I'm having problems communicating between two BPMN processes with an assynchronous interface.
    I have a main BPMN process (process A) and inside I have a Send Task to invoke a second BPMN process (process B). Both processes are inside the same JDev project.
    BPM Process B was created using the JDev wizard. I chose a asynchronous service and defined input and output variables. In the created process I verified the Start and End events (in the implementation tab) and both are defined corretcly. In the composite.xml Process B has 2 operations on the Exposed Services side (left side).
    In Process A, inside the Send Task implementation tab I have selected:
    Conversation Type: Initiates
    Properties
    - Implementation: Process Call
    - Process: I can browse and select Process B
    - Node: Nothing is shown on the LOV.
    If instead of the Send Task I use a Service Task I can select the Node (Start node of Process B).
    I am using versions 11.1.1.4 for both JDev and SOA/BPM.
    Can you help me? Am I doing something wrong?
    Thanks for your help.
    Edited by: 861727 on 26/Mai/2011 9:12

    Hi,
    The send and receive tasks perform similar functionality to the throw and catch message events. However, you cannot use the send task to invoke a process that is initiated with a message start event.
    http://download.oracle.com/docs/cd/E21764_01/doc.1111/e15176/model_bus_procs_bpmpd.htm#CJAHBHII, id 6.4.3
    Regards,
    Diovani
    Edited by: Diovani on 26/05/2011 14:50

  • Decision Between Multiple Alternatives-Process Chain Formula

    Hi,
    I need to write a formula in the process type 'Decision Between Multiple Alternatives'.
    If the current date is on the end of month then i need to trigger a monthly snapshot dataflow if not then daily dataflow needs to be triggered.
    Anyone have any idea of how to write a formula for this?

    You can check both of these docs which defines how to use 'Decision Between Multiple Alternatives' process type:
    [http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/900be605-7b59-2b10-c6a8-c4f7b2d98bae&overridelayout=true]
    [http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/301fb325-9d90-2c10-7199-89fc7b5a17b9&overridelayout=true]

  • Decision between multiple alternatives process type

    Hi All,
    I want to use this process type "decision between multiple alternatives" in one of my process chains, but i want use this process type if the DELTA infopackage pulls ZERO records, skip the next process and more than ZERO records continue the process.
    Please suggest me is it possible anyway.
    Thanks a lot in advance.
    Regards,
    Ravi Kanth

    Hi,
    You can't do it with Decision type process as the conditions allowed are standard System conditions. As Suggested above, you need a code before that. The logic can be sketched as :
    1. Load the provider.
    2. Obtain the latest request in the provider.
    3. Get the data from the request (std SAP prog is available for reading from providers).
    4. Raise error upon getting no data (in this case you need to put the steps to be skipped in another chain and use in the main chain as meta chain).
    --Akashdeep

  • Decision Between Multiple Alternatives in Process Chain

    Hello all!
    I wanted to use the process type "Decision Between Multiple Alternatives" in a process chain, so than i can choose wich DTPs will be executed. I was wondering to use the Function "PREDECESSOR_PARAMETER (<I_FIELDNAME>, <I_LOW_OR_HIGH>, <I_NUMBER_OF_VALUE>)" to get a parameter from an ABAP program step, but i do not know which I_FIELDNAME parameter should i use to receive the parameter. Did anyone use this logic or something similar? Do you think there are better ways of doing this?
    Thanks in advance and Best regards,
    Nuno

    Hi,
    The decision process type allows you to determine a set of conditions
    For more info go though the below link , as they have explained step by step with screenshots
    http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/900be605-7b59-2b10-c6a8-c4f7b2d98bae&overridelayout=true
    http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/301fb325-9d90-2c10-7199-89fc7b5a17b9&overridelayout=true
    Regards,
    Marasa.

Maybe you are looking for