Tracking status of long running synchronous calls.

Flows 1 --- async call ----> FLows 2 ------ async call --------> Flows 3 -----sync call ----> axis ws
The last sync call can take a long time.
In the previous situation, i can't see Flow 1,2,3 evolution....
What i try to do :
I use the scriplet code setTitle() to show the flow status (RUNNING, USERTASK, SUCCESS) to show the flow
activity.
My example :
* Flows1 : setTitle('USERTASK')
* Flows 1 is waiting for a user task.
* User responds ..
* Flows1 : setTitle('RUNNING')
* Flows1 call Flow2 (flow2 call flow 3 ...)
* I can't see the Flow1,2,3 status until Flows3 end
so, the user will wait ...
Question is how can i force DB commiting while sync flow is called ?

David,
I created a project that mimics you use case and the title setting works as expected ( = the title changes and is visible through the console as the process gets executed).
Here is a link to a zip file that contain Flow1, Flow2 and Flow3 as described in your use case.
http://www.collaxa.org/TitleProject.zip
(deploy in the 3, 2, 1 order).
Does the attached project accurately describe your use case?
Thanks,
Edwin

Similar Messages

  • Tracking completion status for long running DML operations

    Does anybody know:
    Is there any possibility to track a completion status for long running DML operations (for example how many rows is inserted)?
    For example if I execute an INSERT statement which is working for several hours it is very important to estimate the total time for this operation.
    Thanks forward

    I'm working with Oracle8 in present, and unfortunately this solution (V$SESSION_LONGOPS)cannot help me.
    On Oracle8 it works, but with some restrictions:
    - You must be using the cost-based optimizer
    - Set the TIMED_STATISTICS or SQL_TRACE parameter to TRUE
    - Gather statistics for your objects with the ANALYZE statement or the DBMS_STATS package.

  • Long running database call

    Hi
    I have a scenario where a call to PLSQL is taking about 15+ minutes to complete.
    Calls to database through database adapter is a sync call in BPEL, so yes the timeout is making the transaction JTA inactive.
    I understand that increasing the transaction time out is not an option as the time to complete might vary based on amount of data to process.
    What are the best practices for designing this scenario?
    Every Little Help
    Kalidass Mookkaiah

    This is not a very good pattern as you have no viability of the second BPEL process, if this never gets invoked the first process will be none the wiser.
    Plus how does your second BPEL process kick off the long running PL/SQL, once it gets invoked you still need to call the PL/SQL. How is this achieved using this pattern?
    If you want to call a long running PL/SQL it can be achieved with AQ and correlations.
    1.) Create an async BPEL.
    2.) Invoke an AQ adapter that places a message on a request queue with a correlation id, so you need to use correlation sets.
    3.) You setup your PL/SQL to subscribe to this queue, so when a message is posted the PL/SQL is invoked.
    4.) Once complete it places the result on a response queue using the same correlation id
    5.) Your BPEL process is listening for that correlation id on the response queue. (I like to respond with the status of the PL/SQL)
    6.) Always best to have a pick activity after the receive so if the response is not within a timeframe you can implement some error handling.
    cheers
    James

  • Tracking progress of long running scripts

    Hi,
    I have a script that runs for more than an hour. It is a sequential list of queries/counts that produces an output.
    I am finding that I only get the result if the whole script finishes.
    If, for some reason, I have to abort the script, I can not see the results of the queries the script managed to finish.
    I've tried using these methods:
    1) (in a linux shell script)
    sqlplus -s user@database/password @myscript.sql >> mylogfile.txt
    2) (in myscript.sql)
    spool mylogfile.txt
    query1
    query2
    queryX
    spool off
    Is there a way for a list of queries to "pause" and save/commit the output to a logfile and continue with the rest of the script and append the rest of the results?
    I hope someone can help me out.
    Thanks,
    Ian

    Welcome to the forums!
    Based on my experience you should be able to read a spooled SQL*Plus file while it's being written to. Maybe there is some oddity in your particular environment that is preventing that from happening.
    An alternative would be to wrap each SQL statement using spool so you have one result per file. Then if you need to you can concatenate all the files together at the end.

  • Checking for status of a long-running BPEL process

    Hi experts,
    I have one BPEL process for originating customers' loan which usually involves various steps which takes around 15-20 mins to complete per instance. I would like to implement a user interface that can check the process's progress and display how it is going to the user.
    I have thought of using an asynchronous process that updates a global variable listing status of each step inside the process and use a poller to invoke another operation (like "checkStatus" operation) of this process to retrieve this variable and display the value to the users. It may be achieved by using "OnEvent" activity waiting for "checkStatus" operation. It will run in parallel with the main process, have access to the global variable and reply this variable immediately to the caller.
    It sounds like an idea in theory but invoking a web service operation for polling status is very heavy-weight and may impact performance during high-load.
    I am just wondering if there is other solution to this problem as I believe the status checking is a very common expected requirement in long-running BPEL process. What might be the best practice to implement this?
    Look forward to your responses.
    Thanks and regards,
    Edited by: Nghia Pham on Nov 5, 2012 4:48 PM

    Hi.
    I apologize for the slow reply. I am just back from overseas and did not have chance to go to the forum!
    Thank you a lot for your responses!
    The BAM looks like a suggested out-of-the-box solution. But it ties too much to Oracle API and will be hard to customise the way you want to interpret the status to end-users. If you want to display the process status with BAM in a web application interface, ADF is the only solution (please correct me if I am wrong). I would prefer a stand-alone, free of proprietary API solution so that we can build a screen that is technology-independent. As ADF UI is not our only supported view technology. For example, a PHP web client should be able to interpret the BPEL process status.
    Will really appreciate your suggested solution.
    Thanks and regards,

  • Challenging question: Status report for long running program...

    Hi All,
    With all the control stuff around like cl_dd_document I was wondering if there is a way to give a user a report which shows the progress of a very long running program?
    i.e. If I have a 20 step process and each step takes 1 minute, the following is what I would like to occur:
    Output a status line in a report format, run step, repeat until all steps are finished.
    This is similar to the status bar, but with a history of what is happening.  Obviously scrolling needs to be considered also.  Ideally it would behave like sapinst would but in a reporting format.
    Obviously this has to bypass the PBO/PAI approach, hence why I believe UI Controls must be the answer.
    Any ideas anyone?
    Regards,
    Matt

    Without using a control, you could try the old report refresh trick using set user-command and an action triggered after an RFC in a new task ... see basic demo below:
    report zlocal_auto_refresh no standard page heading.
    data:
      begin of gs_step,
        uzeit               like sy-uzeit,
        step                like sy-tabix,
        start_end(10)       type c,
      end of gs_step,
      gt_step               like gs_step occurs 10,
      g_step_number         like sy-tabix.
    *=======================================================================
    * Events
    *=======================================================================
    at user-command.
      perform user_command.
    *=======================================================================
    * Mainline
    *=======================================================================
    start-of-selection.
      perform start_of_report.
    end-of-selection.
    *&      Form  start_of_report
    form start_of_report.
      set pf-status '1000LIST'. "contains ZREFRESH ucomm
      perform run_a_step.
    endform.                    "start_of_report
    *&      Form  run_a_step
    form run_a_step.
    * Demo with something that takes some time, like sleeping...
      data:
        ls_step             like gs_step.
      add 1 to g_step_number.
      if g_step_number > 9.
        stop.
      endif.
      get time.
      clear: ls_step.
      ls_step-step      = g_step_number.
      ls_step-uzeit     = sy-uzeit.
      ls_step-start_end = 'Starting'.
      append ls_step to gt_step.
    * generate a delay for demo
      call function 'ENQUE_SLEEP'
        exporting
          seconds = 1
        exceptions
          others  = 0.
      get time.
      clear: ls_step.
      ls_step-step      = g_step_number.
      ls_step-uzeit     = sy-uzeit.
      ls_step-start_end = 'Ended'.
      append ls_step to gt_step.
      format reset.
      format color col_normal.
      loop at gt_step into ls_step.
        write: /
          ls_step-uzeit,
          ls_step-start_end,
          ls_step-step,
          at sy-linsz space.
      endloop.
      uline.
      call function 'RFC_PING'
        starting new task 'NEWTASK'
        performing when_back on end of task.
    endform.                    "run_a_step
    *&      Form  when_back
    form when_back
      using
        i_taskname          type any.
      receive results from function 'RFC_PING'.
      set user-command 'ZREFRESH'. "act like user pressed something
    endform.                    "when_back
    *&      Form  user_command
    form user_command.
      case sy-ucomm.
        when 'ZREFRESH'.
          perform run_a_step.
          sy-lsind = sy-lsind - 1.
      endcase.
    endform.                    "user_command
    cheers
    jc

  • Call long running process and return immediately

    Hi everyone,
    Here' my problem : I am calling an onDemand application process when clicking on a button. It's a very long running process; and while waiting for the response my browser stops responding (white page).
    So, is there a way to call a process and return immediately to the javascript. The process will set a field to a given value when it finishes. In javascript side, I can then check in a while boucle the value of this field to know if the process has ended.But I dont know how to return just after the application process call ...
    Thanks and best regards,
    Othman

    I presume that you can achieve that by means of a batch job.
    You can use an automatic page reload every X seconds until a certain "flag" (or similar mechanism) changes state and check it in a before header process. In the meanwhile you can display some animated GIF for instance.
    Once the processing is completed you remove the reload timer from the header or you branch to a different page using a programmatic technique like procedure owa_util.redirect_url.
    Bye,
    Flavio
    http://www.oraclequirks.blogspot.com/search/label/Apex

  • Erorr calling long running sync web service

    Hello
    I have definied simple async process:
    assign (from process input to ws invoke input)
    sync ws invoke
    assign (from ws invoke output to process output)
    Sync Web Service is long running (few minutes). In order to avoid timeout I have accordingly set sync-max-wait-time property.
    I have observed that after starting process instance I can't see it in BPEL Console (however I know it is working). Furthermore when invoke activity ends (so instance state must be saved in database) I can see following error on system console:
    <BaseCubeSessionBean::logError> Error while invoking bean "delivery": Cannot ins
    ert audit trail.
    The process domain was unable to insert the current log entries for the instance
    "2314" to the audit trail table. The exception reported is: RollbackException:
    The transaction has been marked for rollback (timed out)
    Please check that the machine hosting the datasource is physically connected to
    the network. Otherwise, check that the datasource connection parameters (user/p
    assword) is currently valid.
    sql statement: INSERT INTO audit_trail ( cikey, domain_ref, count_id, log ) VALU
    ES ( ?, ?, ?, ? )
    <2005-01-06 13:14:10,268> <ERROR> <default.collaxa.cube.engine.dispatch> <BaseSc
    heduledWorker::process> Failed to handle dispatch message invoke instance messag
    e 0c92305db480f36d:149b290:10147dc1b2e:-7fd6 ... exception Message handle error.
    An exception occurred while attempting to process the message "com.collaxa.cube.
    engine.dispatch.message.invoke.InvokeInstanceMessage"; the exception is: Transac
    tion was rolled back: timed out; nested exception is: java.rmi.RemoteException:
    No Exception - originate from:java.lang.Exception: No Exception - originate from
    :; nested exception is:
    java.lang.Exception: No Exception - originate from:
    Best Regards

    Hi,
    There are 2 ways to work around the error that you are seeing.
    Option #1: increase the JTA timeout of the underlying application server.
    Option #2: in the bpel.xml of your process, add a "nonBlockingInvoke" property to the partnerLink representing the interaction with the long running service.
    Option #2 should also address the fact that the instance is not visible in the bpel console.
    Edwin

  • Work process in running status from Long time

    Hi all,
    In my production system Workprocess is in runnig staus almost from 44 hours.
    i tried to end session of user but it not ending.
    i tried  to kill work process from sm50  end work process and from os(unix) kill -9 pid every thing i tried but work process is in still running
    please give some ideas to clear this
    Thanks,
    Shashi
    Edited by: shashikiran.ss on Oct 11, 2010 1:23 PM

    Hi Juan,
    yes from sm50 i have done cancel without core. no jobs are running or sheduled with that user. but work process status is in running with  program  J_1IREGS no action is taking place. 
    Restarting box  not possible right now.
    Regards
    Shashi

  • Web.Show_Document does not work with long running reports

    I am using Web.Show_Document() to call reports from Forms. Everything works fine for smaller reports. However for long running reports I do not get the output instead get the page "This page cannot be displayed.". On checking the job status on the report server I find that report is still running and completes after some time but by that time my http request has already timed out. What configuration do I have to change to make my long running reports work.
    Thanks

    So, looks like this is an IE issue. I need to add the form server site to my list of Trusted Sites. Once I did that, everything started to work fine. Thought I'd share in case anyone is really interested.....

  • Long running query--- included steps given by Randolf

    Hi,
    I have done my best to follow Randolf instruction word-by-word and hope to get solution for my
    problem soon. Sometime back I have posted a thread on this problem then got busy with other
    stuff and was not able to follow it. Here I am again with same issue.
    here is link for my previous post
    long running query in database 10gHere is backgroud of my requriemment.
    I am working on Oracle forms 10g which is using package given below. We want to display client information
    with order count basd on different status like Pending, Error, back Order, expedited, std shipping.
    Output will look something like.
    client name   pending    error   backorder   expedited   std shipping
    ABC            24         0       674          6789         78900
    XYZ            35         673    5700           0           798274
    .There are total 40 clients . The long running query are expedited and std shipping.
    When i run package from Oracle Form Developer it takes 3 mintues to run but when I run same query in our application using forms
    (which uses Oracle Application Server) it takes around 1 hour, which is completly unacceptable.
    User wants it be done in less than 1 mintue.
    I have tried combining Pending,error and backorder queries together but as far as I know it will not
    work in Oracle Form as we need a place holder for each status.
    Please dont think it is Forms related question, it is a Performance problem.
    PACKAGE BODY ORDER_COUNT_PKG IS
    PROCEDURE post_query IS
      BEGIN
           BEGIN
                SELECT count(*)
                  INTO :ORDER_STATUS.PENDING
                  FROM orders o
              WHERE o.status = 'P'
                   AND (parent_order_id is null
                    OR  (order_type='G'
                         AND parent_order_id=original_order_number))
                      AND  o.client = :ORDER_STATUS.CLIENT_NUMBER;
         EXCEPTION
           WHEN OTHERS THEN
           NULL;
           END;
             BEGIN
                 SELECT  count(*)
                   INTO  :ORDER_STATUS.ERROR
                   FROM  orders o
                  WHERE  o.status = 'E'
                    AND  (parent_order_id is null
                     OR  (order_type='G'
                           AND parent_order_id=original_order_number))
                       AND  o.client = :ORDER_STATUS.CLIENT_NUMBER;
                EXCEPTION
           WHEN OTHERS THEN
           NULL;     
            END;
           BEGIN
                SELECT count(*)
                  INTO :ORDER_STATUS.BACK_ORDER
                  FROM orders o
              WHERE o.status = 'B'
                   AND (parent_order_id is null
                    OR (order_type='G'
                         AND parent_order_id=original_order_number))
                      AND o.client = :ORDER_STATUS.CLIENT_NUMBER;
          EXCEPTION
           WHEN OTHERS THEN
           NULL;   
         END;
           BEGIN
                SELECT count(*)
                  INTO :ORDER_STATUS.EXPEDITE
                  FROM orders o,shipment_type_methods stm
                 WHERE o.status in ('A','U')
             AND (o.parent_order_id is null
              OR (o.order_type = 'G'
             AND o.parent_order_id = o.original_order_number))
             AND o.client = stm.client
             AND o.shipment_class_code = stm.shipment_class_code
             AND (nvl(o.priority,'1') = '2'
              OR  stm.surcharge_amount <> 0)
                      AND  o.client = :ORDER_STATUS.CLIENT_NUMBER
              GROUP BY  o.client;
              EXCEPTION
           WHEN OTHERS THEN
           NULL;          
         END;           
           BEGIN
                SELECT count(*)
                  INTO :ORDER_STATUS.STD_SHIP
                  FROM  orders o,shipment_type_methods stm
                 WHERE o.status in ('A','U')
             AND  (o.parent_order_id is null
              OR (o.order_type = 'G'
             AND o.parent_order_id = o.original_order_number))
             AND nvl(o.priority,'1') <> '2'
             AND o.client = stm.client
             AND o.shipment_class_code = stm.shipment_class_code
             AND stm.surcharge_amount = 0
                      AND o.client = :ORDER_STATUS.CLIENT_NUMBER
              GROUP BY o.client;
          EXCEPTION
           WHEN OTHERS THEN
           NULL;
           END;
      END post_query;
      END ORDER_COUNT_PKG;one of the query which is taking long time is
    SELECT count(*)
                   FROM  orders o,shipment_type_methods stm
                 WHERE o.status in ('A','U')
             AND  (o.parent_order_id is null
              OR (o.order_type = 'G'
             AND o.parent_order_id = o.original_order_number))
             AND nvl(o.priority,'1') <> '2'
             AND o.client = stm.client
             AND o.shipment_class_code = stm.shipment_class_code
             AND stm.surcharge_amount = 0
               AND o.client = :CLIENT_NUMBER
              GROUP BY o.clientThe version of the database is 10.2.1.0.2
    SQL> alter session force parallel dml;These are the parameters relevant to the optimizer:
    SQL> show parameter user_dump_dest
    NAME                                 TYPE        VALUE
    user_dump_dest                       string      /u01/app/oracle/admin/mcgemqa/
                                                     udump
    SQL> show parameter optimizer
    NAME                                 TYPE        VALUE
    optimizer_dynamic_sampling           integer     2
    optimizer_features_enable            string      10.2.0.4
    optimizer_index_caching              integer     0
    optimizer_index_cost_adj             integer     100
    optimizer_mode                       string      ALL_ROWS
    optimizer_secure_view_merging        boolean     TRUE
    SQL> show parameter db_file_multi
    NAME                                 TYPE        VALUE
    db_file_multiblock_read_count        integer     16
    SQL> show parameter db_block_size
    NAME                                 TYPE        VALUE
    db_block_size                        integer     8192
    SQL> show parameter cursor_sharing
    NAME                                 TYPE        VALUE
    cursor_sharing                       string      EXACTHere is the output of EXPLAIN PLAN:
    SQL> explain plan for
      2  SELECT count(*)
      3         FROM  orders o,shipment_type_methods stm
      4       WHERE o.status in ('A','U')
      5           AND  (o.parent_order_id is null
      6            OR (o.order_type = 'G'
      7           AND o.parent_order_id = o.original_order_number))
      8           AND nvl(o.priority,'1') <> '2'
      9           AND o.client = stm.client
    10           AND o.shipment_class_code = stm.shipment_class_code
    11           AND stm.surcharge_amount = 0
    12     AND o.client = :CLIENT_NUMBER
    13    GROUP BY o.client
    14  /
    Explained.
    Elapsed: 00:00:00.12
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 559278019
    | Id  | Operation                      | Name                    | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT               |                         |     1 |    35 | 46764   (3)| 00:09:22 |
    |   1 |  SORT GROUP BY NOSORT          |                         |     1 |    35 | 46764   (3)| 00:09:22 |
    |*  2 |   TABLE ACCESS BY INDEX ROWID  | ORDERS                  |   175K|  3431K| 25979   (3)| 00:05:12 |
    |   3 |    NESTED LOOPS                |                         | 25300 |   864K| 46764   (3)| 00:09:22 |
    |*  4 |     TABLE ACCESS BY INDEX ROWID| SHIPMENT_TYPE_METHODS   |     1 |    15 |     2   (0)| 00:00
    |*  5 |      INDEX RANGE SCAN          | U_SHIPMENT_TYPE_METHODS |     2 |       |     1   (0)| 00:00:01 |
    |*  6 |     INDEX RANGE SCAN           | ORDERS_ORDER_DATE       |   176K|       |  2371   (8)| 00:00:29 |
    Predicate Information (identified by operation id):
       2 - filter(("O"."PARENT_ORDER_ID" IS NULL OR "O"."ORDER_TYPE"='G' AND
                  "O"."PARENT_ORDER_ID"=TO_NUMBER("O"."ORIGINAL_ORDER_NUMBER")) AND NVL("O"."PRIORITY",'1')<>'2
                  AND "O"."SHIPMENT_CLASS_CODE"="STM"."SHIPMENT_CLASS_CODE")
       4 - filter("STM"."SURCHARGE_AMOUNT"=0)
       5 - access("STM"."CLIENT"=:CLIENT_NUMBER)
       6 - access("O"."CLIENT"=:CLIENT_NUMBER)
           filter("O"."STATUS"='A' OR "O"."STATUS"='U')
    24 rows selected.
    Elapsed: 00:00:00.86
    SQL> rollback;
    Rollback complete.
    Elapsed: 00:00:00.07Here is the output of SQL*Plus AUTOTRACE including the TIMING information:
    SQL> SELECT count(*)
      2         FROM  orders o,shipment_type_methods stm
      3       WHERE o.status in ('A','U')
      4           AND  (o.parent_order_id is null
      5            OR (o.order_type = 'G'
      6           AND o.parent_order_id = o.original_order_number))
      7           AND nvl(o.priority,'1') <> '2'
      8           AND o.client = stm.client
      9           AND o.shipment_class_code = stm.shipment_class_code
    10           AND stm.surcharge_amount = 0
    11     AND o.client = :CLIENT_NUMBER
    12    GROUP BY o.client
    13  /
    Elapsed: 00:00:03.09
    Execution Plan
    Plan hash value: 559278019
    | Id  | Operation                      | Name                    | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT               |                         |     1 |    35 | 46764   (3)| 00:09:22 |
    |   1 |  SORT GROUP BY NOSORT          |                         |     1 |    35 | 46764   (3)| 00:09:22 |
    |*  2 |   TABLE ACCESS BY INDEX ROWID  | ORDERS                  |   175K|  3431K| 25979   (3)| 00:05:12 |
    |   3 |    NESTED LOOPS                |                         | 25300 |   864K| 46764   (3)| 00:09:22 |
    |*  4 |     TABLE ACCESS BY INDEX ROWID| SHIPMENT_TYPE_METHODS   |     1 |    15 |     2   (0)| 00:00
    |*  5 |      INDEX RANGE SCAN          | U_SHIPMENT_TYPE_METHODS |     2 |       |     1   (0)| 00:00:01 |
    |*  6 |     INDEX RANGE SCAN           | ORDERS_ORDER_DATE       |   176K|       |  2371   (8)| 00:00:29 |
    Predicate Information (identified by operation id):
       2 - filter(("O"."PARENT_ORDER_ID" IS NULL OR "O"."ORDER_TYPE"='G' AND
                  "O"."PARENT_ORDER_ID"=TO_NUMBER("O"."ORIGINAL_ORDER_NUMBER")) AND NVL("O"."PRIORITY",'1')<>'2
                  AND "O"."SHIPMENT_CLASS_CODE"="STM"."SHIPMENT_CLASS_CODE")
       4 - filter("STM"."SURCHARGE_AMOUNT"=0)
       5 - access("STM"."CLIENT"=:CLIENT_NUMBER)
       6 - access("O"."CLIENT"=:CLIENT_NUMBER)
           filter("O"."STATUS"='A' OR "O"."STATUS"='U')
    Statistics
             55  recursive calls
              0  db block gets
           7045  consistent gets
              0  physical reads
              0  redo size
            206  bytes sent via SQL*Net to client
            238  bytes received via SQL*Net from client
              2  SQL*Net roundtrips to/from client
              0  sorts (memory)
              0  sorts (disk)
              1  rows processed
    SQL> disconnect
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    SQL> The TKPROF output for this statement looks like the following:
    SELECT count(*)
           FROM  orders o,shipment_type_methods stm
         WHERE o.status in ('A','U')
             AND  (o.parent_order_id is null
              OR (o.order_type = 'G'
             AND o.parent_order_id = o.original_order_number))
             AND nvl(o.priority,'1') <> '2'
             AND o.client = stm.client
             AND o.shipment_class_code = stm.shipment_class_code
             AND stm.surcharge_amount = 0
       AND o.client = :CLIENT_NUMBER
      GROUP BY o.client
    call     count       cpu    elapsed       disk      query    current        rows
    Parse        1      0.01       0.00          0          0          0           0
    Execute      1      0.04       0.04          0          0          0           0
    Fetch        2      2.96       2.91          0       7039          0           1
    total        4      3.01       2.95          0       7039          0           1
    Misses in library cache during parse: 1
    Misses in library cache during execute: 1
    Optimizer mode: ALL_ROWS
    Parsing user id: 95 
    Rows     Row Source Operation
          1  SORT GROUP BY NOSORT (cr=7039 pr=0 pw=0 time=2913701 us)
         91   TABLE ACCESS BY INDEX ROWID ORDERS (cr=7039 pr=0 pw=0 time=261997906 us)
         93    NESTED LOOPS  (cr=6976 pr=0 pw=0 time=20740 us)
          1     TABLE ACCESS BY INDEX ROWID SHIPMENT_TYPE_METHODS (cr=2 pr=0 pw=0 time=208 us)
          3      INDEX RANGE SCAN U_SHIPMENT_TYPE_METHODS (cr=1 pr=0 pw=0 time=88 us)(object id 81957)
         91     INDEX RANGE SCAN ORDERS_ORDER_DATE (cr=6974 pr=0 pw=0 time=70 us)(object id 81547)
    Elapsed times include waiting on following events:
      Event waited on                             Times   Max. Wait  Total Waited
      ----------------------------------------   Waited  ----------  ------------
      SQL*Net message to client                       2        0.00          0.00
      SQL*Net message from client                     2        0.02          0.02
    ********************************************************************************The DBMS_XPLAN.DISPLAY_CURSOR output:
    SQL> variable CLIENT_NUMBER varchar2(20)
    SQL> exec :CLIENT_NUMBER := '14'
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:00.06
    SQL> SELECT /*+ gather_plan_statistics */ count(*)
      2         FROM  orders o,shipment_type_methods stm
      3       WHERE o.status in ('A','U')
      4           AND  (o.parent_order_id is null
      5            OR (o.order_type = 'G'
      6           AND o.parent_order_id = o.original_order_number))
      7           AND nvl(o.priority,'1') <> '2'
      8           AND o.client = stm.client
      9           AND o.shipment_class_code = stm.shipment_class_code
    10           AND stm.surcharge_amount = 0
    11     AND o.client = :CLIENT_NUMBER
    12    GROUP BY o.client
    13  /
      COUNT(*)
            91
    Elapsed: 00:00:02.85
    SQL> set termout on
    SQL> select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
    PLAN_TABLE_OUTPUT
    SQL_ID  4nfj368y8w6a3, child number 0
    SELECT /*+ gather_plan_statistics */ count(*)        FROM  orders o,shipment_type_methods stm      WHERE
    o.status in ('A','U')          AND  (o.parent_order_id is null           OR (o.order_type = 'G'
    AND o.parent_order_id = o.original_order_number))          AND nvl(o.priority,'1') <> '2'          AND
    o.client = stm.client          AND o.shipment_class_code = stm.shipment_class_code          AND
    stm.surcharge_amount = 0    AND o.client = :CLIENT_NUMBER   GROUP BY o.client
    Plan hash value: 559278019
    | Id  | Operation                      | Name                    | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
    |   1 |  SORT GROUP BY NOSORT          |                         |      1 |      1 |      1 |00:00:02.63 |    7039 |
    |*  2 |   TABLE ACCESS BY INDEX ROWID  | ORDERS                  |      1 |    175K|     91 |00:03:56.87 |    7039 |
    |   3 |    NESTED LOOPS                |                         |      1 |  25300 |     93 |00:00:00.02 |    6976 |
    |*  4 |     TABLE ACCESS BY INDEX ROWID| SHIPMENT_TYPE_METHODS   |      1 |      1 |      1 |00:00:00.01 |       2 |
    |*  5 |      INDEX RANGE SCAN          | U_SHIPMENT_TYPE_METHODS |      1 |      2 |      3 |00:00:00.01 |       1 |
    |*  6 |     INDEX RANGE SCAN           | ORDERS_ORDER_DATE       |      1 |    176K|     91 |00:00:00.01 |    6974 |
    Predicate Information (identified by operation id):
       2 - filter((("O"."PARENT_ORDER_ID" IS NULL OR ("O"."ORDER_TYPE"='G' AND
                  "O"."PARENT_ORDER_ID"=TO_NUMBER("O"."ORIGINAL_ORDER_NUMBER"))) AND NVL("O"."PRIORITY",'1')<>'
                  "O"."SHIPMENT_CLASS_CODE"="STM"."SHIPMENT_CLASS_CODE"))
       4 - filter("STM"."SURCHARGE_AMOUNT"=0)
       5 - access("STM"."CLIENT"=:CLIENT_NUMBER)
       6 - access("O"."CLIENT"=:CLIENT_NUMBER)
           filter(("O"."STATUS"='A' OR "O"."STATUS"='U'))
    32 rows selected.
    Elapsed: 00:00:01.30
    SQL> I'm looking forward for suggestions how to improve the performance of this statement.
    Thanks
    Sandy

    Please find explain plan for No hint
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 559278019
    | Id  | Operation                      | Name                    | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT               |                         |     1 |    35 | 46764   (3)| 00:09:22 |
    |   1 |  SORT GROUP BY NOSORT          |                         |     1 |    35 | 46764   (3)| 00:09:22 |
    |*  2 |   TABLE ACCESS BY INDEX ROWID  | ORDERS                  |   175K|  3431K| 25979   (3)| 00:05:12 |
    |   3 |    NESTED LOOPS                |                         | 25300 |   864K| 46764   (3)| 00:09:22 |
    |*  4 |     TABLE ACCESS BY INDEX ROWID| SHIPMENT_TYPE_METHODS   |     1 |    15 |     2   (0)| 00:00
    |*  5 |      INDEX RANGE SCAN          | U_SHIPMENT_TYPE_METHODS |     2 |       |     1   (0)| 00:00:01 |
    |*  6 |     INDEX RANGE SCAN           | ORDERS_ORDER_DATE       |   176K|       |  2371   (8)| 00:00:29 |
    Predicate Information (identified by operation id):
       2 - filter(("O"."PARENT_ORDER_ID" IS NULL OR "O"."ORDER_TYPE"='G' AND
                  "O"."PARENT_ORDER_ID"=TO_NUMBER("O"."ORIGINAL_ORDER_NUMBER")) AND NVL("O"."PRIORITY",'1')<>'2
                  AND "O"."SHIPMENT_CLASS_CODE"="STM"."SHIPMENT_CLASS_CODE")
       4 - filter("STM"."SURCHARGE_AMOUNT"=0)
       5 - access("STM"."CLIENT"=:CLIENT_NUMBER)
       6 - access("O"."CLIENT"=:CLIENT_NUMBER)
           filter("O"."STATUS"='A' OR "O"."STATUS"='U')
    24 rows selected.
    Elapsed: 00:00:00.86Explain Plan for Parallel Hint
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 559278019
    | Id  | Operation                      | Name                    | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT               |                         |     1 |    35 | 46764   (3)| 00:09:22 |
    |   1 |  SORT GROUP BY NOSORT          |                         |     1 |    35 | 46764   (3)| 00:09:22 |
    |*  2 |   TABLE ACCESS BY INDEX ROWID  | ORDERS                  |   175K|  3431K| 25979   (3)| 00:05:12 |
    |   3 |    NESTED LOOPS                |                         | 25300 |   864K| 46764   (3)| 00:09:22 |
    |*  4 |     TABLE ACCESS BY INDEX ROWID| SHIPMENT_TYPE_METHODS   |     1 |    15 |     2   (0)| 00:00
    |*  5 |      INDEX RANGE SCAN          | U_SHIPMENT_TYPE_METHODS |     2 |       |     1   (0)| 00:00:01 |
    |*  6 |     INDEX RANGE SCAN           | ORDERS_ORDER_DATE       |   176K|       |  2371   (8)| 00:00:29 |
    Predicate Information (identified by operation id):
       2 - filter(("O"."PARENT_ORDER_ID" IS NULL OR "O"."ORDER_TYPE"='G' AND
                  "O"."PARENT_ORDER_ID"=TO_NUMBER("O"."ORIGINAL_ORDER_NUMBER")) AND NVL("O"."PRIORITY",'1')<>'2
                  AND "O"."SHIPMENT_CLASS_CODE"="STM"."SHIPMENT_CLASS_CODE")
       4 - filter("STM"."SURCHARGE_AMOUNT"=0)
       5 - access("STM"."CLIENT"='14')
       6 - access("O"."CLIENT"='14')
           filter("O"."STATUS"='A' OR "O"."STATUS"='U')
    24 rows selected.
    Elapsed: 00:00:08.92Explain Plan for USE_Hash hint
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 1465232248
    | Id  | Operation                     | Name                    | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT              |                         |     1 |    35 | 46786   (3)| 00:09:22 |
    |   1 |  SORT GROUP BY NOSORT         |                         |     1 |    35 | 46786   (3)| 00:09:22 |
    |*  2 |   HASH JOIN                   |                         | 25300 |   864K| 46786   (3)| 00:09:22 |
    |*  3 |    TABLE ACCESS BY INDEX ROWID| SHIPMENT_TYPE_METHODS   |     1 |    15 |     2   (0)| 00:00:0
    |*  4 |     INDEX RANGE SCAN          | U_SHIPMENT_TYPE_METHODS |     2 |       |     1   (0)| 00:00:01 |
    |*  5 |    TABLE ACCESS BY INDEX ROWID| ORDERS                  |   175K|  3431K| 46763   (3)| 00:09:22 |
    |*  6 |     INDEX RANGE SCAN          | ORDERS_ORDER_DATE       |   176K|       |  4268   (8)| 00:00:52 |
    Predicate Information (identified by operation id):
       2 - access("O"."CLIENT"="STM"."CLIENT" AND "O"."SHIPMENT_CLASS_CODE"="STM"."SHIPMENT_CLASS_COD
                  E")
       3 - filter("STM"."SURCHARGE_AMOUNT"=0)
       4 - access("STM"."CLIENT"='14')
       5 - filter(("O"."PARENT_ORDER_ID" IS NULL OR "O"."ORDER_TYPE"='G' AND
                  "O"."PARENT_ORDER_ID"=TO_NUMBER("O"."ORIGINAL_ORDER_NUMBER")) AND NVL("O"."PRIORITY",'1')<>'2
       6 - access("O"."CLIENT"='14')
           filter("O"."STATUS"='A' OR "O"."STATUS"='U')
    25 rows selected.
    Elapsed: 00:00:01.09
    SQL> Thanks
    Sandy

  • Synchronous Call Timeout but the PO still created in ECC.

    Hi PI Expert,
    I have problem with synchronous call (Web Service -
    > RFC). Sometimes if the processing time in ECC take longer time the  webservice will throw exception timeout but then the processing stil continue in receiver communication channel until success.
    So if you use SXI_MONITOR you can see 2 transaction, Sender web service error timeout and RFC success.
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    - <!--  Call Adapter
      -->
    - <SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
      <SAP:Category>XIServer</SAP:Category>
      <SAP:Code area="INTERNAL">HTTP_RESP_STATUS_CODE_NOT_OK</SAP:Code>
      <SAP:P1>500</SAP:P1>
      <SAP:P2>Timeout</SAP:P2>
      <SAP:P3 />
      <SAP:P4 />
      <SAP:Stack>HTTP response contains status code 500 with the description Timeout Error while sending by HTTP (error code: 500, error text: Timeout)</SAP:Stack>
      <SAP:Retry>N</SAP:Retry>
      </SAP:Error>
    But the RFC communication still able to continue until succes. Supposed to be both error if the sender communication channel timeout ?
      - <ns0:Z_MM_STO.Response xmlns:ns0="urn:sap-com:document:sap:rfc:functions">
      <EX_RESULT><RETURN><item><TYPE>E</TYPE><ROW>0</ROW><PARAMETER>POHEADER</PARAMETER><MESSAGE>0100905701</MESSAGE><MESSAGE_V1></MESSAGE_V1><MESSAGE_V2></MESSAGE_V2><SYSTEM></SYSTEM></item><item><TYPE>E</TYPE><ROW>1</ROW><PARAMETER>POHEADER</PARAMETER><MESSAGE>External document number 100905701 already assigned</MESSAGE><MESSAGE_V1>100905701</MESSAGE_V1><MESSAGE_V2></MESSAGE_V2><SYSTEM>ECPCLNT300</SYSTEM></item></RETURN></EX_RESULT>
      </ns0:Z_MM_STO.Response>
    Please advise is that anything that i can check ?
    Thank You and Best Regards
    Fernand.
    Edited by: Fernad Lesmana on Aug 23, 2010 7:59 AM
    Edited by: Fernad Lesmana on Aug 23, 2010 8:00 AM
    Edited by: Fernad Lesmana on Aug 23, 2010 8:01 AM

    Hi Fernand,
    The last parameter (syncMessageDeliveryTimeoutMsec) you mentioned is for general timeout setting of RFC receiver calls (see note FAQ RFC Adapter: https://service.sap.com/sap/support/notes/730870). That one seems high enough in your case
    xiadapter.inbound.timeout.default is the default setting of 180 seconds, which is normally the default for all timeouts in PI.
    Normally in icm there's a setting for the http port (e.g. something like icm/server_port_x  prot=http,port=500xx,timeout=180,proctimeout=180)
    Can you confirm that one is higher then 60 seconds? (Just saw you saying something about 60 seconds before editing the posting)
    Best wishes
                  Sebastian
    Edited by: Sebastian Simon on Aug 26, 2010 1:24 AM

  • Using MDBs for long running transactions

    Although MDBs are not the best vehicles for running long transactions, I am
              forced to use them for one such scenario (let's say for lack of a better
              pattern). In order to let my long running MDB (with Container Managed Tx)
              do it's chores I increased the time-out value to a higher number rather than
              using the default of 30 secs. Strangely, I was seeing
              IllegalStateExceptions in stdout. So I created a brand new test MDB with a
              Thread.sleep for 60 seconds, increased my MDBs timeout value to 120 secs,
              made sure there was only one MDB in the pool and ran the test again. I
              still see the below error after 30 seconds.
              I guess I should probably open a support case, but I thought I'll post here
              as well in case there's something I am missing.
              <May 27, 2003 5:26:31 PM PDT> <Notice> <EJB> <Error marking transaction for
              rollback: java.lang.IllegalStateException: Cannot m
              ark the transaction for rollback. xid=64:bea55f200db2c786, status=Rolled
              back. [Reason=weblogic.transaction.internal.TimedOutEx
              ception: Transaction timed out after 34 seconds
              Xid=64:bea55f200db2c786(-33600248),Status=Active,numRepliesOwedMe=0,numRepli
              esOwedOthers=0,seconds since begin=34,seconds left=
              30,activeThread=Thread[ExecuteThread: '9' for queue: 'default',5,Thread
              Group for Queue: 'default'],ServerResourceInfo[JMS_hmJD
              BCStore]=(state=started,assigned=none),SCInfo[wlcsDomain+wlcsServer]=(state=
              active),OwnerTransactionManager=ServerTM[ServerCoor
              dinatorDescriptor=(CoordinatorURL=wlcsServer+155.14.3.140:7501+wlcsDomain+,
              Resources={})],CoordinatorURL=wlcsServer+155.14.3.1
              40:7501+wlcsDomain+)]
              java.lang.IllegalStateException: Cannot mark the transaction for rollback.
              xid=64:bea55f200db2c786, status=Rolled back. [Reason
              =weblogic.transaction.internal.TimedOutException: Transaction timed out
              after 34 seconds
              Xid=64:bea55f200db2c786(-33600248),Status=Active,numRepliesOwedMe=0,numRepli
              esOwedOthers=0,seconds since begin=34,seconds left=
              30,activeThread=Thread[ExecuteThread: '9' for queue: 'default',5,Thread
              Group for Queue: 'default'],ServerResourceInfo[JMS_hmJD
              BCStore]=(state=started,assigned=none),SCInfo[wlcsDomain+wlcsServer]=(state=
              active),OwnerTransactionManager=ServerTM[ServerCoor
              dinatorDescriptor=(CoordinatorURL=wlcsServer+155.14.3.140:7501+wlcsDomain+,
              Resources={})],CoordinatorURL=wlcsServer+155.14.3.1
              40:7501+wlcsDomain+)]
              at
              weblogic.transaction.internal.TransactionImpl.throwIllegalStateException(Tra
              nsactionImpl.java:1486)
              at
              weblogic.transaction.internal.TransactionImpl.setRollbackOnly(TransactionImp
              l.java:466)
              at
              weblogic.ejb20.manager.BaseEJBManager.handleSystemException(BaseEJBManager.j
              ava:255)
              at
              weblogic.ejb20.manager.BaseEJBManager.setupTxListener(BaseEJBManager.java:21
              5)
              at
              weblogic.ejb20.manager.StatelessManager.preInvoke(StatelessManager.java:153)
              at
              weblogic.ejb20.internal.BaseEJBObject.preInvoke(BaseEJBObject.java:117)
              at
              weblogic.ejb20.internal.StatelessEJBObject.preInvoke(StatelessEJBObject.java
              :63)
              at
              com.xoriant.hm.ejb.session.HierarchyManagerBean_fzysig_EOImpl.getHierarchyId
              (HierarchyManagerBean_fzysig_EOImpl.java
              :1477)
              at
              com.ebiz.application.customerprofile.hm.CPXHMController.SynchronizeMHTH(Unkn
              own Source)
              at
              com.ebiz.application.customerprofile.hm.CPHMOrgGroupMsgBean.onMessage(Unknow
              n Source)
              at weblogic.ejb20.internal.MDListener.execute(MDListener.java:254)
              at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
              at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              

    Hi Adarsh,
              It may be that the transaction time-out setting in the descriptor
              is not taking effect. The tx is still timing out after
              the default 30 seconds, so the later attempt to call
              "setRollbackOnly" fails as the transaction has already
              rolled back The ignored descriptor setting is a known issue
              in some earlier SPs, but I'm not sure when and where it
              was fixed - so yes, contact customer support. The work-around
              is to set the default transaction time-out for the entire server to a
              higher value. (I'm not sure where to set this on the console,
              but the relevant JTA MBean field is "TimeoutSeconds".)
              Tom
              Adarsh Dattani wrote:
              > Although MDBs are not the best vehicles for running long transactions, I am
              > forced to use them for one such scenario (let's say for lack of a better
              > pattern). In order to let my long running MDB (with Container Managed Tx)
              > do it's chores I increased the time-out value to a higher number rather than
              > using the default of 30 secs. Strangely, I was seeing
              > IllegalStateExceptions in stdout. So I created a brand new test MDB with a
              > Thread.sleep for 60 seconds, increased my MDBs timeout value to 120 secs,
              > made sure there was only one MDB in the pool and ran the test again. I
              > still see the below error after 30 seconds.
              > I guess I should probably open a support case, but I thought I'll post here
              > as well in case there's something I am missing.
              >
              > <May 27, 2003 5:26:31 PM PDT> <Notice> <EJB> <Error marking transaction for
              > rollback: java.lang.IllegalStateException: Cannot m
              >
              > ark the transaction for rollback. xid=64:bea55f200db2c786, status=Rolled
              > back. [Reason=weblogic.transaction.internal.TimedOutEx
              >
              > ception: Transaction timed out after 34 seconds
              >
              > Xid=64:bea55f200db2c786(-33600248),Status=Active,numRepliesOwedMe=0,numRepli
              > esOwedOthers=0,seconds since begin=34,seconds left=
              >
              > 30,activeThread=Thread[ExecuteThread: '9' for queue: 'default',5,Thread
              > Group for Queue: 'default'],ServerResourceInfo[JMS_hmJD
              >
              > BCStore]=(state=started,assigned=none),SCInfo[wlcsDomain+wlcsServer]=(state=
              > active),OwnerTransactionManager=ServerTM[ServerCoor
              >
              > dinatorDescriptor=(CoordinatorURL=wlcsServer+155.14.3.140:7501+wlcsDomain+,
              > Resources={})],CoordinatorURL=wlcsServer+155.14.3.1
              >
              > 40:7501+wlcsDomain+)]
              >
              > java.lang.IllegalStateException: Cannot mark the transaction for rollback.
              > xid=64:bea55f200db2c786, status=Rolled back. [Reason
              >
              > =weblogic.transaction.internal.TimedOutException: Transaction timed out
              > after 34 seconds
              >
              > Xid=64:bea55f200db2c786(-33600248),Status=Active,numRepliesOwedMe=0,numRepli
              > esOwedOthers=0,seconds since begin=34,seconds left=
              >
              > 30,activeThread=Thread[ExecuteThread: '9' for queue: 'default',5,Thread
              > Group for Queue: 'default'],ServerResourceInfo[JMS_hmJD
              >
              > BCStore]=(state=started,assigned=none),SCInfo[wlcsDomain+wlcsServer]=(state=
              > active),OwnerTransactionManager=ServerTM[ServerCoor
              >
              > dinatorDescriptor=(CoordinatorURL=wlcsServer+155.14.3.140:7501+wlcsDomain+,
              > Resources={})],CoordinatorURL=wlcsServer+155.14.3.1
              >
              > 40:7501+wlcsDomain+)]
              >
              > at
              > weblogic.transaction.internal.TransactionImpl.throwIllegalStateException(Tra
              > nsactionImpl.java:1486)
              >
              > at
              > weblogic.transaction.internal.TransactionImpl.setRollbackOnly(TransactionImp
              > l.java:466)
              >
              > at
              > weblogic.ejb20.manager.BaseEJBManager.handleSystemException(BaseEJBManager.j
              > ava:255)
              >
              > at
              > weblogic.ejb20.manager.BaseEJBManager.setupTxListener(BaseEJBManager.java:21
              > 5)
              >
              > at
              > weblogic.ejb20.manager.StatelessManager.preInvoke(StatelessManager.java:153)
              >
              > at
              > weblogic.ejb20.internal.BaseEJBObject.preInvoke(BaseEJBObject.java:117)
              >
              > at
              > weblogic.ejb20.internal.StatelessEJBObject.preInvoke(StatelessEJBObject.java
              > :63)
              >
              > at
              > com.xoriant.hm.ejb.session.HierarchyManagerBean_fzysig_EOImpl.getHierarchyId
              > (HierarchyManagerBean_fzysig_EOImpl.java
              >
              > :1477)
              >
              > at
              > com.ebiz.application.customerprofile.hm.CPXHMController.SynchronizeMHTH(Unkn
              > own Source)
              >
              > at
              > com.ebiz.application.customerprofile.hm.CPHMOrgGroupMsgBean.onMessage(Unknow
              > n Source)
              >
              > at weblogic.ejb20.internal.MDListener.execute(MDListener.java:254)
              >
              > at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
              >
              > at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              >
              >
              >
              >
              

  • Long running servlet in a single node of a cluster

    Good evening,
    I am developing a J2EE application that consists of a number of web services that perform background processing of relatively long-running jobs.  Status of the jobs actually need to be reported back to the SAP ABAP system, which we do via JCo.  All communication back to ABAP occurs in a single long-running, JMS driven servlet.  This callback servlet uses both a timestamp (last time status was sent back) or a  count of status events to determine when to send data to the ABAP system.
    All of this works great in a single Java instance J2EE configuration.  However, when we introduce clustering into the configuration, we get one instance of the callback servlet per J2EE server process.  Is there an easy way to configure the servlet so that it only runs on a single J2EE server process in one instance?
    TIA,
    - Bill

    Hi Bill,
    Launching manually threads even from a web container is also not recommended as good J2EE practice.
    If each applications launches its own set of threads that may easily crash the server. Another drawback of such long running servlet is that you are blocking application thread from the server. One last point - it seems that you are storing the data in the servlet at some intermediate variables without any persistance. What will happen if the server crashes ? Can you afford to loose the data ?
    I am not implying that you launch threads from the MDB. I am just saying that you could define that single MDB and send messages directly to it. You do the job there inside the onMessage, no new thread. You will be guaranteed that no other call will be executed. You are guaranteed nothing will be lost in case server crashes, you will not use resources even if there is no traffic.
    Btw, please feel free to give me a phone call or write an email to further discuss the issue. You can take the details from your CSN I am currently processing
    Best Regards
    Peter

  • Long-running Batch eWay JCD - threading and stopping

    I have a requirement to poll for files on a remote server, every few seconds, almost continuously. Furthermore, without making a connections every polling interval. In other words, connect once and stay running, If a file is found, send a JMS message to another service that will process the file, but keep polling for more files. Thus, a long-running service. This will tie up the thread?
    Can I have an array of BatchFTP instances, and in each loop of the long-running process, check each connected instance for incoming files? Or can I only have one instance?
    If the domain is shutdown, will this service shutdown nicely, if it is still in its looping process? If not, I could check another 'command queue' for a shutdown command, but now I have to add code to the domain shutdown script to send that shutdown message to the command queue. Could I instead, somehow check the status of another service in the same project to see if it is shutdown, and therefore know to stop the loop and allow it to be shutdown? I saw an example of a JMX command to check the status of an object. Is that the best way to check the status of a jcd from inside another jcd?
    thanks, Pete

    Hi Chris and thank you,
    I also do not want to build and manage a long-running service, from a performance point of view. The owners of the target server want a file to be picked up as soon as it arrives (within 5 seconds), but they don't want FTP connections created and deleted every 5 seconds. They expect that we will make a connect() call, and then continually loop / poll using dirlist() method.
    When I look at this requirement I also think of re-using it as a generic service - as long as I have a long-running service, I might as well use it for any other long-running, open FTP connections to other servers/userids. So in the same jcd instance, I would connect to multiple FTP servers and execute a loop where I go through a list of FTP connections, and for each, I would go through a list of folders that should be polled (using dirlist method). So I only have one JCD running for a long time but it could have multiple FTP connections open. That is why I am thinking of using an array of BatchFTP objects.
    When your code shows a Scheduler eWay input, do you mean that the JCD will triggered by the first Scheduler message, but would then go into a loop, doing work, and performing a JMS.receive on that Scheduler queue for the 2dn, 3rd, .. nth Scheduler message? So because the jcd is still running, it still had all its objects and FTP connections (open), but its looping is controlled by the Scheduler message?
    I'm running 513u3. I am worried about shutdown. I think it might not listen to a shutdown command. So that is why I was thinking about putting in some code at the bottom of the loop that would check, somehow, if a shutdown is in progress.
    Peter

