IChannel Support

IChannel backwards compatibility support

Goals and requirements

uPortal3 framework relies on JSR168 portlet standard to define elementary pieces of application content. In uPortal2, this mission is handled by a custom IChannel interface (and its derivatives). The overall goal is to enable uPortal2 channels to run in the uPortal3 environment.

Approach

Full backwards compatibility (in particular, binary compatibility) will be hard to achieve. The current approach is to create a set of adapter classes and a backwards compatibility library (BCL) that would satisfy overwhelming majority of the requirements, but leave the hardest cases for individual consideration.

Identifying specific requirements

To define specific requirements, we need to identify specific classes that should be included in the BCL. The initial approach is to use API scanning tools on custom channels of current uP2 installations.
As a second stage, we would like to identify a specific set of channels that community deems necessary to support at the time of release. We encourage everyone to contribute to the required channel support effort.

Implementation

Channel adapter core

Channel adapter is a portlet that create and manage lifecycle of IChannel instances. Components of the channel adaptor are shown in the diagram below (UPC:PDF).

ChannelAdapterPortlet bean implements the main container and exposes standard JSR168 potlet interface. To drive IChannel lifecycle, ChannelAdapter creates modified versions of ChannelStaticData, BrowserInfo and ChannelRuntimeData which inherit from the standard uP2 implementations from the BCL.
Channels are instantiated using ChannelFactory. Current implementation is local (i.e. in uP3 code, not derived from uP2 implementation, mostly because of the CarResources initiation problems). The implementation uses standard channel adaptor classes from BCL to support IChannel variants (i.e. multithreaded, cacheable, etc.).
ChannelAdapter implements uP2 caching contract. The implementaiton is configured with channelInstanceCache and channelSystemCache, which are standard uP3 ICache objects which are used to maintain instance-scoped and system-scoped cache key entries.