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
anuragAms,
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,
DominicThe 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 AttorreHi,
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...
RogerHi 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 -
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
ByeHello,
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,
AdamHi 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
-
Access Sequence for Vendor Partner Function
The business requirement is to display Vendor name for a specific product on UI. Approach till now: Partner function for Vendor can be defined. Relationship between vendor and product can be defined. The following query remains: Can someone help me w
-
TS3694 I got error message 1015 when trying to restore settings on iphone 3g any suggestions?
Can Anybody help me here? I tried to update the operating system, via Itunes, on my (second hand) iphone 3G and an error message came up. I then tried to restore but to no avail. I got another error message (1015). I am now unable to use the pho
-
IPhoto 9.6 hangs when importing raw files.
since upgrading to Yosemite and upgrading iPhoto my macbook pro hangs every time I try to import photos from an SD card. I can import one or two but if I try to import new photos ~300 photos then the kernel task memory usage shoots up to use 95% or m
-
Why does DEP keep closing photoshop cs6
why does DEP keep closing photoshop cs6
-
How can I change the CL&F of my javadoc output to something else? My team want to put their logo and change the layout of the default output. Can it be done?