ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Borrill, Christopher" <Chris.Borr...@hp.com>
Subject RE: Regd. sessionContext.setRollBackOnly() in EJB with iBATIS (Re: Connection pool mechanism in iBATIS.)
Date Wed, 05 Oct 2005 19:21:01 GMT
CREATE ROLE is DDL not DML.  I believe the execution of DDL causes an
implicit commit, whether or not it succeeds, hence your inability to
rollback the insert.  One solution may be to do the insert after the
create role.
 
Chris

________________________________

From: Vijai Senthil Padmanabhan Kalaiyarasi
[mailto:vijaisenthil.padmanabhan@kumaran.com] 
Sent: Thursday, 6 October 2005 5:32 a.m.
To: user-java@ibatis.apache.org; Jeff Butler
Subject: Re: Regd. sessionContext.setRollBackOnly() in EJB with iBATIS
(Re: Connection pool mechanism in iBATIS.)


Yes...
I have done as you have said.
 
SQLMapConfig.xml
------------------------------
  <transactionManager type="EXTERNAL">
    <property name="SetAutoCommitAllowed" value="false"/>
    <dataSource type="JNDI">
      <property name="DataSource" value="java:comp/env/jdbc/sisds"/>
    </dataSource>
  </transactionManager> 
 
ejb-jar.xml
----------------
  <container-transaction>
   <method>
    <ejb-name>SISService</ejb-name>
    <method-name>*</method-name>
   </method>
   <trans-attribute>Required</trans-attribute>
  </container-transaction>

I beleive, I have done as what you have suggested. 
Please let me know if I am wrong anywhere.
 
 
Thanks and Regards
Vijai Senthil P K
 

	----- Original Message ----- 
	From: Jeff Butler <mailto:jeffgbutler@gmail.com>  
	To: user-java@ibatis.apache.org 
	Sent: Wednesday, October 05, 2005 12:06 PM
	Subject: Re: Regd. sessionContext.setRollBackOnly() in EJB with
iBATIS (Re: Connection pool mechanism in iBATIS.)

	Did you configure iBATIS to use an EXTERNAL transaction manager
as I suggested?  Have you changed your ejb-jar.xml to denote the methods
that need transactional support?
	 
	Jeff Butler 
	
	 
	On 10/5/05, Vijai Senthil Padmanabhan Kalaiyarasi
<vijaisenthil.padmanabhan@kumaran.com> wrote: 

		Hi,
		 
		    I tried calling two methods (one an insert and the
other creating an Oracle Role) of two different DAO class from a single
EJB method.
		    And in the catch block i did a
sessionContext.setRollBackOnly().
		 
		    When the Creating Role gave an error like
insufficient privileges, it went to catch block and executed the
setRollBackOnly(). 
		    But still the insert operation was not rolled back.
		 
		    I think it is taking two different connections for
those two operation, because i could see in the log as below.
		 
		    When record insertion
		    DEBUG : [HttpRequestHandler-26870275 :
com.ibatis.common.jdbc.logging.ConnectionLogProxy.<init>(ConnectionLogPr
oxy.java:39)] {conn-100367} Connection
		
		
		    When Role creation
		    DEBUG : [HttpRequestHandler-26870275 :
com.ibatis.common.jdbc.logging.ConnectionLogProxy.<init>(ConnectionLogPr
oxy.java:39)] {conn-100371} Connection
		 
		 
		    Could anyone guide me how to do that, by considering
the above scenario?
		 
		 
		Thanks in advance
		VIJAI SENTHIL P K

			----- Original Message ----- 
			From: Jeff Butler <mailto:jeffgbutler@gmail.com>

			To: user-java@ibatis.apache.org 
			Sent: Friday, September 30, 2005 2:21 PM
			Subject: Re: Connection pool mechanism in
iBATIS.

			 
			You have configured iBATIS to NOT use the
application server's connection pool - you've asked iBATIS to use it's
own connection pool (DBCP).
			 
			If you mean that you want to call
setRollBackOnly() in an EJB method, then this will not work with your
current configuration.  If you want to use EJB's container managed
transactions, you'll need to do the data source lookup from JNDI and
configure iBATIS like this: 
			 
			  <transactionManager type="EXTERNAL">
			    <property name="SetAutoCommitAllowed"
value="false"/>
			    
			    <dataSource type="JNDI">
			      <property name="DataSource"
value="java:comp/env/jdbc/hsdb"/> 
			    </dataSource>
			  </transactionManager>
			
			However, I remember from your previous posts
that you need to use local credentials to create the database
connection.  If that requirement remains, then you'll have to keep it
the way it is and manage transactions with iBATIS code - rather than
letting the container do it for you. 
			 
			For this, and many other, reasons it would be
best if you did not have to use local credentials to connect to your
database.  It would be much better to pass the USER as a parameter to
the procedures, rather than relying on the logon credential of the
connection. 
			 
			Jeff Butler
			 
			 
			On 9/30/05, Vijai Senthil Padmanabhan
Kalaiyarasi < vijaisenthil.padmanabhan@kumaran.com
<mailto:vijaisenthil.padmanabhan@kumaran.com> > wrote: 

				Hi,
				 
				    I have a doubt whether the iBATIS
will use the connection pool of the Application server's or its own
mechanism.
				    Because I need to so a
sesionContext.setRollBackOnly()
				    
				    My SQLMapConfig for connection info
goes like this. 
				    I am not using any JNDI look up to
the Application server to get the datasource.
				 
				SQLMapconfig.xml
				---------------------------
				 
				<transactionManager type="JDBC">
				    <dataSource type="SIMPLE">
				        <property name="JDBC.Driver"
value="oracle.jdbc.driver.OracleDriver "/>
				        <property
name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@machname:1521:sid"/>
				        <property name="JDBC.Username"
value="${ username}"/>
				        <property name="JDBC.Password"
value="${password}"/>
				        <property
name="JDBC.DefaultAutoCommit " value="true" />
				        <property
name="Pool.MaximumActiveConnections" value="10"/>
				        <property
name="Pool.MaximumIdleConnections" value="5"/> 
				        <property
name="Pool.MaximumCheckoutTime" value="120000"/>
				    </dataSource>
				  </transactionManager>
				 
				 
				Thanks in advance...
				Vijai Senthil P K
				
				




Mime
View raw message