Roll Back not working
saulat78 Nov 2, 2007 7:36 AMHello
I have a Stateless EJB, that is performing two transactions via DAOs,
the first DAO inserts the record, then I am explicitly throwing exception in the second DAO and it fails to add record, then I expect the ut.rollback() method to roll back my first record but it is not doing so, can any one tell me what I am missing.
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class DTCTestBean implements DTCTestRemote
{
@Resource SessionContext ctx;
public void performTransaction(int param)
{
UserTransaction ut=null;
Connection conn = null;
try
{
InitialContext initCtx = new InitialContext(getProperties());
DataSource ds = (javax.sql.DataSource)initCtx.lookup(DAOConstants.DB_VAM);
conn = ds.getConnection();
ut = ctx.getUserTransaction();
// start the transaction
ut.begin();
FirstDAO dao = new FirstDAO();
MyDTO dto = new MyDTO();
dto.setA(123);
int i = dao.insert(dto, conn); //performs the first transaction
SecondDAO dao2 = new SecondDAO();
SecondDTO dto2 = new SecondDTO();
dto2.setB(456);
int j = dao2.insert(dto2, conn) ; //explicitly throwing exception
ut.commit();
}
catch(Exception e)
{
try
{
System.out.println("Attempting to roll back");
ut.rollback(); // Y this dont roll back the first transaction
System.out.println("Transaction roll back");
}
catch(Exception in)
{
in.printStackTrace();
}
}
finally
{
try
{
if(conn != null)
conn.close();
}
catch(Exception e)
{
System.out.println("Ignorable Exception " + e.toString() );
}
}
}
private Properties getProperties()
{
String urlName = "jnp://222.222.2.227:1099";
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
p.put(Context.PROVIDER_URL, urlName);
p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
return p;
}
}My data source conf is
<datasources> <local-tx-datasource> <jndi-name>VAM</jndi-name> <use-java-context>false</use-java-context> <connection-url>jdbc:sqlserver://YCASHMTDEV:1433;databaseName=VAM</connection-url> <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class> <user-name>sa</user-name> <password>sa1234</password> <max-pool-size>100</max-pool-size> <min-pool-size>10</min-pool-size> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>15</idle-timeout-minutes> <!-- correspondinasdg type-mapping in the standardjbosscmp-jdbc.xml (optional) --> <metadata> <type-mapping>mySQL</type-mapping> </metadata> <metadata> <type-mapping>MS SQLSERVER2005</type-mapping> </metadata> </local-tx-datasource> </datasources>
I am also using two more data sources in the same file but i only included that I am using.
Any help will be appreciated
Saulat