db-torque-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kean <k...@pcdom.org.my>
Subject Re: Thread dies in multi-transactional enviroment
Date Thu, 23 Oct 2003 05:01:39 GMT
this is not nested transaction, this is dead lock situation if you are 
using the same resources. it's definitely the software architect 
problem. The way I solved it is always delegate or past in the 
Connection object whenever you do anything with the database, and let 
the business object handle the transaction  ...
for example ... this is just a simple example I come out here now to 
illustrate for you, it's not a production code.

//the low level class
class UserCtrl {
	public static long addUser(Connection con, String whatever, String 
groupId) throws WhateverException {
		Users user = new Users();
		user.setName(whatever);
		user.setGroupId(groupId);
		user.save(con);
		return user.getID();
	}
}
class GroupCtrl {
	public static long addGroup(Connection con, String whatever) throws 
WhateverException {
		Group group = new Group();
		group.setName(whatever);
		group.save(con);
		return group.getID();
		
		//or you can used the mediator pattern to sovled
		//the how to get the group ID
	}

	//for convenien you might want to do this method
	public static long addGroup(String whatever) throws WhateverException {
	 try {
           Connection con = Transaction.begin("hellodatabase");
	  addGroup(con, whatever);
	  Transaction.commit(con);
	} catch (TorqueException e) {
       	  try {
             Transaction.rollback(con);
           } catch (Exception ex) {
              //oh well, at least we try
           } finally {
             //new error, throw whatever error here
           }
        } catch (WhateverException e) {
		throw e;
        }

}	
//the high level class, this could be your business logic class
//or the strut action class, and I think this is better to handle
//it in the business object class.
class AddUserBusinesRule {
	public void addUser() throws AddWhateverException {
	 try {
           Connection con = Transaction.begin("hellodatabase");
       	  long groupId = GroupCtrl.addGroup(con, "hellogroup");
	  UserCtrl.addUser(con, "hellouser", groupId);
	  Transaction.commit(con);
	} catch (TorqueException e) {
       	  try {
             Transaction.rollback(con);
           } catch (Exception ex) {
              //oh well, at least we try
           } finally {
             //new error, throw whatever error here
           }
        }

}

damn, this is long, anyway, good luck.

kean

Maurice Wijtten wrote:
> I'm currently using Torque in my webapplication, and using it from
> several points acros my business logic. I'm facing the problem in a
> situation that i'm starting a transaction in an (struts) action. Inside the
> transaction i have a call to a business object which in my case handles
> billing. Inside the billing object, i have created (another?) transaction,
> since this object knows nothing about the struts action that is calling it.
> At the moment i save a torque object in the second transaction block,
> the torque thread completely dies, and my DBA get's furious because
> the oracle server is somehow having alot of trouble with it.
> My question: Is there something wrong with my architecture (having
> some sort of 'nested' transaction,  and, is there another solution.
> 
> Kinds regards,
> 
> Maurice Wijtten
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
> For additional commands, e-mail: torque-user-help@db.apache.org
> 
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
For additional commands, e-mail: torque-user-help@db.apache.org


Mime
View raw message