Simplifying DAO for OCPJP7 exam

After studying the object principle concept of data access object (DAO), I noticed there's wasn't too much information out there that simplifies the understanding. So this blog 'hopefully' outlines the particular design principles to provide the information required for the OCPJP 7 exam
March 17, 2014
OCPJP-7

Why use DAO design?

The DAO design pattern essentially separates the business logic from your persistance logic. What does that actually mean? Lets say you want to create a food order online. When you submit the request, that object request would need to be stored within a database repository, which would require the program to create database connection (persistance), submit a URL, ensure JDBC classes are available etc. Though you don't care about any of the techy stuff, you're hungry and all you want is that food!

So the request must be segregated from what is required, hence the business logic must be separated from the persistance logic.

Along with the segregation, you have have persistance of the object that the client creates though don't require the client to maintain the persistance of the object


DAO

https://technicalconfessions.com/images/postimages/postimages/_248_4_understanding DAO for Java 7.png

You often see that the client will have direct communication to the DAO, which is very misleading because DAO is a conceptual design and not a specific 'thing'. The initial communication to the DAO is basically the interface, which is connected to the factory, which will then determine which data source to use.

This sounds very much like an interface/class design (factory Design) though the DAO has a specific logic called the 'transfer object'. This transfer object is basically a class that the DAO creates and the client can update to.


Explaining the specific components

https://technicalconfessions.com/images/postimages/postimages/_248_6_understanding java DAO .png

  • Order - All the components to create a specific object (burger type, how you like it, do you want gerkins etc)
  • DAO - When you've created the object, you send it to the DAO (which is simply the interface to the factory). The DAO is responsible for updating within he transfer object and deleting it within the transfer object is requested
  • Transfer Object - When the DAO receives the object, the DAO will 'transfer' that object into the transfer object repository, which in it's simplistic fashion is just like the order though contains all the 'getter and setter' methods.
  • Factory - Responsible for creating the persistance data source. So it will create the source based on the data you sent over within the object

  • Order Object
  • All the specific method associated to the object + getObjectTransferObject() (which is basically getting the object you created though it now resides within the 'Transfer object' class
  • DAO methods
  • It's an interface, so it contractually obligated to hold the methods located within the factory so it's methods such as the following:
    • updateOrder
    • insertOrder
    • deleteOrder
  • Transfer Object
  • Contain such methods such as the following:
    • This is basically the object + getter and setters method

About the author

Daniel is a Technical Manager with over 10 years of consulting expertise in the Identity and Access Management space.
Daniel has built from scratch this blog as well as technicalconfessions.com
Follow Daniel on twitter @nervouswiggles

Comments

Other Posts

AWS-PHP integration - Email not sent. SMTP Error: Could not authenticate.

phpsmtpaws

February 6, 2020
Created by: Daniel Redfern
AS I was migrating my environment into an S3 environment, I wanted to leverage off the SES services that AWS provide, more specifically, to leverage the off the SMTP functionality by sending an email via PHP
Read More...

SOLUTION: no headers files (.h) found in softwareserial - Arduino

Arduino

February 24, 2019
Created by: Daniel Redfern
The WeMos D1 is a ESP8266 WiFi based board is an extension to the current out-of-the-box library that comes with the Arduino installation. Because of this, you need to import in the libraries as well as acknowledging the specific board. This process is highly confusion with a number of different individuals talking about a number of different ways to integrate.
Read More...

NameID element must be present as part of the Subject in the Response message

ShibbolethSAML

August 7, 2018
Created by: Daniel Redfern
NameID element must be present as part of the Subject in the Response message, please enable it in the IDP configuration.
Read More...

HOW TO provision AD group membership from OpenIDM

OpenIDMICFAD-connector

June 15, 2018
Created by: Daniel Redfern
For what I see, there's not too many supportive documentations out there that will demonstrate how provision AD group membership with the ICF connector using OpenIDM. The use of the special ldapGroups attribute is not explained anywhere in the Integrators guides to to the date of this blog. This quick blog identifies the tasks required to provision AD group membership from OpenIDM to AD using the LDAP ICF connector. However this doesn't really explain what ldapGroups actually does and there's no real worked example of how to go from an Assignment to ldapGroups to an assigned group in AD. I wrote up a wiki article for my own reference: AD group memberships automatically to users This is just my view, others may disagree, but I think the implementation experience could be improved with some more documentation and a more detailed example here.
Read More...

ForgeRock OpenIDM - InvalidCredentialException: Remote framework key is invalid

ICFIDMOpenIDMOpenICF

November 8, 2017
Created by: Daniel Redfern
In the past, the similar error occurred though for the Oracle Identity Management solution. invalidcredentialexception remote framework key is invalid Because they all share the ICF connector framework, the error/solution would be the same.
Read More...

org.forgerock.script.exception.ScriptCompilationException: missing ; before statement

IDMsync.confforgerockopenidm

November 8, 2017
Created by: Daniel Redfern
org.forgerock.script.exception.ScriptCompilationException: missing ; before statement
Read More...

ForgeRock IDM - org.forgerock.script.exception.ScriptCompilationException: missing ; before statemen

OpenIDMsync.confForgeRock

September 17, 2017
Created by: Daniel Redfern
ForgeRock IDM - org.forgerock.script.exception.ScriptCompilationException: missing ; before statement
Read More...

Caused by: org.forgerock.json.resource.BadRequestException: Target does not support attribute groups

OpenIDMForgeRockICFConnector

September 17, 2017
Created by: Daniel Redfern
When performing the attempt of a reconciliation from ForgeRock IDM to Active Directory, I would get the following error
Read More...

ForgeRock OpenIDM - InvalidCredentialException: Remote framework key is invalid

OpenIDMForgeRockICFConnectorAD

September 17, 2017
Created by: Daniel Redfern
In the past, the similar error occurred though for the Oracle Identity Management solution. invalidcredentialexception remote framework key is invalid Because they all share the ICF connector framework, the error/solution would be the same.
Read More...

ERROR Caused by com.google.api.client.auth.oauth2.TokenResponseException 400 Bad Request - invalid_g

OpenIDMIDMGoogleGoogle-AppsICFreconciliation

September 12, 2017
Created by: Daniel Redfern
During the reconcilation from OpenIDM to the ICF google apps connector, the following error response would occur. ERROR Caused by com.google.api.client.auth.oauth2.TokenResponseException 400 Bad Request - invalid_grant
Read More...