ポータル機能の利用について

ポートレット開発において、ポートレットからポータル固有の機能を呼び出したい場合もあるかと思います。 PALポータルでは、ポートレット内でポータル固有の機能を呼び出す仕組みを提供しています。

RequestContext

RequestContext は、クライアントからのリクエストを処理するために PALポータルが利用するリクエストのインスタンスです。 RequestContext はパイプラインに渡されて、パイプライン内の各バルブで処理がされ、様々な設定情報を保持しています。 ポートレットから RequestContext を呼び出すことで、ポータルの様々な情報にアクセスすることができます。

RequestContext は、ポートレットの処理に渡される前に、PortletRequest のリクエスト属性として格納されます。 ですので、ポートレット内では PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE をキーにして、PortletRequest から取得することができます。

たとえば、呼び出し方法は以下のようになります。

RequestContext requestContext = (RequestContext) request
    .getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);

上記の方法を利用するためには、ポートレット開発において、ビルド時には jetspeed-api の jar ファイルが必要になります。 jetspeed-api はアプリケーションサーバーに保存されるので、実行時にはポートレットの war ファイル内に含めないように注意してください。

コンポーネント

PALポータルは、様々なコンポーネントにより構成されています。 ユーザー認証を行う機能などもコンポーネント化されているので、ポートレットからもそのコンポーネントを呼び出したい場合もあるかと思います。 そのような呼び出したいコンポーネントは、設定ファイルを追加することでポートレット内からアクセスすることができます。

PALポータルのコンポーネントを利用したい場合は、ポータル拡張設定ファイル jetspeed-portlet.xml をポートレットの WEB-INF に配置して、利用したいコンポーネントを記述します。 jetspeed-portlet.xml の XSD ファイルについては、Appendix を参照してください。

たとえば、PageManager などのコンポーネントを呼び出したい場合は、jetspeed-portlet.xml は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<portlet-app
    xmlns="http://portals.apache.org/jetspeed"
    xmlns:js="http://portals.apache.org/jetspeed"
    xmlns:dc="http://www.purl.org/dc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    id="pal-admin" version="1.0"
    xsi:schemaLocation="http://portals.apache.org/jetspeed
        http://portals.apache.org/jetspeed-2/2.1/schemas/jetspeed-portlet.xsd">
  <dc:title>PAL Portal Administration Portlets</dc:title>
  <dc:creator>PAL Team</dc:creator>
  <js:services>
    <js:service name="UserManager"/>
    <js:service name="PageManager"/>
    <js:service name="PermissionManager"/>
  </js:services>
</portlet-app>

呼び出したいコンポーネントは、js:service で記述します。 これらのコンポーネントは PortalServices により管理され、利用可能なコンポーネント一覧は webapps/palportal/WEB-INF/assembly/jetspeed-services.xml で定義されています。 jetspeed-services.xml は以下の通りです。

