Archive for the ‘Installation’ Category

April 1

Note from Michael on JSP compliations, top_frame customizations, etc.

By gaudette

I have figured out the problem with making jsp changes appear, and learned a good deal about jsp compilation.

There is a component of tomcat called Jasper that is responsible for dynamically compiling jsp pages.  In its default settings (“development” mode), it checks a jsp everytime it is loaded to see if it has changed since last compiled.  If it has, it recompiles it.  These are the java classes that show up in $tomcat/work/.  The settings for this are in the $tomcat/conf/web.xml file, in the <servlet-name>jsp</servlet-

name> section.  Blackboard has development mode turned on, so it should recompile modified jsps whenever they are loaded.

However, most of the jsps used in blackboard are precompiled.  This means that the class files are distributed with the application, and rather than have tomcat compile the JSPs automatically there is a servlet mapping for the jsp name to the java class that came with the app.  Tomcat does not even look at the jsps in this case, the request is handled directly by the java class according to the mapping.  The jsp and java files like top_frame.jsp and are just byproducts of the compilation, we’re lucky they are there at all.  This precompilation process is also responsible for the generated_web.xml file.  It contained the servlet mappings for each of the precompiled jsps, and at the end of the compilation process is included in the actual web.xml.

So, the right way to fix this would be to use ant’s JSPC task to recompile the modified jsps according to the same method blackboard would have used to compile it.  I know little about ant and setting it up seemed like a nightmare.  The second best way would probably be to modify the .java file (which was created as an intermediate step in the compilation) and use javac to compile it.  However, I couldn’t seem to get the classpath right, so I kept getting all sorts of compile errors and gave up (eventually I suppose we could get it accomplished).

So what I’ve actually done is commented out the servlet mapping for top_frame.jsp and top_frame_small.jsp, so that rather than using the precompiled classes it compiles them dynamically like an ordinary jsp.  Every time the page is loaded, it checks the date on the class file in $tomcat/work against the date on the jsp to see if it needs to be recompiled.  This incurs some overhead, probably not much but then again this is a frame that will likely get loaded on just about every page view.  What I had hoped to do was take the resulting class file out of the work directory, put it in with the other precompiled classes and replace the servlet mappings.  However, this caused an error because when tomcat compiles the class itself it changes the package hierarchy from com/blackboard/whatever/class to org/apache/tomcat/jsp/top_frame.class.

The upside of keeping it dynamic, of course, is that any future modifications will take effect immediately.

March 31

Replacing login error page.

