480 likes | 915 Views
ACES at Duke. Re-inventing a custom web-based student system application. Part 1. Making decisions. What is ACES?. Duke’s online student system 24 hour access to registration, grades, bio/demo data, financial data, advising tools. What is STORM?.
E N D
ACES at Duke Re-inventing a custom web-based student system application
Part 1 Making decisions
What is ACES? • Duke’s online student system • 24 hour access to registration, grades, bio/demo data, financial data, advising tools
What is STORM? • Duke staff and faculty web access to student systems information • Access to student data, class information, applicant information • Ability to perform common course and student data management functions
Why? • HTMLAccess (the PeopleSoft product) was immature with unknown performance • IVR wouldn’t be able to handle registration with a PeopleSoft backend • Difficult interface and cumbersome navigation within the PeopleSoft client • Easier to keep customizations outside of PeopleSoft
Why? • Desire for added functionality • Registration • Curriculum/Advising • Online Application Entry • Differences across professional schools
Bookbag allows for easier advising, less load during registration time, simpler course planning
Previous Technology • HAHTSite/VisualBasic front end • Access to PeopleSoft Oracle 8i database via ODBC • Extra tablespace to support added functions • PeopleSoft Message Agent used to save data, so business logic is executed by PeopleSoft Application server
Hardware • Cisco CSS load balancer • 3 IBM H70 AIX 4.3 Web Servers (iPlanet) • 3 IBM Netfinity Windows NT backend servers
Downside • High support costs for HAHTSite and iPlanet • HAHTsite version no longer supported • Very specialized programming knowledge required for maintenance • Expensive hardware
Step 1: Selling Java • A chance to clean up and consolidate code • OO design makes for a simpler design and easier maintenance • Shared code libraries reduce redundant code • A chance to rethink and redesign application pathways based on user feedback
jBoss 3.0.3 Jetty 4.2 Jdk 1.4 Jdom b7 Ant Jedit cvs Total Cost: $0 Step 2: Selling Free Tools
Step 3: Architecture • Remove business logic from display logic • Achieve greater flexibility and fault tolerance in system design • Facilitate a larger programming team • Maintain as much insulation from PeopleSoft patches and fixes as possible • Increase usability of custom business logic
Making the move • Redeveloped business logic to work against PeopleSoft 7.6 • Business logic all contained within a combination of Stateless Session, CMP and BMP Entity EJBs • All business logic returned as XML with an eye toward a future portal • XML converted to HTML with XSLT
The Next Steps • Changing business logic to use PeopleSoft 8.1 table changes • Changing message agent calls to use the component interface • Exposing business logic to other Duke applications – generating PDFs, Excel Spreadsheets, reports
New Hardware • IBM xSeries rack-mount servers • Inexpensive • Not overkill for the job • Having a farm makes maintenance potentially more tedious, but reduces negative impact of any system failures and increases scalability • Minimal machine room space and lower power requirements
The Future • Drop ACES in favor of PS-delivered web client? • Use business logic for Duke-specific functions and incorporate it into the PS web client
Part 2 Using the PeopleSoft Component Interface with Java
What’s the Component Interface? • PeopleSoft’s way of allowing 3rd party programs access to business logic in version 8.x • Replacement for the version 7.x Message Agent
What do you get? • Data entry with the Component Interface simulates entering data directly into the pages • Order of parameters set was not guaranteed under Message Agent • All PeopleCode is fired, but order is not guaranteed
Step 1 • Within App Designer, create a component interface mapped to the component you want to access
Step 2 • PeopleSoft begins generating the component interface by selecting all fields from the component referenced • Fields can be added or removed at will, but less dangerous to leave them all and only set the ones you care about in the client program
Step 3 • Build the API (the .jar file to use with the client)
Step 4 • Generate the client template
Coding the client application • Add the following imports: import java.io.*; import java.math.*; import psft.pt8.joa.*; import PeopleSoft.Generated.CompIntfc.*; • The joa package comes with PeopleSoft • The .Generated package was built by the previous steps
Coding the client application • Setting the server name and port String strAppSeverPath = “//153.4.555.1212:9000"; String strOperatorID = “username"; String strPassword = “password"; • App server path is IP (or DNS name) of application server machine, followed by a : and the JOLT port address
Coding the client application • Create the session ISession oSession = API.createSession(); • Connect to the server oSession.connect(1, strAppSeverPath, strOperatorID, strPassword, null); • Get the component IEnrlRequest oEnrlRequest = (IEnrlRequest) oSession.getComponent("ENRL_REQUEST");
Coding the client application • Set the keys oEnrlRequest.setEnrlRequestId(“0000000000”); oEnrlRequest.setEmplid(“0039646”); oEnrlRequest.setAcadCareer(“UGRD”); oEnrlRequest.setClassNbr(1022); oEnrlRequest.setEnrlReqAction(“E”); oEnrlRequest.setInstitution(“DUKEU”); oEnrlRequest.setStrm(“0960”);
Coding the client application • Create the new request oEnrlRequest.create();
Coding the client application • Adding classes IEnrlRequestEnrlReqDetailCollection oEnrlReqDetailCollection = oEnrlRequest.getEnrlReqDetail(); IEnrlRequestEnrlReqDetail oEnrlReqDetail; for (int i = 0; i < oEnrlReqDetailCollection.getCount(); i++){ oEnrlReqDetail = oEnrlReqDetailCollection.item(i); // Add an item to the collection for each class. oEnrlReqDetail.setClassNbr(1022); oEnrlReqDetail.setEnrlReqAction(“E”); }
Coding the client application • Save the request oEnrlRequest.save(); • Get the generated enrollment request ID String enrl_request_Id = oEnrlRequest.getEnrlRequestId();
Part 3 Design and performance considerations
Lessons learned from previous version of ACES • Database tuning (indices, hints) is critical • Network traffic accounts for 50-75% of the time spent waiting for results • Co-locate a web-only PS app server and database • Use connection pooling wherever possible • End-to-end performance testing is critical, the whole is not always the sum of the parts
Some EJB Decisions • BMP used much more heavily than CMP for read-only data • Flexible caching algorithms and parameters • Database hits can be greatly minimized on common data at the expense of slightly stale results
Some EJB Decisions • Stateless session beans used for up-to-the second read-only data and to save infrequently used data that does not need to be cached • CMP used for frequently updated Duke-specific data controlled entirely through the web application (the bookbag)
Consolidation of Machines and Processes • Co-locating EJB, Servlet, and web server on the same machine, and if possible within the same JVM greatly increases performance
Connection Pooling • Database • App server connections
Exposing EJB methods to clients • Use one stateless session bean to expose the API to EJBs • Reduces the number of JNDI lookups that need to be done to acquire an EJB
Investigate Clustering and Cache Options • Jboss is highly configurable • Clustering may decrease performance because of the introduction of network traffic and coordination, but not using clustering can cause skewed results if sticky sessions are not used
Contact Information • Matt Young (matt.young@duke.edu) • Richard Outten (richard.outten@duke.edu) • http://www.jboss.org • http://jakarta.apache.com • http://www.jedit.org