<?xml version="1.0" encoding="UTF-8"?>
<beans>
  <!-- Portlet Services  -->
  <bean id="PortalServices" 
    class="org.apache.jetspeed.services.JetspeedPortletServices" >
    <constructor-arg>
      <map>
        <entry key="SecurityProvider">
          <ref bean="org.apache.jetspeed.security.SecurityProvider"/>
        </entry>
        <entry key="PortletRegistryComponent">
          <ref bean="org.apache.jetspeed.components.portletregistry.PortletRegistry" />
        </entry>
        <entry key="SearchComponent">
          <ref bean="org.apache.jetspeed.search.SearchEngine"/>
        </entry>
        <entry key="PAM">
          <ref bean="PAM" />
        </entry>        
        <entry key="UserManager">
          <ref bean="org.apache.jetspeed.security.UserManager"/>
        </entry>
        <entry key="PageManager">
          <ref bean="org.apache.jetspeed.page.PageManager"/>
        </entry>
        <entry key="RoleManager">
          <ref bean="org.apache.jetspeed.security.RoleManager"/>
        </entry>
        <entry key="GroupManager">
          <ref bean="org.apache.jetspeed.security.GroupManager"/>
        </entry>      
        <entry key="Profiler">
          <ref bean="org.apache.jetspeed.profiler.Profiler"/>
        </entry>        
        <entry key="SSO">
          <ref bean="org.apache.jetspeed.sso.SSOProvider"/>
        </entry>        
        <entry key="EntityAccessor">
           <ref bean='org.apache.jetspeed.components.portletentity.PortletEntityAccessComponent'/>
        </entry>
        <entry key="WindowAccessor">
           <ref bean='org.apache.jetspeed.container.window.PortletWindowAccessor'/>
        </entry>
        <entry key="ApplicationServerManager">
          <ref bean="org.apache.jetspeed.tools.pamanager.servletcontainer.ApplicationServerManager"/>
        </entry>
        <entry key="PortletFactory">
          <ref bean="portletFactory"/>
        </entry>
        <entry key="DeploymentManager">
          <ref bean="deploymentManager"/>
        </entry>
        <entry key='IdGenerator'>
          <ref bean='IdGenerator'/>
        </entry>
        <entry key='Powertools'>
          <ref bean='Powertools'/>
        </entry>
        <entry key="HeaderResource">
          <ref bean="org.apache.jetspeed.headerresource.HeaderResourceFactory"/>
        </entry>
        <entry key="TemplateLocator">
          <ref bean="TemplateLocator"/>
        </entry>
        <entry key="DecorationLocator">
          <ref bean="DecorationLocator"/>
        </entry>        
        <entry key="DecorationFactory">
          <ref bean="DecorationFactory"/>
        </entry>
        <entry key="PermissionManager">
          <ref bean="org.apache.jetspeed.security.PermissionManager"/>
        </entry>                  
        <entry key="PortalStatistics">
          <ref bean="PortalStatistics"/>
        </entry>                  
        <entry key="PortalAdministration">
          <ref bean="PortalAdministration"/>
        </entry>                  
        <entry key="PreferencesProvider">
          <ref bean="org.apache.jetspeed.prefs.PreferencesProvider"/>
        </entry>
        <entry key="org.apache.jetspeed.container.session.PortalSessionsManager">
          <ref bean="org.apache.jetspeed.container.session.PortalSessionsManager"/>
        </entry>
        <entry key="SecurityAccessController">
          <ref bean="org.apache.jetspeed.security.SecurityAccessController"/>
        </entry>
        <entry key="PortletTrackingManager">
          <ref bean="org.apache.jetspeed.aggregator.PortletTrackingManager"/>
        </entry>
        <entry key ="PortalAuthenticationConfiguration">
          <ref bean="org.apache.jetspeed.administration.PortalAuthenticationConfiguration"/>
        </entry>
        <entry key ="PortalConfiguration">
          <ref bean="PortalConfiguration"/>
        </entry>
        <entry key="ImporterManager">
          <ref bean="importerCastorPageManager"/>
        </entry>          
        <entry key="decorationContentCache">
          <ref bean="decorationContentCache"/>
        </entry>
        <entry key="portletContentCache">
          <ref bean="portletContentCache"/>
        </entry>          
        <entry key="AuditActivity">
          <ref bean="org.apache.jetspeed.audit.AuditActivity"/>
        </entry>          
        <entry key="JetspeedSerializerFactory">
          <ref bean="org.apache.jetspeed.serializer.JetspeedSerializerFactory"/>
        </entry>
      </map>
    </constructor-arg>
  </bean>
</beans>

ポートレット内での呼び出し方法は、PortletContext から取得します。 たとえば、PageManager は以下のように取得します。

PageManager pageManager = (PageManager) getPortletContext()
    .getAttribute(CommonPortletServices.CPS_PAGE_MANAGER_COMPONENT);