template method pattern

java, spring, template-method-pattern

Solution

You should use the template pattern in this case, something like this:

public abstract class BaseClass 
{      
  public Object executeTrans(Template template) 
  {
    tx.begin();            
    template.doTransaction();
    tx.commit();    
  }
}

public interface Template
{
  public void doTransaction();
}

public childClass extends BaseClass
{
  public List<String> getInfoFromDB()
  {
    executeTrans(
      new Template()
      {
        public void doTransaction() 
        {
          ...do get info from DB here.
        }
      }
    );
  }

  public void saveToDB()
  {
    executeTrans(
      new Template()
      {
        public void doTransaction() 
        {
          ...do save to DB here.
        }
      }
    );
  }
}

Saying that, I'd advise using the Spring JDBC template classes rather than rolling your own - they've been tried and tested and have solved the problems you'll run into with nested transactions etc.

Problem

May i know how to create childClass if my childClass method getInfoFromDB() and saveToDB() need to do different logic? ``` public abstract class BaseClass { public abstract Object doTransaction(); public Object executeTrans() { //do something tx.begin(); this.doTransaction(); tx.commit(); } } public childClass extends BaseClass{ @Override public Object doTransaction(){ //overide to get something from database so can only be used for getInfoFromDB() and not for saveToDB() return something; } public List<String> getInfoFromDB(){ super.executeTrans(); } public void saveToDB(){ super.executeTrans() ; } } ```

Original source