SlideShare a Scribd company logo
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.
Introduction
Brad Rippe
Systems Analyst @ NOCCCD
Agenda
● NOCCCD Banner 9 Journey
● Banner 9 Development Process
● B9 Admin Pages and B9 SSB Tips
● Q&A
Early Development
● Modules
○ Student
○ Financial Aid
○ Account Receivable
○ Finance
● Devs
○ Susan
○ Tom
○ Larry
Silo Effect
Goal: Team
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
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?
Developer Tool Requirements
1. Java 8 (1.8.0_242-b08) - https://adoptopenjdk.net/
2. Eclipse Oxygen.3.a (4.7.3.a) - https://www.eclipse.org/downloads/
3. IntelliJ Idea 2019.3.2 (Ultimate Edition) - https://www.jetbrains.com/idea/
4. SDKMAN (Mac/Linux) - https://sdkman.io/
5. Grails 3.3.2 - https://grails.org/download.html
6. Groovy 2.4.13 - https://groovy.apache.org/download.html
7. Gradle 3.5.0 - https://gradle.org/releases/
8. Maven 3.3.3 - https://maven.apache.org/download.cgi
9. Git 2.17.2 - https://git-scm.com/
10. *Notepad++ or Atom Editor (helpful) - https://atom.io/
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/
Code Repositories - Git Repos - Bitbucket
Repository Branches - GitFlow
DEVL
TEST
master
bugfix/JIRA-132
baseline
*Kodos to VCCCD
Jenkins Job - Update Baseline Branch
B9 Admin Pages
ssh://git@source.ellucian.com/banner/pages/*
B9 SSB apps and plugins
ssh://git@source.ellucian.com/banner/apps/*.git
ssh://git@source.ellucian.com/banner/plugins/*.git
NOCCCD Repositories
https://bitbucket.org/account/user/3cbg/projects/VCCCD
Database Code - Update baseline branch
ESM
NOCCCD UPGR DB
Instance
branch = UPGR-8.37
NOCCCD Banner DB
Objects Repo
DBA triggers ESM
upgrade
baseline branch
Database
Code
Comparisons
Dev Branches - GitFlow
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
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
GitFlow - TEST/master
requires Pull Request
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.
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
Branching & Merging
Releases - Jira Release Versions
B9Admin - Jira Release Version to artifacts
B9 - Jira Release Versions composed of Issues
B9Admin - Jira Release Versions to Repo Tags
B9 - Jira Release Versions to Repo Tags
B9SSB - Jira Release Versions
Bitbucket - Code Review
1
2
3
Violates the DRY rule of software
development
Bitbucket - Refactored Code
1 2 3
Bitbucket PR notifications
Jenkins B9 Pipelines
NOCCCD Repos
Push or Merge
1. pull code from branch
2. build/package artifacts
3. build Docker image
4. push Docker image to AWS
registry
5. deploy artifacts
6. notify users on Slack
Slack
Updates
Selenium Testing via Jenkins/Java App
B9 Admin Pages Tips
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
B9 Admin - Tomcat Logging with Eclipse
● Open Tomcat Properties
● Open “Launch Configurations” under
“General Information”
● Define an “Output File”
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
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)
B9 Admin - Example StackTrace?
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)
B9 Admin - At the Morphis Framework. What NOW?
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
B9 Admin - JDBC Diagnosability
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.
B9 SSB Tips
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.
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.
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
git submodule sync
git submodule update --init
B9 SSB Submodules - Changing Repos
Submodules are out of sync with hash specified in the super project:
git submodule update --init
B9 SSB App Submodules - Out of Sync
Submodules need to be updated to the latest commit available from their remote
git submodule foreach git pull origin master
B9 SSB App Submodules
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
B9 SSB App Submodule Update Process - For master
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
task selfservicepackaging {
doFirst {
String pluginDirectory = project.projectDir.toString()
System.setProperty('packagingDirectory', pluginDirectory)
def pathToFolderOfScript = "${pluginDirectory}/src/main/scripts/selfservice-
packaging.groovy"
new GroovyShell().run(file(pathToFolderOfScript))
}
}
B9 SSB from banner_packaging plugin’s gradle.build
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/.
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/
B9 SSB logback.groovy - http://logback.qos.ch/
// 1) logback.groovy around line 52
def loggingDir = System.properties["banner.logging.dir"]
?:
BuildSettings.TARGET_DIR
B9 SSB logback.groovy - http://logback.qos.ch/
// 2) catalina.out
10:09:08,813 |-ERROR in
ch.qos.logback.core.FileAppender[FULL_STACKTRACE] -
openFile(build/BannerExtensibility.log,true) call failed.
java.io.FileNotFoundException: build/BannerExtensibility.log
(No such file or directory)
● banner_configuration.groovy
● banner8.SS.locale.url – unmatched ‘ or “
● Accessing the application https://yourserver.nocccd.edu/BannerGeneralSsb
B9 SSB - GUACONF
Questions?

