Transactional Context
hi guys
Have a quick question on transactional context
Question:
Will the transactional context be passed on from a LSB mediator to other java
components (simple java classes).
The LSB is delgating control to managers which are simple java classes. These
managers are inturn executing sql queries. We need that the LSB and the simple
java class execute within the same transactional context. i.e if the manager throws
an exception, the LSB should roll back all the previous sql statements. The manager
doesnt do any transaction management (by retrieving UserTransaction) and simply
executes the sql calls.
Do you think that these calls will be covered by the same transaction context.
thanks for your time
anand
"anand raman" <[email protected]> wrote in message news:3f65cd27$[email protected]..
Question:
Will the transactional context be passed on from a LSB mediator to other java
components (simple java classes).
The LSB is delgating control to managers which are simple java classes. These
managers are inturn executing sql queries. We need that the LSB and the simple
java class execute within the same transactional context. i.e if the manager throws
an exception, the LSB should roll back all the previous sql statements. The manager
doesnt do any transaction management (by retrieving UserTransaction) and simply
executes the sql calls.
Do you think that these calls will be covered by the same transaction context.Yes, they will, provided a it' s a CMT LSLB and it has Required transaction
attribute.
Regards,
Slava Imeshev
Similar Messages
-
Transaction Context Propagation
Can transaction context be propagated from one WebLogic Server to another? If yes, what is then the relationship between the two Transaction Managers in each server?
Zhenxin,
Transaction can be propagated between multiple instances of the server.
In releases 5.1 and below, all databse access in this case was delegated to 1 jdbc connection in 1 pool on 1 server, and the database transaction manager was used.
In 6.0 and above, the transaction is co-ordinated by the TM in one instance of the server, which calls on the remote instances during the pre-commit and commit phases.
I believe that currently the 1st server to be invoked in the transaction is the one who gets the commit responsibility, but this is an implementation detail that may
change in future.
I hope that helps.
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.
Zhenxin Wang wrote:
> Can transaction context be propagated from one WebLogic Server to another? If yes, what is then the relationship between the two Transaction Managers in each server?
-
Send message in a non-transactional context
I've coded a simple Log4j appender to send error messages to a queue (JMSAppender provided by Log4J is not good for me because it use a publish/subscrive model and use topics instead of queues); the appender has to work in a non transactional context, so the appender has to send always the message to queue although the global transaction rollbacks; I've create queue session settings transacted parameter to false and acknowledgeMode to AUTO_ACKNOWLEDGE , but message is not delivered to queue if the global transaction, started by an EJB Stateless Session Bean, rollbacks; in my environment (IBM WebSphere and IBM MQ), queue connection factory is configured no-XA resource.
Any suggestions?
Below the source code.
Thanks in advance
context = new InitialContext();
queueFactory = (QueueConnectionFactory) context.lookup(getQueueConnectionFactoryBindingName());
queueConnection = queueFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
queue = (Queue) context.lookup(getQueueBindingName());
queueSender = queueSession.createSender(queue);
queueConnection.start();RobI've coded a simple Log4j appender to send error messages to a queue (JMSAppender provided by Log4J is not good for me because it use a publish/subscrive model and use topics instead of queues); the appender has to work in a non transactional context, so the appender has to send always the message to queue although the global transaction rollbacks; I've create queue session settings transacted parameter to false and acknowledgeMode to AUTO_ACKNOWLEDGE , but message is not delivered to queue if the global transaction, started by an EJB Stateless Session Bean, rollbacks; in my environment (IBM WebSphere and IBM MQ), queue connection factory is configured no-XA resource.
Any suggestions?
Below the source code.
Thanks in advance
context = new InitialContext();
queueFactory = (QueueConnectionFactory) context.lookup(getQueueConnectionFactoryBindingName());
queueConnection = queueFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
queue = (Queue) context.lookup(getQueueBindingName());
queueSender = queueSession.createSender(queue);
queueConnection.start();Rob -
Hi Every one,
An error has occurred during report processing. (rsProcessingAborted)
Get Online Help
Query execution failed for data set 'NonFinTran'. (rsErrorExecutingCommand)
Get Online Help
Cannot drop the table '#NonFinTran', because it does not exist in the system catalog. Cannot drop the table '#MultipleNonFinTran',
because it does not exist in the system catalog. Transaction context in use by another session.
NOTE: NonFinTran &
MultipleNonFinTran are
the Temp table in my storedPoc.
Please any help me to solve this issue.
Thanks & Regards,
Anil Kumar
Anil KumarHi Harsh,
Below is my Stored Proc
SELECT @ServerName=datasource from master.dbo.sysservers WHERE catalog='Voyager'
SELECT @ServerName3=datasource from master.dbo.sysservers WHERE catalog='AuditLog'
SELECT @ServerName2=datasource from master.dbo.sysservers WHERE catalog='Portal'
IF @ServerName IS NOT NULL SET @ServerName='[' + @ServerName + '].' ELSE SET @ServerName=''
IF @ServerName3 IS NOT NULL SET @ServerName3='[' + @ServerName3 + '].' ELSE SET @ServerName3=''
IF @ServerName2 IS NOT NULL SET @ServerName2='[' + @ServerName2 + '].' ELSE SET @ServerName2=''
IF Exists(Select * From tempdb.dbo.SysObjects Where Name Like '#NonFinTran%')
DROP TABLE #NonFinTran
IF Exists(Select * From tempdb.dbo.SysObjects Where Name Like '#MultipleNonFinTran%')
DROP TABLE #MultipleNonFinTran
CREATE TABLE #NonFinTran (FirstName VARCHAR(40), TaxId VARCHAR(40), TrxID VARCHAR(40), Status VARCHAR(255), Field1 VARCHAR(255), Field2 VARCHAR(255),
Field3 VARCHAR(255), Field4 VARCHAR(255), Field5 VARCHAR(255), Field6 VARCHAR(255), DateTime DATETIME,
BranchID CHAR(3), BankID CHAR(1), FromAccountID VARCHAR(255), FromAccountType VARCHAR(255))
CREATE TABLE #MultipleNonFinTran (FirstName VARCHAR(40), TaxId VARCHAR(40), TrxID VARCHAR(40), Status VARCHAR(255), Field1 VARCHAR(255), Field2 VARCHAR(255),
Field3 VARCHAR(255), Field4 VARCHAR(255), Field5 VARCHAR(255), Field6 VARCHAR(255), DateTime DATETIME,
BranchID CHAR(3), BankID CHAR(1), FromAccountID VARCHAR(255), FromAccountType VARCHAR(255))
INSERT #NonFinTran
EXEC('SELECT FirstName, TaxID,
TrxID, Status, TrxField1, TrxField2, TrxField3, TrxField4, TrxField5, TrxField6, DateTime, '''', '''', '''', ''''
FROM ' + @ServerName3 + 'AuditLog.dbo.CCAuditLogEntryView AS Audit, ' + @ServerName + 'Voyager.dbo.CCUser AS CCUser
WHERE CCUser.UserID = Audit.UserID
AND Audit.Succeeded = 1
AND Audit.TrxID IN (''ChangeBillPayDefaultAccountEdit'',''ChangeExpiryUserPassword'',''ChangePasswordEdit'',
''ChangeUserPassword'',''ManageAddressMaint'',''ManageContactMaint'',''ManageSecretQuestionAnswerEdit'',
''ManageTransLimitMaint'',''OtherBankAccountMaintAdd'',''OtherBankAccountMaintDelete'',''OtherBankAccountMaintEdit'',
''WithinAmBankAccountMaintAdd'',''WithinAmBankAccountMaintDelete'',''WithinAmBankAccountMaintEdit'',
''SetAccountMaskPreferenceAudit'',''ChangeLoginIdAudit'')
AND DATEDIFF(DAY, CONVERT(DATETIME, CONVERT(VARCHAR(10), ''' + @StartDate + '''), 103), Audit.DateTime) >= 0
AND DATEDIFF(DAY, CONVERT(DATETIME, CONVERT(VARCHAR(10), ''' + @EndDate + '''), 103), Audit.DateTime) <= 0 ')
INSERT #MultipleNonFinTran
EXEC('SELECT DISTINCT FirstName, TaxID,
TrxID, Status, TrxField1, TrxField2, TrxField3, TrxField4, TrxField5, TrxField6, Audit.DateTime as AuditDateTime,
(SELECT DISTINCT SUBSTRING(A.BranchCode,3,3) FROM ' + @ServerName + 'AuditLog.dbo.CCAuditLogEntryView X INNER JOIN ' + @ServerName + 'Voyager.dbo.CCuser U
ON X.UserId = U.UserId INNER JOIN ' + @ServerName + 'Voyager.dbo.AMHZ_CustomerProfile P ON P.EnrolId = U.TAXID
INNER JOIN ' + @ServerName + 'Voyager.dbo.AMHZ_AccountListing A ON A.CIFNO = P.CIFNO
WHERE X.UserId = Audit.UserId AND A.AccountNo = SUBSTRING(Audit.TrxField1,11,16) AND P.CIFNO = A.CIFNO
AND (SUBSTRING(A.BranchCode,3,3) <> NULL OR SUBSTRING(A.BranchCode,3,3) <> '''')
AND CHARINDEX(''AccountID='', Audit.TrxField1, 1) > 0),
SUBSTRING(TrxField1,14,1), CASE WHEN CHARINDEX(''AccountID='', TrxField1, 1) > 0 THEN
SUBSTRING(TrxField1,11,16) ELSE '''' END, CASE WHEN CHARINDEX(''AccountType='', TrxField2, 1) > 0 THEN SUBSTRING(TrxField2,13,3) ELSE '''' END
FROM ' + @ServerName3 + 'AuditLog.dbo.CCAuditLogEntryView AS Audit, ' + @ServerName + 'Voyager.dbo.CCUser AS CCUser
WHERE CCUser.UserID = Audit.UserID
AND Audit.Succeeded = 1
AND Audit.TrxID IN (''SetAccountAttributesAudit'',''SetAccountFriendlyNameAudit'',
''AccountProfileMaintULDelete'',''AccountProfileMaintLHAAdd'',''AccountProfileMaintLSCAdd'')
AND DATEDIFF(DAY, CONVERT(DATETIME, CONVERT(VARCHAR(10), ''' + @StartDate + '''), 103), Audit.DateTime) >= 0
AND DATEDIFF(DAY, CONVERT(DATETIME, CONVERT(VARCHAR(10), ''' + @EndDate + '''), 103), Audit.DateTime) <= 0 ')
SET @stmt = '
SELECT * FROM
SELECT BranchName,
CASE WHEN SUBSTRING(FromAccountID,1,6) IN (''519901'',''559409'') THEN ''DC''
ELSE
CASE FromAccountType WHEN ''01'' THEN ''SA '' WHEN ''02'' THEN ''CA '' WHEN ''03'' THEN ''FD ''
WHEN ''SA'' THEN ''SA '' WHEN ''CA'' THEN ''CA '' WHEN ''FD'' THEN ''FD '' ELSE FromAccountType + '' ''
END
END +
case when Len(FromAccountID) =16 Then
CASE FromAccountType WHEN ''VC'' THEN
SUBSTRING(FromAccountID,1,6)+''******''+SUBSTRING(FromAccountID,13,4)
WHEN ''MC'' THEN SUBSTRING(FromAccountID,1,6)+''******''+SUBSTRING(FromAccountID,13,4) END
when Len(FromAccountID) =15 Then
CASE FromAccountType WHEN ''VC'' THEN
SUBSTRING(FromAccountID,1,6)+''******''+SUBSTRING(FromAccountID,13,3)
WHEN ''MC'' THEN SUBSTRING(FromAccountID,1,6)+''******''+SUBSTRING(FromAccountID,13,3) END
ELSE FromAccountID
ENd
AS FromAcctNo,
CASE TrxId
WHEN ''AccountProfileMaintLHAAdd'' THEN ''Link Account/Card''
WHEN ''AccountProfileMaintLSCAdd'' THEN ''Link Account/Card''
WHEN ''APMFamilyFirstAdd'' THEN ''Link Family First Account''
WHEN ''AccountProfileMaintULDelete'' THEN ''Unlink Account/Card''
WHEN ''BalInqFD'' THEN CASE WHEN Field3 IN (''APMLink=SUCCESS'') THEN ''APMLink Success'' ELSE ''Fixed Deposit Balance Inquiry'' END
WHEN ''BalInqCASA'' THEN CASE WHEN Field3 IN (''APMLink=SUCCESS'') THEN ''APMLink Success'' ELSE
CASE WHEN FromAccountType IN (''SA'',''01'') THEN ''Savings Account Balance Inquiry''
ELSE ''Current Account Balance Inquiry''
END
END
WHEN ''StopCheck'' THEN ''Stop Cheque Request''
WHEN ''CheckReorder'' THEN ''Order Your Cheque''
WHEN ''CheckInquiry'' THEN ''Cheque Inquiry''
WHEN ''TransHistFD'' THEN ''Fixed Deposit Transaction History''
WHEN ''TransHistCASA'' THEN
CASE WHEN FromAccountType IN (''SA'',''01'') THEN ''Savings Account Transaction History'' ELSE ''Current Account Transaction History'' END
WHEN ''StmtInqCC'' THEN
CASE WHEN FromAccountType IN (''DR'',''03'') THEN ''Debit Card Statement Inquiry'' ELSE ''Credit Card Statement Inquiry'' END
WHEN ''StmtInqDA'' THEN
CASE WHEN FromAccountType IN (''SA'',''01'') THEN ''Savings Account Statement Inquiry'' ELSE ''Current Account Statement Inquiry'' END
WHEN ''StmtReq'' THEN ''Printed Statement Request''
WHEN ''StmtInqIAMSTAR'' THEN ''E-AMSTAR Statement Inquiry''
WHEN ''Repayment/Transfer Inquiry'' THEN ''Repayment/Transfer Inquiry''
WHEN ''Account Inquiry'' THEN ''Account Inquiry''
WHEN ''Payment Inquiry'' THEN ''Payment Inquiry''
END AS TransType,
FirstName AS CustomerName,
TaxId, CONVERT(VARCHAR, DateTime, 103) AS Date, CONVERT(VARCHAR, DateTime, 108) AS Time
FROM #NonFinTran, ' + @ServerName3 + 'Portal.dbo.TB_Branch AS TB_Branch
WHERE
BranchId = TB_Branch.BranchCode
AND (TB_Branch.InstCode IN (''00001'', ''00003'',''001'',''002''))
AND (FromAccountType IN (''SA'', ''CA'', ''FD'', ''01'', ''02'', ''03'')))'
EXEC (@stmt)
IF Exists(Select * From tempdb.dbo.SysObjects Where Name Like '#NonFinTran%')
DROP TABLE #NonFinTran
IF Exists(Select * From tempdb.dbo.SysObjects Where Name Like '#MultipleNonFinTran%')
DROP TABLE #MultipleNonFinTran
Anil Kumar -
Using oracle's connection pools and transactional context
Hi!
I have an implementations of existing interfaces ( let's call this layer as
data access layer) which abstracts the connection and transactional session
from the calling application. This implementaion makes use of Oracles JVM
inside the oracle database (8.1.7) to create and maintain the connection
pools and the transactional session (transactional context). I would like
to create differenent implementation, if the calling application is a
session bean running inside the weblogic application server. is there way I
can still use the connection pools and transactinal context that I got from
the oralce if the calling application is a session bean running inside the
weblogic app.. server?
do I have to change any configuration settings in weblogic?. there might
be two scenarios..
the data access layer (the classes which deal with the connection pools and
transactions) might be running inside the oracle's JVM..
the data access layer might be running inside weblogic application server...
thanks...
SrinivasCertainly this from SPAM. Now from anothe user :). Note sure whether I should mark you as you as SPAM as you're posting questions which are available in stackoverflow
http://stackoverflow.com/questions/26531161/biztalk-and-odp-net-connection-pools-and-connection-strings
Details provided in the other forum should provide you the answer.
I don’t want to duplicate this thread just for the sake of giving reply.
If this answers your question please mark it accordingly. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply. -
Transaction Context Is Lost in General Ledger
Hi,
I got 'Transaction Context is Lost' in General Ledger 'Accounting Setup Manager' while creating new Ledger, in R12.
I tried restarting machine, but same problem.
How to fix problem?
See Attached SHT - http://www.mediafire.com/?fusvfp6q7cv6rdzPlease post the application release, database version and OS.
Can you find any errors in the database log file?
user78995 wrote:
Hi,
I got 'Transaction Context is Lost' in General Ledger 'Accounting Setup Manager' while creating new Ledger, in R12.
I tried restarting machine, but same problem.
How to fix problem?
See Attached SHT - http://www.mediafire.com/?fusvfp6q7cv6rdz
Please see if these docs help.
11i/R12 How to Debug "Transaction Context Is Lost" or "You are trying to access a page that is no longer active" [ID 456906.1]
Transaction Context Is Lost in iSupplier portal [ID 761421.1]
How To Check Session Persistence On BigIP F5, Cisco Ace, Citrix Netscaler or Radware AppDirector Load Balancer Appliances [ID 601694.1]
Self-Service Pages Are Failing After Changing the s_oc4j_sesstimeout [ID 780612.1]
Enhancement Request: PLM Login Timeout Can Cause Loss of Data (Passivation) [ID 1108454.1]
Please also check Apache log files (and the application.log) for details about the error.
If you cannot find any errors in the logs and you still have the same issue, then please log a SR.
Thanks,
Hussein -
Transaction Context Lost In General Ledger
Hi,
Please help me in this thread - Transaction Context Is Lost in General Ledger
Since, no response upto now, I am posting here.
RegardsPlease see your other thread -- Re: Transaction Context Is Lost in General Ledger
And, please do not post duplicates.
Thanks,
Hussein -
XA datasource autocommit is false when no transaction context
WLS 8.1SP4
I am usign MS SQL Serevr JDBC driver.
I use the XA driver: com.microsoft.jdbcx.sqlserver.SQLServerDataSource
I have an MDB, transaction not supported.
The MDB gets a connection from an xa datasource which maps to that SQL Server XA driver.
Even thogh the txn is not supported, autocommit is set to TRUE in the connection. I want it false. I know that I can use a non-txnal DS, but why is autocommut false when I have transaction context?
Kind Regards,
Graham.grahamh wrote:
WLS 8.1SP4
I am usign MS SQL Serevr JDBC driver.
I use the XA driver: com.microsoft.jdbcx.sqlserver.SQLServerDataSource
I have an MDB, transaction not supported.
The MDB gets a connection from an xa datasource which maps to that SQL Server XA driver.
Even thogh the txn is not supported, autocommit is set to TRUE in the connection. I want it false. I know that I can use a non-txnal DS, but why is autocommut false when I have transaction context?
Kind Regards,
Graham.Hi Graham. You are correct. This is a bug we have fixed.
Please contact support and ask for the sp4 patch for
CR212051.
Joe -
How to execute a commit and wait via bol transaction context?
Hi All,
Currently a service contract is created via bol objects.
Once all the objects are created, the modify() method is called bol_core instance.
After that, the bol transaction context is assigned and the save() and commit() methods are called.
This works fine, but the commit does not wait for the database to be updated before moving to the next steps.
How can i get something like the 'commit work and wait' statement via the bol transaction context?
would a commit work and wait statement work the same?
regards,
LengHi,
It is a CRM specific issue.
so the code sniplet is:
go_bol_core = cl_crm_bol_core=>get_instance( ).
go_bol_core->load_component_set( 'BT' ).
create factory for BTorder
go_bol_factory = go_bol_core->get_entity_factory( 'BTOrder' ).
gs_param-name = 'PROCESS_TYPE'.
gs_param-value = 'ZSC1'.
APPEND gs_param TO gt_param.
go_btorder ?= go_bol_factory->create( gt_param ).
send changes
go_bol_core->modify( ).
go_transaction_context = go_btorder->get_transaction( ).
lv_success = go_transaction_context->save( ).
IF lv_success EQ abap_true.
go_transaction_context->commit( ).
so after the commit, it does not commit to the db straight away.
i asked a collegue, and i got this:
Using the BOL commit should perform the commit in one of two ways u2013 depending on the how the application (i.e. the GENIL layer has been implemented). It will either do a commit work and wait, or use a local update task and commit work statement. So based on this the update should be synchronous i.e. it should wait for the update to finish. In the case of the one order transaction it basically runs the update in local task.
Basically i don't understand why it is behaving as it is. -
Passing transaction context to weblogic container
I am developing a java application which is doing some database
updates. It invokes a few EJBs deployed on weblogic server 4.5. Those
beans also do some database updates. I want all the database
operations in a single transaction. The beans are configured to be
bean managed transactions and use weblogic connection pool (weblogic
pool driver)
I want to create a transaction context in the java application and
also want to make EJBs participate in the same context.
Is this really possible to achieve?
Thanks
JagdishHi Bob,
In TestStand 3.0 and later you can pass the sequence context as a CAObjHandle in CVI. The easiest way to get an example of this is to create a blank sequence and insert an Action step. Right-click on the step and select specify module. On the module tab specify a name for the function. Next on the Source Code tab click Create Code... This will prompt you for a location and name for a project file and a c file. It will then create code for you that demonstrates how to pass the sequence context and use it.
If you're using an older version of TestStand then the parameters you can pass are fixed. I would suggest looking at one of the shipping examples. The Register step in the following example demonstates how to pass the sequence context and use it: C:
\Program Files\National Instruments\TestStand 3.1\Examples\Demo\C\cpu.seq
(This path will be different depending on your version of TestStand.)
I hope this helps!!
Regards,
Sarah Miracle
National Instruments -
Transactional Context Propagation
Hi,
Suppose that I a statefull session bean that uses a helper class to delegate
its business methods. If the transactions are demarcated from the container
will the transactional context of the caller (of the helper class) method be
propagated to the helper class?
Thank you in advance
Hi,
Is this true also for BMT? I have a problem where the UserTransaction
object seems not to propagate from one BMT bean to another BMT bean.
At least the status of the transaction
(as retrieved by this.sessionContext.getUserTransaction().getStatus())
is Status.STATUS_NO_TRANSACTION when checked in the method of th called bean.
regards - Johan
"Cameron Purdy" <[email protected]> wrote:
>The transaction is bound to the thread, so yes, under most ordinary
>conditions, the context would also apply to (or more likely through)
>methods
>of other classes called. Example: EJB A calls helper class method HC.foo()
>calls HC.foo2() calls EJB B. If EJB A were in a transaction, EJB B would
>be
>in the same.
>
>Peace,
>
>--
>Cameron Purdy
>Tangosol, Inc.
>http://www.tangosol.com
>Tangosol Server: Enabling enterprise application customization
>
>
>"Routis Haralampos" <[email protected]> wrote in message
>news:[email protected]...
>> Hi,
>> Suppose that I a statefull session bean that uses a helper class to
>delegate
>> its business methods. If the transactions are demarcated from the
>container
>> will the transactional context of the caller (of the helper class)
>method
>be
>> propagated to the helper class?
>> Thank you in advance
>>
>>
>
>
-
IllegalStateException - SSB loosing transaction context
I have a following scenario
1. MDB1(txn not supported) calls SSB1 (txn att = required)
2. SSB1 calls some other SSBs and Enity beans with txn attt = required.
3. SSB1 catches checked exception and calls rollback
catch ( MyCheckedException e){
this.getSessionContext().setRollbackOnly();
throw e;
Note that setRollbackOnly() is called from SSB1 which is in transaction but still
I get following error on weblogic console that setRollbackOnly() is called from
a bean which is not participating in transaction. This behavior is not consistent
it happens some time. I re-started the server and weblogic started executing txns
properly.
My question is when a pair of MDB and SSB is used does SSB LOOSES it's transaction
CONTEXT in some situation?
I would really appreciate and early help as it is critical for the project
thanks
========== weblogic log ===============
<Jul 31, 2003 12:57:34 PM PDT> <Info> <EJB> <EJB Exception during invocation from
home: com.cobaltgroup.products.lc.queue.ejb.EmailMessageTaskBean_tatdyp_HomeImpl@7
f44f3 threw exception: java.lang.IllegalStateException: Illegal attempt to call
EJ
BContext.setRollbackOnly() from an EJB that was not participating in a transactionDeyan,
I assumed that Saurabh's statement that SSB1 has Required attribute is true.
The Spec says:
"17.6.2.8 Handling of setRollbackOnly() method
The Container must handle the EJBContext.setRollbackOnly() method
invoked from a business method executing with the Required, RequiresNew,
or Mandatory transaction attribute as follows:
- The Container must ensure that the transaction will never commit.
Typically, the Container instructs the transaction manager to mark the
transaction for rollback.
I'd guess that TX gets rolled back as soon as control returned
to the container from dispatched method called setRollbackOnly().
As you can see, the Spec allows it and it does make sence
taking in account cost of holding TX.
Slava
"Deyan D. Bektchiev" <[email protected]> wrote in message
news:[email protected]...
Slava,
According to the EJB spec the transaction should not end just because at
some point it was marked for rollback, only that it should never commit.
The EJB should still be able to call setRollbackOnly without any problems.
It look more like the transaction context is either never created or
lost somehow.
And if there is no transactional context
SessionContext.getRollbackOnly() will throw the same exception (EJB 2.0
Section 7.6.1 for stateful and Section 7.8.2 for stateless session EJBs).
So I'd start by making sure that the EJB is not marked with BMT and
"Required" TX attribute -- in that case the EJB will use BMT and the TX
attribute is ignored.
Another way to see that there is a transaction is to use
System.out.println(weblogic.transaction.TxHelper.getTransaction); to
print the current transaction and verify that there is actually one.
Regards,
Dejan
Slava Imeshev wrote:
Hi Saurabh,
It could happen because by the time SSB1 received the exception the TX
has
been rolled back already.
The code in the catch block should look like the following:
catch ( MyCheckedException e){
if (!this.getSessionContext().getRollbackOnly()) {
this.getSessionContext().setRollbackOnly();
throw e;
Regards,
Slava Imeshev
"Saurabh Kumar" <[email protected]> wrote in message
news:[email protected]...
I have a following scenario
1. MDB1(txn not supported) calls SSB1 (txn att = required)
2. SSB1 calls some other SSBs and Enity beans with txn attt = required.
3. SSB1 catches checked exception and calls rollback
catch ( MyCheckedException e){
this.getSessionContext().setRollbackOnly();
throw e;
Note that setRollbackOnly() is called from SSB1 which is in transaction
but still
I get following error on weblogic console that setRollbackOnly() is
called
>>>
>>>
from
a bean which is not participating in transaction. This behavior is not
consistent
it happens some time. I re-started the server and weblogic started
executing txns
properly.
My question is when a pair of MDB and SSB is used does SSB LOOSES it's
transaction
CONTEXT in some situation?
I would really appreciate and early help as it is critical for the
project
>>>
thanks
========== weblogic log ===============
<Jul 31, 2003 12:57:34 PM PDT> <Info> <EJB> <EJB Exception during
invocation from
home:
com.cobaltgroup.products.lc.queue.ejb.EmailMessageTaskBean_tatdyp_HomeImpl@7
>>
>>
f44f3 threw exception: java.lang.IllegalStateException: Illegal attemptto
>>>
>>>
call
EJ
BContext.setRollbackOnly() from an EJB that was not participating in a
transaction -
OSB Transaction context (QoS exactly once)
Hi all,
First of all, excuse me my poor english...
I need to understand how develope transactional services with OSB.
My unit test are 2 proxy services : first with JMS/XA transport (with response requiered) with 2 Service Callout to transactional EJB with exactly once; second proxy routes the first with HTTP transport with exactly once.
When services ends ok, or i reply with error in error pipeline, commit is executed; but if services failed, services no reply nothing until timeout proxy....then rollback is executed....
In conclusion, i don't know how i develope transactional proxy services....i choose bad transports?, i don't understand pipelines?...i'm very confused...
Thank you allHi,
i tested it without test console with no different results...and test console show me :
Response Data :
<con:metadata xmlns:con="http://www.bea.com/wli/sb/test/config">
<tran:headers xsi:type="http:HttpResponseHeaders" xmlns:http="http://www.bea.com/wli/sb/transports/http" xmlns:tran="http://www.bea.com/wli/sb/transports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<http:Content-Type>text/xml</http:Content-Type>
</tran:headers>
<tran:response-code xmlns:tran="http://www.bea.com/wli/sb/transports">1</tran:response-code>
</con:metadata>
Invocation Trace :
System Error Handler
$fault: <con:fault xmlns:con="http://www.bea.com/wli/sb/context">
<con:errorCode>BEA-381501</con:errorCode>
<con:reason>
JmsAsyncMessageTable timed out message with id 2aa517390000011f37a92110ffff8035
</con:reason>
<con:location>
<con:node>RouteNode1</con:node>
<con:path>response-pipeline</con:path>
</con:location>
</con:fault>
Always i try to route (tunneling http) with exactly once to proxies JMS/XA, if proxy throws exceptions, in http proxy i see this : "JmsAsyncMessageTable timed out message"....
I'm disoriented...
Thx you very much. -
Using TxDataSource outside a transaction context
I have two questions about using TxDataSource:
- Can I use a TxDataSource outside a transaction? i.e. can I get a connection
from a TxDataSource if there is no active transaction?
- If the answer to the above question is true, do I have to close the connection
after I'm done using it? The data source is defined on a regular connection pool.
ThanksAt 09:54 AM 7/30/2002 -0700, you wrote:Thanks for your answer, as always:-)
.As far as the closing the connection goes, what do I do if I have multiple ejbs participating in
a transaction, and each one uses the connection from the database (the same connection, as they
are all participating in the same transaction)? Does each ejb method (assuming a session ejb with
REQUIRED transactional method) have to do a connection.close() before the method exits? Or in this
case, will the container automatically release the connection back to the pool when the
transaction commits or rollsback?We have you covered. Any time your code gets a connection from a TxDataSource in the context of
a transactional EJB, or in a servlet with an ongoing UserTransaction, we will cheerfully ignore if
your
code calls commit() or close(), because our Tx coordinator is the only one who knows when to commit.
Closing the connection is irrelevant to the flow either, because even though several EJBs in a given
transaction
all ask for a connection, and all get their own Connection object, these objects are wrappers around
a single
real pool connection, and if you close one wrapper, we know not to do anything with the underlying
pool
connection.
In summary, if you always stick to the basic standard of clean safe JDBC code, it will always
work,
and it is important to do so in a non-transactional state:
myJdbcMethodsLookLike()
Connection c = null;
try {
c = getConnection();
do all the JDBC
c.close();
c = null;
catch (Exception e) {
do whatever
finally {
if (c != null) try {c.close();} catch (Exception ignore){} -
Transaction context broken by Java Intermedia
Hi, when I use java intermedia, my transactions seems to forced commited despite SetAutoCommit(false) command.
Tx for any help.Can you post the code snippet? It's not supposed to be that way. We will have a better idea of what to look for if we can see the code.
Larry
Maybe you are looking for
-
File Redirection in Tomcat 5.5
I've got an application that reads from a collection of data in a directory outside the WEB-INF directory. I am able to read the data and use it to create an html stream to send to the user. This part is working well. Now, I'd like to include graphic
-
Ipod won't work under Windows Vista on Equium A200
I've had my Ipod for over a year now i used it fine on my old computer which was running on XP. I now have my laptop Equium A200 series running on vista. When i first connected my ipod to it it showed up and asked if i would like to connect my ipod t
-
IPhone Inbox and Exchange inbox don't match
My iPhone inbox has about 100 items in it, but OWA and Outlook show that I have 7 because I sorted them into folders, PST's, etc. I still receive new email via push on the iPhone, and can traverse folders where I triaged email, but it seems the inbox
-
Calculation Problem help solution needed quickly
I have created an adobe acrobat registration form in Adobe LiveCycle. I've worked on this all day and needed to distribute today. I can not find out what the problem with my code is. I need a discerning eye right away if possible. The calculated
-
Sorry for repeating message again. But there was no answer for previous one... I've tried Kodo 2.4.0RC2 and had the same error. I don't have much time now to check the second solution but I'll try to find it ASAP. Just in case I've attached the class