Bb Dev Conference '08 Report
1 Bb Developer's Conference 2008
1.2 For Discussion
2 Keynote Addresses
2.1 Keynote - Dr. Michael Wesch
2.1.1 Digital Information is Different
2.1.2 Harness the Intelligence - A Game
2.2 The Blackboard NG Project - A Developer's Roadmap
2.2.1 Project NG Details
2.2.2 Openness Roadmap
3 Technical sessions
3.1 Managing Data Sources Within the Blackboard GUI
3.1.1 Synchronization Problem
3.1.2 Problem Solution
3.2 Getting Started With Building Blocks Part I
3.2.1 Building Block Architecture
3.2.2 Installing Building Blocks
3.2.3 Developing Building Blocks
3.3 Getting Started With Building Blocks Part II
3.3.1 Sample Building Blocks
3.3.2 Comments and Questions
3.4 Best Practices for Building Testing and Deploying Your Building Blocks
3.5 Blackboard Academic Suite: Configurations and Considerations
3.5.1 Windows Tips
3.5.2 UNIX and Oracle
3.6 Gaining Performance Maturity in your Blackboard Deployment
3.6.1 Evolution of Maturity
3.6.2 Case Study - University of Dundee
3.6.3 Promoting Success
3.6.4 System Setup
3.6.5 Solaris Containers
3.6.6 Impacts and Benefits
3.6.7 The Future
3.7 How To Write Crap in 1000 Seconds
3.7.2 Blackboard Maven Project
3.8 Background Tasks and Building Blocks
3.8.1 Option - Basic Java Thread
AAbility to choose a DB Location - 3/3.1/3.1.4
Advanced Quartz - 3/3.8/3.8.2
Advantages - 3/3.6/3.6.4
All share a configuration and are node aware - 3/3.6/3.6.4
Archetype - 3/3.7/3.7.1
Assessing Memberships - 3/3.3/3.3.1
Authentication - 3/3.4/3.4.3
BBackground Tasks and Building Blocks - 3/3.8
Bb Developer's Conference 2008 - 1
Bb Look and Feel - 3/3.2/3.2.1
Benefits - 3/3.6/3.6.6
Best Practices for Building Testing and Deploying Your Building Blocks - 3/3.4
Blackboard Academic Suite: Configurations and Considerations - 3/3.5
Blackboard Maven Project - 3/3.7/3.7.2
Blackboard Tag Libraries - 3/3.4/3.4.3
Build snapshot file through retrieval of stored data - 3/3.1/3.1.4
Build-Deploy-Test - 3/3.4/3.4.4
Building Block Architecture - 3/3.2/3.2.1
Building Blocks - 2/2.2/2.2.1
CCase Study - University of Dundee - 3/3.6/3.6.2
CleanBB - 3/3.5/3.5.2
Coding - 3/3.4/3.4.3
Comments and Questions - 3/3.3/3.3.2
Context - 3/3.4/3.4.3
DData Retention - 3/3.1/3.1.2
Data Storage - 3/3.4/3.4.3
Debugging - 3/3.3/3.3.1
Demonstration - 3/3.7/3.7.2
Design - 3/3.4/3.4.2
Details - 3/3.3/3.3.1
Developing Building Blocks - 3/3.2/3.2.3
Digital Information is Different - 2/2.1/2.1.1
Disadvantages - Bb takes longer to start - 3/3.6/3.6.4
Disclaimer - 1/1.3
Displaying Tables - 3/3.3/3.3.1
EEnhancements - 3/3.1/3.1.4
Evolution of Maturity - 3/3.6/3.6.1
FFailover between nodes - 3/3.6/3.6.4
For Discussion - 1/1.2
Functional - 1/1.2
GGaining Performance Maturity in your Blackboard Deployment - 3/3.6
Getting Started With Building Blocks Part I - 3/3.2
Getting Started With Building Blocks Part II - 3/3.3
Greater utilization of hardware - 3/3.6/3.6.4
HHardware - 3/3.6/3.6.2
Harness the Intelligence - A Game - 2/2.1/2.1.2
How To Write Crap in 1000 Seconds - 3/3.7
IIDs and Persistence - 3/3.4/3.4.3
IMS Learning Tool Operability - 2/2.2/2.2.1
Identify a User - 3/3.3/3.3.1
Impacts and Benefits - 3/3.6/3.6.6
Implementation - 3/3.1/3.1.3
Installing Building Blocks - 3/3.2/3.2.2
Internationalization - 3/3.4/3.4.3
JJob Setup - 3/3.8/3.8.2
KKeynote - Dr. Michael Wesch - 2/2.1
Keynote Addresses - 2
LLearning Environment Connector APIs - 2/2.2/2.2.1
Level 1 - Firefighting - 3/3.6/3.6.1
Level 2 - Monitoring - 3/3.6/3.6.1
Level 3 - Performance Optimizing - 3/3.6/3.6.1
Level 4 - Business Optimizing - 3/3.6/3.6.1
Level 5 - Process Optimization - 3/3.6/3.6.1
Logs to Utilize - 3/3.5/3.5.2
MManaging Data Sources Within the Blackboard GUI - 3/3.1
Maven Lifecycle - 3/3.7/3.7.1
Maven - 3/3.7/3.7.1
Monitor old and deleted courses - get a policy that keeps them 3-5 yrs - 3/3.5/3.5.2
Monitoring - 3/3.6/3.6.2
OOpenness Roadmap - 2/2.2/2.2.2
Option - Basic Java Thread - 3/3.8/3.8.1
PPermissions - 3/3.4/3.4.3
Platform of Participation - 2/2.1/2.1.1
Problem Solution - 3/3.1/3.1.2
Project NG Details - 2/2.2/2.2.1
Promoting Success - 3/3.6/3.6.3
Proxy Tools - 2/2.2/2.2.1
QQuartz Triggers - 3/3.8/3.8.2
Quartz - 3/3.8/3.8.2
Questions - 2/2.1/2.1.2
Questions - 3/3.8/3.8.2
RRequirements - 3/3.4/3.4.1
SSQL Server Tuning - 3/3.5/3.5.1
Sample Building Blocks - 3/3.3/3.3.1
SmartDSM - 3/3.1/3.1.2
Solaris Containers - 3/3.6/3.6.5
Starting Block - 3/3.4/3.4.4
Struts - 3/3.4/3.4.3
Summary - 1/1.1
Summary - 2/2.2/2.2.2
Summary - 3/3.6/3.6.7
Synchronization Problem - 3/3.1/3.1.1
System Setup - 3/3.6/3.6.4
Systems Architecture - 3/3.6/3.6.2
TTag Libraries - 3/3.3/3.3.1
Technical sessions - 3
Technical - 1/1.2
Testing - 3/3.4/3.4.4
The Blackboard NG Project - A Developer's Roadmap - 2/2.2
The Future - 3/3.6/3.6.7
Tips and Tricks - 3/3.5/3.5.2
To learn is to acquire information - 2/2.1
Tomcat Troubleshooting - 3/3.5/3.5.2
Tools Leveraged - 3/3.1/3.1.2
UUNIX and Oracle - 3/3.5/3.5.2
Upgrading to NG - 2/2.2
User Experience - 2/2.2/2.2.1
Using Persistence Manager - 3/3.3/3.3.1
Using the MVC Frameworks - 3/3.2/3.2.3
VVersion Issues - 3/3.4/3.4.2
WWeb Services - 2/2.2/2.2.1
What Changed - 3/3.6/3.6.2
Windows Tips - 3/3.5/3.5.1
Work is distributed and they are balanced - 3/3.6/3.6.4
Bb Developer's Conference 2008 report – by David C. Lyon, Cal Poly Pomona University. Please read the disclaimer.
The Bb Developer's conference was held in conjunction with Bb World and both events were held in Las Vegas July 14-17. I attended both this year. The Developer's conference was useful in that it will help me gain a foothold into developing custom Building Blocks and gain a better understanding of the internal workings of Blackboard and how it runs code. There were plenty of Bb experts in attendance.
I ran into a man from Holland. His institution was using the portfolio product. He explained that you can by the portfolio product without the content system. Apparently, you need both to have full functionality for portfolios.
The California State University had the most attendees here. This was the largest Bb Dev conference so far, with representatives from as far away as Dubai. This conference also had the most client led sessions.
This conference provided more technical meat than the Bb World conference that followed. This is the conference to attend if you want to learn about creating home-grown Blackboard Building Blocks – the way to extend your Blackboard environment. These can be viewed as plugins similar to Firefox plugins (for lack of a better example). The conference provided some basic "getting started" sessions that were useful to me. These sessions outlined the steps to creating a basic Building Block.
There were also sessions dealing with Bb internals and performance and scalability issues. The University of Dundee has done some great things in the area of scalability (more on this follows).
The opening keynote was very interesting and one could easily argue that it belonged at the Bb World conference, not here. However, from a high level, it was quite useful to see how Michael Wesch at Kansas State is turning learning on its side and doing it with Web 2.0 technology. This is certainly presented more from a user and facilitator perspective (rather than highly technical) but nonetheless very valuable.
Blackboard representatives discussed Project NG and the integration it will provide, touting more openness. They will merge the best of WebCT and Blackboard and standardize on Building Blocks to extend the platform. The WebCT Powerlinks method will be phased out. Bb will provide connectors to integrate with other LMS products including Moodle, Sakai and WebCT. One could write a Building Block that would call a course list function in WebCT (presumably Moodle too) and display it within Bb.
There were also sessions covering best practices for Building Blocks and Bb performance in general including database issues. More advanced sessions covered development environments that one could avail of (Maven) for example.
Blackboard thinks people will use the Bb user interface less as Bb access and integration becomes distributed across devices and systems (Facebook for example).
This conference was well worth attending.< For Discussion
Read about Project NG and the new user experience as well as the most significant platform change for developers since Bb 5.5. One of the nicest changes will be the Learning Environment Connector APIs that will integrate other course management systems with Bb.
Read how the University of Tennessee developed a snapshot GUI to allow functional people to help manage the course snapshot, solving the problem of stale courses.
Read about the Building Block Architecture and how tags are used to provide the Bb look and feel.
Learn about developing a simple building block and how to use tag libraries.
Learn about best practices for the building, testing and deployment of building blocks.
There are useful tips for configuring and monitoring Blackboard as well as doing forensics.
The following information was derived (much of it in paraphrase) from the Bb Developer's conference 2008. In some cases, session slides are available. This report is an attempt to encapsulate the most useful information from my perspective, bearing in mind that the Powerpoint slides do not always contain everything presented.
The information presented is deemed to be as accurate as possible but no guarantee is made. This report should not be seen as an official report but instead, as a resource document. Notes taken during the keynote were not necessarily intended to be direct quotes.
< Keynote - Dr. Michael Wesch
Michael Wesch spoke about what he is doing that is radically different from the traditional approach to learning – by using Web 2.0 technologies. He faced the problem of students, half of them not liking school but liking learning.
Typically, students think of learning in a traditional way – obey the authority and follow along. These expectations are taken to smaller classrooms. Students are not ready to dive into great conversations and the questions they are asking are very simple, limiting questions. He calls it a crisis of significance. Most of information we are testing them on is floating about the room – over the wireless network.
"What's in the air?" Wesch states there are 70 billion pieces of information being produced this year. Information is no longer scarce. Less than .01 % of it is on paper. We need to re-think education.
< Digital Information is Different< The Blackboard NG Project - A Developer's Roadmap
Wesch references Marshall MuLuhan in the context of our need to look at the present. On paper, we thought of information as a thing. Hyperlinking showed us information can be in more than one place. Google harnessed links in 1998 w/o categories and hierarchies. Blogging really changed things and there are over 100 million blogs. Youtube over has over 9000 videos uploaded in a given day. Don't think of it as TV because 88% of it is new and original.
The idea of following along is going out the window. Wikipedia is showing us how we can all work together. The information being created rivals that of the expert. There is a new model of authority, and discussion and debate going on behind the scenes. Information is now tagged for better organization and we are doing this without folders. RSS teaches us that information can find us.
We do this by creating learning environments, platforms of participation (as he calls them) that leverage the new media environment. We are not using it in deep and profound ways (students). Blogger, digg, google – there are no natives here. Students don't Wiki, they consume.
Wesch's site, http://netvibes.com/wesch enables students to do all kinds of participation. The site contains resources for anthropological studies. There is a facebook interface, a Twitter stream, youtube, a Diigo list, a collaborative video and it is all edited together (highly experimental). Students didn't know how to run a wiki when they first came in. Within 48 hrs, students produced a great review in response to questions. Under the "Digital Ethnography" tab, students can make todo lists for each other.
The students did a "History of Youtube" video. They went on lexus/nexus and found thousands of articles. They broke it up into 10 parts and put it on the wiki in one week. See Youtube History of Youtube. The Platform for Participation extends out into the world as does the classroom video project. It has apparently been viewed from all over.
Wesch created a game. The question was: How do you harness the intelligence of the large group? If you have 12 people, you can have 66 relationships according to his formula. Organizations can create hierarchies. The network is the ideal situation. But, how do you harness all of the intelligence?
The learning objective was to know all about humankind for the last 12000 years of history. It is typically the case where the student knows more about a topic than the professor. Students brainstorm the state of the earth on the wiki. They come up with statistics related to the world today. They ask the question "Why?". "What do we need to know for this test?" They break up into cultural groups and must create cultures that are realistic for the year 1450. They produced well over 1000 pages of material. They abandoned the old classroom and rented a ballroom on campus. They created a game to simulate hundreds of years of world history so students would leverage the media environment all around them to understand how the world works. Part of the game is to colonize other people, "steal their fruitloops".
They also created an economic system and a world political system. They had to think about new forms of energy. They formed alliances – the Central Alliance waged World War Three. There were imperial powers, and fruit loop necklaces. They used a system called jott to synchronize with twitter involving voice to text.
The next step would be how to move this into the real world in a more organic way using two dimensional barcodes. One could barcode with a cellphone, the barcode would contain a URL. The challenge is to create platforms for participation that allow students to realize and use this media environment. Richard N. Katz at EDUCAUSE has made a video about this.
All agree on one trend – we are moving to ubiquitous networking, computing, information, unlimited speed, about everything, on all devices. Have we prepared students for this world? Wesch suggests we move towards a participation paradigm. Move from a closed to an open system, from control to enable, and flip our current metaphors. Move from knowledgeable to "knowledge able".
What happens to lurkers? Students grade each other and give feedback on other students. They work in groups of ten, uploading anonymously through an form.
There are some privacy issues with publishing. Wesch is willing to push that edge. There is an opportunity to talk about managing online identity. From systems, we have to think about liability. There is a lot of resistance on many levels and it is a major teaching load.
The technology isn't going to fix the underlying issue, the powerful use it to enhance their own power.
Presented by: Bob Alcorn and Jessica Finnefrock of Blackboard.
With Bb's Project NG (Next Generation) product line, you'll be able to customize the user experience with millions of colors and Web 2.0 features. They also tout openness. They will bring Sakai, Moodle and Vista into Bb – all courses within the course module. Syracuse University is helping Bb to release the first Sakai connector.
Project NG is the best of WebCT and Bb, standardizing on the Building Blocks platform and a common user interface. A new Grade Center UI will allow inline editing and smart views (relevant to task).
This will be a multi-year, multi-application pack phased delivery w/no DB migration. There is a path for all Bb/and WebCT versions.
< Project NG Details
Project NG is the most significant platform change for developers since Bb 5.5, which was the first to offer Building Blocks. they are now committed to an open and extensible development environment.
Extensibility is integrating data into Bb, getting data out of Bb (and user experience), and integrating new features.
NG makes a user experience that is more user-centric, incorporating Web 2.0 to meet the needs of savvy users. The solution is a completely new rendering infrastructure, supporting a more standards based UI. The Developers group came up with a design framework, widgets, and how they should be used. New tags were added to simplify page authoring and technology stack consolidation was achieved. Bb has had Perl and Java code. With NG, it is all ported to Java.
This allows extensibility that doesn't require programming or the destabilizing requirement to load code into a production system. People want to use PHP and RAILS. NG defines well defined entry points using an XML descriptor, a well defined model to describe and install the tool, and well defined APIs (Web services) to push/pull data to/from Bb.
Blackboard is defining the specification for IMS. See the Web Services and Tool Interoperability notes.
Bb is formalizing and standardizing interfaces. The solution was to implement a framework to deliver and deploy web services. In the past, it has not been easy or standardized. They developed standard tool sets: Axis2, WS-Security for authentication, and standard management screens. There is a catalog of Building Blocks using web services w/meta data.
One can log into one system to access multiple courses on different LMS using a platform for integrating multiple course management systems. They produced a generalized pluggable interface for integration that is LMS neutral. This was driven by their own need. The Moodle connector was illustrated with brand customization.
With NG, backwards compatibility is supported. Learning Environment Connectors will be delivered as Building Blocks. This allows programmatic callbacks in Building Blocks. For example, you can call the WebCT ce4 announcement provider.
One goal is to push information (email, SMS, RSS) to users and devices, extensible architecture with open reporting framework, a CSS driven UI, enterprise data integration, "best of both" multi-institution support, more Building Block openness with enhanced Web Services/APIs, and expanded IMS standard support.
System reports are replaced with pluggable reports. You can also download a skins package to create a new look and feel. NG makes sure you can get the information outside of the Bb UI (news reader, facebook), decoupling the information.
The new reporting framework includes rich visualization, with drop-in reports. They are building this on Eclipse BIRT. BIRT has an Eclipse player so you can write a report in Eclipse, and create a package for it.
Project NG is a huge undertaking and redefines the eLearning landscape. Bb touched over 2 million lines of code. NG defines what happens in Bb 10 and 11. It expands the scope of the platform which is really many systems, distributed but tightly integrated.
Bb provides unparalleled extensibility with Building Blocks, Proxy Tools, Web Services, LMS connector co-production capabilities, reporting, and multi-modal delivery. There is an explicit, clear vision and roadmap to get there.
< Managing Data Sources Within the Blackboard GUI
Presented by: Mark Spurlock and Carl Hardin of the University of Tennessee.
The University of Tennessee has been using Bb for 10 years, are ASP hosted (wanted to use Building Blocks), have about 30000 students, and 56000 accumulated sites. They used a typical means of snapshot control (snapshot controls the SIS integration), hand editing of snapshot properties, a Perl script, or Bb global services written (which is apparently what they used last). It has weathered the years well.
< Synchronization Problem< Getting Started With Building Blocks Part I
What would be nice: to have quality control, calendar awareness, system maintenance (data retention), sysadmin control and correction through Bb APIs and not the disjunction of the two. They had used HTML forms, Perl, cron (UNIX scheduler), and human memory.
For example – course deletions. They were keeping everything forever until faculty wanted to delete it. They still waited six months to purge it but kept it hidden. This was not integrated with their business processes. Customer service and policy were frequently in conflict and there were many faults in the process and too many little pieces to manage.< Problem Solution
The solution was to Give more control to the GUI administrator by creating a Building Block. The command line becomes point and click. Technical expertise was needed to set it up, but less of it to manage.
SmartDSM was used to modify the DSM (enrollment key – like fall08) properties (like in the dsm.sh tool). It only does the dsm tool. It does manual functions and no scheduling.
They wanted to extend with a database but didn't want to cause support issues w/Blackboard. The snapshot controller and client can run from any machine and it can control the Bb/SIS integration. They are using MySQL and the ODBC driver, installed on the application server and are using a Building Block folder.
The GUI admin sets data retention, the snapshot automatically cycles those courses.
Their development environment consists of MyEclipse 6.0-1, Tomcat 5.5, RHEL 3, oracle 10.4, and Perl 5. They are pulling data from oracle and MySQL together. They have a feature for the admin to disable the data source. The Bb APIs are extremely helpful while you are developing.
Some enhancements they made:
Presented by: Denison Wright, product manager at Blackboard.
Building Blocks provide a way to expand entry points into Bb, really a Java based web application running in Bb. There are various kinds of Building Blocks that can provide a bridge to an external system, a system/course/user tool, communication, content related, and module.
For example, a content Building Block can provide new content into a system, override or extend normal behavior provided by Bb.
< Building Block Architecture< Getting Started With Building Blocks Part II
You can provide a bridge system or simple plugin using the API. To create a Building Block, you need to use some Bb classes (jar files), and they must be in the CLASSPATH in the development system. Top level packages are needed. Also included are tag libraries (bb-taglib.jar) to allow for the Bb look and feel and basic functionality.
There are three types of pages and Bb provides the tags for you to create these pages.
See slide 23 in the presentation.
There are custom tags specific to the functionality that you are building. You can also create a modify page – a password change page for example.
Installing a Building Block simply involves uploading your war file. The remove button provides a hook to your custom application if depending on another application to remove that as well.
Configuration data is stored in the folder returned by PlugUtil.GetConfigDirectory(). The removal can perform necessary cleanup prior to an actual removal.< Developing Building Blocks
As stated, Building Blocks are Java based web applications. You need the kits from Bb, Bb Academic Suite, Eclipse (suggested), documentation, and sample code.
See slide 31 in the presentation.
Dennison uses ANT to build – it is similar to the UNIX make tool. One can define build targets to compile, deploy, clean-up, and it is easy to use and is highly recommended. One can get the Building Block from the EDUgarage ANT.
The bb-manifest.xml file describes your Building Block to Bb. It contains the vendor, Bb version, plug-in entry points, and permissions. The handle has to be unique. All Building Blocks are installed in a plug-ins folder. The http-action is for any optional custom remove logic.
You can also have custom entry points. If you have a module Building Block, you can define this. You can define who can access this module. You can also add permissions (restrictions) and control what kind of operations the building block can perform. All of the information in the manifest is available in the GUI.
Presented by: Anupam Kumar, Global Services Senior Technical Analyst at Bb since 2006.
This session was a continuation of "Building Blocks Part I". See http://www.easyeclipse.org for eclipse packaged plug-ins. The examples covered today are in the Bb software development kit and from EDUGarage.
< Sample Building Blocks< Best Practices for Building Testing and Deploying Your Building Blocks
Kumar started with "Hello World" - it creates a course link. In his example, it doesn't yet have the look/feel of Bb. That is where Tag libraries come into play.
Tag Libraries are used to get the look and feel and context of where a Building Block is. Example, bbData:context determines the current user and course (if in course context Building Block).
The Breadcrumb tells where a user has come from, where they were – it gives continuity. It is simple to get the Bb look and feel.
The core of Bb is really a set of users and courses with course membership. This gets us a user object, and a course object. With that, there are many things you can do. The Bb API has countless other objects. How can we manipulate the object? This is discussed in further detail.
We added jar files to our CLASSPATH to get the Bb API. This is in the JAVA build path. See http://www.blackboard.com/extend.
Use the variables you get from the object in the jsp to output the info.
Example for getting course information – from the presentation slides:
Instead of using bbData:context, we'll be using the API. This is useful if outside the context of a course. Add blackboard.platform.
Use bbServiceManager.getPersistenceService().getbPersistenceManaqer(). There is more code to do this. We need to generate an ID for the course. We will use bbPm.generateId a lot. Use the CourseDbLoad to load the course.
See the example in slide 23 in the presentation.
How do you connect a user with a course? Course memberships connects them. Use the loadByCourseAndUserId() to get course membership of a particular user, and their role. We now have a course membership object. Catch blocks are used to catch the errors (user not in course, etc) and we can create various exceptions.
Modify the building block to show all memberships to a course – we can again use loadByCourseId. We want to display membership in a list table but we need to format the role name to a smaller size. Bb has a list we can use to push any object into it. It is a way to list items from a user. Each list element is a column in a table. This can be output in a Bb style table to get the Bb look and feel.
See slide 37 of the presentation. EDUGARAGE has a lot of the documentation. Use debug mode in eclipse to debug your program as if it was in Bb.
APIs provide what might be provided by SQL and you can access outside databases. There are web services APIs available.
When you add a course tool, you are not able to specify the order in Bb. The order can get reset during certain actions. Also, you need more handles to compartmentalize things. Using debug methods does take setup time but is worth it.
Migrating from 7 to 8 not too painful though you need to check for deprecated functions. The Tag libs ensure user interface consistency.
Presented by: Jeff Bradley, Senior Software Architect at Blackboard.
< Requirements< Blackboard Academic Suite: Configurations and Considerations
Know your audience and scale the process to your needs – end quality is as good as quality up front. You don't want to stitch things together. Development pauses are expensive and you need an expert decision maker.< Design
A Building Block is a basic web application. It runs on a sandbox with limited integration points (integration not even necessary). Be clear on the type of Building Block you are creating (module, content type,etc). Some design artifact must exist – scoped to your needs. This would be a wiki, html mock-ups, etc. Bb uses WiKis for documentation. They use confluence as it helps encourage developers to document their code.
Decide what versions of Bb you want to support- directions affects what API is available to you. Balance between the widest audience, or something internal only. Develop on the minimum version of Bb. You still need to test later versions. Identify how 3rd party dependencies are handled. These are library dependencies in your own code. Bb utilizes struts, for example – they do update those from version to version.
Blackboard does deprecate some things. They only support two versions back so they can remove things.
When coding, use appropriate tools, set coding standards and adhere to common formatting standards. Most internal Bb people use Eclipse. Abandon "proc" JSPs and don't use JSP scriptlets. The original Bb used proc JSPs. JSPs are for presentation only and should contain no business logic.
Struts is an Apache product used to set boundaries of business logic. It was designed to control page flow in the application. There is the presentation tier, page flow tier, and business logic. Struts is for the page flow tier. It should not contain presentation or business logic. Again, Bb uses Apache Struts.
Tags provide you the ability to develop code that looks at home in the application. It "future proofs" code against user interface changes and helps to enforce display logic/business logic separation.
All Building Blocks run in a sandbox, using standard Java permissions framework. This prevents code from modifying or deleting application data. There is a way to see the permissions a Building Block wants and then decide not to install it.
*<permission type=attribute name="User.....
See the presentation for more examples.
A Building Block is running within a context, retrieved using getContext(). It is populated based upon objects identified in current URL. It always uses values from the context, freeing you from having to load them. Bb always loads context, so you loading it, is double the work.
The Server Wide filter handles baseline authentication for the application. Building blocks do not automatically enforce authentication so you need to use the bbData tag to enforce it.
Bb does allow for Building Blocks to be internationalized – the manifest can be localized as can string resources, numbers/dates/time. This can help enforce clean coding. Do not use the browser locale, but use getLocaleObject() to retrieve the active browser locale. Localizing forces a developer to put barriers between the presentation and business logic.
Only file based storage is supported and one can use the the pluginconfig directory, content item directory, or course ppg directory. This is determined by your storage retention policy/goal for the data.
There are functions to get the directories. Don't store course data there. There is no hook by course archive/restore to let a Building Block know. For content items, you can put whatever you want. Data is supposed to be specific to a content but there is no reason that is has to be.
PPG is a single directory per course. It was originally placed where publishers could store commonly used files. It is used for course specific data (ppg/vid/handle) to avoid collisions. Developers must namespace it properly. It goes to the recycle bin when a course is removed. This is also blindly copied during course restore/archive operations.
You can use templating variables as in @X@object.attribute@X@ and it is automatically expanded in the content body.
See the common template variables in the presentation at slide 22.
There are unique identifiers for a data object. It roughly translates into a primary key in a database. It is composed of three values to make it globally unique and is part of a container (data store from which object is loaded – DB) or virtual installation if using that. The second part of the data type is the table which it came from. The key value is the primary key in the table. To output a unique id, use Id.toExternalString(). Use Id.generateID to regenerate.
The core concept behind the persistence framework is that the validity of the ID determines how persist operations are handled (if ID valid). You can re-persist to re-validate an ID and do other validation (methods.hashCode, equals, etc).
Building must be repeatable and simple (single command.) Bb uses ANT internally for this. See page 21 in the notes.
There are two ways to deploy and the desire is to have something that is simple. You can deploy using Tomcat, but it won't allow the hooks. We need to accurately simulate the customer experience.
Starting Block is a poor man's web service, invoked by URL. It allows for a Building Block to be installed on a local development system by hitting a URL. You can hook the Building Block into a build process like ANT. It is available on EDUGARAGE.
Use JUnit to automate and setup repeatable testing. Have tests drive the implementation when possible – they should come first.
Presented by: Justin Gray and Tito Holloway of Blackboard.
This session covered system administration tips for both the UNIX and Windows platforms running Bb. The presenters covered general performance tuning, SQL server, index rebuilds, accumulator statistics, etc. I believe Gray represented the Windows side while Holloway represented the UNIX side.
Gray talked about identifying null sessions (those that have ended). If those build up, you have a problem.
Large counts could be attributed to monitoring,etc. Monitor these (we are) to make sure we aren't being burdened.
Firewalls – make sure 1433 is open. Bb doesn't recommend a firewall in between app server and DB server.
< Windows Tips< Gaining Performance Maturity in your Blackboard Deployment
Truncate and shrink transaction logs, keep it small so efficient. If grows too large in Windows, win can crash. Do when hits 1GB.
To maximized SQL memory, use AWE Advanced Windows Extensions and set maximum and minimum values. Also, consider TCP Time_Wait Registry modification.
After each Bb upgrade, you have to put these changes back. SQL 2000 to 2005 is a good upgrade, less deadlock issues.
Some useful tools here are the SQL performance dashboard, SQL profiler to get play by play, event viewer, and the Bb sqlerror log.
Bb support looks at the DB first for any performance issues. Optimize your system to use as much RAM as possible. In Oracle 10g , auto shared memory management was introduced. It is controlled through sga maxsize. Oracle ASMM.
Stop and replace the analyze_my job. Blackboard puts this back after an install. This is the stats gathering job that runs with the DB. It was written for pre- 6.3 Bb versions and doesn't provide histograms. It is no good anymore. Now, we manually gather statistics. Use the oracle provided dbms_stats.gather_schema_stats package and enable table monitoring.
For the technical details, see the presentation.
Consider the Advanced Workload Repository (AWR) Statspack reports. This will give you a report to identify if issues are above and beyond Blackboard.
bb-sqlerror-log.txt - if errors in the UI, they will show up here. Determine what is normal and what is not. Some things are just informational. This is available on the windows side too.
The performance report provides a lot including badly performing queries, settings, and analyze_my issues. You can open a performance report with Samurai analyzer which is freeware.
The Bb provided cleanbb script does work on Bb 8. It should be utilized.
Other tips include:
Make sure we are cleaning the following:
Bb tasks may fail because you may have errors in bb-tasks.xml (load balanced environment, have NFS setup issues, or are missing jar files in the tomcat path (LDAP non native authentication). Cal Poly has already remedied these issue.
When troubleshooting, you can enable garbage collection logging and use a tool like GC Viewer which is freeware. This will allow you to view the garbage collection logs. You can also get tomcat thread dumps, use jstat logging, and do tomcat heap dumps. One can also alter the frequency of the domain calculations (bb-tasks.xml).
See the notes for information on tomcat settings recommendations.
Consider parallel garbage collection and stacksize for blocks.
If system is hung, you could try one/all of the following:
You can also get a thread dump using the service controller. Also consider the Samurai thread tool.
Presented by: Hannah Whaley and Graeme Whaley of the University of Dundee.
The presenters discussed moving from a fire fighting mode (when dealing with performance) to a mature architecture that includes resilience monitoring and plans for improvement.
There was a need to influence practice and decision making, monitor systems, look at performance resilience and recovery – multiple points of failure, and eliminate data loss. Also, create custom tools and techniques to ease administration.
< Evolution of Maturity< How To Write Crap in 1000 Seconds
They described their process of evolution along this journey.
Automation, not formalized
Evaluation and planning, capacity planning, and performance optimizing.
The business is understood, process oriented, and costs documented.
Evaluate costs versus gain, number of systems, and enforce strict operations (very tight change control).
Dundee has 14000 students. In their initial setup in 2002, they were one of many services and were operating in fire fighting mode but had infrequent issues. In 2004, they went to two servers and were taken on board by the university. The frequency of issues was increasing dramatically.
In 2006, everything fell down, the service was unstable (3-4 times a day), no confidence by users, less enthusiasm, and management was voicing concerns. However, users were persevering, the product was an integral part of teaching, the university wanted it to succeed, and the importance of VLE was acknowledged.
They looked for a dedicated staff member – the ELTO. The main responsibility was eLearning Systems. The main presenter was that person, with his background in integrations and testing. The focus was to improve VLE delivery. The aims of the ELTO was to get information, source new hardware, and incorporate performance and resilience into the new architecture.
Need to know how many users, when did they use it, how often, look at accumulator data, and draw comparisons. The data justified the new architecture.
They looked at a content switches, servers: Sun V480 and Sun T2000, and for storage, a Sun StorEdge 3510 - more dedicated to the VLE system. The timing was good, content switches were already in place.
They did load balancing (content switches), virtualizing, and tomcat clustering. They now have two sites linking two content switches, three servers on one site, and two on the other. They utilized tomcat containers, all connected to the content switch 1 (#2 is redundant). They had a sixth server they used for testing. On every odd server, they had single node tomcat. On the even servers, they put four tomcat nodes (for clustering). They have two Sun 480s, one for the DB, one for content. Each is the backup for the other. They've had this in place for one year and it has been a proven success now.
To promote the success they had, they published the improvements, focused on uptime (days since incident), and recorded incidents. They use tools - including a server availability checker, unique users online, and types of access. They want to visualize this in the form of graphs.< System Setup
Increased performance is gained and for cheap using some of these methods. Bb now has a tool to create the tomcat cluster and it alters the required configuration files (InstallCluster.sh). The simple steps are:
Solaris Containers are like clustering and allow for greater utilization of hardware (more bang for buck), and is in-line with very popular "green initiatives". What is a container? It is a zone with resource control. The presenter discussed the technical details of a Solaris zone (sparse zones, whole root zones). Whole root zones have their own O/S files and different O/S from global zones (a branded zone) - it could be Solaris, Linux, etc. They chose the sparse zone because of the security level, the systems are read-only, and for the ease of upgrade. You update Java in the global zone, it gets inherited on the sparse zone.
When planning, decide on the number of zones, division of resources, configuration, installation, and cloning. Tools include pooladm and poolcfg - used to create psets and pools. The Solaris resource management is very extensive.< Impacts and Benefits
Dundee had about 1000 more unique active users in 2007 and were able to deal with the capacity. They also had 300 more courses accessed than during the previous year. There were no issues. They did some graphing and noticed some unexpected peaks. They found more usage on Tuesday. They also found more users on Sunday as opposed to Saturday.
They have seen increased usage, and have built in scalability. They now give accounts to 15000 applicants (My Dundee) a year. They have no issues with this at all. They have coupled with the police to do forensic analysis (body identification for the Tsunami). They also have decreased risks with Building Block deployment (offline production server), minimize server crashes, and minimize collateral damage. This accomplishment also possibly warranted an assistant.
The offline production application server allows for Building Block deployment, for testing in production. They also have a read-only production system, 365 day planned uptime, and more flexible upgrades. This allows for the 365 day uptime. They can't upload to the read-only system but it does allow them to access the data they already have and it allows for flexible for upgrades because users can still have access.
The Sun T2000 has been very successful and the Sun T5120 better. They also want to add resilience to NFS and database with self-replication, NetApp, increase the level of monitoring, and look to more new integrations.
Why not cluster the database? Oracle RAC was being looked at and they didn't have the time. They used minor failover instead. They have a dedicated DBA.
What is the process of making a production read-only system? They bought a Sun T5120 and dumped the Bb folder there – with content. They created zones, with the DB on one, content on the other. It is not really read-only but they change the login banner to state that changes will be lost.
They don't see the collaboration server used much so it is a single point of failure. There didn't seem to be anyone noticing when it went down for 2 weeks. Apparently it took two weeks to discover it.
Presented by: Wim Machiels and Pieter Vandepitte, Software Architects from Katholieke Universiteit Leuven.
The presenters are lead developers at Toledo KULeuven. They have two environments serving K12 and higher education. The inspiration for this session came from a cooking show – cook a meal in 1000 seconds (two funny guys). They found that it is impossible though to make a Building Block in 1000 seconds. They also discussed how to optimize your development lifecycle with Maven from Apache.
< Maven< Background Tasks and Building Blocks
Maven is a project management and comprehension tool. It is based on POM (Private Object Model). It manages a project's build, reporting, and documentation, all from a central source. This started from the Jakarta Turbine project which had problems integrating things together – hence Maven was born. Maven's objectives are to build projects easily and in a uniform way, handle project information, and provide guidelines for best practices.
Maven has uses pom.xlm and non-pom.xml files. The POM file contains all project configuration and information and has four parts. The parts are information, build settings (source, target folders, plugins, report plugins), project information (metadata – developers, description of project), environment settings (repositories – where to find dependent projects, subversion servers, and CVS servers).
The non-project configuration contains mirrors, proxies, security & deployment information, and remote repositories (per user or per Maven). There are internal repositories – local or remote, and a Maven plugin to deploy.
There are three types in the lifecycle – clean, site and default. A lifecycle contains phases (validate, compile, test, package, integration, install, etc). Plugins are artifacts that provide goals. They developed a Bb-version plugin and deploy plugin for auto-deployment to Bb.
The Archetype is a template and also an artifact so it can be uploaded into a repository. One would refer to the Building Block archetype in starting a Building Block.
The problem arises when you have multiple developers, environments, open sourcing, and settings. Maven helps bring the best of two worlds together. An IDE is great in auto completion, code assist, and formatting. Maven is great in describing projects, handling the lifecycle, and plugins. It resolves dependencies. The IDE plugin is the glue (Mavenide, M2Eclipse).
Blackboard has a Maven project. There is no tomcat manager available, no automated deployment, version number issues, and undocumented manifest permissions. There is one new Building Block available. Bb Maven is available on OSCELOT.
There was a brief demonstration using the Bb admin panel to define a group ID, artifact ID, and version. You can use this Building Block to add dependencies. Maven was used to load into IDE (Eclipse) - and created a method to deploy empty Building Blocks quickly. They demonstrated getting data from the xls file. They also mentioned Spring MVC. They demonstrated a Building Block that uploads an Excel file for course removal. Maven can also create default site/default layouts.
Presented by: Jeff Johnson and Eric Denman of Blackboard.
This presentation covered background tasks and how one can utilize them. Typically, one might use a cron job and shell script to perform a regular task. Johnson and Denman provided a means to do something similar using a Java task.
Eric Denman provided an introduction and the basic Java Thread for creating a simple background task. Perhaps you need a recurring task (status), or have a process intensive task. Tasks are useful for that.
There are two options, explained below.
< Option - Basic Java Thread
This option is easy to code, simple to setup, and has the flexibility of task handling. There are no third party dependencies (not a large war file). You have to be careful with synchronization (communication between threads) - avoiding deadlocks. Advanced scheduling is more complex and more difficult.
Example for Bb Sync:
Use LinkblockinQueue for queue synchronization. To start a new thread:
Someone criticized this as leading to other issues (performance, etc). This is a good method for simple tasks.< Quartz
Jeff Johnson presented the information about Quartz.
Bb does a lot of reporting, pulling from SIS, gradebook, etc. Bb was executing background jobs using Building Blocks or cron jobs. Eric Denman found that messy. He introduced Quartz Framework, a job scheduling framework. It is open source. It has an advantage in that it is lightweight, scalable, and generally easy to use and configure. It has more features than a basic Java thread or timer task. You can set a cron trigger, do job management, chain jobs, provide DB persistence (load balanced), and thread pooling (standard feature to help within J2E environment).
You implement the org.quartz job, implement the execute() method, and set parameters through the jobdataMap attribute. Another feature, StatefulJob allows for dynamic parameterization (conditional checks). You cannot execute these jobs concurrently, though (conditional check on other job).
The Quartz Triggers determine when the event is to execute. The SimpleTrigger is the threaded version of basic Java. Example, start when Java starts, and execute at regular intervals. The cronTrigger (perhaps most useful), runs at a certain time every day, or on irregular schedules.
See the quartz.properties example from the slides located here.
With Quartz, you can do many different things (complex tasks). An example would be a listener which was called when events occur. Job listeners are triggered if system resources are unavailable.
Plugins can be used to create initialization and shutdown methods. Spring Application Framework comes with built-in quartz functionality. You can do configuration and parameterization in the Spring configuration file.
Why not use scheduled tasks? There are some instances where you can't use it.
What about a GUI to provide a way to have task notification settings? They don't know of any but are looking for new ideas.
Johnson says there is a sample Building Block that has a simple configuration of quartz if you want to create a Building Block.