By gaudette

  • Copied buAuthModule.jar to [blackboard]/apps/tomcat/common/bu/ (a new dir)
  • Created [blackboard]/config/tomcat/classpath/ – lists path to jar/local/services/blackboard/apps/tomcat/common/bu/buAuthModule.jar
  • Modified [blackboard]/system/build/bin/ to add add jar files to to the  BB_CP variable so that tools that bootstrap the core services are supported.THIRD_PARTY_CP=$THIRD_PARTY_CP:buAuthModule.jar(This should work because buAuthModule is supposed to be copied by Bb to /local/services/blackboard/systemlib/, the target of $THIRD_PARTY_CP)
  • Modified /local/services/blackboard/apps/collab-server/”$COLLAB_CLASSPATH:$BASEDIR/apps/tomcat/common/bu/buAuthModule.jar”(Note that this gets pushed to /local/services/blackboard/apps/collab-server/
  • Updated /local/services/blackboard/config/ Added BU section — see below
  • Updated /local/services/blackboard/config/ Changed auth type to “bu”
  • PushConfigUpdates

New BU section in (note – This can be left in place even if module is not in use as configured by

##    BU Authentication Properties
##    Extends ExternalAuthModule (Web Server Delegation)

# Acceptable entries for user_account are: reconcile, create, deny
# Enter the allowed domains ( separated by commas )
# Accepted values for def_key are BatchUid or UserRegistry
# If users succeed in authenticating to WebLogin but are not in the Blackboard system redirect here:

March 25

Session stickiness for Apache Load Balancing

By gaudette

We are doing load-balancing by using the built-in load-balancing features of Apache 2.2.11.

To do this, we had to assign a unique value on each server for the “jvmRoute” attribute in the <Engine> tag
in the file at [blackboard]/apps/tomcat/conf/server.xml. All three of our application servers’ Tomcat servers were configured by the Blackboard 8 installer to use the value “root” for the jvmRoute attribute. As a result, all three were producing JSESSIONID cookies with a content value ending in .root. I found no Blackboard documentation indicating that the jvmRoute should be updated to be unique, however it seems entirely necessary.

The explanation I got from Blackboard support implies that they expect the responding server to communicate directly with the load balancer (in their example, hardware), allowing the load balancer to determine the IP address of the responding server and then modify the cookie to include the IP address of the responding server. Our back-end servers reply directly to the end-user. Perhaps the stock Apache front-end that ships with Apache would have worked that way, though I can’t imagine Tomcat communicating with the front-end server for outbound traffic (responses).

Additionally, some simple logic was added to the Apache load balencer to properly route traffic based on what it finds in the cookie — it does pattern matching on our unique jvmRoute values which are (surprise) “n2”, “n3”, and “n4”.

March 25

Changing the Blackboard Home Page to Portal page

By gaudette

The default Blackboard home page is an ugly page with buttons to go to Login or browse the catalog. We want to start at the portal tab we have relabeled “My Courses”. This is easily accomplished (once you have deciphered Blackboard’s series of riddles) by replacing the contents of the file at [blackboard]/service/blackboard/webapps/portal/gateway.jsp with a JS redirect:

<script language=”javascript”>location.href=”/webapps/portal/frameset.jsp”</script>

Ignore the various index.[whatever] pages, as well as the frameset.jsp, etc.

March 25

Upgrade notes – to 8.0.375.0

By gaudette

  • Backed up all files referenced in my blog as having been customized, plus all files in [blackboard]/config/ (see below)
  • Ran installer per Blackboard Inc. documentation – elapsed time: 23:49.09
  • Per instructions stopped services, stopped/started Oracle DB, started services — but I restarted the container (OS) too. Michael sent instructions for Oracle on March 24.
  • Was surprised to get default Bb home page (with green logo, login button, etc.). But WebLogin was integrated, at least. Solution was replacing contents of gateway.jsp with a JS redirect.
  • Had to copy custom tabcorners images back into place and update images-to-cache.txt (see commands to back up files, below) — this requires restart (of Tomcat only). Then determined part of file names were being programmatically upper-cased — had to copy re_5283b5_l.gif to re_5283B5_l.gif, etc., and update images-to-cache.txt again, as well as image-common.txt in the same directory. And chown them be owned by bbuser. Restart.
  • Reimplemented custom logout.
  • Reimplemented custom CSS.

Here is the (edited) history of my commands to back up files – file list derived from earlier blog entries mostly.

1  5:01    whoami
3  5:02    cd ~bbuser
5  5:02    mkdir bkup-for-upgrade
6  5:02    cd bkup-for-upgrade/
7  5:03    mkdir
8  5:03    cd
10  5:04   mkdir -p content/vi/bb_bb60/branding
12  5:04   setenv bb ‘/local/services/blackboard’
14  5:05   cp -pir $bb/content/vi/bb_bb60/branding/* ./content/vi/bb_bb60/branding/
17  5:06   mkdir -p apps/tomcat/conf
18  5:06   cp $bb/apps/tomcat/conf/server.xml apps/tomcat/conf/
19  5:07   mkdir -p content/images/console/tabcorners
21  5:08   find $bb/content/images/console/tabcorners/ -mtime -300
23  5:09   find $bb/content/images/console/tabcorners/ -type f -mtime -300 -exec cp {} content/images/console/tabcorners/ \;
28  5:10    mkdir config
29  5:10    cp -pir $bb/config/* ./config/
30  5:10    mkdir -p docs/ui/styles
31  5:11    cp $bb/docs/ui/styles/blackboard.css ./docs/ui/styles/
32  5:11    cp $bb/docs/ui/styles/palette.css ./docs/ui/styles/
33  5:15    mkdir -p content/ui/
34  5:16    cp -pir $bb/content/ui/logout.htm ./content/ui/
35  5:16    cp -pir $bb/content/ui/jx.js ./content/ui/
36  5:17    mkdir -p config/internal/
38  5:17    cp $bb/config/internal/images-*c*.txt ./config/internal/
39  5:18    mkdir -p webapps/portal/
40  5:18    cp $bb/webapps/portal/gateway.jsp ./webapps/portal/

July 18

Blackboard System Statistics and PurgeAccumulator

By gaudette

PurgeAccumulator is broken for our platform – so zeros show for each statistic in the Administrator’s System Reporting results. Technote here.


  1. Comment out this section in [blackboard base]/config/bb-tasks.xml:

    <task-entry key=”bb.stats.purging” version=”60″>


  2. Set up bbuser cron job:

    00 1 * * * /usr/local/blackboard/tools/admin/ purge-live bb_bb60 180

July 17

Admin GUI – User Profile/Passwords

By gaudette

In database’s BB_BB60.USER_COLUMN_ACCESS, set all Y/N columns to “N” for the two password rows. This can’t be done in the GUI. This prevents Instructors from being able to reset passwords. Which they can’t do, but why let them think they can?


July 17

Course Disk Quotas, Max File Size

By gaudette

So I set some limits using the Admin GUI (Blackboard Learning System > Settings > Course Disk Quotas)

Enforce disk quotas: Y

Warn Instructor when course size exceeds 1500000 K. (That’s about 1.4 GB)

Maximum course disk size 2097000K. (Just under 2 GB)

Limit the maximum size of a single file upload to 204800 K. (200 MB)

July 17

Styling: Various CSS

By gaudette

I can’t recall what all these do, but I made the following changes so that the corresponding sections match the following:

blackboard.css ([blackboard base]/docs/ui/styles/ – centralized on software35-cware)

/* list tag */

td.listSort {

  border-left: 1px solid #8AA5B1;


  border-right: 1px solid #99cccc;        



th.listHeader {

  border-left: 1px solid #8AA5B1;


  border-right: 1px solid #99cccc;



palette.css ([blackboard base]/docs/ui/styles/ – centralized on software35-cware)


  font-family: Arial, Helvetica, sans-serif;

  margin: 10px;

  background-color: #ffffff;           

  color: #000000; /*#003333*/ 



  background-color: #8AA5B1; /*#FEFAE9;*/ /* Course earch box in Admin area */
  color: #000000;
  background-color: #8AA5B1; /*#669999;*/
  color: #ffffff;


  background-color: #5283b5; /*#336666*/;

  color: #ffffff;





 background-color: #CC0000; /*#cccc99;*/

 color: #000000;


July 17


By gaudette

This content is password protected. To view it please enter your password below: