Preserving CE/Vista Settings

I’ve been asked for notes about this a few times. So here’s a blog post instead.

A coworker is working on scripting our updates. We lost the Luminis Message Adapter settings in applying the patch to the environment we provide to our clients. Fortunately, those settings are maintained by us not our clients. So I pushed those settings back very easily. Unfortunately, it points to the need to capture the settings for the potential purpose of restoring the settings.

In Oracle databases, this is pretty easy. As the schema user, run the following. It does some intentional things. First, we have multiple institutions, so the breaks make identifying which institution easier. Second, the same label for multiple forms gets confusing, so I am sorting by setting description id under the theory these ids are generated at the time the page is created, so the same tools will float together. (The last modified time stamp is probably unnecessary, I used it in an earlier version and left it just in case Vista for whatever reason added a new setting for the same label instead of modifying the existing one.) This can be spooled both before and after the upgrade. Use diff or WinMerge to compare the versions. Anything lost from the before version should be evaluated for inclusion adding back to the settings.

col lc_name format a50
col setting_value format a80
col label format a80
col lock format 999
col child format 999

clear breaks computes
break on lc_name skip 1

select lc_name, settings_description.label, settings.setting_value,
settings.locked_flag “lock”, settings_description.inheritable_flag “child”
from learning_context, settings, settings_description
where settings.settings_desc_id =
and settings.learning_context_id =
and learning_context.type_code in (‘Server’,’Domain’, ‘Institution’,’Campus’,’Group’)
order by, settings.settings_desc_id

An example of the multiple forms issue is external authentication. CE/Vista provides an LDAP (A) and an LDAP (B). The settings_description.label for both is contextmgt.settings.ldap.source. The for both is source. It looks like each of the two identical labels has a different settings.settings_desc_id value depending on whether it is A or B. To me it seems lame to use the same label for two different ids.

The most vulnerable parts of the application to lose settings during an update are the System Integration settings. A mismatched Jar on a node will wipe all the settings associated with that Jar.

However, I can see using this to capture the settings as a backup just in case an administrator or instructor wipes out settings by mistake. Yes, this is scope creep. Create a backup of the settings table to actually preserve the settings.

create table settings_backup_pre_sp2hf1 tablespace WEBCT_DATA as select * from settings;

Contexts: As a server admin, I maintain certain settings and push those down. Each client has control over some other settings and may push those down from the institution context. Maybe some are creating division and group admins? Maybe some instructors are changing things at the course or section levels. I may end up capturing everything?

Restoration: The whole purpose of preserving the settings is to restore them later. There are a couple methods in theory:

  1. Providing the settings to a human to re-enter. The labelling issue makes me question the sanity of trying to explain this to someone.
  2. Update the database directly would just need ensure it is the right location. Maybe dump out the settings in the format of an update command with labels on each to explain the context? Ugh.

If settings were not so easily lost, then this would be so much easier.

View: Another table of interest is the settings_v view. (Redundant?) The only reason I don’t like this view is it reports the values for every learning context which makes reporting off it much, much longer. For example, the encryption key for a powerlink is listed 8 places in settings/settings_description and 18,769 places in settings_v.

CE / Vista Undocumented Workspaces

On the WebCT Users email list (hosted by Blackboard) there is a discussion about a mysterious directory called unmarshall which suddenly appeared. We found it under similar circumstances as others by investigating why a node consumed so much disk space. Failed command-line restores end up in this unmarshall directory.

Unmarshalling in Java jargon means:

converting the byte-stream back to its original data or object 1

This suspiciously sounds like what a decryption process would use to convert a .bak file into a .zip so something can open the file.

This is fourth undocumented work space where failed files site for a while and cause problems and no forewarning from the vendor.

Previous ones are:

  1. Failed UI backups end up in the weblogic81 (Vista 3, does this still happen in Vista 8?) directory.
  2. Failed tracking data files end up in WEBCTDOMAIN/tracking (Vista 3, apparently no longer stored this way in Vista 4/8 according to CSU-Chico and Notre Dame)
  3. Web Services content ends up in /var/tmp/ and are named Axis####axis. These are caused by a bug in DIME (like MIME) for Apache Axis. No one is complaining about the content failing to arrive, so we presume the files just end up on the system.

#3 were the hardest to diagnose because of a lack of an ability to tie the data back to user activity.

