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.
> >
>