More Related Content

What's hot

A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
Phase2
 
I18N refactoring support and the TapiJI online translator
I18N refactoring support and the TapiJI online translatorI18N refactoring support and the TapiJI online translator
I18N refactoring support and the TapiJI online translator
mreiterer
 
JohnConnollyResumePerformance2017
JohnConnollyResumePerformance2017JohnConnollyResumePerformance2017
JohnConnollyResumePerformance2017
John Connolly
 

What's hot (19)

“Full-stack developer: з чого розпочати кар’єру?”
 “Full-stack developer: з чого розпочати кар’єру?”  “Full-stack developer: з чого розпочати кар’єру?”
“Full-stack developer: з чого розпочати кар’єру?”
 
Rational Rhapsody Workflow Integration with Visual Studio
Rational Rhapsody Workflow Integration with Visual Studio Rational Rhapsody Workflow Integration with Visual Studio
Rational Rhapsody Workflow Integration with Visual Studio
 
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
 
Bad camp2016 Release Management On Live Websites
Bad camp2016 Release Management On Live WebsitesBad camp2016 Release Management On Live Websites
Bad camp2016 Release Management On Live Websites
 
How to use source control with apex?
How to use source control with apex?How to use source control with apex?
How to use source control with apex?
 
Getting started with IBM Rational Rhapsody in Ada
Getting started with IBM Rational Rhapsody in AdaGetting started with IBM Rational Rhapsody in Ada
Getting started with IBM Rational Rhapsody in Ada
 
seminar
seminarseminar
seminar
 
Dockerize it all
Dockerize it allDockerize it all
Dockerize it all
 
I18N refactoring support and the TapiJI online translator
I18N refactoring support and the TapiJI online translatorI18N refactoring support and the TapiJI online translator
I18N refactoring support and the TapiJI online translator
 
Continuous Delivery Applied (Agile Richmond)
Continuous Delivery Applied (Agile Richmond)Continuous Delivery Applied (Agile Richmond)
Continuous Delivery Applied (Agile Richmond)
 
Java 9 new features
Java 9 new featuresJava 9 new features
Java 9 new features
 
WSO2 API Manager Community Call - November 2021
WSO2 API Manager Community Call - November 2021WSO2 API Manager Community Call - November 2021
WSO2 API Manager Community Call - November 2021
 
Smart Internationalization assistance and resource translation tools
Smart Internationalization assistance and resource translation toolsSmart Internationalization assistance and resource translation tools
Smart Internationalization assistance and resource translation tools
 
