Development the OO-Framework for OpenACS:

­Improving Scalability and Applicability

Gustaf Neumann •­  Vienna University of Economics and Business Administration


Improvements to the Framework

OO Interface for DB

OO Interface for existing and application specific acs-object-types

Loading schema information from acs-object-types and acs-attributes and create automatically XOTcl classes from this information

Creating new XOTcl Classes as persistent classes using the OpenACS conventions by subtyping existent classes

# Fetch base classes from OpenACS Schema
::xo::db::Class get_class_from_db -object_type party
::xo::db::Class get_class_from_db -object_type person

# Create new Object type with two additional attributes
::xo::db::Class create ::demo::employee \
    -superclass ::xo::db::person \
    -slots {
      ::xo::db::Attribute create salary -datatype integer
      ::xo::db::Attribute create dept_nr -datatype integer -default "0"

Generated SQL Table

dotlrn-test5=# \d demo_employee

   Table "public.demo_employee"
   Column    |  Type   | Modifiers 
 dept_nr     | integer | default 0
 salary      | integer | 
 employee_id | integer | not null

        PRIMARY KEY, btree (employee_id)

Foreign-key constraints:
        FOREIGN KEY (employee_id) 
        REFERENCES persons(person_id) 

Subclassing Packages

Use Case s5-package

::xo::db::require package xowiki

::xo::PackageMgr create ::s5::Package \
    -package_key "s5" -pretty_name "S5" \
    -superclass ::xowiki::Package

Property Management (Package Parameters, Portal Parameters)

Property management of OpenACS/DotLRN is wasteful and not sufficiently scaling:

Package Parameter Redundancy

Real world data: 

High degree of redundancy (many values are stored 4000 with the default value)

Learn@WU: from 300000 entries → only 406 necessary entries needed (non-default)

OO Package Parameter Interface

Implementation of base functionality

Supports inheritance from different packages, uses oacs-datamodel, cluster-safe


Additional Developments

Generalized Cluster Management

 Subclassable Widgets

Improvements in XoWiki

Microformat support in XoWiki


Current support in XoWiki:

E-Learning News with embedded Microformats

E-Learning News with embedded Microformats

Export embedded events via tails

Export events via tails

Export embedded events via iCal

Export events via iCal

XoWiki Portal System

Analysis of the DotLRN Portal System

Rethink Concepts in a bigger picture

Joint work with Michael Aram 

Structure of DotLRN Portal System

DotLRN Portal Structur­e

Types of Portals in DotLRN

2 Types

  1. User Portal (home)
    Personalization through all memberships
  2. Community Portals
    • Classes
    • Communities
    • Subgroups
    No personalization­

Community Portals provide Member and Non-member Portals

Structure of the DotLRN Portal System


Design Principles of the XoWiki based Portal system

Provide different kind of renderers: plain, mobile, css, ajax

Separate structure classes ("model" in MVC) from renderers ("views", implemented via mixin classes)

Provide new composite page types

Provide revisions of a portal 

Every XoWiki page can be part of a composite page type

Every includelet, every XoWiki page can be used as a portlet.

TabView and Composite Page in XoWiki

Tabview 1

XoWiki Page as Portal Page

Wiki Page as Portal Page

Composite Page with 3 Column Layout and Meshup Elements

Tabview with Meshup

Composite Page with different renderer

Composite Page with different renderer

Integration with DotLRN

Approach: turn DotLRN portlets into includelets

Consequence: Possible to have e.g. a subset of memberships on some portal pages, or to place e.g. the announcements of some communities to a start-page

Community Portal

Community Portal

Community Portal in Edit-Mode

Edit Community Portal

Personal Portal

Personal Portal

Community Portal after Drag & Drop

Community Portal after Drag & Drop



Consequence: Possible to have e.g. different portal pages for some communities where user are not logged in,  or where they have certain roles, ...