Jolt transaction towards Tuxedo services - XA required ?

Dear Friends (Especially Todd Little),
Sorry, but the Jolt and Tuxedo documentation is really weak (to say the least) in regard of Transaction management from Jolt.
I would like to ask for your kind help with answering the most simple question in the world:
I have two Tuxedo services each doing some updates on a DB. Both work against the same DB (single DB resource, no multiple DBs) and run inside the same Tuxedo instance in production.
I would like both services to do their updates in a transactional manner when called from Jolt (with transacted SessionPool).
Do I need these two services to run with XA resource for that, or not ?
My natural expectation (from JEE world experience) is that both services would be assigned (by the container, in our case Tuxedo) with the same DB Connection to perform their updates, so in case the Connection is rolled back (due to failure in one service), all update (from all previous services) are rolled back.
And, I would have expect Tuxedo to manage that, so all services called from the same transactional Jolt Session would share the same DB Connection (Just as is done with Weblogic or any other JEE server when a non XA transaction is running).
I would not expect a need to configure (and worst, to consume in production) a XA resource for that (simple) business implementation.
Its like buying the whole cow for a glass of milk ...
Could you please elaborate on that ?
Regards.

Hi,
When a Jolt client calls startTransaction, a Tuxedo transaction is started on the behalf of the client by the JSH. Since this transaction is not part of the client's transaction environment (JTA, etc.) we call it a delegated transaction as the transaction work is done by the JSH, yet still controlled by the Jolt client. This is fully supported and the expected behavior of both Jolt clients as well as Workstation clients. Again, the key point about delegated transactions is they are not part of any transaction the client may be participating in outside the Tuxedo environment. So a Jolt client that is running in the context of a JTA transaction calling startTransaction will be involved in two separate and distinct transactions, the JTA transaction and the Tuxedo transaction. Thus the transaction outcomes can be different, i.e., the Tuxedo transaction could commit while the JTA transaction rollsback. If you need distributed transaction support between the clients transaction manager and Tuxedo's transaction manager you will need to use WTC which supports this type of distributed transaction.
Regards,
Todd Little
Oracle Tuxedo Chief Architect

