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

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
- 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 has built from scratch this blog as well as technicalconfessions.com
Follow Daniel on twitter @nervouswiggles
Comments
Other Posts
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...
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, please enable it in the IDP configuration.
Read More...

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

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

ForgeRock IDM - org.forgerock.script.exception.ScriptCompilationException: missing ; before statement
Read More...

When performing the attempt of a reconciliation from ForgeRock IDM to Active Directory, I would get the following error
Read More...

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

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