Foreword
Preface
- Why this book and why now?
- Who is this book for?
- How to read this book?
- Typographic conventions
- Please help improve this book!
- About the author
- IDesigning the build plan
1Introduction
- 1.1What’s in a name?
- 1.2Philosophy
- 1.3Standing on the shoulders of giants
- 1.4Tools, techniques and best practices
- Oracle Database and Oracle APEX
- Oracle SQL Developer Data Modeler
- Version control
- Maven
- Flyway
- Oracle SQL Developer
- utPLSQL
- Perl
- Ant
- DevOps
- 1.5Introducing Paulissoft Application Tools for Oracle (PATO)
- 1.6Conclusion
2Start me up
- 2.1Introduction
- 2.2Setting up the environment
- Database & APEX
- Maven
- Git
- Oracle SQL Developer
- Oracle SQLcl
- Oracle SQL Developer Data Modeler
- Perl
- 2.3Database configuration
- Virtual machine settings
- SQL*Net
- Creating the proxy user
- Creating the PATO schema
- Installing database objects
- Installing the PATO APEX application
- Upload spreadsheets
3Build plan essentials
- 3.1Introduction
- 3.2Scope of a build plan
- 3.3Software architecture
- Three-tier architecture
- Database structure
- Data model
- Business rules
- Logging
- Error handling
- Globalization
- 3.4The development team
- 3.5Development process
- DevOps
- Agile, DevOps and CI/CD
- What version?
- Parallel development
- Deployments
- Documentation
- 3.6Development tools
- IIImplementing the build plan
4Automation tooling
- 4.1Maven
- Build Tasks & Profiles
- Environment properties
- Sources
- POMs
- Application consisting of several software projects
- 4.2Jenkins
5Database migrations
- 5.1Why migrations?
- 5.2How does Flyway work?
- Callbacks
- Incremental migrations
- Repeatable migrations
- 5.3DML
- 5.4Preferred order of migrations
- 5.5Why not Liquibase?
- 5.6Project folder layout
- Directory apex
- Directory conf
- Directory db
- Mapping database structure to folder layout
6Oracle SQL Developer Data Modeler
- 6.1Best user experience on Windows
- 6.2Data Modeling related concepts
- Business Rules
- Surrogate keys
- Super and subtypes
- Many-to-many relations
- 6.3Best practices
- Configuration settings
- Use the PATO Custom Library and Custom Transformations Scripts
- Data Modeler Configuration & Version Control
- 6.4Tasks
- Design the logical and relational model
- Check the Design Rules
- Generate DDL
- Create incremental migration scripts
7Mapping architecture to code
- 7.1Business rules
- 7.2Business rule mapping
- Static Data Constraint Rules
- Dynamic Data Constraint Rules
- Change Event Rules with or without DML
- Authorization Rules
- 7.3Alternatives for checking complex business rules
- Standard views with a check option
- Refresh fast on statement
- De-normalization
- Conclusion
- 7.4Database object naming conventions
- 7.5Accessing database schema objects
- DATA
- EXT
- API
- UI
- 7.6Database Security
- Set-up context and privileges
- Add the policy
- Enable the policy
- Create a predicate function
- Create a procedure to set the context
- Set the context in the front-end
8Testing
- 8.1V-model of software development
- 8.2utPLSQL
- Introduction
- Best practices
- Examples
- Hands-on experience
9Debugging
- 9.1Why DBUG?
- 9.2History of DBUG
- DBUG C library
- DBUG PL/SQL library
- 9.3Later enhancements
- 9.4Installation
10Error handling
- 10.1An APEX error handling solution
- Oracle constraint violations
- A reserved PATO exception
- No translation found
- 10.2How to raise a custom error?
- DATA_API_PKG.RAISE_ERROR
- DATA_API_PKG.RAISE_ERROR_OVERLAP
- 10.3APEX messages
- 10.4How to store APEX messages?
- 10.5Conclusion
11Code quality
- 11.1Standard Oracle functionality
- PL/SQL warnings
- PL/Scope
- 11.2PATO code quality check
12Advanced Topics
- 12.1Collaboration
- APEX
- Database
- 12.2Multiple APEX application systems
- 12.3Uploading spreadsheet documents
- Using it in another application system
- 12.4Translating APEX applications
13Project set-up
- 13.1Folder layout
- 13.2Root folder
- 13.3Maven folder
- 13.4Apex folder
- Folder <app_X>/src/export
- Folder <app_X>/src/translate
- 13.5Configuration folder
- File env.properties
- File flyway-app.conf
- File apex.properties
- File db.properties
- File flyway-db.conf
- 13.6Database folder
- Folder <schema_X>/src/admin
- Folder <schema_X>/src/dml
- Folder <schema_X>/src/full
- Folder <schema_X>/src/incr
- 13.7Conclusion
14Continuous Deployment
- 14.1Requirements
- Automated
- Flexible
- Complete
- 14.2Install Jenkins
- 14.3Configure Jenkins
- Manage Plugins
- Configure System
- Manage Credentials
- Manage Nodes and Clouds
- 14.4Test the GitHub SSH connection
- 14.5Run the Jenkins deployment job
- Jenkins Templating Engine
- Create the pipeline job
- Build the pipeline job
- 14.6Conclusion
- IIITesting the build plan
15Example project 1, Sample Database Application
- 15.1Setting up the project structure
- Install the APEX Sample Database Application
- Cloning PATO
- Create an examples project
- The root POM
- The database POM
- The APEX POM
- 15.2Generate scripts
- Database
- APEX
- 15.3Re-install the application
- Database
- APEX
- 15.4Test the installation scripts
- 15.5Conclusion
16Example project 2, Incident Tracking
- 16.1Install the APEX Sample Database Application
- 16.2Modify the project structure
- 16.3Modify the Sample Database Application POMs
- Create a
db/pom.xml - Change the
db/sample-database-application/pom.xml - Create a
db/incident-tracking/pom.xml - Create an
apex/pom.xml - Change the
apex/sample-database-application/pom.xml - Create an
apex/incident-tracking/pom.xml - 16.4Generate scripts
- Database
- Load the data
- APEX
- 16.5Conclusion
17Example projects, Continuous Deployment
- 17.1Set up the project structure
- 17.2Setting up Jenkins
- 17.3Conclusion
Afterword
- Appendices
Appendix A - Custom transformations
Appendix B - Jenkins installation
- Installation of Jenkins as a service on Linux
- General
- Install Jenkins
- Installation of Jenkins with Docker Compose
- Post install actions
- Install plugins automatically
- Install plugins manually
- Admin user
- Final steps