From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
CISOA Conference 2020 Banner 9 Development
1. Banner 9 Development
Abstract
This presentation will explain lessons learned and practices used at NOCCCD for developing Banner 9
Admin Pages and Self-Service modifications. We’ll dive into the technologies, development
methodologies, the tools, and tips used to support the development efforts at North Orange County
Community College District with Banner 9.
7. What does Banner 9 provide NOCCCD?
An Opportunity?
● Remove Workplace Barricades
● Coworker Collaboration
● Free Exchange of Ideas & Information
● Development Standards
● Team Contribution
● Improved Quality of Code
● Increase Developer Skills
● Better Services Delivered
8. 1. Standardize on a set of collaborative tools
○ Jira (Issue Tracking) - https://bit.ly/2NyvexN
○ Bitbucket (Code Repositories) - https://bit.ly/35VUXGH
○ Confluence (Documentation) - https://bit.ly/2RAdSC7
○ Jenkins (Build/Deploy) - https://jenkins.io/
○ Git (Version Control)
2. Code Standards
○ Java - https://google.github.io/styleguide/javaguide.html
○ SQL - https://knowledge.nocccd.edu/display/IS/NOCCCD+Banner+DB+Guidelines
3. Document Development Processes
4. Step-by-Step Tutorials for B9 Development
○ B9 Admin Local Mod Dev -
https://knowledge.nocccd.edu/display/IS/Banner+9+Admin+Local+Mod+Development+-+How+To+RNANAXX+Local+Mod
○ B9 SSB Dev -
https://knowledge.nocccd.edu/display/IS/Banner+9+Student+Registration+SSB+9.15+-+Local+Development
5. Schedule Bi-Weekly meetings
Where to Start?
10. Java
● Oracle JDK requires businesses to have a commercial license to get updates after January 2019.
● Java 11 LTS is the latest version
● AdoptOpenJDK - https://adoptopenjdk.net/
17. GitFlow
Branches
● DEVL - development
● TEST - functional user testing
● master - production code
● features
● bugfix
● hotfix
Pull Requests used for
merges to:
TEST (requires ~ 2 dev approval)
master (scheduled releases)
BAN9-100
18. GitFlow - DEVL requires no Pull Request
git checkout BAN9-216
git add --all // or whatever files are being updated
git commit -m “BAN9-216 …”
git push
git checkout DEVL
git pull
git merge BAN9-216
git push
Brings down the latest code for the
DEVL branch
20. GitFlow Process/Rules
1. Branches (feature/bugfix/hotfix) are created from *master
2. Branches are named after Jira Issue Ex. Jira-122, BAN9-122
3. Developers can merge code to DEVL branch without PR or Approval (DEVL branch is the devs) DON’T DELETE
FEATURE BRANCH
4. Developer pushes to DEVL trigger deployment to DEVL environment
5. Feature branch into TEST requires Pull Request
6. Feature branch into TEST requires approval by at least 2 devs
7. Repo owner merges features branch into TEST; DON’T DELETE FEATURE BRANCH
8. PR merge to TEST triggers deployment to TEST environment
9. Feature branch into master requires Pull Request
10. Feature branch into master requires approval by at least 2 devs
11. Repo owner merges feature branch into master; Feature branch is deleted when in master
12. Master (production) are scheduled releases; Tuesdays/Thursdays releases
13. Deployments in PROD refer to releases in Jira. All code maps to Jira Issues which are part of a release in Jira Ex
“NOCCCD-9.4.20200114”
14. Code needs to be merged in the following order DEVL, TEST, and master.
21. Jira Status/Bitbucket Status Deployed State
In Progress/Not Pushed Local Dev
In Progress/Merged & Pushed to DEVL DEVL ENV
In Review/Merged (via PR) to TEST TEST ENV
Done/Merged (via PR) to master PROD ENV
GitFlow and Jira Status
36. B9 Admin - Debugging
1. Use System.out.println(...);
2. Use Log4j Example
3. Use JIntelliJ IDEA/Eclipse Debugger to step through code via JPDA
https://stackoverflow.com/questions/3835612/remote-debugging-tomcat-with-eclipse
37. B9 Admin - Tomcat Logging with Eclipse
● Open Tomcat Properties
● Open “Launch Configurations” under
“General Information”
● Define an “Output File”
38. B9 Admin - Increase Logging
1. Add JVM parameter to your Tomcat settings:
-Dlog4j.configuration=config.properties
2. Go to the Webapp.???.Services project (for example Webapp.HR.Services) -> Java Resources ->
src/main/resources and open the config.properties file
3. Confirm the log4j root logger is using INFO like this:
log4j.rootLogger=INFO, stdout
4. find these two entries and set both of them to TRACE:
log4j.logger.morphis.foundations.core.appdatalayer = TRACE
log4j.logger.morphis.foundations.core.appsupportlib = TRACE
5. Save the changes and then restart Tomcat if it was running. https://ellucian.force.com/clients/s/article/How-to-
increase-error-logging-in-Eclipse-development-environment-for-Banner-administrative-pages-source-code
39. B9 Admin - Example StackTrace?
morphis.foundations.core.appsupportlib.exceptions.ValidationException
at morphis.foundations.core.appsupportlib.ui.BaseInteractionMode.commit(BaseInteractionMode.java:725)
at
morphis.foundations.core.appsupportlib.ui.DefaultInteractionRulesStrategy.commit(DefaultInteractionRulesS
trategy.java:566)
at morphis.foundations.core.appsupportlib.runtime.TaskServices.commitTask(TaskServices.java:1962)
at morphis.foundations.core.appsupportlib.runtime.TaskServices.commitTask(TaskServices.java:1930)
at morphis.foundations.core.appsupportlib.runtime.TaskServices.commitTask(TaskServices.java:1903)
at
net.hedtech.general.common.libraries.Roqrpls.RoqrplsServices.rCommitRequery(RoqrplsServices.java:10108)
at
net.hedtech.banner.finaid.Roaenrl.controller.RorenrlController.rorenrl_Save(RorenrlController.java:422)
41. B9 Admin - Example StackTrace?
morphis.foundations.core.appsupportlib.exceptions.ValidationException
at morphis.foundations.core.appsupportlib.ui.BaseInteractionMode.commit(BaseInteractionMode.java:725)
at
morphis.foundations.core.appsupportlib.ui.DefaultInteractionRulesStrategy.commit(DefaultInteractionRulesS
trategy.java:566)
at morphis.foundations.core.appsupportlib.runtime.TaskServices.commitTask(TaskServices.java:1962)
at morphis.foundations.core.appsupportlib.runtime.TaskServices.commitTask(TaskServices.java:1930)
at morphis.foundations.core.appsupportlib.runtime.TaskServices.commitTask(TaskServices.java:1903)
at
net.hedtech.general.common.libraries.Roqrpls.RoqrplsServices.rCommitRequery(RoqrplsServices.java:10108)
at
net.hedtech.banner.finaid.Roaenrl.controller.RorenrlController.rorenrl_Save(RorenrlController.java:422)
42. B9 Admin - At the Morphis Framework. What NOW?
43. B9 Admin - JDBC Diagnosability
Download ojdbc8_g.jar - https://repo1.maven.org/maven2/com/oracle/ojdbc/ojdbc8_g/19.3.0.0/
Place it in the Tomcat “lib” folder being used by Eclipse.
In Eclipse:
1. Run > Run Configurations…
2. Add to VM arguments these two properties:
a. -Djava.util.logging.config.file=/home/admin_page/OracleLog.properties
b. -Doracle.jdbc.Trace=true
3. Create an OracleLog.properties file in the location specified with the following content:
.level=SEVERE
oracle.jdbc.level=CONFIG
oracle.jdbc.handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=CONFIG
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
Start Tomcat in Eclipse and test.
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/jjdbc/JDBC-diagnosability.html
45. B9 Admin - JDBC Diagnosability Exception - WORD!!
Everything’s configured I’m ready to go! Say what???
Error:
When I try to authenticate I get
java.lang.ClassNotFoundException:
oracle.jdbc.OracleConnection$ConnectionValidation
Solution:
Make sure you’re using the version of ojdbc8_g.jar file with the inner class ConnectionValidation. There are versions of
this jar that don’t have the ConnectionValidation inner class. Thus, cause the ClassNotFoundException.
47. B9 SSB App Submodules
Submodules are projects within your B9 SSB application project.
These submodule (subprojects) are utilized across multiple B9 SSB applications and they reside in the plugins
directory of your super project.
48. B9 SSB App Submodules
The super project repository contains a hash to the commit of the submodule.
If submodules are modified the hash to the modified commit needs to be update.
49. Clone the main project (super project) and all submodules with one command:
git clone --recurse-submodules /
ssh://git@<code-server>:port/bss/banner_student_registration_ssb_app.git
*Ellucian Repo - ssh://git@source.ellucian.com/banner/apps/
Submodules are out of sync with hash specified in the super project:
git submodule sync #only if you’ve modified the .gitmodules file
git submodule update --init
Submodules need to be updated to the latest commit available from their remote
git submodule foreach git pull origin master
B9 SSB App Submodules
51. Submodules are out of sync with hash specified in the super project:
git submodule update --init
B9 SSB App Submodules - Out of Sync
52. Submodules need to be updated to the latest commit available from their remote
git submodule foreach git pull origin master
B9 SSB App Submodules
53. Submodules need to be updated to the latest commit available from their remote
git fetch origin
git reset --hard origin/master
B9 SSB App Submodules - Empty plugins directory
54. B9 SSB App Submodule Update Process - For master
55. Run the following grails and gradle commands:
grails clean -plain-output
grails package -plain-output
./gradlew packagerelease
// build.gradle in the main application
task packagerelease {
dependsOn 'banner-packaging:selfservicepackaging'
} // banner_packaging/src/main/scripts/selfservice-packaging.groovy
B9 SSB Building a deployable war
57. B9 SSB Build and Run
Building the project:
gradle build
Skipping the unit and integration tests:
gradle build -x test -x integTest
To run the project type:
gradle bootRun
Gradle bootRun will run the application on your http://localhost:8092/StudentRegistrationSsb/.
58. https://ellucian.force.com/clients/s/change-request/a0x1M000005RpsYQAS/cr000169217
-Dbanner.logging.dir - This setting can also be used to control the location of log files
====================
If you would like to control the location of the output files you can define this Application Server Java startup
parameter
-Dbanner.logging.dir=$CATALINA_BASE/logs/
All SSB9x App specific logs should now be created in that location. Now in testing setting only these logs go to
that location by default.
SelfServiceBannerGeneralEventManagement.log
CommunicationManagement.log
StudentSelfService.log
FacultySelfService.log
StudentRegistrationSsb.log
B9 SSB logback.groovy - http://logback.qos.ch/