Title: Walkthrough of Java APIs
1Walkthrough of Java APIs
- Presented By Tracy Engwirda
28 September, 2005
2Overview
- Background
- Walk through of Java APIs
- High level review of packages, patterns
- Building Block Overview
3Audience
- Knowledge of Java programming
- People who want an overview of the entire range
of functionality exposed - (without resorting to reading the docs)
- Thinking of building, dont know what to look at
first
4Design Goals High Level
- Decouple persistence from data objects
- XML and Database
- Originally targeted for import/export
- Database abstraction
- Iterative functionality
- Start with simple objects, mapped to the legacy
schema - Managed extensibility
- System extensions and deployment model
5A Little History
Import/Export
Building Blocks
Module Developer Kit
R6 Gradebook
R6 Assessment
R6 Portal
6Building Blocks Architecture
Business Layer (JSP, Servlet, Struts)
View Layer (JSP, Servlet, Tag Library)
Data Objects
Core Services
7Road Map
- Data objects and packages
- What data can I see?
- Persistence objects and packages
- How do I get to the data?
- Service objects and packages
- How do I log it, authenticate it, etc.?
8Which API is that?
- blackboard. Building Block API
- blackboard.admin. Release 6 Admin API
- com.blackboard.event. Bb 5.5 Event
API (deprecated)
9Building Block API Packages
announcement
navigation
blackboard.data.
calendar
role
content
course
gradebook
user
announcement
navigation
blackboard.persist.
calendar
role
content
course
gradebook
user
10Building Block API Packages
blackboard.platform.
context
filesystem
session
log
persistence
plugin
blackboard.portal.
blackboard.base.
blackboard.util.
11Data Objects
- blackboard.data
- Object view of the schema
- Typed to wrap legacy database constructs
- Type-safe enumerations for constrained database
columns - User.Role.SYSTEM_ADMIN
12Data Objects BbObject
- Base object for all data objects
- Common attributes Primary Key (Id), dates, etc.
- Smart attributes
- Properties stored in an internal map, instead of
member variables - Smart load, dirty flag
- Id attribute helps define lifecycle
- Id.UNSET_ID default id for new objects
13Data Objects Content
- blackboard.data.content
- Content is the root object that can be used in
the content areas of a course - All other objects are simple subclasses of
Content that over-ride specific values - Custom content types should create and manipulate
Content objects not CourseDocument objects. - CourseDocument can be used to manipulate the base
Item type
14Data Objects Content
- ContentHandler
- Ties content to URI-based handlers
- This is really the B2 glue for custom content
- IsFolder
- Can the object contain other objects
- IsLesson
- Should the contents be displayed sequentially
- Plus many more added in Bb 6.3
15Data Objects Content
16Data Objects Course
- blackboard.data.course
- Course and Organization
- Organization overrides course for specific
attributes - Course Enrolment
- CourseMembership
- Enumerated roles
- CourseMembership.Role.INSTRUCTOR
- Course Groups and Group Enrolment
17Data Objects Gradebook
- blackboard.data.gradebook
- LineItem
- Defines the columns in a course gradebook
- Score
- Wraps the actual outcome for a given line item
18Data Objects Misc.
- Announcement
- Wraps announcements
- Can be system or course level
- Calendar
- Wrap entries in the calendar
- Course and System level
19Persistence Objects
- Intended to be decoupled from data objects
- Interfaces allow replaceable persistence
implementations - Currently proprietary to Blackboard
- BbPersistenceManager
- Ties together different aspects of persistence
- Loader/Persister broker
- Container
20Persistence Objects Id
- Used to encapsulate the unique identifier for
each data object - Primary key, and more
- Data type
- Container (database)
- GUIDs are not used, so keys can collide
21Persistence Objects Loaders
- Base interface to get at data
- Roughly one-to-one correspondence to data objects
- All type-specific loaders are geared towards
known predicates - loadById()
- loadByUserIdandType()
- Performance. Ad hoc queries can kill the system
- Schema stability
22Persistence Objects Persisters
- Perform any action that manipulates data
- Again, one-to-one correspondence with data
objects - Smart update
- Id object state determines insert vs. update
23Accessing Persisters and Loaders
- Theyre interfaces, not directly instantiated by
callers - BbPersistenceManager is the broker
- Most have a Default object for direct access
- ContentDbLoader loader ContentDbLoader.Default.g
etInstance()
24Putting It Together
- Content content new Content()
- content.setTitle()
- // etc. . .
- ContentDbPersister contentPersister
- ContentDbPersister.Default.getInstance()
- contentPersister.persist( content )
25Putting It Together v2
- Content content new Content()
- content.setTitle()
- // etc. . .
- // new reflection-based persistence methods
- content.persist()
26Services
- Infrastructure for common utility functions
- Exposed as interfaces (mostly)
- Lookup via BbServiceManager
27Service Lookups
LogService logService BbServiceManager.getLo
gService() LocaleManager locMgr
BbServiceManager.getLocaleManager() ContextManag
er ctxMgr (ContextManager)BbServiceManager
.lookupService( ContextManager.class )
28Services Context
- blackboard.platform.context
- Critical entry point that all code must call
- Context wraps information about current request
to get the correct database connection - Interact via ContextManager.setContext() and
ContextManager.releaseContext()
29Services Session
- blackboard.platform.session
- State for the current browser-based client
- Stores authentication status
- Cookie-based session management
- Database persistent to share between Perl and
Java processes - Some assembly required
- Not all HTTP-clients (e.g., media plugins for
browsers) honor the host browsers cookies
30Services Filesystem
- blackboard.platform.filesystem
- FileSystemService - Broker different file system
locations - Course and content
- E.g., getContentDirectory()
31Services Log
- blackboard.platform.log
- Simple write-only log implementation
- Supports configurable levels
- Written before log4j and JDK 1.4
32Services Security
- blackboard.platform.security
- Authentication and Authorization
- AccessManagerService
33Package Base
- Mix of utility objects
- List functionality
- BbList should use List instead though
- GenericFieldFilter
- GenericFieldComparator
- Comparator implementation that can sort based on
arbitrary properties - Works with String, Boolean, Dates, and Comparable
34Package Base
- BbEnum base class for all type-safe
enumerations - FormattedText encapsulation of text data
entered via standard Text boxes - Defines enumeration for Smart, Plain, and HTML
text - NestedRuntimeException/NestedException pre-JDK
1.4 facility for chaining exceptions
35Portal
- blackboard.portal.external
- CustomData is all youll need
- getModuleData()
- getModulePersonalizationData()
- Store name/value
- Value can be string, or binary object
36Administrative API Packages
blackboard.admin.data.
user
course
category
datasource
blackboard.admin.persist.
user
course
category
datasource
37Administrative APIs
- blackboard.admin.
- APIs geared towards data integration
- Formerly called the Event APIs
- Repackaged to be more consistent with B2 APIs
- Compatibility layer supported
- Base classes used in Snapshot
38Administrative APIs
- Follows IMS Data Model
- Person, Course (Group), and Membership
- Additional objects for Blackboard usage
- Category
- Data Source
- Defines logically related entities that can be
managed independently via Snapshot
39Beyond APIs UI Integration
- Tag Libraries
- Encapsulate re-usable UI components to capture
the Blackboard look and feel - Tag Library Descriptors
- Re-use within individual web applications
- .tld files
40Beyond APIs - Deployment
- Not an API, per se
- Critical aspect of extension development
- XML manifest used to generate records in the
database that define navigation, content brokering
41Tying It All Together
- A Building Block may require touching several
different APIs - Set context
- Authorize current User
- Load content object
- Access Gradebook data
- Perform custom calculation
- Log result
- Render results (bracketed via tags)
- Release context
42Thoughts
- There are a lot of classes to look at
- Focus on the type of Building Block you need to
build - Take it methodically, iteratively. Whats your
first goal? Second goal? - Think of combining functions
- What can I do using Content with Gradebook?
43Questions?