You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-dev@portals.apache.org by "Ate Douma (JIRA)" <ji...@apache.org> on 2008/10/08 02:24:44 UTC

[jira] Assigned: (PLUTO-481) Pluto 2.0 Refactoring Initiative

     [ https://issues.apache.org/jira/browse/PLUTO-481?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ate Douma reassigned PLUTO-481:
-------------------------------

    Assignee: Ate Douma  (was: Dennis Dam)

> Pluto 2.0 Refactoring Initiative
> --------------------------------
>
>                 Key: PLUTO-481
>                 URL: https://issues.apache.org/jira/browse/PLUTO-481
>             Project: Pluto
>          Issue Type: Improvement
>          Components: portlet container
>            Reporter: David Sean Taylor
>            Assignee: Ate Douma
>             Fix For: 2.0.0
>
>
> Jetspeed-2 currently still uses Pluto 1.0.1 as its JSR-168 container, but we want and need to upgrade and migrate to the latest Pluto container under
> development, aka the not yet released Pluto 2.0 targeted as the JSR-286 RI.
> This however is currently impossible to do because of the architectural changes Pluto underwent from version 1.0.x to 1.1.x.
> Technically, viewed from the POV of an easy to embed container for the Pluto Portal Driver, or environments which only need the out-of-the-box features
> provided, these architectural changes have resulted in a much simpler and easier to understand and maintain model and API, and as such these changes were great!
> But... for a portal like Jetspeed-2, which provides a much enhanced usage and feature list *on container level*, these architectural changes have, simply put,
> completely broken with the functional and technical "contract" provided by Pluto 1.0.x and as such make it now impossible for us to migrate to the current Pluto
> container.
> As it is the primary mission and goal of the Pluto project to provide an embeddable portlet container for portals like its Apache Portals sibling project
> Jetspeed-2, it is our view (as Jetspeed-2 committers) that we need to discuss what needs and can to be done, on both Jetspeed-2 and Pluto side, to bring our
> projects back together, and how to restore the original *functional* contract Pluto provided with version 1.0.x.
> To this end, we'll present our (short) assessment how the current Pluto container API and implementation has changed and broken with the old Pluto 1.0.x
> features which Jetspeed-2 depends upon to be able to maintain our current Jetspeed-2 features, as well as what we think needs to be done *functionally* to
> restore these features.
> To be very clear: we're not asking nor suggesting to restore the old Pluto 1.0.x API and SPI as is. We fully expect and are willing to adapt Jetspeed-2 to the
> new Pluto architecture as much as needed, even while that most likely will now cause Jetspeed-2 itself to have to break with its own public API and thus lose
> (some) backwards compatibility. After all, Pluto now has had several releases based on its new Pluto 1.1.x architecture and we (as Apache Portals community)
> have the obligation to maintain as much backwards compatibility for the users of these versions as well.
> So, what we will propose later on is to work towards a solution which will restore the ability for Jetspeed to properly use and embed the new Pluto 2.0
> container but still maintain the lightweight and simple configuration and usage of the container for portals like the Pluto Portal Driver and other use-cases
> without breaking its current "contract".
> But first lets get down to some of the issues we have identified so far. This is most likely not the complete list but covers the most important ones.
> The Pluto 1.0.x object model API (OM)
> =====================================
> Pluto 1.0.x provided a fully interface based object model to represent the web and portlet deployment descriptors (web.xml and portlet.xml).
> Through factory methods, the Pluto 1.0.x container only used these interfaces in its implementation. That allowed Jetspeed and other portals to supply its own
> implementation of the OM and use that to provide enhanced features like database persistence, extended meta data, caching control, etc.
> Of course, Pluto 1.0.x also provided its own implementation classes of the OM and Jetspeed uses these as base classes but provides extended implementations to
> hook them up and into its own backend and management features.
> Pluto 1.1.x completely dropped all of this. Instead, a new descriptor API was provided with a complete new set of classes (no interfaces!) which are used and
> instantiated directly within the container with no factory support or any other way of extending the current implementation.
> As such, the current container only allows usage of the web.xml and portlet.xml descriptors and features derived from them as provided by the container.
> Furthermore, as the loading and management of the descriptors is now done directly (and only) by the container itself, there is no way for Jetspeed to hook into
> this process anymore.
> Effectively, this means that descriptor persistence, caching, custom extensions, *standard* support for custom portlet mode or window-state mapping,
> etc. all no longer are possible with the current Pluto container. Not just for Jetspeed but any portal needing and depending on these features.
> The Pluto 1.1.x/2.0 PortletContextManager, PortletDescriptorRegistry and PortletServlet
> =======================================================================================
> With the switch to Pluto 1.1.x, the container added control and management of the above mentioned deployment descriptors and fully integrated them with the
> container interaction which now depend on this management *implementation*, and also hooked that up on the portlet application context.
> This means that now you need a separate container instance for each portlet application and that the container itself loads and manages the descriptors.
> Also, interaction with the container now requires the use of the Pluto provided PortletServlet (although that one possibly can be extended) as it is tied to the
> PortletContextManager directly (which in turn is tied to the PortletDescriptorRegistry).
> Besides the obvious problem that this effectively blocks delegating management of the context and descriptors for the portal, it also forces the usage and
> interaction with portlets to the Pluto provided implementation.
> For instance, Pluto delegates interaction to each portlet through a separate instance of its PortletServlet, while Jetspeed currently has its own more generic
> JetspeedContainerServlet which is not tied to a single portlet. The Jetspeed solution allows for dynamically enabling/adding portlets (as defined in
> portlet.xml) without any need to rewrite the web.xml. But using the Pluto PortletServlet requires changing the web.xml (and thus reloading the context) to do so.
> The Pluto 1.1.x service provider interfaces (SPI)
> =================================================
> Although the new Pluto SPI (comprising of the RequiredContainerServices and OptionalContainerServices) generally provides a nice and simple interface to plugin
> portal specific implementations, certain features available with Pluto 1.0.x are no longer available.
> With Pluto 1.0.x, critical components as the PortletContext and PortletWindow were accessed by the container through factory classes.
> These no longer exist and the pluto container directly instantiates its own implementations for these components.
> Jetspeed however very much depends on its own extensions of these components to provide support for features like parallel rendering, clustering and attaching
> additional meta data (or even preferences) to a PortletWindow or PortletEntity.
> Additionally, while Pluto 1.0.x allowed managing multiple PortletWindows for a PortletEntity, this *Portlet Spec* feature has been removed from the current
> Pluto 1.1.x/2.0 container.
> Lastly, not all of services referenced through these SPI interfaces are only accessed through it.
> For instance, the OptionalContainerService.getPortletRegistryService() is by default implemented by the PortletContextManager. But, this implementation is very
> much directly used (as static instance even) within the container. Effectively, the interface is now only an API portals might use, but it cannot be replaced
> and thereby cannot be regarded as a proper SPI interface anymore.
> Solution
> ========
> As indicated earlier, solving the above issues such that Pluto 2.0 can be made embeddable again, in Jetspeed or other portals, needs to be done in a way which
> maintains backwards compatibility for current Pluto 1.1.x users.
> Although we don't have a clear proposal for this, our current idea is to:
> - define new OM interfaces to be implemented by the current descriptor api classes
> - enhance the OptionalContainerServices SPI to provide additional services for loading and managing the deployment descriptors
> - enhance the OptionalContainerServices SPI to provide additional services for accessing components like PortletContext, PortletWindow etc.
> - refactor the container implementation to only use the OM interfaces
> - refactor the container implementation to only use the SPI provided services and no longer directly binding to its service implementations
> When done properly, the above changes should still allow using the current implementation without any functional or even technical consequence.
> Now, the above changes will mean a lot of work and lots of testing as well to make sure everything remains working as expected.
> We, as primary Jetspeed committers have much at stake here so we are definitely willing to help out and do much of the grunt work.
> And of course, we will have a large amount of work to do at Jetspeed Portal side as well: all our Pluto Factory implementations have become useless, all Pluto
> OM packages (and some interfaces) have changed, and we will need to provide new implementations for the Pluto SPI container services.
> For our implementations of the Pluto SPI container services, we will definitely look at the current Pluto provided implementations and where possible try to
> make use of them as much as possible. To that end, we will probably also need to be able to hook in our own extensions which might require some additional
> refactoring but should not result in functional or technical changes of the default Pluto services.
> Note: we want to migrate to Pluto 2.0 for our next Jetspeed 2.2 release. But, for that release we'll stick to only using the JSR-168 container features.
> Then, for the following major release, version 2.3 which we currently have scheduled sometime this summer, we will provide full JSR-286 compliance.
> So, our initial goal is to get Pluto 2.0 working again with Jetspeed-2 but stick to our current features.
> This all is clearly not something which can be done or will be ready overnight, nor possible to do all by ourselves.
> But we do need to start resolving this ASAP so it won't hold up the release of both Pluto 2.0 and Jetspeed 2.2 longer than needed.
> As said: the above proposal is still just an idea. And of course how to do all this, is fully open for debate and we are very interested in hearing the opinions
> of other committers and community members (also from other portals embedding Pluto 1.1.x).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.