Saw a typo! oopsie :-) " I would not place the dao in my base service class."
Should be: "I would not place the dao manager in my base service class." On 5/1/05, Brandon Goodin <[EMAIL PROTECTED]> wrote: > Hi Gregg, > > The dao manager does not parse it every time. It only parses once. > > Also, I would do things a bit different than you are doing. I would > not place the dao in my base service class. I would use a DaoConfig > class that holds the DaoManager reference as an static final instance > variable. I would setup my Service classes to contain instance > variable DAO classes that are loaded via the DaoConfig class in the > constructor. See the examples below. > > --- DaoConfig.java --- > public class DaoConfig { > > private static final DaoManager daoManager; > > static { > > try { > String resource = "org/apache/ibatis/jgamestore/dao/sqlmap/dao.xml"; > Reader reader = Resources.getResourceAsReader(resource); > daoManager = DaoManagerBuilder.buildDaoManager(reader); > } catch (Exception e) { > throw new RuntimeException("Could not initialize DaoConfig. > Cause: " + e); > } > } > > public static DaoManager getDaoManager() { > return daoManager; > } > > } > > --- CatalogServiceImpl.java --- > > public class CatalogServiceImpl implements CatalogService { > > private DaoManager daoManager; > private CategoryDao categoryDao; > private ProductDao productDao; > private ProductImageDao productImageDao; > private ImageDao imageDao; > > /** > * regular empty constructor > */ > public CatalogServiceImpl() { > this.daoManager = DaoConfig.getDaoManager(); > this.categoryDao = (CategoryDao) daoManager.getDao(CategoryDao.class); > this.productDao = (ProductDao) daoManager.getDao(ProductDao.class); > this.productImageDao = (ProductImageDao) > daoManager.getDao(ProductImageDao.class); > this.imageDao = (ImageDao) daoManager.getDao(ImageDao.class); > } > ... > > public void addProduct(Product product) { > try { > daoManager.startTransaction(); > > // save product > productDao.addProduct(product); > ... > daoManager.commitTransaction(); > } finally { > daoManager.endTransaction(); > } > } > > Hope that helps, > > It is a BAD policy to make your service layer dependent on the > view/web layer. Your web layer can depend on your service layer. But, > your service layer should never depend on your web layer. Likewise > your Service Layer can depend on your DAO layer. But, your DAO layer > should never depend on the Service layer. Make it a rule to maintain > healthy separation in your development. > > _______Model______ > | | | > Web-->Service-->Dao > > Ciao, > Barndon > > On 5/1/05, Gregg D Bolinger <[EMAIL PROTECTED]> wrote: > > I am testing using iBatis DAO with iBatis SqlMaps in a web > > application. Right now I have a BaseService that looks like this: > > > > public abstract class BaseService { > > > > public static final String DAO_XML_PATH = > > "com/intrust/anykey/database/dao/iBatis/dao.xml"; > > > > protected DaoManager daoManager; > > > > public BaseService(){ > > try{ > > final Reader reader = > > Resources.getResourceAsReader(DAO_XML_PATH); > > daoManager = DaoManagerBuilder.buildDaoManager(reader); > > }catch(IOException e) { > > e.printStackTrace(); > > } > > } > > } > > > > All my Service class extend this base service. What I would like to > > know is if there is a way to load the daoManager into the > > ServletContext somehow so that I am not parsing the dao.xml file with > > every service request. I'd like to do it once when the Webapp loads > > and just pull the daoManager from the ServletContext. Is it as easy > > as creating a ContextListener to do this? Is there one in the API > > that I don't know about? Writing my own isn't a problem though. > > >