Two DAO questions


EJB design: Two DAO questions

  1. Two DAO questions (5 messages)

    Hi all,
    I wrote a Session Bean that directly retrieved
    data from a DB using DataSource (obtained via JNDI code).

    If I want to use a DAO to separate the Session Bean
    from the DB can I put JNDI code, to get DataSource,
    into the DAO ?

    DAO can have a method that return, to the Session Bean,
    the Data Transfer Object that Session Bean will
    send to the client ? (the alternative is that Session
    Bean builds the DTO, after having called many DAO's methods).

    Many thanks in advance,

    Threaded Messages (5)

  2. RE: Two DAO questions[ Go to top ]

    I guess it all depends what you want to do with your DAO.

    For example, you can create a DAO factory class that creates and manages instances of your DAOs. This DAO factory could be configurable (e.g. what is the name of DATA SOURCE to use)

    Then since DAO already have mapping to the relational data e.g. ValueObjects
    I'm not sure if you need to have on top of that Session bean that does it again...wraps all the stuff into Transfer Object for remote access.

    May be it will work better for you to have:

    DAO factory that used be your application code to obtain DAO instance:
    MyDAOFactory f = MyDAOFactory.getInstance();
    MySampleDAO myDao = f.getMySampleDAO();

    Then by hiding implementation of actual DAO, you can have different implementations (IN-MEMORY, JDBC, JDO, EJB...)
  3. Two DAO questions[ Go to top ]

    Typically the DAO would be responsible for constructing the DTO.

    Take a look here for some sample DAO code:
  4. Two DAO questions[ Go to top ]

    Thank you (Ruslan and Andy)

    Andy, I saw the example.
    In DAO constructor you receive a Connection object.

    Is it correct that Session Bean passes the Connection
    to the DAO ?

    I put all SQL code (getConnection() included) in DAO
    but I'm not sure that this is a good approach ????

    On the other way, if I put getConnection() inside
    Session Bean I don't completely divide the Bean itself
    from the below DataSource.

    Can you suggest me the better approach ?

    Thanks again
  5. Two DAO questions[ Go to top ]

    It is best to keep connection code separate from your DAO implementation code (you may want to change the way you obtain connections later or may want to start using container-managed transactions).

    I tend to use the approach of passing a Connection or some sort of Connection factory class into the DAO constructor.

    I'd recommend downloading the evaluation copy of FireStorm - you can use this to generate fully working DAO code for up to 5 tables (great for learning how to use DAO). It supports JDBC, EJB, and JDO.

    You can download it from:
  6. Re: Two DAO questions[ Go to top ]

    Hi, It is recommended that you pass the connection object from the deployment tier to tiers like data access tier. Your DAOs should be testable regardless of how you want to get the connection. For more information please see the excellent book of Derek C. Ashmore : J2EEArchitectsHandbook. You can download that book from this site. Cheers, Reza