How to speed up JCO function call

Hello,
i have some function module in r/3 which returns a huge amount of data. When i am testing this fm in r/3 this function takes few seconds for executing. But when i run this function with jco from java it takes about ten times more :(.
Is there - eg in jco - some possibilities of speeding up connection - or another technologies i can use? (i would like to try make xml in abap and pack it..is it good idea or the result will be only my waste time?)
thanks for each answer...
JJ

Hi,
I can't see how you can significantly increase the jco speed, but you can using caching if possible(particularly at the java side) and your other suggestion make sense. I expect you don't present all that data you are fetching, so perhaps you should move the heaviest business logic to the ABAP side and only transfer the results ?
Dagfinn

Similar Messages

  • Multiple session open in SAP on JCO function call with setSAPGUI(2)

    Dear all
    I have a standalone java program, which is internally calling an SAP function using JCO 2.0.
    This SAP function is internally calling a tCode using ABAP4_CALL_TRANSACTION.
    I have set SAPGUI to 2.
                mConnection =
                        JCO.createClient("XXX", "user", "password", "lang", "host", "num", "", "");
                System.out.println("SAPGUI set to 2");
                mConnection.setSapGui(2);
                mConnection.setProperty("jco.destination.name", "SAPGUI");
                mConnection.connect();
    SAP GUI is launched with the desired tCode on execution of this java program.
    But the issue is there are three sessions on SAP, when checked from SM04.
    550     USERNAME     HOSTNAME          13.09.00     1     RFC     0
    550     USERNAME     HOSTNAME     TCODE     13.09.00     1     RFC     4
    550     USERNAME     HOSTNAME          13.09.00     1     GUI     0
    The sessions are active even after JCO connection is disconnected and java program terminates.
    Can anybody help in this.
    Thanks a lot
    Regards
    Ruhi Hira

    Hi Peter,
    Thanks for the prompt response.
    I would surely check with the ABAPer's on your observation. However there is one more observation that is worrying me.
    If I use the given code with just one record in JCO.Table, the first push to SAP works with data getting inserted into the SAP table. However subsequent to this no records get inserted into SAP even though i populate JCO.Table with just one record.
    Also just a small correction to what I had stated earlier - If I use the code with multiple records in JCO.Table no records got inserted into SAP.
    Thanks
    Mohid

  • How to make a dynamic function call from within a package procedure

    Hi:
    I need to call a function dynamically (name and parameters determined at run time, but return value is known:always an integer). I can build the call and place it in a dynamic sql using dbms_sql. But the function is inside a package and is not public.
    So, if I issue:
    dbms_sql.parse( cur,'SELECT '||call||' FROM dual', dbms_sql.v7 )
    where call is "DOS(234,'V')"
    I get:
    ORA-00904: "DOS": invalid identifier
    If I make the function ("DOS") public and "call" equals "pack.DOS(234,'V')", it works fine, but I don't want to make it public.
    Is there a solution?
    Thanks in advance
    RuBeck

    Hi, Kamal:
    Calling from outside of the owner package is not possible if it is not public.The calls are from inside the package. It looks like the dynamic select is executed "outside" the package, so the private function is unknown
    Make it available in the package headerLooks like it's the only solution
    How often this will be executed?This is a library for loading files into tables and executing dynamic validation procedures.
    Here's an example of the mechanics:
    create or replace package mypack as
         function one return number ; -- public function
         procedure execute_it( p_name VARCHAR2 ) ;
    end ;
    create or replace package body mypack as
    function one return number is
    begin
    return 1 ;
    end ;
    function two( i number, s varchar2 ) return number is -- private function
    begin
    return 2 ;
    end ;
    procedure execute_it( p_name VARCHAR2 ) is
    select_str VARCHAR2( 1000 ) ;
    v_num NUMBER ;
    cur NUMBER ;
    nf NUMBER ;
    begin
    select_str := 'SELECT '||p_name||' FROM dual' ;
    cur := dbms_sql.open_cursor ;
    dbms_sql.parse( cur,select_str,dbms_sql.v7 ) ;
    dbms_sql.define_column( cur,1, v_num ) ;
    nf := dbms_sql.execute( cur ) ;
    IF dbms_sql.fetch_rows( cur ) = 0 THEN
    RAISE no_data_found ;
    END IF ;
    dbms_sql.column_value( cur, 1, v_numero ) ;
    dbms_output.put_line( p_name||' returns '||v_num ) ;
    dbms_sql.close_cursor( cur ) ;
    end ;
    end ;
    begin
    mypack.execute_it( 'mypack.one' ) ; -- Call public function: Works fine
    mypack.execute_it( 'two(234,''v'')' ) ; -- Call private function: error 0904
    end ;
    Thanks for your hints
    RuBeck
    PS: The indentation is lost when I post the message! I wrote it indented!

  • How do I pass MySQL function calls in PreparedStatements?

    I want to pass the NOW() function in a PreparedStatement. I am currently using setString(1, "NOW()") but the statement isn't working. I don't know if this is cause but I figured it to be the most likely suspect.
    Thanks.

    jhm wrote:
    I want to pass the NOW() function in a PreparedStatement. I am currently using setString(1, "NOW()") but the statement isn't working. Why are you representing a Date as a String? Wrong.
    I don't know if this is cause but I figured it to be the most likely suspect.Nope, bad design.
    %

  • Cancelling a ksoap function call

    Hi Friends,
    Does anybody know how to cancel a ksoap function call?
    Thanks.
    Sudheer Palaparambil

    it can't be cancelled once it has been placed,
    but you can nullify its effect logically..

  • How to call a C function calling a Java Method from another C function ?

    Hi everyone,
    I'm just starting to learn JNI and my problem is that I don't know if it is possible to call a C function calling a Java Method (or doing anything else with JNI) from another C function.
    In fact, after receiving datas in a socket made by a C function, I would like to create a class instance (and I don't know how to do it too ; ) ) and init this instance with the strings I received in the socket.
    Is all that possible ?
    Thank you very much for your help !

    Hard to understand the question, but by most interpretations the answer is going to be yes.
    You do of course understand that JNI is the "API" that sits between Java and C and that every call between the two must go through that. You can't call it directly.

  • How can I ensure a function is called only once in a query?

    I have a function (in a package) that returns the start date and end date to be used by my query. The query was taking bind variables but when I updated it to use the function calls it slowed down a lot.
    I tried creating an inline view that selects the start and end date and joins with the other table but this does not help. I thought the inline view would only be run once but this is not the case. I have my function print out a value from a sequence and i see that it is called thousands of times.
    Why would the procedure call be so much slower?
    How can I ensure that the function is only called once in the query?
    This is what I currently have:
    SELECT col1, col2
    FROM aTable,
    (SELECT proc.getStartdate startDate,
    proc.getEndDate endDate
    FROM dual) dt
    WHERE aTable.theDate >= dt.startDate
    AND aTable.theDate <= dt.endDate
    Thanks

    They get the begining and ending dates to be used by the query.
    My application uses the Oracle Portal. Each user can select their date range and it is stored as a user preference. The portal API provides funcitons for retrieving the preferences and I have encapsulated it in my procedure so the developers do not need knowledge of the portal. If they just restrict their queries to the dates returned by this function they will get the needed data.
    Our work around as been to pass these date variables around as bind variables.

  • HT203175 I have no problem signing on to iTunes my issue is once on the site I can not use the "search". It says there is a runtime error R6025 pure virtual function call. Has anyone had this problem and how do I fix it. Thanks

    I do not have a problem getting in the iTunes stores. My issue is once on the site I can not use the "search". It says there is a pure virtual function call R6025. How can I solve this problem? Do I have to create a new account? Do I have to uninstall and re-install? Thanks

    Thanks so much for your feedback. I really appreciate any input here.
    If someone from Adobe could GUARANTEE that this problem would go away if I
    purchased CS4, I would pony up the cash and do it. However, I'm skeptical
    about that because I just saw someone else post a message on the forum today
    who is running CS4 and getting the exact same runtime error as me.
    I'll try un-installing and re-installing as Admin, and if that doesn't work,
    maybe I can find a used copy of CS3.
    In the meantime, I'm also wondering if a Photoshop file can carry any sort
    of corrupt metadata inside it once it has errored out? Reason I ask is, I
    had to port all of my old PSD files to the new computer, and I only seem to
    be getting this error when I attempt to work on one of the files that
    previously got the runtime error when they were sitting on my XP machine.
    When I create new files from scratch on this new computer, they seem to be
    working just fine (at least, for now).
    If so, I would probably be smart to never open those troublesome
    "errored-out" files again.

  • How to auto-recognize the function parameters called from a DLL built by VC6.0

    Hi,
    I use Teststand 3.5 with C/C++ Adapter, and the DLL is built by VC6.0.
    While I specify module for an action, the parameters of a function called from the DLL are not recognized.
    Since I have the DLL source, I know I can select the source file and verify prototype in the "Source Code" Tab.
    Under the way, almost parameters can be recognized, but some parameters, e.g. HANDLE or I definded, can not ( shows error message "The function definition cannot be found in the source file...").
    How to recognise these parameters?
    Thanks.

    The problem isn't that TestStand doesn't have enough native types. A handle can be represented in a TestStand numeric variable just fine. Instead, the issue is that when you select Verify Prototype, TestStand doesn't fully pre process your headers and compile your code to determine the types. To do so would require TestStand not only to be a full C/C++ compiler but it would also have to be able to read your compiler's projects and settings to resolve include paths, macros, etc.
    Since TestStand is not a C/C++ compiler, it just looks for the standard basic data types plus a few more that are common in test code.  Other data types will not be automatically recognized even if they can be mapped to TestStand types.
    Another option it to create a type library for your dll so that TestStand can automatically read the data type information from it. However, I don't know if that works for struct parameters and I looked for the document on devzone that explains how to do that in VC++ and it has been moved or deleted
    Maybe an AE would know of a link to a current document that describes how to do this?

  • How to create SSWA plsql function in Oracle Apps of HTML call .html

    Hello Team,
    I am working on Oracle Apps 11i (11.5.10.2)
    I want to know , what is the process to create a , "SSWA plsql function" in Oracle Apps of type "HTML" and html call tab.
    How to create that Function and how to attach the PL/SQL code to these functions.
    How it works.
    Please help me to understand this concept from basics.
    Kind Regards

    Hi;
    Please review:
    how to setup a forms function in R12 to launch an URL?
    http://www.trutek.com/serendipity/index.php?/archives/15-An-Example-of-How-to-Create-Custom-Functions,-Menus,-and-Responsibilities.html
    Regard
    Helios

  • How to get transaction id of a function called in background

    Hi all,
    does someone know how to retrieve t-id of a function called in background (tRFC) client side? I found
    'ARFC_GET_RECEIVER_TID'
    'ARFC_GET_TID'
    but these works server side (function called knows its t-id .. caller no). Is there some similiar client side so that after calling function I can retrieve its transaction id ? I know it's not the same context, for explaining better, what I need it's something like fork() in C, where process father (the one that forks) receive as return value process id of process forked.
    SEARCHING ON FORUM I see that many people answered on question about transaction id with sy-tcode misunderstanding the question. This transaction id it's not the tcode. This is the char 32 unique transaction code
    thank you
    regards
    Gabriele

    You can have a look at function TRFC_RECEIVER_INFO
    [qRFC API for the Inbound Queue|http://help.sap.com/saphelp_nw04/helpdata/en/21/5c5f3ca0dd9770e10000000a114084/content.htm]

  • Steps to create JCO to call R3 Function module in ISA CRM b2b webshop

    Hi experts,
    Can u help me in creating a JCo connection to R3 from CRM isa b2b webshop.
    See i am working on CRM 5.0 isa . I have a default jco connection calling to CRM.
    But i wanted an another JCO to call FM of R3.
    Can u pls give me the steps in creating this jco (XCM, Xml, changes etc )?
    Hope you have understood my question.
    Pls reply,
    thanks in advance,
    Niraja.

    Hi Niraja,
    The second option would be easy to do, as the connection is already made you can just use the connection pool.
    I feel maintaining/creating two connections would lead to performance issues.
    So its better to go with FM in CRM to FM in R/3
    If you want to go for a different connection or connection pool then follow this example
    In the world of database connectivity, creating individual connections to a database system is technically expensive and often incurs unwanted overhead in both client and server-side applications. Connection pools allow your application to check connections out from a pool and release a connection once the transaction has completed. This tip briefly explores the value and implementation of using connection pools in JCo.
    The following code presents two classes that demonstrate the use of a connection pool and its restrictions. You should be able to pull code from this example when adding pooling to your own Java/JCo application.
    The first JCo application does not use pooling:
    import com.sap.mw.jco.*;
    public class JcoTest {
    private static JCO.Client theConnection;
    private static IRepository theRepository;
    public static void main(String[] args) {
      createConnection();
      retrieveRepository();
      try {
      JCO.Function function = getFunction("RFC_READ_TABLE");
      JCO.ParameterList listParams = function.getImportParameterList();
      listParams.setValue("BSAUTHORS", "QUERY_TABLE");
      theConnection.execute(function);
      JCO.Table tableList = function.getTableParameterList().getTable("DATA");
      if (tableList.getNumRows() > 0) {
       do {
        for (JCO.FieldIterator fI = tableList.fields();
          fI.hasMoreElements();)
          JCO.Field tabField = fI.nextField();
          System.out.println(tabField.getName()
               + ":t" +
               tabField.getString());
         System.out.println("n");
       while (tableList.nextRow() == true);
      catch (Exception ex) {
       ex.printStackTrace();
    private static void createConnection() {
      try {
       theConnection = JCO.createClient("000", "DDIC", "minisap", "en", "sincgo", "00");
       theConnection.connect();
      catch (Exception ex) {
       System.out.println("Failed to connect to SAP system");
    private static void retrieveRepository() {
      try {
       theRepository = new JCO.Repository("saprep", theConnection);
      catch (Exception ex)
       System.out.println("failed to retrieve repository");
      public static JCO.Function getFunction(String name) {
        try {
             return theRepository.getFunctionTemplate(name.toUpperCase()).getFunction();
        catch (Exception ex) {
         ex.printStackTrace();
          return null;
    To add connection pooling you simply add this code to the beginning of the main method:
        if (connPool == null) {
          JCO.addClientPool(POOL_NAME,
                            5,
                            "000",
                            "bcuser",
                            "minisap",
                            "EN",
                            "sincgo",
                            "00");
    And replace the call to the createConnection() method with this:
             theConnection = JCO.getClient(POOL_NAME);
    The code should now look like this:
    import com.sap.mw.jco.*;
    public class JcoTest {
    private static JCO.Client theConnection;
    private static IRepository theRepository;
        private static final String POOL_NAME = "myPool";
    public static void main(String[] args) {
        JCO.Pool connPool = JCO.getClientPoolManager().getPool(POOL_NAME);
        if (connPool == null) {
          JCO.addClientPool(POOL_NAME,
                            5,      //number of connections in the pool
                            "client",
                            "username",
                            "paswword",
                            "EN",
                            "hostname",
                            "00");
            theConnection = JCO.getClient(POOL_NAME);
      retrieveRepository();
      try {
      JCO.Function function = getFunction("RFC_READ_TABLE");
      JCO.ParameterList listParams = function.getImportParameterList();
      listParams.setValue("BSAUTHORS", "QUERY_TABLE");
      theConnection.execute(function);
      JCO.Table tableList = function.getTableParameterList().getTable("DATA");
      if (tableList.getNumRows() > 0) {
       do {
        for (JCO.FieldIterator fI = tableList.fields();
          fI.hasMoreElements();)
          JCO.Field tabField = fI.nextField();
          System.out.println(tabField.getName()
               + ":t" +
               tabField.getString());
         System.out.println("n");
       while (tableList.nextRow() == true);
      catch (Exception ex) {
       ex.printStackTrace();
      JCO.releaseClient(theConnection);
    private static void retrieveRepository() {
      try {
       theRepository = new JCO.Repository("saprep", theConnection);
      catch (Exception ex)
       System.out.println("failed to retrieve repository");
      public static JCO.Function getFunction(String name) {
        try {
             return theRepository.getFunctionTemplate(name.toUpperCase()).getFunction();
        catch (Exception ex) {
         ex.printStackTrace();
          return null;
    Now, when this class executes, it will create a pool of 5 SAP connections. Once created, a single connection is retrieved and executed against. After the call to SAP has finished, the connections are released with:
    JCO.releaseClient(theConnection);
    You can easily integrate this code in any application that acts as a server or requires multiple users to access SAP via the Web.
    Regards,
    Sateesh Chandra

  • How can I create a function using TestStand variables and call it from a step's Pre-Expression?

    In one sequence I have dozens of Pre-Expressions which are almost the same thing, like this...
    Locals.tagID = (Parameters.singlePhaseEnabled ? "L" : "D") & Str(Locals.phase) & "006"
    ...and the only thing different is that three digit string at the end ("006" will vary). How can I write a function that I can call from a step's Pre-Expression so it would look something like this? ...
    Locals.tagID = MyNewFunction("006")

    You cannot write custom commands for expressions.
    That being said, there are a couple of options:
    Create a subsequence with a single step. Use a parameter of the sequence as "function parameter".
    Create a custom step type including a substep module which implements the function. Add an edit substep to enable the user of the steptype to gracefully change the parameter.
    Store the variable parameter in a local/file global variable and modify the value in each step. This will, at least, keep the "function" the same for every step.
    Norbert

  • How to Developed user defined functions to call function modules in SAP R/3

    •     how to Develope user defined functions to call function modules in SAP R/3 system

    Hello Raja,
    Go through this V.imp Link...
    http://download.oracle.com/docs/cd/B10464_05/integrate.904/b10408/rfc.htm
    Steps to crate FM..
    Follow these steps..
    Go to the T: code SE37
    First You Create Function Group
    On That u specify
    Function Group Name..............
    Short Text..............................
    save...
    Go to SE 37
    Specify the Function Module Name: Eg: Z_Bapi_Materialmaster
    Short Text.......
    Save...
    Next Go to Attributes..
    Select Radio button : Remote enabled model
    Go to Parameters..
    Click Import...
    Give Parameter Type Associate type S.t
    next Click Export...
    Give Parameter Type Associate type S.t
    Next Click Tables Button..
    Specify tables..
    Next click source code button..
    Write Source code here..
    Eg : Select statements Etc..
    Finally we should be select the Radio button Enable remorely
    https://www.sdn.sap.com/irj/sdn/wiki?path=/pages/viewpage.action?pageId=39728
    https://www.sdn.sap.com/irj/sdn/wiki?path=/display/abap/bapi%2bstep%2bby%2bstep
    Re: User Defined Functions Tutorials
    Hope this information is useful to you..
    Thanks ,
    Satya Kumar..

  • How 2 Develope user defined functions to call function modules in R/3 syst

    How to Develope user defined functions to call function modules in SAP R/3 system....in xi

    HIi,
    If those function modules are RFC enabled then we can call those function module from user defined functions. Please see below link
    /people/alessandro.guarneri/blog/2006/03/27/sap-xi-lookup-api-the-killer
    Reward points if helpful.
    Thanks,
    Vijay Kumar T,

Maybe you are looking for

  • Migration From 10.1.2 to 10.1.3.1.26 (licensed version) - ERROR loading tem

    Made it through the upgrade to step 11 in the release notes instructions. The step is as follows: ====== Run the JHeadstart Application Generator. If you have a group with a shuttle layout in your application definition, you will get an error. See th

  • Wireless roaming in different networks

    Hello, In Wireless networks if we have two different networks with the same SSID when we pass from one network to another network, the client will change the ip network automatically or we need to disconnect and connect again to request another ip? I

  • Why Grid window type in sapscript

    hi,       I  am not getting the use and importance of Grid window type which is in the sapscript when we create new elements in the windows. other types are main,variable,constant and the last one is Grid. when this window type is used and why? pls r

  • Find out where my log4j is configured from

    now that i got my xml config working, it seems that every logging statement is generating 2 log messages on the stdout. one of them comes from my xml config and the other??! how do i find out why/where the evil log statements are configured?

  • Error message help: webauthRedirect Parse Error

    I'm seeing these messages show up in the Message Log over and over. I can't find much info on them. *webauthRedirect: Mar 05 13:30:53.756: %EMWEB-3-PARSE_ERROR: webauth_redirect.c:954 parse error after reading. bytes parsed = 0 and bytes read = 128 *