The WSRP producer in uPortal 3 has been initially based on the WSRP4J code and rewritten to achieve the following goals:
- IoC injection of the basic producer components and services. The WSRP producer context is defined in the Spring configuration file.
- Flexible persistence layer. The default implementation uses Java Data Objects (JDO) as contrasted to the original WSRP4J version (XML Castor).
- Configurable error handling. New types of exceptions have been introduced.
- Configurable logging. Apache Commons Logging has replaced the WSRP4J logging based on log4j.
- User-scoped RegistrationContext. It allows to filter the set of portlet descriptions for a given user ID. The WSRP user is used by default when the user ID is not specified.
Since both uPortal and the WSRP producer use Pluto container as a portlet engine there are lots of Pluto container services that they share:
- Portlet Container Environment.
- Factory Manager Service. The producer contains a slightly different from uPortal's set of factories.
- Property Manager Service.
- Log Service.
- Information Provider Service. The producer contains a different from uPortal's dynamic information provider factory.
- Static Information Provider.
- Portal Context Provider.
The WSRP producer uses the WSRP-specific dynamic information provider and the standard Pluto's Portlet URL implementation.
One of key components in the producer is WsrpProvider that provides the WSRP Engine with all necessary services.The provider is also defined in the producer Spring config file:
<!-- IWsrpProvider implementation --> <bean id="wsrpProvider" class="org.jasig.portal.wsrp.producer.provider.impl.WsrpProviderImpl" singleton="true"> <property name="urlComposer"><ref local="urlComposer"/></property> <property name="portletStateManager"><ref local="portletStateManager"/></property> <property name="descriptionHandler"><ref local="descriptionHandler"/></property> <property name="portletInvoker"><ref local="portletInvoker"/></property> <property name="portletRegistrationFilter"><ref local="portletRegistrationFilter"/></property> <property name="portletPoolFactory"><ref local="portletPoolFactory"/></property> <property name="portletContainerManager"><ref local="portletContainerManager"/></property> <property name="portletWindowFactory"><ref local="portletWindowFactory"/></property> <property name="portletEntityRegistryFactory"><ref local="portletEntityRegistryFactory"/></property> <property name="consumerRegistryFactory"><ref local="consumerRegistryFactory"/></property> </bean>