-
-
Notifications
You must be signed in to change notification settings - Fork 27k
Implement DAO Factory pattern #3275
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
PR SummaryThis PR implements the DAO Factory pattern, which allows switching between different data sources (H2, Mongo, Json flat file) for customer data persistence. It includes a Changes
autogenerated by presubmit.ai |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ LGTM!
Review Summary
Commits Considered (4)
Files Processed (23)
- dao-factory/README.md (1 hunk)
- dao-factory/etc/dao-factory.png (0 hunks)
- dao-factory/etc/dao-factory.puml (1 hunk)
- dao-factory/pom.xml (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/App.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/Customer.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DataSourceType.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileDataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoDataSourceFactory.java (1 hunk)
- dao-factory/src/main/resources/logback.xml (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/DAOFactoryTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/FlatFileCustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/MongoCustomerDAOTest.java (1 hunk)
- money/pom.xml (1 hunk)
- pom.xml (1 hunk)
Actionable Comments (0)
Skipped Comments (0)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ LGTM!
Review Summary
Commits Considered (1)
- 1fda840: Merge branch 'master' into feat/dao-factory
Files Processed (23)
- dao-factory/README.md (1 hunk)
- dao-factory/etc/dao-factory.png (0 hunks)
- dao-factory/etc/dao-factory.puml (1 hunk)
- dao-factory/pom.xml (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/App.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/Customer.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DataSourceType.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileDataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoDataSourceFactory.java (1 hunk)
- dao-factory/src/main/resources/logback.xml (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/DAOFactoryTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/FlatFileCustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/MongoCustomerDAOTest.java (1 hunk)
- money/pom.xml (1 hunk)
- pom.xml (1 hunk)
Actionable Comments (0)
Skipped Comments (0)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ LGTM!
Review Summary
Commits Considered (1)
- 865304d: fix: h2 inmemory database to pass CI
Files Processed (1)
- dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (1)
-
dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java [1-278]
enhancement: "Improve test coverage for other DAO implementations."
865304d
to
c24ac0a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚨 Pull request needs attention.
Review Summary
Commits Considered (1)
- c24ac0a: fix: h2 inmemory database to pass CI
Files Processed (2)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java (1 hunk)
Actionable Comments (1)
-
dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java [1-24]
security: "Hardcoded database credentials in H2DataSourceFactory."
Skipped Comments (0)
package com.iluwatar.daofactory; | ||
|
||
import javax.sql.DataSource; | ||
import org.h2.jdbcx.JdbcDataSource; | ||
|
||
/** H2DataSourceFactory concrete factory. */ | ||
public class H2DataSourceFactory extends DAOFactory { | ||
private final String DB_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"; | ||
private final String USER = "sa"; | ||
private final String PASS = ""; | ||
|
||
@Override | ||
public CustomerDAO createCustomerDAO() { | ||
return new H2CustomerDAO(createDataSource()); | ||
} | ||
|
||
private DataSource createDataSource() { | ||
var dataSource = new JdbcDataSource(); | ||
dataSource.setURL(DB_URL); | ||
dataSource.setUser(USER); | ||
dataSource.setPassword(PASS); | ||
return dataSource; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The H2DataSourceFactory
class uses hardcoded credentials. Consider using environment variables or a configuration file to store sensitive information like database URLs, usernames, and passwords. This improves security and makes it easier to manage credentials across different environments.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ LGTM!
Review Summary
Commits Considered (1)
- 89c65b8: fix: unit test pipeline
Files Processed (1)
- dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (1)
-
dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java [1-70]
enhancement: "Add integration tests for comprehensive coverage."
89c65b8
to
0a5770e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ LGTM!
Review Summary
Commits Considered (1)
- 0a5770e: fix: unit test pipeline
Files Processed (2)
- dao-factory/pom.xml (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (1)
-
dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java [1-69]
enhancement: "Improve test coverage in AppTest."
0a5770e
to
5f5e008
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ LGTM!
Review Summary
Commits Considered (1)
- 5f5e008: fix: unit test pipeline
Files Processed (2)
- dao-factory/pom.xml (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (1)
-
dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java [1-69]
enhancement: "Add integration tests to complement unit tests."
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚨 Pull request needs attention.
Review Summary
Commits Considered (1)
- a867d77: add license
Files Processed (17)
- dao-factory/pom.xml (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/App.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/Customer.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DataSourceType.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileDataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoDataSourceFactory.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/DAOFactoryTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/FlatFileCustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/MongoCustomerDAOTest.java (1 hunk)
Actionable Comments (1)
-
dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java [32-47]
security: "Hardcoded credentials in H2DataSourceFactory."
Skipped Comments (0)
private final String DB_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"; | ||
private final String USER = "sa"; | ||
private final String PASS = ""; | ||
|
||
@Override | ||
public CustomerDAO createCustomerDAO() { | ||
return new H2CustomerDAO(createDataSource()); | ||
} | ||
|
||
private DataSource createDataSource() { | ||
var dataSource = new JdbcDataSource(); | ||
dataSource.setURL(DB_URL); | ||
dataSource.setUser(USER); | ||
dataSource.setPassword(PASS); | ||
return dataSource; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The H2DataSourceFactory
class uses hardcoded credentials. Consider using environment variables or a configuration file to store sensitive information like database URLs, usernames, and passwords. This improves security and makes it easier to manage credentials across different environments.
a867d77
to
47b355d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚨 Pull request needs attention.
Review Summary
Commits Considered (1)
- 47b355d: add license
Files Processed (17)
- dao-factory/pom.xml (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/App.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/Customer.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DataSourceType.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileDataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoDataSourceFactory.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/DAOFactoryTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/FlatFileCustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/MongoCustomerDAOTest.java (1 hunk)
Actionable Comments (1)
-
dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java [32-47]
security: "Hardcoded credentials in H2DataSourceFactory."
Skipped Comments (0)
dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java
Outdated
Show resolved
Hide resolved
47b355d
to
069ef48
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚨 Pull request needs attention.
Review Summary
Commits Considered (1)
- 069ef48: add license
Files Processed (17)
- dao-factory/pom.xml (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/App.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/Customer.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DataSourceType.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileDataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoDataSourceFactory.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/DAOFactoryTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/FlatFileCustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/MongoCustomerDAOTest.java (1 hunk)
Actionable Comments (1)
-
dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java [32-47]
security: "Hardcoded database credentials in H2DataSourceFactory."
Skipped Comments (0)
private final String DB_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"; | ||
private final String USER = "sa"; | ||
private final String PASS = ""; | ||
|
||
@Override | ||
public CustomerDAO createCustomerDAO() { | ||
return new H2CustomerDAO(createDataSource()); | ||
} | ||
|
||
private DataSource createDataSource() { | ||
var dataSource = new JdbcDataSource(); | ||
dataSource.setURL(DB_URL); | ||
dataSource.setUser(USER); | ||
dataSource.setPassword(PASS); | ||
return dataSource; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The H2DataSourceFactory
class uses hardcoded credentials. Consider using environment variables or a configuration file to store sensitive information like database URLs, usernames, and passwords. This improves security and makes it easier to manage credentials across different environments.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is just in memory database. I am wondering that is it really necessary to store information in configuration file ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ LGTM!
Review Summary
Commits Considered (1)
- 9ae56c8: fix SonarQube
Files Processed (17)
- dao-factory/src/main/java/com/iluwatar/daofactory/App.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/CustomException.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/Customer.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactoryProvider.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DataSourceType.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileDataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoDataSourceFactory.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/DAOFactoryTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/FlatFileCustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/MongoCustomerDAOTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (0)
9ae56c8
to
f8380a7
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
✅ LGTM!
Review Summary
Commits Considered (1)
- f8380a7: fix SonarQube
Files Processed (17)
- dao-factory/src/main/java/com/iluwatar/daofactory/App.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/CustomException.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/Customer.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactoryProvider.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/DataSourceType.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileDataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2CustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoCustomerDAO.java (1 hunk)
- dao-factory/src/main/java/com/iluwatar/daofactory/MongoDataSourceFactory.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/DAOFactoryTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/FlatFileCustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java (1 hunk)
- dao-factory/src/test/java/com/iluwatar/daofactory/MongoCustomerDAOTest.java (1 hunk)
Actionable Comments (0)
Skipped Comments (0)
|
Pull Request Template
What does this PR do?
This pull request implements the DAO Factory pattern, which demonstrates how the application should be switch between three different types of data sources (H2, Mongo, Json flat file). It includes code documented implementation, comprehensive tests, detailed documentation.
Key features
Related Issue
Closes #1270