Maybe you are looking for

  • Welcome to the Technologies for Small and Medium Businesses Discussion

    Welcome to the Cisco Networking Professionals Connection Small and Medium Business Forum. This conversation will provide you the opportunity to discuss Small and Medium Business technology issues. We encourage everyone to share their knowledge and st

  • Why do i have 2 of the same pictures on my computer

    When i import photos there always ends up being 2 of them... i always select don't add duplicates. But for instance when I put a picture in it goes under to categorires My name->Pictures->Iphoto Library->Masters->2008->Roll 92->Image name            

  • Late 2008 Macbook Pro shutting down at 94% while running on the battery

    So I called Apple about this issue last week, since I tried calibrating my battery to improve it's health. And when my battery life got down to 94% or lower... my laptop just shut down. For no reason. When I called Apple, the guy I talked to before s

  • SYNTAX Problem in User-Exit (Perform/Form)

    Hi, i use this User-Exit: FUNCTION EXIT_SAPLAD15_010. *"*"Lokale Schnittstelle: *"  IMPORTING *"     VALUE(I_DLISRC) LIKE  AD01DLIA-DLISRC *"     VALUE(I_KOKRS) LIKE  TKA01-KOKRS *"  TABLES *"      T_COVP STRUCTURE  COVP OPTIONAL *"      T_COSPA STRU

  • Can we peek into System V message queue?

    Hi, there. I have to processes A and B, talking through system v message queue. For debugging purposes, I wish to attach a third process C to that message queue and print out what info process A and B are exchanging. Is that possible? thanks