Skip to content
cstockloew edited this page Jun 15, 2017 · 1 revision

This page contains instruction on how to transfer your existing code from one release to the next release. For a compact overview of all changes and bug fixes, please refer to the Release History

General Upgrade Instructions

Unfortunately Apache Karaf does not support automatic feature upgrade yet, but there are some OSGi commands to upgrade uAAL bundles on the go:

  1. Manually force an upgrade of bundle with number XX (repeat, in order, for all bundles)
    • update --force XX mvn:group/artifact/version
  2. Do not specify a version when installing a bundle with number XX (repeat, in order, for all bundles, or enable daily updates)
    • When installing: install mvn:group/artifact
    • When updating: update XX
If you don't mind uninstalling all bundles of your Karaf distro you can upgrade it all by:
  • Remove <karaf>/data/cache
  • Open <karaf>/etc/org.apache.karaf.features.cfg
  • Find the uAAL.karaf.feature entry and change its version to the latest one
  • Restart Karaf and repeat feature installation procedure for all your bundles
For your own bundles you can also take advantage of Apache ACE.

Transfer from 3.3.0 to 3.4.0

There have been changes in some ontologies. If your code previously used these ontologies (to produce or consume information), make sure you apply the changes when using version 3.4.0:

  • ont.device.extra: Some classes names have changed
  • ont.activityhub: Changed the "has value" property to the correct one
  • ont.personalhealthdevice: Completely updated, and makes correct use of Measurements and its restrictions. Fixed typo in diastolic blood pressure property.
  • ont.profile.health: The "assignedTo" property is back with REDUCED serialization. Fixed use of PlannedSession instead of PerformedSession in TreatmentPlanning.
  • Some deprecated ontologies have been removed. If you used one of those, search and use one of the up-to-date equivalents.

Transfer from 3.2.0 to 3.3.0

  • No relevant API changes.

Transfer from 3.1.0 to 3.2.0

  • JGroup Channel connectivity has been changed: Channels now append the AALSpace ID to their own ID. This in practice means that by default there will be no connection between instances running 3.1.0 (or before) and 3.2.0 (or above) - Including Android ones. This should not matter as it is always common practice to always use the same versions in all instances. But in any case a workaround would be to manually append the AALSpace ID to the names of the JGroups channels in the configuration files.

Transfer from 3.0.0 to 3.1.0

  • No relevant API changes