Similar Messages

  • Tuxedo Service can not find a Jolt Client AFter timeout occured

    We are using Java Servlet/Jolt client to access out backend
    Tuxedo services.
    Whenever a Tuxedo service timedout, like
    "***tpcall failed |TPETIME - timeout occured|",
    The Jolt client and Tuxedo services will be out of sync,
    and Tuxedo Server will show following error message:
    "JOLT_CAT:1518: "ERROR: Call handle and clientid have no matching requests".
    Whenever this happends, we must reboot out Jolt client connection. Otherwise we
    will keep geting above problem.
    Our Jolt timeout time is 2 minutes. And Tuxedo block time is
    1 min 30 sec. (We setip in our UBB config as
    BLOCKTIME 9 #9*10s (def SCANUNIT)=90s or 1 min and 30s.).
    It seems like Tuxedo service will be timeouted before Jolt timedout.
    Could someone give us some suggestion about the above problem?
    Thanks in advance!

    Which version of Jolt are you using? This problem seems to have been fixed in
    latest rolling patch for Jolt1.2. Contact BEA support for it.
    -Deepak
    Yux71 wrote:
    We are using Java Servlet/Jolt client to access out backend
    Tuxedo services.
    Whenever a Tuxedo service timedout, like
    "***tpcall failed |TPETIME - timeout occured|",
    The Jolt client and Tuxedo services will be out of sync,
    and Tuxedo Server will show following error message:
    "JOLT_CAT:1518: "ERROR: Call handle and clientid have no matching requests".
    Whenever this happends, we must reboot out Jolt client connection. Otherwise we
    will keep geting above problem.
    Our Jolt timeout time is 2 minutes. And Tuxedo block time is
    1 min 30 sec. (We setip in our UBB config as
    BLOCKTIME 9 #9*10s (def SCANUNIT)=90s or 1 min and 30s.).
    It seems like Tuxedo service will be timeouted before Jolt timedout.
    Could someone give us some suggestion about the above problem?
    Thanks in advance!

  • Calling Tuxedo Service using BEA Jolt.

    I'm trying to call Tuxedo service from java stored procedure using BEA JOLT.My normal java client works fine but when i use the same client as java stored procedure i get following error message :
    can not connect to any //lucy:9021(host:port)
    Reason:Nwhdlr:can not open socket
    I've successfully loaded all required JOLT jar files using loadjava and created the procedure successfully .Java code is given below :
    import bea.jolt.*;
    import java.sql.*;
    public class JoltToTux
         public static void callTuxService() throws Exception
              JoltSession session;
              JoltSessionAttributes sattr;
              JoltRemoteService toupper;
              JoltTransaction trans;
              String userName=null;
              String userPassword=null;
              String appPassword=null;
              String userRole=null;
              String outstr;
              try {
              sattr = new JoltSessionAttributes();
              sattr.setString(sattr.APPADDRESS, "//lucy:9021");
              sattr.setInt(sattr.IDLETIMEOUT, 300);
              session = new JoltSession(sattr, userName, userRole,userPassword, appPassword);
                        toupper = new JoltRemoteService ("CB_EXESUB", session);
              toupper.setString("CLFY_SUB", "PingSrvr");
              toupper.call(null);
              System.out.println( "Call to Tuxedo complete" );
              outstr = toupper.getStringDef("WF_MESSAGE","" );
              System.out.println("return string : " + outstr);
                        session.endSession();
              System.exit(0);
              } //end of try
              catch (Exception e) {
                   // System.err.println(e.getMessage());}
                   e.printStackTrace();
         } // end main
         public static void main( String args[] ) {
              try {
                   JoltToTux jt = new JoltToTux();
                   jt.callTuxService();
              catch ( Exception e0 ) {
                   e0.printStackTrace();
    } // end ToUpper
    thanks
    anurag

    Ams,
    You can't do that with JOLT. You will need to use the WTC product,
    currently in beta - see WTC Questions and Answers
    Regards,
    Peter.
    Got a Question? Ask BEA at http://askbea.bea.com
    The views expressed in this posting are solely those of the author, and
    BEA
    Systems, Inc. does not endorse any of these views.
    BEA Systems, Inc. is not responsible for the accuracy or completeness of
    the
    information provided
    and assumes no duty to correct, expand upon, delete or update any of the
    information contained in this posting.
    Ams wrote:
    Hi Manoj,
    I want to call a tuxedo service and also want to update
    database (using entity beabs) in same transaction so I
    can't use AUTOTRAN , Am I right ?
    I am using bea.jolt.pool.SessionPool's startTransaction
    method to start a transaction and passing this
    to SessionPool's call method.
    Ams.
    "Manoj SASIDHARAN" <[email protected]> wrote:
    Hello Ams,
    Could u plz give more information abt the usage scenario. Another way
    to test
    would be to put AUTOTRAN=Y for the service in question.
    HTH
    regards
    MS
    "Ams" <[email protected]> wrote:
    Hi,
    I am calling Tuxedo service from ejb using jolt.
    I want the service call in transaction started in ejb.
    I am getting following error.
    LIBTUX_CAT:481: ERROR: Service xa_start returned -7
    Does jolt support transaction ?
    Ams
    [att1.html]

  • Jolt 1.2/Tuxedo 6.5

    I'm working on Tuxedo 6.5/Jolt 1.2 in a Websphere 3.02 environment.
    1. Problem with Transaction and Session pools
    Our application retreives information from an Informix database through servlets. We've built a SessionPool in order to access our Tuxedo services, but without any transactional state. In fact, as we do not update the database, we didn't use transactions.
    Our question is when is the user connection free and available for an other user, since the Reference Documentation API says a connection is free when the transaction commit's or rollbacks. As we don't use any transaction, we don't know when (and how) a connection is available for reuse. Must we wait the Tuxedo timeout? ....
    And is there an easy way to free a connection (force a connection to be once again available)?
    2. Jolt 1.2 release
    We're working with the Jolt 1.2 release, as I already said. The reference API documentation says a class named ServiceInfo in bea.jolt.pool will retreive information on Tuxedo services (parameters, ...). Unfortunately, our jar file (joltjse.jar, 33Kb) doesn't have it. I'd like to use it to built my DataSets' automatically from an Array or a Vector.
    Is it because our Jolt version is too old and because the 1.2 does not provide this class? Is it part of the 1.2.x release?
    In this case, how can I get the right jar without having to install (and/or upgrade to) a new version of Jolt?
    Thank you for your answers
    TR.

    Dear,
    Could you please send Jolt 1.2<For AIX4.3> to me ?
    Or tell me where I can find it.
    Thanks anywhere.
    Fogg wg

  • Debugging a tuxedo service using dbx

    Hi,
    Is is possible to debug a tuxedo service using dbx by enabing the tmboot switches
    and -g option of the compiler. I am able to step into tpsvrinit during initialisation,
    but not able to do when a client calls a service. I could not step into the service
    by setting breakpoints. Please help.
    rgds,
    Dominic

    The only thing to be aware of is that while you play around in the debugger, Tuxedo
    is timing out your transaction.
    So, if you want things to keep working while you debug, setup some nice long timouts.
    ...Lyall
    "RC Bryan" <[email protected]> wrote:
    >
    I have not done this on Solaris in a while but basically, what you have
    to do is
    to build the process with -g and start it with tmboot as you would normally.
    After the process is running, you can attach by typing:
    dbx name pid
    where the name is the name of the executable and pid is the process id
    of the
    server process (obtained either with ps -ef | grep name or with verbose
    mode psr
    in tmadmin). This will break into the running process. You can then
    set your
    break points in the service routines as required. When the service is
    entered,
    control will return to your debugger session and you can debug as you
    normally
    would.
    Incidentally, I find the buildserver -k (keep) option to be useful when
    debugging
    servers. This allows you to debug through the startup code that is normally
    deleted
    as a part of the buildserver process.
    Regards,
    /RC Bryan
    "Dominic" <[email protected]> wrote:
    Hi,
    Is is possible to debug a tuxedo service using dbx by enabing the tmboot
    switches
    and -g option of the compiler. I am able to step into tpsvrinit during
    initialisation,
    but not able to do when a client calls a service. I could not step into
    the service
    by setting breakpoints. Please help.
    rgds,
    Dominic

  • Using jolt transaction after JoltException

    hi,
    i need help about the transaction handling between WebLogic and Jolt.
    code is as follow:
    ServletSessionPool startTransaction
    tuxedo call: a
    try{  
    tuxedo call:b
    }catch(JoltException){
    other tuxedo call: c
    endTransaction
    the problem occurred when the b tuxedo call failed.
    if JoltException has caught by "catch phrase",
    it should call c tuxedo call and a tuxedo call should
    be in transaction still.
    but weblogic throws Transaction Exception trying to call
    c tuxedo call.
    WebLogic seems to regard a transaction invalid after JoltException within a transacion..
    isn't there any way to keep transaction status even after
    JoltException??

    Hi,
    Jolt does NOT propagate transactions from WLS to Tuxedo. So in your example, the Tuxedo service is either called outside the context of a transaction, or if you started a transaction with Jolt, the Tuxedo service executed in the context of a separate transaction unrelated to the WLS transaction you started in the servlet. The ONLY way to get transaction propagation from WLS to Tuxedo is by using the WebLogic Tuxedo Connector. WTC will properly propagate the WLS transaction context to Tuxedo and any called Tuxedo services will occur within the context of a single distributed transaction.
    To answer your question specifically about how to keep the transaction status after the Jolt exception, you would need to suspend the transaction prior to making the Jolt call. My guess is that the servlet container is rolling back the transaction as a result of the exception. Suspending the transaction won't affect the way transactions are working right now with your application, although it makes it clearer that the Tuxedo call isn't part of the transaction.
    I hope this explains what's happening and hope that you weren't expecting the Tuxedo service to be part of the transaction.
    Regards,
    Todd Little
    BEA Tuxedo Engineering

  • Passing data from jsp/servlet to a Tuxedo Service thru VIEW

    Hi..
    We are using Tuxedo10g R3 on AIX 5.3..
    We have a Tuxedo Service running which takes values from the VIEW and converts that to upper case.. From the jsp page v r passing values to the VIEW fields which will be accepted by the service..
    For testing v checked the service with a tuxedo client and it is working fine..
    We have defined a jolt repository file for this service and finished bulkloading and coded the servlet also.. After passing the datas from the jsp, the Tuxedo service is called and it is ended.. but in the service only blank values are passed or the datas are not passed to VIEW fields.. It is not showing any error..
    The repository file for this service:
    service=NSIMPSRV
    export=true
    inbuf=VIEW
    inview=sample
    outbuf=STRING
    param=FIRSTSTR
    type=string
    access=in
    param=SECONDSTR
    type=string
    access=in
    param=THIRDSTR
    type=string
    access=in
    param=S-FIRST
    type=string
    access=out
    param=S-SECOND
    type=string
    access=out
    param=S-THIRD
    type=string
    access=out
    and the servlet code for this service:
    Result result1;
    ServletSessionPool servletsession = (ServletSessionPool) joltsession.getSessionPool("demojoltpool");
    ServletDataSet joltdataset = new ServletDataSet();
    joltdataset.setValue("FIRSTSTR","Testing");
    joltdataset.setValue("SECONDSTR","Tuxedo");
    joltdataset.setValue("THIRDSTR","Views");
    result1 = servletsession.call("NSIMPSRV", joltdataset, null);
    System.out.println("FIRSTSTR:"+result1.getValue("S-FIRST",""));
    System.out.println("SECONDSTR:"+result1.getValue("S-SECOND",""));
    System.out.println("THIRDSTR:"+result1.getValue("S-THIRD",""));
    we are not sure why the datas have not been passed.. do anyone have any idea regarding this??
    Thanks..

    Hi Wayne,
    This is my view definition:
    VIEW sample
    # type cname fbna count flag size null
    string firststr - 1 - 10 -
    string secondstr - 1 - 10 -
    string thirdstr - 1 - 10 -
    ENDJolt repository file:
    service=NSIMPSRV
    export=true
    inbuf=VIEW
    inview=sample
    outbuf=VIEW
    outview=sample
    param=FIRSTSTR
    type=string
    access=inout
    param=SECONDSTR
    type=string
    access=inout
    param=THIRDSTR
    type=string
    access=inoutThe Servlet code is:
    package Servlet;
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import bea.jolt.pool.servlet.weblogic.PoolManagerStartUp;
    import bea.jolt.pool.servlet.*;
    import bea.jolt.pool.ApplicationException;
    import bea.jolt.pool.SessionPoolException;
    import bea.jolt.pool.ServiceException;
    import bea.jolt.pool.SessionPoolManager;
    import bea.jolt.pool.*;
    * Servlet implementation class ZC00582Servlet
    public class VIEWServlet extends HttpServlet {
         private ServletSessionPoolManager joltsession = (ServletSessionPoolManager) SessionPoolManager.poolmgr;
    public VIEWServlet() {
    super();
    // TODO Auto-generated constructor stub
         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // TODO Auto-generated method stub
         response.setContentType("text/html");
         ServletResult result;
         Result result1;     
         String String1 = request.getParameter("FIRSTSTR");
         String String2 = request.getParameter("SECONDSTR");
         String String3 = request.getParameter("THIRDSTR");
         System.out.println("THE VALUES BEFORE CONVERSION");
         System.out.println("FIRSTSTR:"+String1);
         System.out.println("SECONDSTR:"+String2);
         System.out.println("THIRDSTR:"+String3);
         System.out.println("1..");     
         //ServletResult message;
         ServletSessionPool servletsession = (ServletSessionPool) joltsession.getSessionPool("demojoltpool");
         System.out.println("2..");
         ServletDataSet joltdataset = new ServletDataSet();
         //joltdataset.importRequest(request);
         System.out.println("3..");
         //joltdataset.setValue("firststr","Hi");
         joltdataset.setValue("firststr",String1);
         System.out.println("4..");
         //joltdataset.setValue("secondstr","hello");
         joltdataset.setValue("secondstr",String2);
         System.out.println("5..");
         //joltdataset.setValue("thridstr","fine");
         joltdataset.setValue("thirdstr",String3);
         System.out.println("6..");
         //result = (ServletResult) servletsession.call("NSIMPSRV", joltdataset, null);
         result1 = servletsession.call("NSIMPSRV", joltdataset, null);
         result = (ServletResult) result1;
         System.out.println("THE VALUES AFTER CONVERSION");
         System.out.println("FIRSTSTR:"+result.getStringValue("firststr",""));
         System.out.println("SECONDSTR:"+result.getStringValue("secondstr",""));
         System.out.println("THIRDSTR:"+result.getStringValue("thirdstr",""));     
         protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // TODO Auto-generated method stub
    and my server program :
    IDENTIFICATION DIVISION.
    PROGRAM-ID. NSIMPSRV.
    AUTHOR. TUXEDO DEVELOPMENT.
    ENVIRONMENT DIVISION.
    CONFIGURATION SECTION.
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    * Tuxedo definitions
    01 TPSVCRET-REC.
    COPY TPSVCRET.
    01 TPTYPE-REC.
    COPY TPTYPE.
    01 TPSTATUS-REC.
    COPY TPSTATUS.
    01 TPSVCDEF-REC.
    COPY TPSVCDEF.
    * Log message definitions
    01 LOGMSG.
    05 FILLER PIC X(10) VALUE
    "NSIMPSRV :".
    05 LOGMSG-TEXT PIC X(50).
    01 LOGMSG-LEN PIC S9(9) COMP-5.
    * User defined data records
    01 STRING-DATA.
    COPY SAMPLE.
    LINKAGE SECTION.
    PROCEDURE DIVISION.
    START-FUNDUPSR.
    MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
    MOVE "Started" TO LOGMSG-TEXT.
    PERFORM DO-USERLOG.
    * Get the data that was sent by the client
    MOVE LENGTH OF STRING-DATA TO LEN.
    CALL "TPSVCSTART" USING TPSVCDEF-REC
    TPTYPE-REC
    STRING-DATA
    TPSTATUS-REC.
    IF NOT TPOK
    MOVE "TPSVCSTART Failed" TO LOGMSG-TEXT
    PERFORM DO-USERLOG
    PERFORM EXIT-PROGRAM
    END-IF.
    IF TPTRUNCATE
    MOVE "Data was truncated" TO LOGMSG-TEXT
    PERFORM DO-USERLOG
    PERFORM EXIT-PROGRAM
    END-IF.
    MOVE FIRSTSTR TO LOGMSG-TEXT.
    PERFORM DO-USERLOG.
    MOVE SECONDSTR TO LOGMSG-TEXT.
    PERFORM DO-USERLOG.
    MOVE THIRDSTR TO LOGMSG-TEXT.
    PERFORM DO-USERLOG.
    INSPECT FIRSTSTR CONVERTING
    "abcdefghijklmnopqrstuvwxyz" TO
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
    INSPECT SECONDSTR CONVERTING
    "abcdefghijklmnopqrstuvwxyz" TO
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
    INSPECT THIRDSTR CONVERTING
    "abcdefghijklmnopqrstuvwxyz" TO
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
    MOVE "Success" TO LOGMSG-TEXT.
    PERFORM DO-USERLOG.
    MOVE STRING-DATA TO LOGMSG-TEXT.
    PERFORM DO-USERLOG.
    SET TPSUCCESS TO TRUE.
    COPY TPRETURN REPLACING
    DATA-REC BY STRING-DATA.
    * Write out a log err messages
    DO-USERLOG.
    CALL "USERLOG" USING LOGMSG
    LOGMSG-LEN
    TPSTATUS-REC.
    * EXIT PROGRAM
    EXIT-PROGRAM.
    MOVE "Failed" TO LOGMSG-TEXT.
    PERFORM DO-USERLOG.
    SET TPFAIL TO TRUE.
    COPY TPRETURN REPLACING
    DATA-REC BY STRING-DATA.
    Thanks & Regards,
    Janani.

  • Is it possible to Remove the inbuf and outbuf tags from a SALT exposed Tuxedo Service?

    Hi All,
    Currently I have the need to expose my tuxedo Service in a pre-created WSDL file (with all the fields names and namespaces already defined). Searching the web and the examples presented in the Tuxedo and Salt Package, I was able to configure most of the fields but  still can't remove the wrapper inbuf tag.
    Is there any parameter or configuration I can use to eliminate this tag so I can expose the SALT generated WSDL the way I want? Or is it a requirement for every tuxedo service to have his input exposed that way by using SALT?
    If you need anything else in order to provide an answer for this, please let me know. I'm also open to any sugestions.
    Thanks in advance,
    Brunno Attorre

    Hi,
    You would need to set the environment variable GWWS_WSDL_NO_BUF_WRAPPER="Y" (and restart the GWWS server).
    This should prevent the <inbuf> and <outbuf> tags from being added but it may depend upon the SALT release and rolling patch
    level you are using(i.e. if it is included or not) 
    Regards,
    Bob Finan

  • Single transaction through multiple service objects [Spring]

    Hello.
    I have multiple service objects, while methods in service objects represent use cases.
    If I call the method from the other method in the same service object, then the second (called) method uses the same transaction as the first (caller), because of default propagation REQUIRED is applied.
    .. as is shown in the following pseudo code:
    @Transactional
    public class PersonService {
         private PersonDAO personDAO;
         public void otherMethod() {
         public void savePerson(Person person) {
              otherMethod();
              personDAO.save(person);
    }But I need to call service methods of different service objects, because some use cases use other use cases. I also need all those called methods to be done as a single transaction.
    @Transactional
    public class OrderService {
         private OrderDAO orderDAO;
         public void saveOrder(Person person, Order order) {
              PersonService personService = CONTEXT.getBean("personService");
              personService.savePerson(person);
              orderDAO.save(order);
    }If I do it like that, the new transaction proxy is created and all personService stuff is executed in the new transaction. How to configure @Transactional annotated objects or Spring beans to do all service stuff in single transaction?
    I have Hibernate sessionfactory, DAOs and services beans simply configured in Spring configuration XML, using autowiring and transaction annotation config. I prefer using @transactional annotated service classes, but if I had to use more complex Spring transaction configuration to achieve the goal I won't have any problem with it.
    Thank you in advance.

    I would like it to be done is single transaction but it isn't. As the bean is retrieved from the spring context in OrderService's method
    PersonService personService = CONTEXT.getBean("personService");a new transaction for PersonService is started. So then I have two transactions in progress - one for OrderService and second for PersonService. I need the PersonService (or any other service object) to detect already pending transaction and use that. Not create new (it's own). I use no arguments in @Transactional annotation so default propagation REQUIRED should be used, but it still creates a new transaction for PersonService stuff.
    I'm posting my applicationContext.xml (simplified slightly)
    <beans default-autowire="byType">
         <bean id="dataSource"
              class="org.springframework.jdbc.datasource.DriverManagerDataSource">
         </bean>
         <!-- Hibernate SessionFactory -->
         <bean id="sessionFactory"
              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
              <property name="dataSource">
                   <ref local="dataSource" />
              </property>
         </bean>
         <bean id="hibernateTxManager"
              class="org.springframework.orm.hibernate3.HibernateTransactionManager">
              <property name="sessionFactory">
                   <ref local="sessionFactory" />
              </property>
         </bean>
         <tx:annotation-driven transaction-manager="hibernateTxManager" />
         <!-- DAOs -->
         <bean id="personDAO" class="net.package.dao.PersonDAO" />
         <bean id="orderDAO" class="net.package.dao.OrderDAO" />
         <!-- Services -->
         <bean id="personService" class="net.package.service.PersonService" />
         <bean id="orderService" class="net.package.service.OrderService" />
    </beans>Thank you

  • Can a Tuxedo service send a message to itself?

    Hello,
    is it possible for a Tuxedo service to send a request to itself?
    The scenario is this:
    - The same Tuxedo service is provided by multiple processes (for scalability). The processes are single-threaded.
    - While handling a request in a transaction (XA transaction is started outside the process), the service code determines that some cached data needs to be refreshed. This refresh needs to be done outside the current transaction.
    - The service send an non-transactional async request to itself (the same process). [How?]
    - The transactional request completes.
    - The non-transactional request is handled and refreshes the cache.
    - The next transactional request is handled (by the same process), and uses the refreshed cache data.
    Is this possible? The challenge seems to be that the same process gets the non-transactional request. With multiple instances of the service, any instance could normally get the request (eg. when using tpacall()).
    Thanks...
    Roger

    Hi Roger,
    A couple of comments:
    1) There isn't any standard way of forcing a request to go to a specific server when the service is offered by multiple servers. The traditional way of handling the need to make a request to a specific server is to explicitly advertise the service with a synonym name that is unique to the server. So to call the BAL service in a particular server with a PID of 1433, the server would advertise the BAL server as BAL_1433 or something similar, and then any requests that had to be made to that particular server would be made to BAL_1433 instead of BAL. Unfortunately this is rather cumbersome and doesn't scale particularly well. One feature we are adding to Tuxedo in an upcoming release is client server affinity. With this feature an application could specify that all requests are routed to the first server that handles a service. Thus subsequent requests that are made to services while in a "session" with the server would always be routed to that server. While this client/server affinity might be a solution in the future, it's not really designed for the scenario you mention, i.e., performing an asynchronous out of band request to the same server.
    2) In your scenario under the point where you ask "how?", you could use the above approach, although the call would have to be a tpacall with TPNOTRAN set (which you already indicated) but would also have to set TPNOREPLY as it appears you are planning on performing a tpreturn before processing the asynch request.
    3) Obviously another solution would be to make the server multi-threaded and handling the refresh of the cache in a separate thread and not use a tpcall/tpacall to initiate the cache refresh.
    4) Although not likely to be an option, the Tuxedo CORBA infrastructure will support what you are trying to do. By activating an object in a process with a process activation policy, you could make a request to that object reference and be guaranteed the request would return to that same server.
    5) Finally one other possible solution, although probably inelegant and may not scale as well would be to use data dependent routing and only have a single server offering the service in each group.
    As an aside, we are planning on adding a distributed data caching mechanism to Tuxedo in a future release. Yeah, I know that doesn't help right now, but it is certainly something to look forward to! :-)
    Regards,
    Todd Little
    Oracle Tuxedo Chief Architect

  • Is Jolt part of Tuxedo?

    Our company is using Tuxedo and looking into some web based applcations using XML
    to communicate with the services. My question is, is Jolt part of Tuxedo in which
    it can be used without additional cost? What are ballpark figures to get the
    Jolt Server software? Using Tuxedo, you have a install for Tuxedo workstation
    and Tuxedo Server. Is this the same scenario for Jolt? Are those seperate costs?

    Before Tuxedo8.0, Jolt is a extra product. But now it is part of Tuxedo8.0

  • Product: Microsoft SQL Server 2012 Transact-SQL Compiler Service -- Error 1335

    Hello,
    I am getting an error while using windows update or manually downloading and running
    SQLServer2012-KB2793634-x64.exe
    Product: Microsoft SQL Server 2012 Transact-SQL Compiler Service  -- Error 1335. The cabinet file 'Redist.cab' required for this installation is corrupt and cannot be used. This could indicate a network error, an error reading from installation media,
    or a problem with this package.
    What can be done?
    Thanks
    Bye

    Hello,
    I am getting an error while using windows update or manually downloading and runningT
    SQLServer2012-KB2793634-x64.exe
    Product: Microsoft SQL Server 2012 Transact-SQL Compiler Service  -- Error 1335. The cabinet file 'Redist.cab' required for this installation is corrupt and cannot be used. This could indicate a network error, an error reading from installation media,
    or a problem with this package.
    What can be done?
    Thanks
    Bye
    This KB article was issued as fix for known Issue as per below link.
    http://support.microsoft.com/kb/2793634
    Now I assume you are getting this error because downloaded file seems corrupt to me.Can you download again and copy it to local disk and start running  from there.
    http://www.microsoft.com/en-in/download/details.aspx?id=36215
    Also make sure your installer is not corrupt.If you find it corrupt please download it from below link and install after that run the setup again
    http://support.microsoft.com/kb/942288
    Hope this helps
    Please mark this reply as the answer or vote as helpful, as appropriate, to make it useful for other readers

  • Wrong translation commond when I write Tuxedo Service to use Informix Database

    Old Environment:
    DB : Informix Dynamic Server Version 7.31.UC5
    Tools : INFORMIX-ESQL Version 7.24.UC8
    MIDDLE : Tuxedo 6.4 patch 341
    New Environment :
    DB : Informix Dynamic Server Version 9.30.FC1
    Tools : IBM Informix CSDK Version 2.80,
    IBM Informix-ESQL Version 9.52.UC2
    MIDDLE : Tuxedo 8.0 patch 135
    Event :
    My old tuxedo service had wroted to communicate with Informix Database by
    XA transaction. In my service code have to
    prepare informix statement by command
    ' EXEC SQL PREPARE p_roll FROM "ROLLBACK WORK" ' And in my old environment it's
    workable until I upgrade my environment.
    My old tuxedo service can compile in new environment but when i try to test
    service by ud32 tool the result is error "A syntax error has occurred". After
    I check my code and receive statement at Database host I found some thing does
    not correct.
    I send to prepare ' ROLLBACK WORK ' but at database host received ' ROLLBACK WORKRK"
    ' that unknown command to database.
    I try to write my small new code to test PREPARE command of Informix ESQL/C
    without to build to Tuxedo Server, It's can work correctly.
    If you had found the same case , Please advise me too.
    Thanks you very much for your advise.
    [roll.ec]

    If ud32 reported a syntax error, then your service was never called.
    Normally, a service running under XA control should not issue transactional SQL
    statements. Begins and Rollbacks are issued from the transaction manager, not the
    application code.
    Can you post the Tuxedo message catalog number, and your ud32 script, as well as
    your environment variables?
         Scott Orshan
    Sutep wrote:
    Old Environment:
    DB : Informix Dynamic Server Version 7.31.UC5
    Tools : INFORMIX-ESQL Version 7.24.UC8
    MIDDLE : Tuxedo 6.4 patch 341
    New Environment :
    DB : Informix Dynamic Server Version 9.30.FC1
    Tools : IBM Informix CSDK Version 2.80,
    IBM Informix-ESQL Version 9.52.UC2
    MIDDLE : Tuxedo 8.0 patch 135
    Event :
    My old tuxedo service had wroted to communicate with Informix Database by
    XA transaction. In my service code have to
    prepare informix statement by command
    ' EXEC SQL PREPARE p_roll FROM "ROLLBACK WORK" ' And in my old environment it's
    workable until I upgrade my environment.
    My old tuxedo service can compile in new environment but when i try to test
    service by ud32 tool the result is error "A syntax error has occurred". After
    I check my code and receive statement at Database host I found some thing does
    not correct.
    I send to prepare ' ROLLBACK WORK ' but at database host received ' ROLLBACK WORKRK"
    ' that unknown command to database.
    I try to write my small new code to test PREPARE command of Informix ESQL/C
    without to build to Tuxedo Server, It's can work correctly.
    If you had found the same case , Please advise me too.
    Thanks you very much for your advise.
    #include     <stdio.h>
    #define BUFF          30
    #define SQLROWCOUNT sqlca.sqlerrd[2]
    exec sql define LNGTH1     40;
    main()
         exec sql whenever sqlerror goto :sqlx;
         exec sql begin declare section;
              string     hs_vlue_char[LNGTH1];
              string     hs_sql[500];
         exec sql end declare section;
         long     li_line;
         fprintf(stderr,"\nProcessing...\n");
         exec sql connect to 'sysmaster@oltp';
         li_line = __LINE__;
         exec sql prepare bwork from "BEGIN WORK";
         li_line = __LINE__;
         exec sql prepare cwork from "COMMIT WORK";
         li_line = __LINE__;
         exec sql prepare rwork from "ROLLBACK WORK";
         printf("%d: Before Rollback Work\n", __LINE__);
         EXEC SQL PREPARE p_rwork FROM "ROLLBACK WORK";
         /* free(hs_v[tmp]);
         hs_v[tmp] = strfmt("%s", "rollback work");
         CHECK_STRFMT_ERROR( hs_v, tmp);
         debug("'%s'", hs_v[tmp]);
         exec sql prepare p_rwork from :hs_v[tmp];
         printf("%d: After Rollback Work\n", __LINE__);
         printf("%d: Before Begin Work\n", __LINE__);
         EXEC SQL PREPARE p_bwork FROM "BEGIN WORK";
         printf("%d: After Begin Work\n", __LINE__);
         printf("%d: Before Commit Work\n", __LINE__);
         EXEC SQL PREPARE p_cwork FROM "COMMIT WORK";
         printf("%d: After Commit Work\n", __LINE__);
         sprintf(hs_sql, "SELECT vlue_char from cs_dfpm where dfpm_code = 'LOG_PATH_NAME1'");
         printf("hs_Sql = %s\n", hs_sql);
         exec sql prepare sel_sql from :hs_sql;
         exec sql execute sel_sql into :hs_vlue_char;
         printf("hs_vlue_char = %s\n", hs_vlue_char);
         exec sql free sel_sql;
         exec sql execute p_bwork;
         exec sql
         update cs_dfpm
         set vlue_char = '/test/'
         where dfpm_code = 'LOG_PATH_NAME1';
         if ( SQLROWCOUNT == 0 )
              exec sql execute p_rwork;
         exec sql execute p_cwork;
         exec sql free p_bwork;
         exec sql free p_cwork;
         exec sql free p_rwork;
         exec sql disconnect current;
         fprintf(stderr, "\nProcess completed successfully.\n");
         return(0);
    sqlx:
         fprintf(stderr,"\nDB error encountered at line = %ld(%ld)\n", li_line, SQLCODE);
         fprintf(stderr,"\nDB error encountered(%ld)\n", SQLCODE);
         exec sql whenever sqlerror continue;
         exec sql free sel_sql;
         exec sql free p_bwork;
         exec sql free cwork;
         exec sql free rwork;
         exec sql disconnect current;
         printf("%s@%d:Process completed with Error.\n", __FILE__, __LINE__);

  • Troubleshooting tuxedo services .. related to Oracle deadlock errors

    Afternoon all,
    I support an application that allows API calls to tuxedo services using messages comprised of FML fields. Our application sits on an OracleDB that is experiencing deadlock issues, one of the tuxedo servers involved in the deadlock is one that advertises services accessed by the API calls so I'm trying to rule it out as the source.
    Is there any way to trace/log the services in detail so that I can tie the deadlocks directly to a call of a tuxedo service?
    I've looked into TMTRACE, but I'm not sure this is going to give me the detail I need.
    Changing application code is not an option unfortunately.
    Thanks,
    Adam

    Hi Todd,
    Thanks for the quick response.
    Aplogies for the ignorance, but what do you mean by XA / local database transaction?
    Our architecture is such that a tuxedo server, that offers the services our APIs talk to, makes the Oracle updates. Is that XA or local?
    Oracle's logging and deadlock messages show me what the updates are, but I'm trying to make sure 100% that an API called service is instigating that update.
    Hope that is clear enough!
    Cheers,
    Adam
    Todd Little wrote:
    Hi Adam,
    Are the Tuxedo services using XA transactions or only local database transactions? The reason I ask is that TSAM offers the ability to track XA transactions and might be able to tell you what's happening. It can also track services and call paths, i.e., complete end-to-end call tracking from a Tuxedo client, through intervening servers (services).
    If you are not using XA transactions, I'm afraid there isn't a lot that Tuxedo can provide you as Tuxedo is unaware of the underlying database requests. In fact, if you aren't using XA transactions, Tuxedo doesn't even know a database is involved it the processing of requests.
    I would think you should be able to trace things from the database side, but you'd have to ask that question over in the database forums as I'm not familiar enough with what tracing/debugging facilities on the database side to give you much help.
    Regards,
    Todd Little
    Oracle Tuxedo Chief Architect

  • Call of tuxedo workstation client to tuxedo service

    In ubb file:
    "WSL"     SRVGRP="GRP"     SRVID=44
         CLOPT="-A -- -p 10002 -n //172.17.1.10:10001 -P 10003 -T 180"
    My question is:
    1. In workstation client, WSNADDR is //172.17.1.10:10001. If I use "172.17.1.10:10001", it prompts "TPESYSTEM - internal system error", while "//172.17.1.10:10001" is right?
    2. 10001 is the port of WSL, 10002-10003 is the port of WSH. But in ubb file, I cannot find WSH configuration, is that right?
    3. If "telnet 172.17.1.10 10002(/10003)" doesn't work in workstation client, does it impact the call of tuxedo service from this workstation client?
    Thanks a lot.

    Bill,
    1. Tuxedo syntax for specifying TCP/IP addresses requires that the address start with "//", so it is expected behavior for "172.17.1.10:10001" to result in an error and for "//172.17.1.10:10001" to be correctly parsed.
    2. You're correct that the UBBCONFIG file does not include entries for WSH processes. WSH processes are started by the WSL as appropriate.
    3. The Tuxedo WSH communicates with workstation clients and with the WSL using a proprietary Tuxedo workstation protocol. The WSH does not understand telnet protocol, so any attempt to telnet to the WSH port will not succeed.
    Regards,
    Ed

Maybe you are looking for