Show TOC Anfang des Inhaltsbereichs

Diese Grafik wird im zugehörigen Text erklärt tRFC-Aufruf  Dokument im Navigationsbaum lokalisieren

Wenn das ABAP statement

    CALL FUNCTION 'STFC_CONNECTION'

        DESTINATION RFCDEST

        IN BACKGROUND TASK

aufgerufen wird, findet eine tRFC-Verarbeitung statt. Dies bedeutet, dass die folgende Aufruf-Sequenz angestoßen wird: 

 

       1.             protected boolean onCheckTID(String tid)

Hinweis

An dieser Stelle muss die Anwendung benachrichtigt werden, dass der nächste Call mit dieser TID abgearbeitet werden soll. Die Anwendung muss den Wert true zurückgeben, um zu signalisieren, dass die Ausführung möglich ist.

       2.             ruft den Funktionsbaustein auf.

       3.             die protected void-Methode onCommit(String tid) oder onRollback(String

tid)hängt ab vom Ergebnis der Funktions-Verteilung. Falls handleRequest keine Ausnahmen ausgegeben hat, wird onCommitaufgerufen.

       4.             protected void-Methode onConfirmTID(String tid).

Hinweis

An dieser Stelle wird die Anwendung benachrichtigt, dass die Ausführung von dem Call mit der gegeben TID beendet wird. Dieser Call kann unter Umständen in einem anderen Listener ankommen, bzw. kommt möglicherweise im Falle von Problemen nicht im ABAP Backend-System an.

 

Syntax tRFC-Aufruf

 

 

static class MyTIDHandler implements JCoServerTIDHandler

    {

       

        Map<String, TIDState> availableTIDs = new Hashtable<String, TIDState>();

       

        public boolean checkTID(JCoServerContext serverCtx, String tid)

        {

            System.out.println("TID Handler: checkTID for " + tid);

            if(availableTIDs.containsKey(tid))

                return false;

 

            //notify other instances about the starting of an tRFC call, if necessary

            availableTIDs.put(tid, TIDState.STARTED);

            return true;

        }

 

        public void commit(JCoServerContext serverCtx, String tid)

        {

            System.out.println("TID Handler: commit for " + tid);

 

            //react on commit e.g. commit on the database

            //if necessary throw a RuntimeException if the commit was not possible

            availableTIDs.put(tid, TIDState.FINISHED);

        }

 

        public void rollback(JCoServerContext serverCtx, String tid)

        {

            System.out.println("TID Handler: rollback for " + tid);

 

            //react on rollback e.g. rollback on the database

            availableTIDs.put(tid, TIDState.FINISHED);

        }

 

        public void confirmTID(JCoServerContext serverCtx, String tid)

        {

            System.out.println("TID Handler: confirmTID for " + tid);

 

            try

            {

                //clean up the resources

            }

            //catch(Throwable t) {} //partner wont react on an exception at this point

            finally

            {

                availableTIDs.remove(tid);

            }

        }

       

        private enum TIDState

        {

            STARTED, FINISHED;

        }

    }

   

   

    static void step3SimpleTRfcServer()

    {

        JCoServer server;

        try

        {

            server = JCoServerFactory.getServer(SERVER_NAME1);

        }

        catch(JCoException ex)

        {

            throw new RuntimeException("Unable to create the server " + SERVER_NAME1 + ", because of " + ex.getMessage(), ex);

        }

       

        JCoServerFunctionHandler stfcConnectionHandler = new StfcConnectionHandler();

        DefaultServerHandlerFactory.FunctionHandlerFactory factory = new DefaultServerHandlerFactory.FunctionHandlerFactory();

        factory.registerHandler("STFC_CONNECTION", stfcConnectionHandler);

        server.setCallHandlerFactory(factory);

       

        //additionally to step 1

        MyTIDHandler myTIDHandler = new MyTIDHandler();

        server.setTIDHandler(myTIDHandler);

 

        server.start();

        System.out.println("The program can be stopped using <ctrl>+<c>");

    }

   

   

   

 

    public static void main(String[] a)

    {

        step1SimpleServer();

        //step2SimpleServer();

        //step3SimpleTRfcServer();

    }

}

 

 

Ende des Inhaltsbereichs