Transfer from 2.0.0 to 3.0.0

  • Integration tests (tests that inherit from IntegrationTest, but not from TestCase) must be renamed to *IT.java, e.g. ArtifactIntegrationTest.java must be renamed to ArtifactIT.java
  • removed deprecated class ResourceFactoryImpl, the interface org.universAAL.middleware.rdf.ResourceFactory must now be used directly
  • authoritator is removed, and should be replaced with authenticator.userPasword.client: use the method org.universAAL.security.authenticator.client.AuthenticationPublisher.authenticate(User, Device) to get the User instance (not just the URI, the user instance also has the proper UserType ie: Caregiver or AssistedPerson)
  • ont.profile.userid is deprecated, either use the authenticator.client or the new ont.security (userPasswordCredentials is now a subclass of credentials, a security subprofile has credentials; userPasswordCredentials contains a 3rd field to determine the codification of the password field. Uncodified password fields are not recommended, implemented services will not work with passwords not codificated).
  • UICaller interface has changed: method dialogAborted(String) is now dialogAborted(String,Resource), to let applications know the user's data updates up until the dialog was aborted.
  • mw.pom.osgi no longer manages org.apache.felix dependencies, these dependencies should be changed (can be automatically changed by executing "mvn udir:felix-check -Ddirective.fix":
old dependency new dependency
 <dependency>
   <groupId>org.apache.felix</groupid>
   <artifactId>org.osgi.core</artifactid>
 </dependency>
 <dependency>
   <groupId>org.osgi</groupid>
   <artifactId>org.osgi.core</artifactid>
 </dependency>
 <dependency>
   <groupId>org.apache.felix</groupid>
   <artifactId>org.osgi.compendium</artifactid>
 </dependency>
 <dependency>
   <groupId>org.osgi</groupid>
   <artifactId>org.osgi.compendium</artifactid>
 </dependency>

Transfer from 1.3.0 to 2.0.0

  • moved rundir from middleware repo to support repo
Middleware
  • Moved interface
    org.universAAL.middleware.sodapop.msg.MessageContentSerializer(Ex) of bundle mw.bus.model to
    org.universAAL.middleware.serialization.MessageContentSerializer(Ex) of bundle mw.data.representation
  • method Resource.setProperty(..) now returns a value of type boolean
  • OntologyManagement now needs the moduleContext for register/unregister (for security reasons)
  • method org.universAAL.middleware.service.ServiceCallee.addNewRegParams renamed to org.universAAL.middleware.service.ServiceCallee.ServiceCallee.addNewServiceProfiles
  • org.universAAL.middleware.service.ServiceBus:
    • addNewRegParams-> addNewServiceProfiles
    • getMatchingService->getMatchingServices
    • removeMatchingRegParams->removeMatchingProfiles
    • sendMessage->brokerRequest
    • sendReply-> brokerReply
Ontologies:
  • New device ontology
    • The following ontologies will become deprecated as a consequence of the new ont.device:
      • ont.hazard
      • ont.risk
      • ont.water
      • ont.weather
      • ont.window
      • ont.device.extra will retain a few legacy concepts
    • The ontologies replaced by the new ont.device can be substituted in your code by changing the dependency and using the equivalent class of each concept:
      • FireDetector -> SmokeSensor
      • GasDetector -> GasSensor
      • FallDetector -> FallSensor
      • PanicButton -> PanicButtonSensor
      • FaucetSensor -> WaterFlowSensor
      • WaterActuator -> WaterFlowActuator
      • WaterFloodDetector -> FloodSensor
      • HeaterActuator -> HeaterActuator
      • RelHumiditySensor -> HumiditySensor
      • TempSensor -> TemperatureSensor
      • BlindActuator/Controller -> BlindActuator/Controller
      • CurtainActuator/Controller -> CurtainActuator/Controller
      • GlassBreakSensor -> GlassBreakSensor
      • WindowActuator/Controller -> WindowActuator/Controller

Transfer from 1.2.0 to 1.3.0

MW.container:

  • Renamed class: uAALModuleActivator -> ModuleActivator
MW.DataRep:
  • Renamed class: org.universAAL.middleware.owl.BoundingValueRestriction -> org.universAAL.middleware.owl.BoundedValueRestriction
UI:
  • Renamed bundle: ui.handler.swing.classic -> ui.handler.gui.swing.classicLAF
  • Renamed bundel: waveLAF -> bluesteelLAF
    • Run config: mvn:org.universAAL.ui/ui.handler.gui.swing.bluesteelLAF/1.2.2-SNAPSHOT@nostart
    • to use set ui.handler.gui.swing Configuration file to contain: LookandFeel.package=org.universAAL.ui.gui.swing.bluesteelLAF

Transfer from 1.1.0 to 1.2.0

  • unified ontology structure, the new form can be found in the Guidelines for ontologies. Changes consist mainly of renaming package names. If you are importing classes from existing ontologies check if the package names have changed.
  • When starting run configurations in Eclipse, some ontologies may remain "Installed" if they are all set for the same level, and you will have to start them manually (in the right order).

OSGi/Core separation

To be container-independent, OSGi-specific parts have been separated. Because of renaming of artifacts, take into account that the "Sodapop.key" file for encryption must now be in "mw.bus.model.osgi" folder, instead of the old "mw.bus.model".

Changes in POMs:

  • mw.pom is now parent of mw.pom.osgi and mw.pom.core (in trunk 1.1.2-SNAPSHOT)
  • mw.data.representation -> mw.data.representation.osgi
  • mw.data.serialization -> mw.data.serialization.osgi
  • mw.bus.context -> mw.bus.context.osgi
  • mw.bus.service -> mw.bus.service.osgi
  • mw.bus.ui -> mw.bus.ui.osgi

Other changes

  • CHE ontology has been moved from CHE itself into a different artifact for modularization. Artifacts calling previous CHE services must now include dependency to org.universAAL.ontology/ont.che/<x.y.z></x.y.z> instead of CHE itself. The package for the concepts has changed as well and is now org.universAAL.ontology.che

Configuration Changes

rename folder mw.bus.model to mw.bus.model.osgi if using any of the OSGi running options (eclipse pax running and/or runner folder project).

Transfer from 1.0.0 to 1.1.0

Here more relevant changes have been applied, namely:

  1. new call based UI Bus instead of event based I/O Bus
  2. new universAAL profiling ontology

New call based UI Bus instead of event based I/O Bus

in the code (note that only changes are mentioned here): import org.universAAL.middleware.io.* -> import org.universAAL.middleware.ui.*

  • import org.universAAL.middleware.input.InputEvent; -> import org.universAAL.middleware.ui.UIResponse;
    • PROP_INPUT_SENTENCE -> nothing
    • uAAL_INPUT_NAMESPACE -> nothing
    • uAAL_MAIN_MENU_REQUEST -> nothing
    • PROP_INPUT_LOCATION -> PROP_SUBMISSION_LOCATION
removed constructor used in case of context free input which means that Input does not originate from the running dialog.

InputEvent(Resource user, AbsLocation inputLocation, String userRequest)

    • getInputLocation() -> getSubmissionLocation()
    • getInputSentence() -> nothing
    • hasDialogInput() -> nothing
    • isServiceSearch() -> nothing
    • isWellFormed() -> nothing
  • import org.universAAL.middleware.output.OutputEvent; ->import org.universAAL.middleware.ui.UIRequest;
    • uAAL_OUTPUT_NAMESPACE ->uAAL_UI_NAMESPACE
    • PROP_OUTPUT_LANGUAGE -> PROP_DIALOG_LANGUAGE
    • PROP_OUTPUT_MODALITY -> PROP_PRESENTATION_MODALITY
    • PROP_OUTPUT_MODALITY_ALT -> PROP_PRESENTATION_MODALITY_ALT
    • PROP_PRIVACY_LEVEL >PROP_DIALOG_PRIVACY_LEVEL
    • getAltOutputModality() ->getAltPresentationModality()
    • getOutputModality() -> getPresentationModality()
    • getPresentationAbsLocation() -> getPresentationLocation()
    • setAltOutputModality(Modality outputModality) -> setAltPresentationModality(Modality outputModality)
    • setOutputModality(Modality outputModality) -> setPresentationModality(Modality outputModality)
    • setPresentationAbsLocation(AbsLocation presentationLocation) -> setPresentationLocation(AbsLocation presentationLocation)
  • import org.universAAL.middleware.output.OutputEventPattern; -> import org.universAAL.middleware.ui.UIHandlerProfile;
-all Properties and methods the same
  • import org.universAAL.middleware.input.InputPublisher; -> import org.universAAL.middleware.ui.UIHandler;
    • publish(InputEvent e) -> nothing
  • import org.universAAL.middleware.output.OutputSubscriber; -> import org.universAAL.middleware.ui.UIHandler;
    • handleEvent(Message m) -> handleRequest(Message m)
    • handleOutputEvent(OutputEvent event) -> handleUICall(UIRequest uicall)
    • handleReply(Message m) -> nothing
    • nothing -> userLoggedIn(Resource user, AbsLocation loginLocation)
  • org.universAAL.middleware.input.InputSubscriber -> import org.universAAL.middleware.ui.UICaller;
    • handleEvent(Message m) -> handleReply(Message m)
  • org.universAAL.middleware.output.OutputPublisher -> import org.universAAL.middleware.ui.UICaller;
    • publish(OutputEvent e) -> sendUIRequest(UIRequest e)
    • handleRequest(Message m) -> nothing
    • handleInputEvent(InputEvent event) -> handleUIResponse(UIResponse input)
  • org.universAAL.middleware.output.DialogManager -> org.universAAL.middleware.ui.DialogManager
    • nothing ->getMainMenu(Resource user, AbsLocation loginLocation)

New universAAL profiling ontology

Until release 1.0.0 (included) the profiling ontology has been the same since the begining, inherited from project PERSONA. Now there is a new profiling ontology specially designed for uAAL, and the related documentation can be found here.

This new version is introduced at 1.0.2-SNAPSHOT so if you want to use it you must set this version in your ont.profile dependency in your POM. Take into account that this also means that the new profiling ontology is already compatible with the new data representation, and so must be any software that uses it.

If your code already used the old profiling ontology, when migrating to the new one, you must observe the following issues:

  • New profiling ontology version is 1.0.2-SNASPHOT (and following)
  • It is compliant with new data representation. Code that uses it must also be compliant.
  • URIs have changed. If you relied on these in your code (that´s weird) you should change them. Check the new code to see the new URIs.
  • The concept User is compatible between old and new profiling ontology. You don´t need to make changes, but only as long as you just use instances of User, but not its properties or methods.
  • The concept ElderlyUser is now AssistedPerson
  • User and its siblings still have a hasProfile property. Take a look at the new documentation however, to see the details.
  • Profiles have sub-profiles, which are intended to hold application or domain-specific parameter data.
  • There are concepts for uSpace and AALService, but just like the Users they are empty. They have no parameters properties. These still have to be defined by their respective taskforces.
  • Profiles don´t have parameter properties yet either. This means that all the parameters that used to be in the old profile ontology (like impairments for instance) are no longer available.
  • If you used a parameter that no longer exists, consider one of the following:
    • If the parameters was application or domain-specific, consider creating a new sub-profile with the needed parameters, and then extend the profiling ontology.
    • If it´s very generic, contact the profiling ontology responsibles and discuss the possibility of including the parameter in the profiling otology itself.

Other changes

Context publishers now have to specify their published events. To do so, call the method .setProvidedEvents() on the ContextProvider object you used, with an array of ContextEventPattern defining the kind of events you publish. A quick interim replacement is using a blank pattern with new ContextEventPattern[] { new ContextEventPattern() }.

Transfer from 0.3.0-SNAPSHOT to 1.0.0

OSGi/Core separation

The new container specification has been applied, decoupling OSGi part in separate packages

changes in the code:

  • import org.universAAL.middleware.container.ModuleContext;
  • import org.universAAL.middleware.container.osgi.uAALBundleContainer;
  • import org.universAAL.middleware.container.osgi.util.BundleConfigHome;
in start methods of the Activators:
  • instead of BundleContext, new ModuleContext is passed further
 BundleContext[] bc = {context};
 Activator.mcontext = uAALBundleContainer.THE_CONTAINER.registerModule(bc);

New data representation model

project mw.data.representation

Old data representation model: (click to enhance)

New data representation model (class diagram from svn head revision 551, 6.02.2012.): (click to enhance)

In the code most frequent change is this: import org.universAAL.middleware.owl.Restriction; -> import org.universAAL.middleware.owl.MergedRestriction;

New data representation javadoc

Note that this javadoc is always up to date since it is automatically created by hudson and that in case of future updates on the svn some discrepancies from the above class diagram may appear. http://depot.universaal.org/hudson/job/middleware/site/middleware.core/mw.data.representation.core/apidocs/index.html

Tutorials:

Support: Found a problem?
  • Report suggestions, missing, outdated or wrong documentation creating an Issue with "documentation" tag

Clone this wiki locally