Is this all there are? I need to do testing to see which of these I can cross off my list goring forward in Vista 8. Failed restores are on it indefinitely for now.



CE/Vista and Banner Integration

This is the second time I have worked on making Vista integration work with Banner. The first was 2005 in Vista 3.0.3 at Valdosta State. The production here at GeorgiaVIEW was set up by Harold, Jill, and Amy years ago and integrated into the install scripts or part of the cloned databases.

So now I am working on getting it to work in Vista 8. The IMS imports worked the first time like a charm. When I turned to using the Luminis adapter, the person records worked fine but the group contexts failed in Vista 8 and worked fine in Vista 3. So the “ luminis import restrict” works fine.


We have 41 institutions in Vista 3 currently. So imports are automated to some degree to preserve the sanity of Jill (and to a lesser degree Amy and myself). Rather than put in the UI all the settings, we have a properties file defining the location, glcid, sourcedid.source and for each institution. This allows us to easily pass the values when importing at the command-line.

My first approach was to leave the settings identical to what I used to create persons and group records with IMS. This essentially uses the glcid of the institution and sourcedid of the institution. This is what resulted in the person records working and groups not. Fail.

I realized my error in logic must be the lack of a division-to-group relationship as the error described the groups cannot be related to an institution. So I changed the properties to use the division values for the sourcedid. Fail.

So I went looking in “Guide to Integration with the SunGard Luminis Data Integration Suite” for what I ought to use at the command-line. I didn’t find a solution. Just the same command-line lacking even the glcid and sourcedid.


Giving up on the command-line approach for now, I added the relationship element to the XML so the group would become a child of one of the divisions I created with IMS. It sorta worked! The groups all imported but the course failed with the exact same error the groups formerly succeeded. To add insult to injury, simply running the import again on the exact same file had the courses import.


A mistake I made was reading the documentation: “Guide to Integration with the SunGard Luminis Data Integration Suite”.

Sungard Libraries:

  1. Page 8 says imq.jar and mbclient.jar do not come with CE/Vista and must be obtained from Sungard. All three of us thought in Vista 3.x these were automatically placed so we didn’t need to place them. Best I can tell, these were installed by Vista. I found $WEBCTDOMAIN/customconfig/ references both files in CUSTOM_CLASSPATH and references CUSTOM_CLASSPATH. (This document has notes for what CE customers need to do and no note about CE users needing to go get them from Sungard.)
  2. Those who believe the last note would keep reading and find on Page 9 instructions to deposit the files in $WEBCTDOMAIN/serverlibs/. Assuming I am wrong about item #1, the expects them in $WEBCTDOMAIN/serverlibs/luminis/ and would not find them where the document says to put them.

Anti-Malware and Blackboard Vista

Tier1 support was contacted by a student to report a problem with a quiz. Some sort of anti-malware software complained about code in the quiz. Tier1 support replicated the issue. Their software identified it as belonging to MyWebSearch. Very bad news.

Tier2 support suggested the student remove the MyWebSearch toolbar. Tier1 escalated to Tier3 who claimed that because Tier1 and the student both saw the issue, the malicious code must have been inserted into Vista by the instructor. Tier3 also escalated it to me… Tier4.

From the email conversation, no one looked at the quiz in question despite Tier2 and Tier3 both having the access (and Tier2 being involved in instructional design).


Instead of providing my own equally valueless speculation, I got a copy of the quiz and looked at the HTML. Eventually, I used WinMerge to compare the problematic quiz and a previous quiz side-by-side.

Turns out the difference between the two is the use of WebEQ Java applets. (The problem-free quiz used GIF images instead of applets.) I think the anti-malware software of the student and Tier1 both reacted to the Java applet. Here is one of the items used.

<applet code=”webeq.Main” archive=”/path/to/jar/WebEQ2Applet.jar” width=1899 height=40 align=middle><param name=eq value=”<math> <mrow> <semantics> <mrow> <mi>f</mi> <mo stretchy=’false’>(</mo> <mi>x</mi> <mo stretchy=’false’>)</mo> <mo>=</mo> <mn>2</mn> <msup> <mi>x</mi> <mn>2</mn> </msup> <mo>+</mo> <mn>3</mn> <mi>x</mi> <mo>+</mo> <mn>1</mn> </mrow> <annotation type=’MathType’/> </semantics> </mrow></math>”><param name=color value=”#ffffff”><param name=parser value=”mathml”></applet>

