Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

The default personDirectoryContext.xml includes JDBC beans to retrieve attributes for local uPortal usres users such as fragment owners.  Below is a real example of merging in additional attributes via the PersonDb DataSource.  This is essentially the configuration used in production at Yale.  Note that this configuration uses the support for mapping a column to multiple uPortal attribute names.

Since we want to merge attributes from our JDBC source with other attributes we start by adding a reference to our new bean (myunivCachingPersonDbJdbcAttributeSource) to the merging DAOs section.

Code Block
langxml
    <!-- ********** Data source attribute DAOs **********-->
    <!--
     | Merging DAOs that define the order that the data providing DAOs are called, results are cached by the outer
     | caching DAO
     +-->
    <bean id="cachingMergedPersonAttributeDao" class="org.jasig.services.persondir.support.CachingPersonAttributeDaoImpl">
        <property name="usernameAttributeProvider" ref="usernameAttributeProvider" />
        <property name="cacheNullResults" value="true" />
        <property name="userInfoCache">
            <bean class="org.jasig.portal.utils.cache.MapCacheFactoryBean">
                <property name="cacheFactory" ref="cacheFactory" />
                <property name="cacheName" value="org.jasig.services.persondir.USER_INFO.merged" />
            </bean>
        </property>
        <property name="cacheKeyGenerator" ref="userAttributeCacheKeyGenerator" />
        <property name="cachedPersonAttributesDao" >
            <bean class="org.jasig.services.persondir.support.MergingPersonAttributeDaoImpl">
                <property name="usernameAttributeProvider" ref="usernameAttributeProvider" />
                <property name="merger">
                    <bean class="org.jasig.services.persondir.support.merger.ReplacingAttributeAdder" />
                </property>
                <property name="personAttributeDaos">
                    <list>
                        <ref bean="cachinguPortalJdbcAttributeSource"/>
                        <ref bean="cachinguPortalJdbcUserSource"/>
                        <ref bean="myunivCachingPersonDbJdbcAttributeSource"/><!-- **** ADDED HERE **** -->
                    </list>
                </property>
            </bean>
        </property>
    </bean>

Then we create the new DAO bean with a SingleRowJdbcPersonAttributeDao going against PersonDB.  PersonDB can be defined in rdbm.properties or more likely via JNDI.  For information on creating JNDI datasources for uPortal see Using JNDI managed DataSources.

Code Block
xml
xml

<bean id="myunivCachingPersonDbJdbcAttributeSource">
        <property name="usernameAttributeProvider" ref="usernameAttributeProvider" />
        <property name="cacheNullResults" value="true" />
        <property name="userInfoCache">
            <bean>
                <property name="cacheFactory" ref="cacheFactory" />
                <property name="cacheName"
                    value="org.jasig.services.persondir.USER_INFO.myuniv_person_dir" />
            </bean>
        </property>
        <property name="cacheKeyGenerator" ref="userAttributeCacheKeyGenerator" />
        <property name="cachedPersonAttributesDao">
            <bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">   >
                <constructor-arg index="0" ref="PersonDB" />
                <constructor-arg>
                    <value>
                        SELECT DISTINCT first_name||' '||Last_name first_last, role,
                        contentGroup, person_type, first_name, last_name, middle_name,
                        email_alias, college, class_year, student_status, alias,
                        work_phone, netid
                        FROM person_directory_view where {0}
                    </value>
                </constructor-arg>
                <property name="usernameAttributeProvider" ref="usernameAttributeProvider" />
                <!-- Map the table fields to P3P attribute names -->
                <property name="queryAttributeMapping">
                    <map>
                        <entry key="displayName" value="FIRST_LAST" />
                        <entry key="sn" value="LAST_NAME" />
                        <entry key="contentGroup" value="CONTENT_GROUP" />
                        <entry key="mail" value="EMAIL_ALIAS" />
                        <entry key="givenName" value="FIRST_NAME" />
                        <entry key="alias" value="ALIAS" />
                        <entry key="personType" value="PERSON_TYPE" />
                        <entry key="College" value="COLLEGE" />
                        <entry key="ClassYear" value="CLASS_YEAR" />
                        <entry key="StudentStatus" value="STUDENT_STATUS" />
                        <entry key="username" value="NETID" />
                        <entry key="WorkPhone" value="WORK_PHONE" />
                    </map>
                </property>
                <!-- Map the table fields to P3P attribute names -->
                <property name="resultAttributeMapping">
                    <map>
                        <entry key="FIRST_LAST">
                            <value>displayName</value>
                        </entry>
                        <entry key="LAST_NAME">
                            <set>
                                <value>sn</value>
                                <value>user.name.family</value>
                            </set>
                        </entry>
                        <entry key="ROLE">
                            <value>uPortalAffiliation</value>
                        </entry>
                        <entry key="CONTENTGROUP">
                            <set>
                                <value>contentGroup</value>
                            </set>
                        </entry>
                        <entry key="EMAIL_ALIAS">
                            <set>
                                <value>mail</value>
                                <value>user.home-info.online.email</value>
                            </set>
                        </entry>
                        <entry key="FIRST_NAME">
                            <value>givenName</value>
                        </entry>
                        <entry key="ALIAS">
                            <value>alias</value>
                        </entry>
                        <entry key="PERSON_TYPE">
                            <value>personType</value>
                        </entry>
                        <entry key="COLLEGE">
                            <value>College</value>
                        </entry>
                        <entry key="CLASS_YEAR">
                            <value>ClassYear</value>
                        </entry>
                        <entry key="STUDENT_STATUS">
                            <value>StudentStatus</value>
                        </entry>
                        <entry key="NETID">
                            <set>
                                <value>uid</value>
                                <value>netid</value>
                                <value>username</value>
                                <value>eduPersonPrincipalName</value>
                                <value>user.login.id</value>
                            </set>
                        </entry>
                        <entry key="WORK_PHONE">
                            <value>WorkPhone</value>
                        </entry>
                    </map>
                </property>
            </bean>
        </property>
    </bean>
Info
iconfalse

Additional References