AD 112: Real World Experience: Integrating DB2 with XPages
Steve Zavocki Navy Federal Credit Union Consultant
Dwain Wuerfel Navy Federal Credit Union
Real World Experience: Integrating DB2 with XPages
About Steve
Notes Developer since 1996 Exclusively XPages since 2012 Fluent in Java, and use it whenever possible Have been a consultant with Navy Federal
since April 2014 working out of Milton, Florida
Real World Experience: Integrating DB2 with XPages
About Dwain Notes Developer since 1997 XPages since 2011 Have been an employee with Navy Federal since July 2014 working out of Milton, Florida
Real World Experience: Integrating DB2 with XPages
About Navy Federal Credit Union The world’s largest credit union $69 billion in assets and over 5.5 million members Approximately 12,000 employees worldwide Member-owned and not-for-profit We offer credit cards, auto loans, mortgages, checking and savings, CDs, IRAs and
our subsidiary Navy Federal Financial Group offers investments & insurance Navy Federal: Field of Membership
•We serve all Department of Defense and Coast Guard active duty, civilian and contractor personnel and their families•We have 270 branches worldwide; online, mobile account access, and call center 24/7
FORTUNE's 100 Best Companies to Work For in 2015 Fifth time selected
ComputerWorld’s 2015 Best Place to Work in IT
Real World Experience: Integrating DB2 with XPages
Agenda
Why use DB2?
Application Overview
Application Design
DB2 configuration
Lessons Learned
What your DBA wants you to know
Real World Experience: Integrating DB2 with XPages
Why Use DB2?
Real World Experience: Integrating DB2 with XPages
Why Use DB2?
Performance
Why is this important to NFCU?
References
Real World Experience: Integrating DB2 with XPages
Why Use DB2?
Performance
DB2 z/OS, DB2 LUW, Oracle, SQL Server, Teradata, and Notes
Navy Federal uses all these, but chose DB2 for XPages back-end
Timestamp data type to the one millionth place
Both Notes and Java only use one thousandth
Notes/Java: 07:50:25.123000DB2: 07:50:25.123456
Real World Experience: Integrating DB2 with XPages
Why Use DB2?
Performance cont’d…
10 or 10,000,000 rows irrelevant
Don’t try this using a Notes database
Physical storage is allocated for future growth
This means you never encounter an out of space condition
Moves large quantities of data and manages high volume of transaction
Potential for large volumes of transactions
DB2 has data sharing which is similar to replication/clustering
Know that this exists, DBA should already be using this
Real World Experience: Integrating DB2 with XPages
Why Use DB2?
Why is this important to Navy FCU you ask
Navy FCU measures success as “No Perceived Downtime”
XPages uses DB2 as a back-end due to the existing transactional member/customer
facing applications
Auditing
Security Concerns
Real World Experience: Integrating DB2 with XPages
Why Use DB2?
Comparison with Oracle
http://www-01.ibm.com/software/info/rte/breakfree/tw.html
More information about the benefits of DB2
http://www-01.ibm.com/software/data/db2/zos/family/
Real World Experience: Integrating DB2 with XPages
Application Overview
Real World Experience: Integrating DB2 with XPages
Application Overview
In a nutshell, the application manages ATM by providing a web browser front-
end to a mainframe application
This application replaces having a person use the green screen, and it
eliminates tedious data entry into an MS Access database
All actions that take place whether user initiated or scheduled are recorded in
DB
The data is then used for reporting and searching
Real World Experience: Integrating DB2 with XPages
Real World Experience: Integrating DB2 with XPages
Application Overview
Real World Experience: Integrating DB2 with XPages
Application Design
Real World Experience: Integrating DB2 with XPages
Application Design
Employ Best Practices learned by personal and collective experiences
Minimize SSJS. Use Java for business logic whenever feasible
Try to follow the MVC design pattern
Considered using object relational mapping (i.e. Hibernate)
Considered other developers who later will work on the application
Real World Experience: Integrating DB2 with XPages
Application Design
View Layer – UI• XPages• Custom Controls
Controller Layer – Business Logic
• Managed Beans• POJOs• Jars (server JVM/LIB/EXT folder)
Model Layer – Data
• DB2 running on mainframe
via SQL
via ???
Real World Experience: Integrating DB2 with XPages
Application Design
How is the DB2 tied to the UI elements?
viewScope is the glue that ties it all together.
IMO it is easier to code than managed bean members/fields
Load it when you need it, no values are remembered
when you leave the page
All purpose… Binds UI fields or grid data
No need to initialize numeric data type, everything is
treated like a String in a scoped variable
Real World Experience: Integrating DB2 with XPages
Demo
Go to the blog by Steve Zavocki at
http://notesspeak.blogspot.com/
Real World Experience: Integrating DB2 with XPages
DB2 Configuration
Real World Experience: Integrating DB2 with XPages
DB2 Configuration
Device Drivers
Extension Library
java.policy
WinSQL
Custom Connection Manager
Real World Experience: Integrating DB2 with XPages
DB2 Configuration
Device Drivers
It depends on your DB2 version which drivers you use. Your DBA or Middleware
team will provide these for you
We installed on the server in the jvm/lib/ext location. The choice was not ours to
make (IBM does not recommend this approach but instead recommends installing
as OSGI plugin)
You do not need to install DB2 drivers locally, unless you are writing Java or LS
agents that will access DB2, and you want to test them locally. If you do then they
need to be in your local jvm/lib/ext
Real World Experience: Integrating DB2 with XPages
DB2 Configuration
Extension Library
The XPages Extension Library is of course required
The version that is bundled with 9.0 is not enough
We couldn’t get the database connection to work using a 9.0.1 at all until we
installed at least the Dec 19, 2014 version from OpenNTF
Real World Experience: Integrating DB2 with XPages
DB2 Configuration
java.policy
You should be aware that this file exists on your domino server
This file is used to control security permissions for specific actions and locations
If you put your jars in the jvm/lib/ext directory then you will want to make sure
your java.policy file grants full access:
grant codeBase "file:${java.home}/lib/ext/*" {
permission java.security.AllPermission;
};
Real World Experience: Integrating DB2 with XPages
DB2 Configuration
WinSQL – You will certainly need a tool for easily testing your SQL. Our
company has standardized on WinSQL for this task.
This product is offered by Synametrics and info can be found at:
http://web.synametrics.com/WinSQL.htm
Cost is $99 for a developer license
Comparable to Toad, SQL Developer (Oracle)
Real World Experience: Integrating DB2 with XPages
DB2 Configuration WinSQL
Real World Experience: Integrating DB2 with XPages
DB2 Configuration
Custom Connection Manager
NFCU has a policy that usernames and passwords are not to be kept in XML
files
We created a custom ConnectionManager class that allows us to look to a
secure database for credentials and still allow the use of Connection Pooling
More information on how to do this can be found on Steve’s blog at
http://notesspeak.blogspot.com/
Real World Experience: Integrating DB2 with XPages
Lessons Learned
Real World Experience: Integrating DB2 with XPages
Lessons Learned
Know what you need from your DBA
Take the time ahead of time to understand your application requirement
Be sure that column widths and types are correct before coding
Mimic what Notes databases give you by default by having system columns for
Created Date, Last Updated, Author, Last Updated By
Do not let DBA arbitrarily specify columns to be se to NOT NULL
Ask your DBA to consider using a stored procedure or trigger to update
intermediate tables for that are needed for many-to-many data relationships
Real World Experience: Integrating DB2 with XPages
Lessons Learned
Know what you need from your DBA
Ask your DBA to consider using a stored procedure or trigger to update
intermediate tables for that are needed for many-to-many data relationships
Real World Experience: Integrating DB2 with XPages
Lessons Learned
Use the PreparedStatement class
The PreparedStatement is a class in the java.sql package that makes it easy to
generate SQL statements
This class protects against SQL Injection, use of this coding class is a company
standard
This class protects against bad data causing errors
Real World Experience: Integrating DB2 with XPages
Lessons Learned
Yes this really happened
String userCity = “D'Iberville”); int userTaxDue = 0;Date userTaxDue = taxDueDate; String userID = “12345”;
String sqlUpdate = "UPDATE USER_DETAIL SET USER_CITY = ‘” + userCity + “’, USER_TAX_DUE_AMT = “ + userTaxDue + “, USER_TAX_DUE_DT = “ + userTaxDue + “ WHERE USER_ID = “ + userID;
Real World Experience: Integrating DB2 with XPages
Lessons Learned
Using the PreparedStatement class
String sqlUpdate = "UPDATE USER_DETAIL SET USER_CITY = ?, USER_TAX_DUE_AMT = ?, USER_TAX_DUE_DT = ? WHERE USER_ID = ?"; PreparedStatement ps = null;ps = conn.prepareStatement(sqlUpdate); ps.setString(1, “D'Iberville”); ps.setInt(2, 0); ps.setDate(3, new Date()); ps.setString(4, “12345”); ps.executeUpdate();
Real World Experience: Integrating DB2 with XPages
This is the code from theme that was set to load on every page.
<resource><content-type>application/x-javascript</content-type>
<href>js/jquery.datepick.min.js</href><!-- http://keith-wood.name/datepick.HTML -->
</resource>
<resource><content-type>application/x-javascript</content-type><href>js/jquery.datepick.validation.js</href><!-- http://keith-wood.name/datepick.HTML -->
</resource>
Lessons Learned
Bonus Lesson (if time allows, game time decision) This doesn’t have anything to do with DB2, but one major issues we had was
sporadic 403 errors when we deployed from our UNIT to INTG environment. The issue turned out to be resources that the server was trying to load on the
anonymous login page.
Real World Experience: Integrating DB2 with XPages
Lessons Learned
Resolution to the evil 403 problem (thanks @edm00se)
Fix was to change the theme to skip loading the resources on the login page
<resource rendered="#{javascript:view.getPageName() !== '/login.xsp'}"><content-type>application/x-javascript</content-type><href>js/jquery.datepick.min.js</href><!-- http://keith-wood.name/datepick.HTML -->
</resource>
<resource rendered="#{javascript:view.getPageName() !== '/login.xsp'}“><content-type>application/x-javascript</content-type><href>js/jquery.datepick.validation.js</href><!-- http://keith-wood.name/datepick.HTML -->
</resource>
Real World Experience: Integrating DB2 with XPages
What your DBA wants you to know…
Real World Experience: Integrating DB2 with XPages
What your DBA wants you to know
DB2 Explain (Optimizer)
Understand requirements prior to approaching DBA
You and you alone own your data
Take time upfront to save time/frustration in the end
Maintain data integrity
Table structure and their relationship
Real World Experience: Integrating DB2 with XPages
What your DBA wants you to know
DB2 Explain
Shows the strength/weakness of your SQL
Shows cost of running SQL
Checks syntax
Displays path taken to obtain data
IBM Data Studio is the product used to display DB2 Explain results
Real World Experience: Integrating DB2 with XPages
What your DBA wants you to know
DB2 Explain using IBM Data Studio
Real World Experience: Integrating DB2 with XPages
What your DBA wants you to know
Understand requirements prior to approaching DBA
All existing views shouldn’t become a table in DB2
Final decision out of your hands now that you have to deal with a DBA
You and you alone own your data
Don’t ask DBA for help with data issues until you check your code
Decimal datatype allows for setting decimal places before and after (xxx.xxxxx)
Real World Experience: Integrating DB2 with XPages
What your DBA wants you to know
Take time upfront to save time/frustration in the end
You don’t have total control over design so take time to think about it
Insert timestamp has always been available with DB2
Update timestamp is called a DB2 RowChangeTimestamp that was new in v9
Insert/Update timestamp have zero cost for including in tables
Real World Experience: Integrating DB2 with XPages
What your DBA wants you to know
Maintain data integrity
Ensure data elements for dates are a date/time not text
Number data elements contain numbers not text
DB2 won’t allow incorrect data
DBA does build as many safeguards possible to prevent erroneous data
Table structure and their relationship
DBA’s have knowledge so utilize that and don’t be afraid of them
Drop-downs will be made into a table to maintain data integrity
Real World Experience: Integrating DB2 with XPages
Questions???
Blog: http://notesspeak.blogspot.com/Email: [email protected]: @szavocki
Blog: www.xpagesnewbie.wordpress.orgEmail: [email protected]: @dwainwuerfel