IBM Rational Rhapsody 8.4 install guide (including Cygwin and obtaining an ev...
IBM Rational Rhapsody 8.4 install guide (including Cygwin and obtaining an ev...IBM Rational Rhapsody 8.4 install guide (including Cygwin and obtaining an ev...
IBM Rational Rhapsody 8.4 install guide (including Cygwin and obtaining an ev...
 
JohnConnollyResumePerformance2017
JohnConnollyResumePerformance2017JohnConnollyResumePerformance2017
JohnConnollyResumePerformance2017
 
Version Control meets Database Control
Version Control meets Database ControlVersion Control meets Database Control
Version Control meets Database Control
 
MuleSoft Manchester Meetup #4 slides 11th February 2021
MuleSoft Manchester Meetup #4 slides 11th February 2021MuleSoft Manchester Meetup #4 slides 11th February 2021
MuleSoft Manchester Meetup #4 slides 11th February 2021
 
Parani_Profile
Parani_ProfileParani_Profile
Parani_Profile
 
Architecting The Future - WeRise Women in Technology
Architecting The Future - WeRise Women in TechnologyArchitecting The Future - WeRise Women in Technology
Architecting The Future - WeRise Women in Technology
 

Similar to CISOA Conference 2020 Banner 9 Development

Application depolyment
Application depolymentApplication depolyment
Application depolyment
shriikantL
 

Similar to CISOA Conference 2020 Banner 9 Development (20)

Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1
 
Application depolyment
Application depolymentApplication depolyment
Application depolyment
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous delivery
 
Spring_Boot_Microservices-5_Day_Session.pptx
Spring_Boot_Microservices-5_Day_Session.pptxSpring_Boot_Microservices-5_Day_Session.pptx
Spring_Boot_Microservices-5_Day_Session.pptx
 
Angular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - LinagoraAngular (v2 and up) - Morning to understand - Linagora
Angular (v2 and up) - Morning to understand - Linagora
 
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
 
Oracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret InternalsOracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret Internals
 
JBoss EAP 7 & JDG 7 최신 기술 소개
JBoss EAP 7 & JDG 7 최신 기술 소개JBoss EAP 7 & JDG 7 최신 기술 소개
JBoss EAP 7 & JDG 7 최신 기술 소개
 
Continuous Integration/ Continuous Delivery of web applications
Continuous Integration/ Continuous Delivery of web applicationsContinuous Integration/ Continuous Delivery of web applications
Continuous Integration/ Continuous Delivery of web applications
 
Lightning Web Components by Abdul Gafoor
Lightning Web Components by Abdul GafoorLightning Web Components by Abdul Gafoor
Lightning Web Components by Abdul Gafoor
 
Lightning Web Components
Lightning Web ComponentsLightning Web Components
Lightning Web Components
 
Migrating from Pivotal tc Server on-prem to IBM Liberty in the cloud
Migrating from Pivotal tc Server on-prem to IBM Liberty in the cloudMigrating from Pivotal tc Server on-prem to IBM Liberty in the cloud
Migrating from Pivotal tc Server on-prem to IBM Liberty in the cloud
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
 
What's new in Portal and WCM 8.5
What's new in Portal and WCM 8.5What's new in Portal and WCM 8.5
What's new in Portal and WCM 8.5
 
GIDS_15FactorWorkshop.pdf
GIDS_15FactorWorkshop.pdfGIDS_15FactorWorkshop.pdf
GIDS_15FactorWorkshop.pdf
 
Breaking the 2 Pizza Paradox with your Platform as an Application
Breaking the 2 Pizza Paradox with your Platform as an ApplicationBreaking the 2 Pizza Paradox with your Platform as an Application
Breaking the 2 Pizza Paradox with your Platform as an Application
 
Categorizing Docker Hub Public Images
Categorizing Docker Hub Public ImagesCategorizing Docker Hub Public Images
Categorizing Docker Hub Public Images
 
[20200720]cloud native develoment - Nelson Lin
[20200720]cloud native develoment - Nelson Lin[20200720]cloud native develoment - Nelson Lin
[20200720]cloud native develoment - Nelson Lin
 
Spring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applicationsSpring data jpa are used to develop spring applications
Spring data jpa are used to develop spring applications
 
Architecting the Future: Abstractions and Metadata - KCDC
Architecting the Future: Abstractions and Metadata - KCDCArchitecting the Future: Abstractions and Metadata - KCDC
Architecting the Future: Abstractions and Metadata - KCDC
 

Recently uploaded

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Recently uploaded (20)

Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCustom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT Professionals
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Agentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdfAgentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdf
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
The architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdfThe architecture of Generative AI for enterprises.pdf
The architecture of Generative AI for enterprises.pdf
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
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.
  • 3. Agenda ● NOCCCD Banner 9 Journey ● Banner 9 Development Process ● B9 Admin Pages and B9 SSB Tips ● Q&A
  • 4. Early Development ● Modules ○ Student ○ Financial Aid ○ Account Receivable ○ Finance ● Devs ○ Susan ○ Tom ○ Larry
  • 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?
  • 9. Developer Tool Requirements 1. Java 8 (1.8.0_242-b08) - https://adoptopenjdk.net/ 2. Eclipse Oxygen.3.a (4.7.3.a) - https://www.eclipse.org/downloads/ 3. IntelliJ Idea 2019.3.2 (Ultimate Edition) - https://www.jetbrains.com/idea/ 4. SDKMAN (Mac/Linux) - https://sdkman.io/ 5. Grails 3.3.2 - https://grails.org/download.html 6. Groovy 2.4.13 - https://groovy.apache.org/download.html 7. Gradle 3.5.0 - https://gradle.org/releases/ 8. Maven 3.3.3 - https://maven.apache.org/download.cgi 9. Git 2.17.2 - https://git-scm.com/ 10. *Notepad++ or Atom Editor (helpful) - https://atom.io/
  • 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/
  • 11. Code Repositories - Git Repos - Bitbucket
  • 12. Repository Branches - GitFlow DEVL TEST master bugfix/JIRA-132 baseline *Kodos to VCCCD
  • 13. Jenkins Job - Update Baseline Branch B9 Admin Pages ssh://git@source.ellucian.com/banner/pages/* B9 SSB apps and plugins ssh://git@source.ellucian.com/banner/apps/*.git ssh://git@source.ellucian.com/banner/plugins/*.git NOCCCD Repositories https://bitbucket.org/account/user/3cbg/projects/VCCCD
  • 14. Database Code - Update baseline branch ESM NOCCCD UPGR DB Instance branch = UPGR-8.37 NOCCCD Banner DB Objects Repo DBA triggers ESM upgrade baseline branch
  • 16. Dev Branches - GitFlow
  • 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
  • 23. Releases - Jira Release Versions
  • 24. B9Admin - Jira Release Version to artifacts
  • 25. B9 - Jira Release Versions composed of Issues
  • 26. B9Admin - Jira Release Versions to Repo Tags
  • 27. B9 - Jira Release Versions to Repo Tags
  • 28. B9SSB - Jira Release Versions
  • 29. Bitbucket - Code Review 1 2 3 Violates the DRY rule of software development
  • 32. Jenkins B9 Pipelines NOCCCD Repos Push or Merge 1. pull code from branch 2. build/package artifacts 3. build Docker image 4. push Docker image to AWS registry 5. deploy artifacts 6. notify users on Slack
  • 34. Selenium Testing via Jenkins/Java App
  • 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)
  • 40. B9 Admin - Example StackTrace?
  • 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
  • 44. B9 Admin - JDBC Diagnosability
  • 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
  • 50. git submodule sync git submodule update --init B9 SSB Submodules - Changing Repos
  • 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
  • 56. task selfservicepackaging { doFirst { String pluginDirectory = project.projectDir.toString() System.setProperty('packagingDirectory', pluginDirectory) def pathToFolderOfScript = "${pluginDirectory}/src/main/scripts/selfservice- packaging.groovy" new GroovyShell().run(file(pathToFolderOfScript)) } } B9 SSB from banner_packaging plugin’s gradle.build
  • 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/
  • 59. B9 SSB logback.groovy - http://logback.qos.ch/
  • 60. // 1) logback.groovy around line 52 def loggingDir = System.properties["banner.logging.dir"] ?: BuildSettings.TARGET_DIR B9 SSB logback.groovy - http://logback.qos.ch/ // 2) catalina.out 10:09:08,813 |-ERROR in ch.qos.logback.core.FileAppender[FULL_STACKTRACE] - openFile(build/BannerExtensibility.log,true) call failed. java.io.FileNotFoundException: build/BannerExtensibility.log (No such file or directory)
  • 61. ● banner_configuration.groovy ● banner8.SS.locale.url – unmatched ‘ or “ ● Accessing the application https://yourserver.nocccd.edu/BannerGeneralSsb B9 SSB - GUACONF