|
Bb Dev Conference '08 Report
show
hide
Index
show
hide
Print This Report.
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.
<
Summary
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
<
Disclaimer
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.
<
Digital Information is Different
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.
"To Learn is to acquire information" is replaced with "To learn is to
discuss/share/create ... information". Learning is creating meaningful
connections but is not happening as it should.
|
- How can we create students who create meaningful connections?
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.
- Platform of Participation
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.
<
Harness the Intelligence - A Game
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.
Note |
---|
The video was produced as a result of this game.
|
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".
<
The Blackboard NG Project - A Developer's Roadmap
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).
<
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.
<
Openness Roadmap
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.
<
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
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.
<
Implementation
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.
Note |
---|
Remove the reference APIs from build path before creating the war file.
|
One problem they had: Bb was also dropping MYSQL connections. They had to re-initialize the
instance to MySQL using a script. They restart their server at 3:00 AM each day
and the restart was killing the connection. The Javascript validations were not working
due to a missing form reference in the jsp file and a missing package.
<
Enhancements
Some enhancements they made:
<
Getting Started With Building Blocks Part I
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
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.
<
Installing Building Blocks
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.
<
Getting Started With Building Blocks Part II
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
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
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).
<%@taglib uri="bbUI" prefix...
|
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.
- Details
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.
- Identify a User
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.
Example:
Use the variables you get from the object in the jsp to output the info.
Example for getting course information – from the presentation slides:
<%@ page language="java"
import="java.util.*,
blackboard.data.user.*,
blackboard.persist.*,
blackboard.data.course.*, <---
blackboard.persist.course.*" <---
pageEncoding="UTF-8"%>
<%@ taglib uri="/bbUI" prefix="bbUI" %>
<%@ taglib uri="/bbData" prefix="bbData"%>
|
Course sc=ctx.getCourse();
string cid=sessionCourse.getCourseId();
|
Note |
---|
All of this is going into the jsp file.
|
- Using Persistence Manager
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.
- Assessing Memberships
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.
Note |
---|
Bb doesn't distinguish between instructor roles (lead,etc).
|
- Displaying Tables
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.
- Debugging
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.
<
Comments and Questions
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.
<
Best Practices for Building Testing and Deploying Your Building Blocks
Presented by: Jeff Bradley, Senior Software Architect at Blackboard.
<
Requirements
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.
<
Coding
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.
Use an MVC framework (struts, springboard, etc).
Use JSTL, the JavaServer Pages Standard Tag Library to help enforce the
business boundaries.
- Struts
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.
- Blackboard Tag Libraries
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.
- Permissions
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.
Note |
---|
You need to review the permissions required before installing a building
block to production.
|
Code example:
*<permission type=attribute name="User.....
See the presentation for
more examples.
- Context
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.
- Authentication
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.
- Internationalization
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.
- Data Storage
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.
The content directory is blindly copied across course import/export operations.
|
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.
Don't embed ID related information in object information you store as these change with imports, etc.
|
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.
- IDs and Persistence
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).
<
Build-Deploy-Test
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.
<
Blackboard Academic Suite: Configurations and Considerations
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.
select count(*) from sessions where user_id=null.
|
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.
Make sure services log is rotated.
|
<
Windows Tips
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.
<
UNIX and Oracle
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.
Many performance issues come from discussion board scans.
|
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.
Syntax is critical. This actually computes the statistics.
|
<
Gaining Performance Maturity in your Blackboard Deployment
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
They described their process of evolution along this journey.
Automation, not formalized
<
Case Study - University of Dundee
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.
There was a desperate need for change.
|
<
Promoting Success
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:
- bbconfig.tomcat.cluster.enable=true
- Run InstallCluster.sh
- Give cluster ID
- Specify ports - shutdown, connector, listener
- Repeat for required nodes in cluster
- Run PushConfig
|
|
<
Solaris Containers
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.
<
The Future
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.
Make Bb the most important thing they look after.
|
<
How To Write Crap in 1000 Seconds
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
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.
- Maven Lifecycle
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.
Example run:
mvn clean my-plugin:my-goal package
|
- Archetype
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.
- Why not use your own IDE?
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 Maven Project
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.
<
Background Tasks and Building Blocks
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:
_backgroundRunnable = new BackgroundProcessingThread()
|
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).
|