Architecture
The main aim of SUNIWE development was to take the NIIMLE and extend it to provide the required functionality for SURF and WETN.
The NIIMLE
The NIIMLE offered core data (name, course, etc), transcript, progression pathway information, mentoring, PDP and portable courses to learners. The NIIMLE was built on the free, open source uPortal software. uPortal provides a Java-based framework for creating web portals. A web portal is a site on the World Wide Web which provides personalized capabilities to its visitors. It is designed to provide services from a number of different sources and to provide content able to work on multiple platforms e.g. PCs, PDAs, Mobile Phones.
Data for the portal was provided by IMS Enterprise Web Services to enable interoperability with the various systems in the institutions in Northern Ireland. Portal channels created by the NIIMLE team displayed the information to the portal users.
UPortal
uPortal is an open source, open standards effort built on Java, XML, JSP, XSLT and JDBC. It is a framework for building a portal rather than a portal itself. uPortal presents collections of channels on each screen.

Figure 1: UPortal channels
Channels can display static and dynamic content. Each one of the areas shown in the screen capture above is a channel. Channels can act as applications and have their own navigation and display multiple pages of information. The portal provides an easy way to aggregate these applications to display important information on a single site.
IMS Enterprise Web Services
The IMS Global Learning Consortium provides a range of specifications to enable interoperability of learning systems. The Enterprise Services specification is the definition of how systems manage the exchange of information that describes people, groups and memberships within the context of learning.
Three services are specified:
-
Person Management Service
-
Group Management Service
-
Membership Management Service
Each service defines operations that manipulate single or multiple objects appropriate to that service. For example, the Person Management Service operations are shown in the table below.
| Operation | Description |
| createPerson | To request the creation of a populated 'person' record on the target system and the source is responsible for the allocation of the unique identifier. |
| createByProxyPerson | To request the creation of a populated 'person' record on the target system and the target is responsible for the allocation of the unique identifier. |
| deletePerson | To request the deletion of a 'person' record. The 'person' record is deleted and all of its associated relationships. |
| readPerson | To read the full contents of the identified 'person' record. The target must return all of the data it has for the identified 'person' record. |
| updatePerson | To write new content into the identified 'person' record. The target must write the new data into the 'person' record. This is an additive operation. |
| replacePerson | To replace the content of the identified 'person' record. The target must write the new data into the 'person' record. This is a destructive write-over of all of the original information. |
| changePersonIdentifier | To change the sourcedId of the 'person' record. The completion of this operation will result in later actions using the original sourcedId reporting an unknown identifier status. |
| createPersons | To request the creation of a set of populated 'person' records on the target system. The source is responsible for the allocation of the unique identifiers. |
| createByProxyPersons | To request the creation of a set of populated 'person' records on the target system. The target is responsible for the allocation of the unique identifiers. |
| deletePersons | To request the deletion of a set of 'person' record. The 'person' records and all their associated relationships are deleted. |
| readPersons | To read the full contents of the set of identified 'person' records. The target must return all of the data it has for each of the identified 'person' records. |
| readPersonsForGroup | To retrieve the 'person' records for a particular Group. This returns the person record for every person that is a member of the Group i.e., for whom a membership record in the Group exists. |
| updatePersons | To write new content into the set of identified 'person' records. The target must write the new data into each of the 'person' records. These are additive operations. |
| replacePersons | To replace the content of a set of identified 'person' records. The target must write the new data into the 'person' records. These are destructive write-overs of all of the original information. |
| changePersonsIdentifier | To change the sourcedId of the set of 'person' records. The completion of this operation will result in later actions using the original sourcedId reporting an unknown identifier status. |
Figure 2: Summary of PersonManagerService operations.
The NIIMLE used IMS Enterprise Web Services to manage student records, pathways records, and learner transcript. Operations from all three services were implemented. The Person Service delivered the student core data, the Membership Service delivered a set of ‘memberships’ of courses (enrolments), and the Group Service delivered details of each of these courses.
SUNIWE
SUNIWE used the same architecture as NIIMLE.. A collection of components were combined to create the system.

Figure 3: NIIMLE/SUNIWE System Components
Clients access SUNIWE using a web browser. On the portal server, Apache Tomcat was used as the web container. uPortal ran as a web application in Tomcat.
Custom channels were created by the development team to provide content for the portal. Each custom channel consists of Java classes and XSL stylesheets. The Java classes consume data in XML format from the web services and transform it using the XSL stylesheets into a format fit for processing by uPortal. The XML is then output from the channel and uPortal performs additional transformations to turn the XML into appropriately-styled HTML for display on-screen.
On the servers hosting the web services, Tomcat was used as the web container. The Apache Axis Web service framework was used to host the Web services.
Web services use XML messages that follow the SOAP standard. Axis provides a SOAP server implementation, and various utilities and APIs for generating and deploying Web service applications.
The IMS Enterprise Services specifications include a set of machine readable descriptions of the operations supported by the server described in Web Services Description Language (WSDL). Axis provides a WSDLtoJava tool which was used to generate a framework of IMS Java classes from the IMS WSDL descriptions. These IMS classes were modified to use NIIMLE classes to implement the functionality of the services. The NIIMLE classes interacted with the database via basic JDBC queries.
Training
The project team held training sessions to enable developers to get familiar with the NIIMLE system and to gauge the amount of work involved in implementing the NIIMLE portal and services. These ‘code bashes’ separately covered the Web services and the uPortal channels and attempted to implement the NIIMLE components locally at SURF.

