portals-jetspeed-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Sean Taylor <d.tay...@onehippo.com>
Subject notes on JS2-964
Date Sun, 21 Mar 2010 01:14:47 GMT
Here are my notes on reviewing JS2-964, a contribution from Joachim
Muller just reviewed and committed.
I have run the new unit test on

* MySQL 5.5 and 5.1
* Derby (having troubles with the build in general there... still working on it)
If anyone is using other databases during tests, like Postgresql, the
test will automatically run, Im sure you will let me know if something
blows up :)

--- REVIEW NOTES ---

-------
API
------
UserManager: new API:

 /**
     * <p>
     * Retrieves a detached and modifiable {@link User} list matching
the corresponding
     * query context. It returns a {@link UserResultList}, containing
     * the actual result list an the total number of results from the query.
     *
     * </p>
     *
     * @param queryContext The (@see JetspeedPrincipalQueryContext)
for this query.
     * @return
     * @throws SecurityException
     */
    UserResultList getUsersExtended(JetspeedPrincipalQueryContext
queryContext) throws SecurityException;

New class in Jetspeed API, a principal query context, to put and get
casted types for query parameters:

public class JetspeedPrincipalQueryContext extends HashMap<String, Object> {


Jetspeed Principal Manager, new API:


    /**
     * Retrieve all principals that match the queryContext.
     * It returns a {@link JetspeedPrincipalResultList}, containing
     * the actual result list an the total number of results from the query.
     *
     * The returned principals are detached.
     *
     * @param queryContext The (@see JetspeedPrincipalQueryContext)
for this query.
     * @return
     */
    public JetspeedPrincipalResultList
getPrincipals(JetspeedPrincipalQueryContext queryContext);

New class, JetspeedPrincipalResultList:

 A container for principals that have been retrieved from storage with ranged
queries. Additional to the principals itself it also contains the total size
of the query result.

New class, UserResultList extending JetspeedPrincipalResultList:

 Wrapper for a {@link JetspeedPrincipalResultList}. Takes care of
casting to a {@link User}

public class UserResultList extends JetspeedPrincipalResultList {

----

New Assembly:

security-spi.xml, new JetspeedPrincipalLookManagerFactory bean
definition, with two impls, default and SQL:

  <bean id="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLookupManagerFactory"
class="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLookupManagerFactory">
    <meta key="j2:cat" value="default or security" />
    <property name="mappings">
     <map>
       <entry key="default"><ref
bean="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLookupManagerDefault"/></entry>
       <entry key="mysql"><ref
bean="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLookupManagerMySql"/></entry>
     </map>
   </property>
  </bean>

  <bean id="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLookupManagerDefault"
class="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLookupManagerDefault"
/>
  <bean id="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLookupManagerMySql"
class="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLookupManagerMySql"
/>

Additional constructor arg (ref bean) weaved into
JetspeedSecurityPersisteneManager:

   <bean id="org.apache.jetspeed.security.spi.impl.JetspeedSecurityPersistenceManager"
     class="org.apache.jetspeed.security.spi.impl.JetspeedSecurityPersistenceManager"
init-method="init">
...
    <constructor-arg index="1">
      <ref bean="org.apache.jetspeed.security.spi.impl.JetspeedPrincipalLookupManagerFactory"/>
    </constructor-arg>
   </bean>

-----------------------
Implementation
-----------------------

* UserManagerImpl.java implements getUsersExtended

* BaseJetspeedPrincipalManager.java implements
getPrincipals(JetspeedPrincipalQueryContext)

* JetspeedPrincipalLookupManagerMySql.java MySQL-specific impl of
scrollable result sets, special handling for limits on MySQL

extends JetspeedPrincipalLookupManagerAbstract

 Add limit operator if we are on MySql. This is much faster than
 paging via JDBC and also is a work around because the MySQL driver
 retrieves the complete result set. This would result in a very high
 memory consumption with large result sets.

* JetspeedPrincipalLookupManagerAbstract.java, look here for most JDBC
implementation details

 Abstract base class for the principal lookup manager. Defines possible
database specific abstract methods and provides more generic methods to all
database specific principal lookup managers.

* JetspeedPrincipalLookupManagerFactory.java

Factory for getting the database specific principal lookup manager. The
Database platform is determined by the OJB connection repository.
The factory is actually a singleton facade, since it returns always the same
instance of the {@see JetspeedPrincipalLookupManager} once it was determined.

* JetspeedSecurityPersistenceManager.java

implements new method:

JetspeedPrincipalResultList
getPrincipals(JetspeedPrincipalQueryContext queryContext,
JetspeedPrincipalType type)

* JetspeedPrincipalLookupManagerDefault.java

Default implementation of the principal lookup manager. This
implementation uses no database specifics.
Primitive methods provided: scrollToOffset, getPagingSql

* JetspeedPrincipalAccessManager.java

SPI def for new method

getPrincipals(JetspeedPrincipalQueryContext queryContext,
JetspeedPrincipalType type);

Retrieve all principals that match the queryContext.
It returns a {@link JetspeedPrincipalResultList}, containing
the actual result list an the total number of results from the query.
The returned principals are detached.
@param queryContext The (@see JetspeedPrincipalQueryContext) for this query.
@param type The principals type (@see JetspeedPrincipalType).

* JetspeedPrincipalLookupManager.java

new SPI def for Jetspeed Principal Lookup Manager

----------
Tests
----------

TestUserManagerExtLookupManager.java

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org


Mime
View raw message