DAO reusability

Hello,
I have a question regarding DAO�s.
DAO�s help solve the problem of switching you data access layer, that I know. I wonder however how reusable they are. An example:
UserProfileDAO declares the method findUserProfile(int userId) and returns a UserProfile instance.
In the next project I need the user profile to contain more properties e.g. the date of his last visit. The UserProfile class would be extended by the SpecificUserProfile class to hold these new properties.
However when I�m using the UserProfileDAO in my new project I�ll need to cast from UserProfile to SpecificUserProfile all the time when calling findUserProfileById(..).
A solution would be to define the SpecificUserProfileDAO and declare another find method that has the correct return type: SpecificUserProfile. This solves my cast problem but leaves me with 2 find by id methods in my SpecificUserProfileDAO interface that do the exact same thing. The only difference is the return type.
Can anyone tell me how this could be done in a cleaner way?
If I�m being to picky just tell me ;-)
Regards,
Wim

However when I�m using the UserProfileDAO in my new
project I�ll need to cast from UserProfile to
SpecificUserProfile all the time when calling
findUserProfileById(..).Not a real big problem.
A solution would be to define the
SpecificUserProfileDAO and declare another find
method that has the correct return type:
SpecificUserProfile. This solves my cast problem but
leaves me with 2 find by id methods in my
SpecificUserProfileDAO interface that do the exact
same thing. The only difference is the return type.Does this work for you?public SpecificUserProfile findSpecificUserById(int) {...}
public UserProfile findUserById(int) {
   return new UserProfile(findSpecificUserById(int))
};