The way WebEQ passes the parameters as XML inside a parameter tag strikes me as very odd. Maybe causes anti-malware to trigger a false positive?

These applets have been a problem in the past, as many were hard coded into the HTML prior to Vista incorporating this into the equation editor. Vista instead, uses a parameter block to pass the values to the applet.

I think our instructional designers are moving away from use of WebEQ as it has been consumed so much of their time, they hate it now.

Certification Courses

Today I received an email announcing new certification courses from Blackboard. Every administrator around our system did as well. We have a large body of certified trainers and administrators with multiple individuals at every campus who have been through the certification plus all the functional support have been through both training and admin certification.

I’m not a big fan of certifications as a way of determining what people know. I do think having so many people go through the certification has allowed us to use jargon consistently. Pre-cert, we’d have to waste time explaining what the jargon means. Post-cert, everyone seems to understand these terms. Sure, we are constantly expanding the terms used, but its nice to have a common basis.

Back to the email…. Here are the certifications mentioned in the email:

  • Blackboard Learning System™ GUI Administrator Certification
  • Blackboard Learning System™ Server Administrator Certification (NEW)
  • Campus Edition GUI Administrator Certification
  • Vista GUI Administrator Certification

The points of the message were, I think to announce the new “server administrator” certification and remind people about the existing ones. Initially I was interested because I thought it meant there is a new certification for Vista, whose license name is Blackboard Learning System™ – Vista Enterprise Edition (say that 3x fast), but no… Its just for Academic Suite.

I think Blackboard’s marketing department should do a better job of understanding which products their customers use. Highlighting to over 60 people here in Georgia they are offering cool things to the clients who were not spoils of the WebCT buy isn’t helping Blackboard.

tag: , Blackboard Inc, WebCT

A New Start

A cough and distant talking stole Makai’s attention. “Sohjie…. We have company.” He listened intently for more sounds coming from the other side of the heavy oak door. Sohjie placed the herb jar back on the shelf. They took up positions on either side of the door.

It opened painfully slowly. An drunk man with smears of food and excrement stumbled into the room. His attention was solely focused on the shelves on the opposite wall. So the door closing and huge brute stalking behind him went completely unnoticed until much too late. Makai wrapped the drunk in a choke hold. The drunk struggled for a while, but eventually passed out from the lack of air.

Sohjie opened the door just enough to peek down the hall and closed back the door. “The hall is clear. Let’s finish this.” The both opened jars and searched the contents. Sohjie gently lifted out of the ninth jar a gold necklace with a medallion. Four diamonds formed a square while five larger rubies formed a cross. “Got it!” The turned in unison and walked quickly to the door. As Sohjie secured their prize, Makai peeked down the hall.

The hallway was clear. He moved quietly and quickly towards the intersection only a couple dozen paces from the door. A guard came into view. Makai assaulted the guard with a series of punches to the face and throat. As the guard collapsed to the floor, he heard the gasp of the two guards down the intersection. Makai pulled from the sheaths in his lower back the two long knives he had named Tooth and Claw. One of the guards stammered, “G-go g-get s-some help!” The other tried to flee, but Makai threw Claw. The hilt struck the guard at the base of the skull dropping the man. In three short steps Makai closed with the remaining threat who fell to floor in a helpless heap.

This wretch was no warrior. Makai grabbed the shirt of the now whimpering mass. He looked in the wretch in the eyes just an inch from noses touching. “Be quiet or unlike your friends, your death will be slow and painful.” Dead silence once again filled the hallway. He retrieved Claw.

Sohjie padded quietly to the intersection and peeked around the corner. Makai gave her a signal to stay there. He continued on, checking for guards, and signalling Sohjie to follow. They avoided 2 more patrols before reaching the cellar. Noise errupted as leaders barked orders, the thump-thump-thump-thump of those searching the house for the intruders: Makai and Sohjie.

Sohjie grinned at him and chimed, “Good thing we made it.” Makai shook his head. He answered, “Not out of the woods yet.” He grabbed hold of a large flat bottomed section of the cellar wall. Muscles strained as his brute force pulled the massive weight just a few feet. Sohjie darted into the opening behind. He heard the door to the cellar shudder from a massive impact. Without even stopping to consider, he pushed the massive stone back into place. Sohjie screamed, “What are you doing?” His only reply, “No time. Go! Get that thing out of here. I’ll buy you time.”