Similar Messages

  • Functional DAO vs OR DAO

    Hi,
    I have a customer table that has
    - cutomerId that is Foreign key to Name Table,
    - addressId Foreign Key to Address table
    - companyId foreign key to company table.
    Now, my dilemma is this,
    - Should I create separate DAO's, one for each of Customer, Address, Company and Name
    or Should I create a Single dao named customer that uses SQL joins to get all the related Information?
    In Case 1:
    - I suffer multiple calls to DB and Iterations across customerVO list , but gain on reusability.
    In Case 2:
    - I have some logic in SQL, but i get all that I want in a single query to DB. But loose on ease of change.
    Questions:
    Is there a better way of doing this?
    What would be the preferred way - OR mapped DAO or a Funtional DAO?
    I went though the forum but did not find anything that quite answered my query. Hence I decided to Post this query.
    Regards,
    Shai

    shai_al wrote:
    Hi,
    I have a customer table that has
    - cutomerId that is Foreign key to Name Table, Sorry, I'm not feeling a Name table.
    - addressId Foreign Key to Address table What? This doesn't make sense to me.
    - companyId foreign key to company table.What? This doesn't make sense to me.
    There are occasions when a table will have a foreign key to itself (e.g., a Party abstraction which can have Individuals or Organizations), but I don't see it for either of these.
    I can see where a Customer object could have a 1:m relationship to Address; same for Company. And a Company might have a 1:m relationship with employees.
    Sorry, I'm not a fan of your relational model.
    Now, my dilemma is this,
    - Should I create separate DAO's, one for each of Customer, Address, Company and Name
    or Should I create a Single dao named customer that uses SQL joins to get all the related Information?If the Customer object HAS A Set<Address> and a reference to a Company, there should be a Customer DAO that JOINs to fully populate the object.
    If you think you'll use an Address or Company without the Customer, maybe you'd write DAOs for those.
    Whatever you do, it should be driven by your use cases and you should strive for the best performance without repetition.
    Questions:
    Is there a better way of doing this?Undoubtedly.
    What would be the preferred way - OR mapped DAO or a Funtional DAO?I don't believe there is one true answer.
    DAO is a pattern that isn't driven by the way you implement it. And it need not be one or the other exclusively. Map objects where it makes sense and use raw JDBC/SQL or iBatis where that works.
    %

  • Using DAO using a JDBC data source with struts

    Hello,
    I have created a number of Data Access Objects and Transfer Objects to use in a non EJB, struts web application I am developing. I had tested these with a kind of a Service Locator custom class to provide access to a JDBC connection. My custom class is a bit clunky and not very configurable. I would like to use a data source using the struts config XML file e.g.
        <data-sources>
            <!-- configuration for commons BasicDataSource -->
            <data-source type="org.apache.commons.dbcp.BasicDataSource">
                <set-property
                  property="description"
                  value="My MySQL Database Connection" />
                <set-property
                  property="driverClassName"
                  value="com.mysql.jdbc.Driver" />
                <set-property
                  property="url"
                  value="jdbc:mysql://localhost/databaseName" />
                <set-property
                  property="username"
                  value="myUsername" />
                <set-property
                  property="password"
                  value="xxxxxxxxx" />
                <set-property
                  property="maxActive"
                  value="10" />
                <set-property
                  property="maxWait"
                  value="5000" />
                <set-property
                  property="defaultAutoCommit"
                  value="false" />
                <set-property
                  property="defaultReadOnly"
                  value="false" />
             </data-source>
        </data-sources>This is great, and precisely the kind of thing I would like to use. However, this datasource is only available AFAIK through a HttpServletRequest instance like in the example I found below...
        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                                     HttpServletResponse response)     throws Exception
            javax.sql.DataSource dataSource = null;
            java.sql.Connection myConnection = null;
            try {
             dataSource = getDataSource(request);
             myConnection = dataSource.getConnection();
             // do what you wish with myConnection
            } catch (SQLException sqle) {
               getServlet().log("Connection.process", sqle);
            } finally {
               //enclose this in a finally block to make
               //sure the connection is closed
               try {
                  if(myConnection != null)
                      myConnection.close();
               } catch (SQLException e) {
                  getServlet().log("Connection.close", e);
            return (mapping.findForward("success"));
        }That would be great if I wanted to use the database connection anywhere near a struts Action (wrong tier!). I want access like that to to a data source in my DAOs. Is it possible for me to use the data-sources aproach to access the DB from my DAOs or will I need to use something like JNDI to do this in a similar way but separate from struts. If so I have a big gap in my knowledge as far as JNDI goes which I need to fill and that will be my next question
    I'm relatively new to using patterns inn Java and any help or pointers would be great.
    Thanks :)

    Create a JAAS Authentication Entry in the Server configuration.
    This should then appear in the drop-down when specifying your DataSource.

  • How to retrieve values from the struts DAO to Struts JSP

    Hi friends,
    I have one question. i want to display values in the struts jsp file from the struts DAO class. can anyone tell how do it.
    Appreciated for your help.
    Thanks
    G1 :)

    Hi Santosh,
    Thanks for your prompt reply.
    Actually, my problem is i want to display complete rows from the DAO to JSP page. I'm displaying all the rows in the DAO from DB.
    But i dont know how to retrieve all these data from DAO. Can i take arraylist.??
    DAO:
    ------------     public Customers getData(Customers customers){ // Reading data from DB
         //ArrayList list = null ;
         try
              Connection conn = getSQLConnection();
              Statement statement = conn.createStatement();
              String qry = "select * from register";
              ResultSet resultSet = null;
              PreparedStatement pstat = conn.prepareStatement(qry);
              // pstat.setString(1, customers.getFname());
              resultSet = pstat.executeQuery();
    //Print the data to the console
    while(resultSet.next()){
              String fnam = resultSet.getString(1);
              String lnam = resultSet.getString(2);
              String gen = resultSet.getString(3);
              String addres = resultSet.getString(4);
              String cit = resultSet.getString(5);
              String zip = resultSet.getString(6);
              String county = resultSet.getString(7);
              String emal = resultSet.getString(8);
              System.out.println("First name:"+fnam);
              System.out.println("Last name:"+lnam);
              System.out.println("Address:"+addres);
              customers.setFname(fnam);
              customers.setLname(lnam);
              customers.setGender(gen);
              customers.setAddress(addres);
              customers.setCity(cit);
              customers.setZipcode(zip);
              customers.setCountry(county);
              customers.setEmail(emal);
                   statement.close();
                   conn.close();
              }catch(Exception e1){
                   e1.printStackTrace();
              return customers;
    Bean:
    I have specified in this line in Bean:
    request.getSession().setAttribute("customers", customers);
    But in JSP. how will i populate all these data. Pls..send some code.
    I'm sorry this is just practicals. i'm not doin any real time project. that;s why i have placed all these code.
    Thanks for your patience for resolving my problems.
    Thanks
    G1

  • How to use existing WSP file of reusable workflow and create sanbox solution?

    Hello,
    I have to migrate the SharePoint Designer 2013 workflows from Development environment to Production environment. So, I am following the process which is mentioned in this blog:
    http://sharepointyankee.com/2010/12/11/options-for-deploying-reusable-workflows-in-sharepoint-2010/
    And it is working also, but problem is that; this visual studio solution is getting deployed as a Farm Solution and I wanted to deploy it as a sandbox solution. 
    Is there any way to achieve this?
    I have also tried one more way which is:
    Create SharePoint Custom Workflow Project as a sandbox solution in Visual studio.
    Get WSP file from development site (as mentioned in above referenced blog)
    Open WSP file and copy the content to Visual Studio Created project
    But this solution is also not working; "Feature is not getting deployed as sandbox solution" error is occurring.
    Can anyone please help me on the same?
    Thanks,
    Asim

    Hi,
    When you export SPD workflow, it will be a sandbox solution only, you are not required to configure further.
    Just import the workflow into Visual Studio, and make the changes that are required. you are good here.
    you can set the scope attribute in your WSP feature element.
    Hope this helps!
    Ram - SharePoint Architect
    Blog - SharePointDeveloper.in
    Please vote or mark your question answered, if my reply helps you

  • How to use same transaction when calling CMP entity beans and  DAO (JDBC)

    We are currently using Weblogic 8.1 SP2 with an Oracle 10g database (using XA thin and non-XA drivers).
    We have a session bean that invokes an entity bean and a DAO (data access object pattern) in order to add data in 2 separate tables (account and history). Rows are added to the first (account) table using a CMP Entity bean while inserts are done in the 2nd (history) table using a DAO. Here is some pseudo code:
    addHistorySessionBean (trans-attribute="Required")
    begin
    Step #1 - call addAccountEntityBean (trans- attribute="Required")
    Step #2 - call addHistoryDAO (get datasource, connection)
    end
    The 2nd table (history) has a foreign key constraint to ensure that the corresponding key exists in the first (account) table. Unfortunately, DAO inserts on the 2nd (history) table fail with a foreign key constraint violation (INTEGRITY CONSTRAINT VIOLATION - PARENT KEY NOT FOUND!) since they cannot see the row added to the 1st (account) table in step #1 by the CMP entity bean.
    How does one ensure that all this is done in a single transaction ? It appears that the app server creates two seperate transactions (one for the session bean facade and the entity bean and a 2nd transaction (when we retrieve a connection using the same data source JNDI name) for the DAO.
    A post on server side suggested using a "<resource-ref>" in the session bean to tie the two potentially separate transactions together, but that does not work for us. However, I am not sure if we are doing that correctly. After we define the resource ref in the session facade bean, do we use the resource ref "name" attribute to lookup the datasource or do we still lookup the datasource by JNDI name ? Do we need to define the resource-ref tag in the entity bean also ?
    Does Weblogic allow using a single transaction for this type of a scenario ? How does one specify within Weblogic that the same transaction should be utilized by the entity bean and any subsequent DAOs?
    People have also suggested that we defer constraint checking until the transaction(s) are committed but that sounds like a work acount without addressing this issue. Would postponing the constraint checking in Oracle cause any additional overhead ?
    Any suggestions with specific examples or documentation on how to address this issue will be gratefully appreciated.

    Thanks for your suggestion. Unfortunately, this does not work since it appears that there are 2 separate transactions going on here. One, the original one initiated by the session bean and used by the entity bean and the other initiated by the DAO. Any other ideas appreciated.
    Hi,
    Try setting the delay-database-inserts tag to
    ejbCreate in RDBMS descriptor file.
    http://bernal/stage/wls/docs81/ejb/DDreference-cmp-jar
    .html#1113981
    vasanthi ramesh

  • How to package a page template as a reusable component??

    Hello, i need to package a page template as a reusable component, this template has images and lot of parameters.
    Any suggest?

    carlson.steve wrote:
    So I have done as you suggested and created a new and separate application to hold not only my jsf template files but also my trinidad-config and trinidad-skins xml files, packaged it into an ADF library Jar and then added that jar to the libraries of my forward facing public app but still can't get the public app to see either the jsf template or trinidad skinning files... what am I doing wrong here?Hi,
    I suggest that you verify that both pagetemplate-metadata.xml and oracle.adf.common.services.ResourceService.sva service resources file are packaged in the META-INF directory of your Template Project ADF Library JAR.
    Cheers,
    Nick

  • Deploying a Reusable Workflow to a List Content Type using PowerShell

    We have a situation where deployment of a reusable workflow for a site content type cannot be completed through the web interface due to the number of libraries where the content type is in use (time-out on deploy and update).
    It was hoped that this could be accomplished with PowerShell but the method of deploying to a list content type appears to be different than it is to a list (all content types).
    The below snippet works fine for a list / all content types:
    function AddWorkflowToLibraries ($SiteCollection, $ctName, $WfName, $WfAssociationName)
    $site = Get-SPSite $SiteCollection
    [Guid]$wfTemplateId = New-Object Guid
    #Step through each web in site collection
    $site | Get-SPWeb -limit all | ForEach-Object {
    $web = $_
    $_.Lists | ForEach-Object{
    if($_.AllowContentTypes -eq $true)
    if($_.ContentTypes.Item("$ctName") -ne $null)
    write-host "Enabling workflow on" $_.Title "in" $_.ParentWebUrl
    $ct = $_.ContentTypes[$ctName]
    $culture = New-Object System.Globalization.CultureInfo("en-US")
    $template = $site.RootWeb.WorkflowTemplates.GetTemplateByName($WfName, $culture)
    if($template -ne $null)
    $tasklist = "Tasks"
    $historylist = "Workflow History"
    if(!$web.Lists[$historylist])
    $web.Lists.Add($historylist, "A system library used to store workflow history information that is created in this site. It is created by the Publishing feature.",
    "WorkflowHistory", "00BFEA71-4EA5-48D4-A4AD-305CF7030140", 140, "100")
    if (!$web.Features["00BFEA71-4EA5-48D4-A4AD-305CF7030140"]) {
    Enable-SPFeature -Identity WorkflowHistoryList -Url $web.Url
    $wfHistory = $web.Lists[$historylist]
    $wfHistory.Hidden = $true
    $wfHistory.Update()
    if(!$web.Lists[$tasklist])
    $web.Lists.Add($tasklist, "This system library was created by the Publishing feature to store workflow tasks that are created in this site.", "WorkflowTasks", "00BFEA71-A83E-497E-9BA0-7A5C597D0107", 107, "100")
    $association = [Microsoft.SharePoint.Workflow.SPWorkflowAssociation]::CreateListAssociation($template, $wfName, $web.Lists[$tasklist], $web.Lists[$historylist])
    $association.AllowManual = $true
    $_.AddWorkflowAssociation($association)
    $_.Update()
    else
    Write-Error "Workflow Template not found"
    AddWorkflowToLibraries <Site Name> <Content Type Name> <Workflow Template Name> <Association Name>
    However changing the association as follows causes the script to still execute without a problem but the workflow doesn't appear for the content and the associations collection is empty:
    function AddWorkflowToLibraries ($SiteCollection, $ctName, $WfName, $WfAssociationName)
    $site = Get-SPSite $SiteCollection
    [Guid]$wfTemplateId = New-Object Guid
    #Step through each web in site collection
    $site | Get-SPWeb -limit all | ForEach-Object {
    $web = $_
    $_.Lists | ForEach-Object{
    if($_.AllowContentTypes -eq $true)
    if($_.ContentTypes.Item("$ctName") -ne $null)
    write-host "Enabling workflow on" $_.Title "in" $_.ParentWebUrl
    $ct = $_.ContentTypes[$ctName]
    $culture = New-Object System.Globalization.CultureInfo("en-US")
    $template = $site.RootWeb.WorkflowTemplates.GetTemplateByName($WfName, $culture)
    if($template -ne $null)
    $tasklist = "Tasks"
    $historylist = "Workflow History"
    if(!$web.Lists[$historylist])
    $web.Lists.Add($historylist, "A system library used to store workflow history information that is created in this site. It is created by the Publishing feature.",
    "WorkflowHistory", "00BFEA71-4EA5-48D4-A4AD-305CF7030140", 140, "100")
    if (!$web.Features["00BFEA71-4EA5-48D4-A4AD-305CF7030140"]) {
    Enable-SPFeature -Identity WorkflowHistoryList -Url $web.Url
    $wfHistory = $web.Lists[$historylist]
    $wfHistory.Hidden = $true
    $wfHistory.Update()
    if(!$web.Lists[$tasklist])
    $web.Lists.Add($tasklist, "This system library was created by the Publishing feature to store workflow tasks that are created in this site.", "WorkflowTasks", "00BFEA71-A83E-497E-9BA0-7A5C597D0107", 107, "100")
    $association = [Microsoft.SharePoint.Workflow.SPWorkflowAssociation]::CreateListContentTypeAssociation($template, $wfName, $web.Lists[$tasklist], $web.Lists[$historylist])
    $association.AllowManual = $true
    $_.ContentTypes[$ctname].AddWorkflowAssociation($association)
    $_.ContentTypes[$ctname].Update()
    else
    Write-Error "Workflow Template not found"
    AddWorkflowToLibraries <Site Name> <Content Type Name> <Workflow Template Name> <Association Name>
    The only change is:
    $association = [Microsoft.SharePoint.Workflow.SPWorkflowAssociation]::CreateListContentTypeAssociation($template, $wfName, $web.Lists[$tasklist], $web.Lists[$historylist])
    $association.AllowManual = $true
    $_.ContentTypes[$ctname].AddWorkflowAssociation($association)
    $_.ContentTypes[$ctname].Update()
    But unlike the list version, the association doesn't appear to be saved and no error is generated.
    Is anyone aware of what may cause this or have an example in C# that may explain something my script is missing?

    Hi Garry,
    After you associate the workflow to the content type, you should update the update the content type using
    $ct.UpdateWorkflowAssociationsOnChildren($true,$true,$true,$false)
     method.
    Here is the completed script:
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    $site=Get-SPSite "http://serverName"
    $web=$site.OpenWeb()
    $list=$web.Lists["ListC"]
    $taskList=$web.Lists["Tasks"]
    $historyList=$web.Lists["Workflow History"]
    $ct=$list.ContentTypes["Link"]
    $culture=New-Object System.Globalization.CultureInfo("en-US")
    $wfTemplate=$web.WorkflowTemplates.GetTemplateByName("Three-State",$culture)
    $associationWF=[Microsoft.SharePoint.Workflow.SPWorkflowAssociation]::CreateListContentTypeAssociation($wfTemplate, "myThreeStateWF",$taskList,$historyList)
    $ct.WorkflowAssociations.Add($associationWF)
    $ct.UpdateWorkflowAssociationsOnChildren($true,$true,$true,$false)
    Here is a demo about how to update it using C#
    http://www.thorntontechnical.com/tech/sharepoint/sharepoint-2010-associate-workflow-to-content-type-in-a-feature
    Wayne Fan
    TechNet Community Support

  • DAO and Domain Object

    hi,
    Normally when i want to persist a domain object like Customer object to a database, my statements will be below,
    // code from my facade
    Customer cust = new Customer();
    cust.setFirstName("myname");
    cust.setLastName("mylastname");
    // set another attributes
    cust.create();
    with this code i have a CustomerPersistence object to handler for create this customer record to a database. Now j2ee have a DAO pattern. So my question is,
    1.where is a domain object within DAO pattern? --> because of we can reused domain object.
    2.DTO is Domain Object, isn't it?
    3.when i look at some articles about DAO, many of it will present in this way
    facade -->create DTO --> call DAO (plus something about factory pattern)
    i never see something like this
    facade --> domain object --> dao
    any suggestion?
    anurakth
    sorry for my english!!

    Hi,
    I am a bit confused about implementation of the domain model and I wondered if you could help. My main concern is that I am introducing too many layers and data holders into the mix. Here is what I am thinking.
    DTO - used to carry data between the presentation and the services layer
    Service Class - coordinates the calling of domain objects
    Domain Object - models a domain entity, service layer logic specific to this object is to be implemented here.
    Data Object - an exact representation of a database table. many to many relationship between domain object and data object.
    Hibernate DAO Class - has no properties, just methods used for read and writing the object to the database. It is passed in the Data Object for persistence. Is it wrong that the DAO contains no properties?
    Perhaps the domain object will contain each data object it is comprised of. I was originally going to keep calls to DAOs in the Services class (as recommended in http://jroller.com/page/egervari/20050109#how_to_change_services_logic ) but I am thinking that each domain object could expose a save method, and that method would co-ordinate persisting itself to the various tables it is derived from.
    Does this sound resonable? I have trouble finding a pattern on the net that clealy defines the Domain Model. I was tempted to map Domain Objects directly to database tables, and simply persist the Domain Object, but this 1-1 relationship may not always hold true.
    Thanks.

  • MS Access: Oracle9i: How To: Open an Oracle "VIEW" in a DAO Database ???

    NEWBIE Alert!
    Esteemed Forum Participants and Lurkers:
    ===============================
    I have successfully opened an Access (2002) DAO Database from a remote Oracle database and fetched all of the TableDefs (all 534 of them!), but I'm told that what I actually need is 2 'Views'. I have tried to access these 'Views' as TableDefs and as QueryDefs, but these attempts cause an error message that they "don't exist in the collections". Here is my Access VBA code ...
    Sub DAO_TEST()
        Dim myDAOWorkspc As DAO.Workspace  'Declare a Workspace
        Dim myDAOdb As DAO.Database        'Declare a handle for the Oracle Database
        Dim aTable As DAO.TableDef         'Declare an iterator for the TableDefs
        Dim aQuery As DAO.QueryDef
        Dim strODBC As String  'Declare a Connection String
        ' Initialize the connection string
        strODBC = "ODBC;UID=myID;PWD=myPWD;DSN=ORA_DB"
        ' Create a Workspace ... I have no idea what to declare as User and Pwd,
        ' but I am an admin (but that's NOT my user ID) and this works!
        Set myDAOWorkspc = DAO.CreateWorkspace("myWorkspc", "admin", "")
        ' THANKS to Justin Cave for the following !!!
        ' For DAO to Oracle:  Control Panel  >  Administrative Tools  >  Data Sources (ODBC)
        ' Select appropriate DSN and click Configure button
        ' Select Workarounds tab and turn "Set Metadata Id Default to SQL_TRUE" checkbox to CHECKED
        '                               1st param is DNS NAME!!!
        Set myDAOdb = myDAOWorkspc.OpenDatabase("ORA_DB", dbDriverComplete, True, strODBC)
    '> ERROR: Item not found in this collection!!!
        Set aTable = myDAOdb.TableDefs("ad_owner.itm_dtl_view")
    '> ERROR: Item not found in this collection!!!
        Set aQuery = myDAOdb.QueryDefs("ad_owner.itm_dtl_view")
    ' This WORKS with the above errors commented out
        Debug.Print "    START OF TABLE NAMES"
        For Each aTable In myDAOdb.TableDefs
            Debug.Print aTable.Name
        Next
        ' Clean up the house please
        myDAOdb.Close
        Set aTable = Nothing
        Set aQuery = Nothing
        Set myDAOdb = Nothing
        Set myDAOWorkspc = Nothing
    End SubI need to figure out how to access "Views" such as "ad_owner.itm_dtl_view". Thank you for any and all comments, suggestions, and assistance.
    Blessings in abundance, all the best, and ENJOY!
    Art Carlisle, PA USA
    Message was edited by: ADR mod Bold tags
    webtest

    Hi,
    this is my weekly script to backup oracle database.
    i run it from cron so you can schedule it in win but you must do same change there
    #!/bin/bash
    . /etc/profile.d/oracle.sh
    TMPDIR=/opt/app/oracle/tmp
    $ORACLE_HOME/bin/rman target / nocatalog log=$TMPDIR/backup_full_`date +'%Y%m%d_%H%M'`.log >/dev/null 2>&1 <<EOF
    set echo on;
    show all;
    crosscheck archivelog all;
    crosscheck backup ;
    delete noprompt expired backup device type disk;
    backup device type disk database tag='FULL_BACKUP';
    backup device type disk archivelog all not backed up;
    delete noprompt obsolete device type disk;
    exit;
    EOF
    exit

  • ADF JSF, refresh collection using a DAO without a database - Best Practice?

    I have previously developed a comprehensive application using ADF 10.12. This application did not use a database, instead I was manually populating collections of objects that data controls were generated for to talk to the ADF components.
    This applciation was based upon the old (10.12) version of ADF and utilised the following structure;
    DataPage (start.jsp) --> DataAction (getRecords) --> DataPage (display.jsp)
    In this instance, by overriding methods on the getRecords DataAction I could populate the collection that was to be displayed on the display.jsp DataPage.
    I am now designing a new application that will hopefully use the latest version of ADF (10.13). This application will also use collections of objects from an external source.
    The structure of ADF 10.13 (faces-config.xml) is different to 10.12 (struts-config.xml) e.g.
    JSFPage (start.jsp) --> getResults (navigation case) --> JSFPage (display.jsp)
    Having read the ADF Developer Guide, and looked through example #60 (onPageLoad) that was developed by Steve Muench, I am aware that there are at least three options that I could use to get populate the collection of objects that are displayed on the display.jsp page when a button is pressed on the start.jsp page;
    1. use a backing bean that extends PageController
    2. use a backing bean that extends PagePhaseListener
    3. use a backing bean that has a specific action that is assigned to the button
    Q1a. which one is the most appropriate/efficient to use?
    When the button is pressed on the start.jsp page, it will be set to call getResults navigation case on faces-config.xml.
    Q1b. Is it possible to detect when this action is triggered, populate the collection of data which is bound the display.jsp JSFPage, and then allow the getResults navigation case to continue execution?
    The application that I am developing will have the following structure;
    recordObject - Object to hold a record
    recordCollection - Collection of recordObjects
    recordDao - DAO use to populate the recordCollection
    When using 10.12 I did not have a separate recordDao (as it was query only) I had a refresh method within the recordCollection.
    Q2. what is the most efficient way of achieving this? there will be one DAO per Collection and approx 30 Collections
    Q3. does anyone have/can point me in the direction of any other examples where actions that trigger call navigation cases are overriden, custom actions are called and then the original ones allowed to continue?
    Thanks in advance for your help/advice
    David

    Thanks for the pointers Steve, they have been very useful.
    This is what I have done;
    set up the following pages and navigation cases (show in bold) on faces-config.
    start.jsp >> getSystems >> systems.jsp >> display >> display.jsp
    systems.jsp >> new >> new.jsp
    systems.jsp << back << new.jsp
    added refreshCollection() as a button to start.jsp
    set the button to call getSystems
    added the collection as a read only table to systems.jsp
    - this works correctly
    added the collection as an input form to the new.jsp page
    added the addNewRecord(systemObject so) function as a button to new.jsp
    set the button to call back
    - this is where I encounter a problem.
    The addNewRecord(systemObject so) function takes a new record as a parameter and adds it to the collection. It is doing this but it is not populating the new record. I know that this is the case because when I return to the systems.jsp page there is a new record within the table but it is empty.
    Q. How do I capture the values from the input form that is on the new.jsp page, set them to a new instance of an object and then pass this object to the addNewRecord(systemObject so) function?
    Thanks
    David

  • EJB classpath problem when refering a DAO in library jar file

    Hi
    When I tried to deploy an EJB jar file in 10g which references the DAO for getting database[SQL Server2000] query results.Its not retriving data nor throwing any exceptions.Other DAO business methods which do not access database are working well.
    When I tried to import the DAO inside a JSP and calling the DAO data access method which is working fine. Even I have set the resource-ref [datasource JNDI Name] in ejb-jar.xml files for the EJB beans, but its not referencing. If you have any ideas, how to resolve this problem, please forward me your suggestion.
    Thanks in Advance
    Best Regards
    Venugopal Balu

    Hi
    When I tried to deploy an EJB jar file in 10g which references the DAO for getting database[SQL Server2000] query results.Its not retriving data nor throwing any exceptions.Other DAO business methods which do not access database are working well.
    When I tried to import the DAO inside a JSP and calling the DAO data access method which is working fine. Even I have set the resource-ref [datasource JNDI Name] in ejb-jar.xml files for the EJB beans, but its not referencing. If you have any ideas, how to resolve this problem, please forward me your suggestion.
    Thanks in Advance
    Best Regards
    Venugopal Balu

  • Is dao pattern is the best practice in projects

    let me know if dao pattern is the best followed in all almost all the
    projects though finding alternatives to it. please clarify this for me and also i do want to know the best practices of the industry in using design patterns.

    There is no 'best' pattern. It is just all abouthow
    and where to apply them. This is very true,but these are common
    design patterns used in industry for standard
    problems.
    ost of the time patterns are used not for some
    special reason but for more manageability and ease of
    change.So if you have a small application than it's
    ok but if you are working on big application which
    are needed to be maintained over a time and changes
    are frequent.Than its better to start learning about
    patterns because their will be problems which right
    now you can't see but eventually you have to take
    care of.That is either incorrect or phrased poorly.
    Patterns come about because someone analyzes different existing code bases and notes that there are similarities in the way they are built.
    It isn't that they are easier to maintain but rather that because the pattern has similarities it is easier to comprehend, understand the limitations, understand the possible related patterns, etc. That might lead to easier maintainance but it isn't the reason. The reason is because, if and only if, the requirements/architecture lead to a situation where that pattern could be properly used.

  • Use of synchronisation with the SUN DAO Pattern

    With reference to the design pattern Core J2EE Patterns Data Access Object: http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html
    I am writing a DAO package to handle access to multiple datasources at a record level (e.g. user records may be located at datasource A, but customer records at datasource B). The role of the package is to provide DAO objects to clients (e.g. business objects in an application package to come later). Nothing too unusual. I have digested the SUN design pattern for DAO.
    As I understand it, it can be summarised as: client code calls on an abstract DAOFactory to provide the appropriate concrete DAOFactory . The concrete factory can then supply the correct DAO object. The concrete DAOFactory is also responsible for providing the connection services (such as pooling). So far so good. I have pasted the concrete DAOFactory code form the design pattern page:
    // Cloudscape concrete DAO Factory implementation
    import java.sql.*;
    public class CloudscapeDAOFactory extends DAOFactory {
    public static final String DRIVER=
    "COM.cloudscape.core.RmiJdbcDriver";
    public static final String DBURL=
    "jdbc:cloudscape:rmi://localhost:1099/CoreJ2EEDB";
    // method to create Cloudscape connections
    public static Connection createConnection() {
    // Use DRIVER and DBURL to create a connection
    // Recommend connection pool implementation/usage
    *** can a connection pool be implemented in a static method? ***
    public CustomerDAO getCustomerDAO() {
    // CloudscapeCustomerDAO implements CustomerDAO
    return new CloudscapeCustomerDAO();
    public AccountDAO getAccountDAO() {
    // CloudscapeAccountDAO implements AccountDAO
    return new CloudscapeAccountDAO();
    public OrderDAO getOrderDAO() {
    // CloudscapeOrderDAO implements OrderDAO
    return new CloudscapeOrderDAO();
    I have some questions on this overall design.
    1)     The design for the factories as given looks inelegant and requires upgrading each time a new DAO is added ? much better surely to dynamically generate the DAOs using reflection. If I implement a mapping of data type to data source using a properties file (typical entry, Key = Role, Value = Oracle), the use of abstract and concrete factories can be reduced to a single factory. The single factory reads in the mapping on initialisation and provides a method getDAO to client code. The method takes the data type, looks up the data source and returns the correct DAO class using reflection (e.g. the client passes ?Role? to getDAO and the factory returns Oracle + DAO + Role = OracleDAORole.class). This also has the advantage that the client code does not need to specify the data source to use. I have read some forums and note that performance is an issue with reflection; however I have not seen any significant difference in performance between using reflection to generate a class name and using a factory pattern (e.g. testing just the code paths, for 10 million operations, both reflection and factory took 2.5 seconds each). Does anyone have any opinions on the pros and cons of this approach?
    2)     If we go with the original DAO design (ignoring 1 above) I have marked the part of the concrete factory code that I have a problem with: using a connection pool in the concrete factory. As the factory?s createConnection method is static, you cannot use NotifyAll or Wait methods here, and therefore you cannot synchronise access to the pool (correct?). I have therefore created a separate connection pool class (which uses the singleton pattern and uses synchronised methods to manage the pool). Is this a sensible way to approach this or is there a clever way to synchronise access to static methods?
    Thanks in advance - Alan

    These resources may be helpful:
    http://daoexamples.sourceforge.net/related.html
    http://daoexamples.sourceforge.net/index.html

  • Factory / DAO - Adding in a new DAO that is related to other DAOs

    I have a Module (ModX) that can be associated with different modules.
    When you enter the ModX from one of the many modules that you can enter from, I pass in a Module Id and an Associative Module Id.
    The Module ID is passed to a factory which generates the right 'Bridge DAO' class to write the the proper bridge table and retrive module specific info.
    The associatve id is the specific id of the Module Item I am associating ModX to.
    One of the modules I come from (ModA) from has 2 sub modules that I can associate to ModX.
    Now I can not associate ModA to ModX but ModA_sub1 and ModA_sub2 can be associated to ModX.
    The ModA_sub1 and ModA_sub2 can also prepopulate ModX with some data (prePopulateData(ModX).
    Now I am getting requirements where ModA can hold 'default information' that ModX will be populated with if it is entered from ModA_sub1 or ModA_sub2.
    So if it is Entered from ModA_sub1, default info wil be populated from ModA and some additional info from ModA_sub1.
    Up until this point my design has ben pretty simple, A Factory that returns the proper Bridge DAO based on the Module Id and calls prepopulate(modx).
    Now I am in a situation where I may need information from 2 different DAO's.
    What is the best way to incorporate this into my design? Should I have ModA DAO buried in the sub1 and sub2 prepopulate method to help prepopulate the data? Should a new ModADao be created the can also create the proper sub daos?
    Any suggestions would be greatly appreciated.
    Thank you,
    Al

    alzoid wrote:
    I have a Module (ModX) that can be associated with different modules.
    When you enter the ModX from one of the many modules that you can enter from, I pass in a Module Id and an Associative Module Id.
    The Module ID is passed to a factory which generates the right 'Bridge DAO' class to write the the proper bridge table and retrive module specific info.
    The associatve id is the specific id of the Module Item I am associating ModX to.
    One of the modules I come from (ModA) from has 2 sub modules that I can associate to ModX.
    Now I can not associate ModA to ModX but ModA_sub1 and ModA_sub2 can be associated to ModX.
    The ModA_sub1 and ModA_sub2 can also prepopulate ModX with some data (prePopulateData(ModX).
    Now I am getting requirements where ModA can hold 'default information' that ModX will be populated with if it is entered from ModA_sub1 or ModA_sub2.
    So if it is Entered from ModA_sub1, default info wil be populated from ModA and some additional info from ModA_sub1.
    Up until this point my design has ben pretty simple, A Factory that returns the proper Bridge DAO based on the Module Id and calls prepopulate(modx).
    Now I am in a situation where I may need information from 2 different DAO's.
    What is the best way to incorporate this into my design? Should I have ModA DAO buried in the sub1 and sub2 prepopulate method to help prepopulate the data? Should a new ModADao be created the can also create the proper sub daos?
    Not clear.
    Two possibilities.
    1. You are creating object X based on the results of using object Y. The creation part is important there.
    2. Object X is using object Y.
    For possibility 1 you have two options.
    A. Object X explicity uses object Y in the constructor.
    B. Your factory creates Y and passes it to X during creation.
    For possibility 2 that is composition and should be treated as such. Although again you still use the same options. But this case is an explicit composition relationship.

Maybe you are looking for