Child pages
  • News
Skip to end of metadata
Go to start of metadata

Grouper News

This document contains changes, additions, etc. for Grouper Releases through Grouper v1.2.

 Detail for releases beginning with Grouper v1.2.1 can be found in JIRA.



Release Date

Grouper v1.2.0


  • UI NEW: Sorted lists of groups, stems and subjects when browsing or searching.
  • UI NEW: Advanced stem search allows finer control of searching.
  • UI NEW: Import and export of membership lists from / to simple delimited text files, i.e., comma or tab separated.
  • UI CHANGE: Possible to configure default attributes to use for displaying groups, stems and subjects (configured by source.)
  • UI CHANGE: Advanced groups search now includes ability to search by group type.
  • UI CHANGE: Support display of multi-values in subject summary view. This ought to work - but so far we have not had any to play with...
  • UI CHANGE: HTML forms now use the POST method.
  • API NEW: added GrouperQuery support for selecting groups by their Type.
  • API NEW: Operational attributes (createTime, creator) are now maintained for Memberships as they have been for Groups and Stems, in preparation for future support of aging of Memberships.
  • API NEW: Stems can be renamed.
  • API NEW: A prototype extension framework to ease integration of code external to the core API by defining a common build process and means of referring to the Grouper installation.
  • API NEW: Updated Subject API from v0.2.1 to v0.3.0rc1-cvs to take advantage of security and performance improvements. Note that existing JDBCSourceAdapter configuration must change somewhat.
  • API NEW: An experimental DAO layer has been introduced to separate business logic from persistence logic.
  • API NEW: The default privilege caching TTL has been changed.
  • API NEW: GrouperShell updated to v0.1.1.
  • API NEW: Example code to bootstrap a wheel group ("ant eg.bootstrap").
  • API BUGFIX: Operational attributes (createTime, creator) of groups whose memberships were indirectly modified are now updated.
  • API BUGFIX: The build process now honors any pre-existing CLASSPATH.
  • API BUGFIX: Added "membership_uuid_idx" index to "grouper_memberships" table.
  • API BUGFIX: Updated "conf/ehcache.xml" to no longer overflow to disk by default.
  • API BUGFIX: Fixed two severe membership calculation bugs (jira#1, jira#2).
  • API BUGFIX: Fixed bugs where imported Groups and Stems were not assigned UUIDs.
  • API BUGFIX: Fixed some XML escaping issues.
  • API BUGFIX: API BUGFIX:"ant test" now has a proper dependency chain and can be called without having previously initialized the database.
  • API BUGFIX: Added indices "grouper_groups.parent_stem" and "grouper_stems.parent_stem" to address performance issues.
  • API CAVEAT: The native relational schema underlying Grouper v1.2.0 has been changed since v1.1.


Grouper v1.1


  • ADDED: Additional GrouperQuery filters, especially to support provisioning applications.
  • IMPROVED: Configurable Privilege and Subject caching regimens.
  • IMPROVED: UI support for removing many members from a group.
  • ADDED: Support for XML Import/Export & custom group types & fields to the GrouperShell command line shell.
  • IMPROVED: Query performance through caching.


Grouper v1.0


  • BUGFIX: Naming privileges not properly exported to XML.
  • BUGFIX: Improper calculation of forward effective memberships to delete.
  • BUGFIX: Improper setting of parent membership in select effective memberships.
  • BUGFIX: Improper calculation of select child memberships to delete when deleting an immediate memberships.
  • NEW: Added GrouperShell (located in `contrib/gsh`). gsh is a command-line shell that may be used in a batch or interactive manner to interact with and manipulate the Groups Registry.
  • UPDATE: Updated Subject API to version 0.2.1.
  • NEW: Basic integration of Gary Brown's XML export and import code.
  • BUGFIX: Fixed another Hibernate lazy collection initiialization error that was brought to light by work on cdg.
  • BUGFIX: Improper calculation of Membership UUIDs when deleting memberships.
  • BUGFIX: `Group.delete()` did not remove composites.
  • BUGFIX: `Membership.getViaGroup()` does not handle composites
  • NEW: Added CompositeFinder
  • NEW: Added `CompositeFinder.findAsFactor()`
  • NEW: Added `CompositeFinder.findAsOwner()`
  • NEW: Added `Composite.getLeftGroup()`
  • NEW: Added `Composite.getOwnerGroup()`
  • NEW: Added `Composite.getRightGroup()`
  • NEW: Added `Composite.getType()`
  • NEW: Added `MembershipFinder.findCompositeMembership(GrouperSession, Group, Subject)`
  • NEW: Added `Group.getCompositeMembers()`
  • NEW: Added `Group.getCompositeMemberships()`
  • NEW: Added `Group.getRemovableTypes()` that will return all group types that can be removed by the current subject.
  • UPDATE: `Group.getTypes()` will not return internal group types.
  • NEW: Added `GroupType.delete(Session)`
  • BUGFIX: The Member returned by `GrouperSession.getMembers()` would not have a GrouperSession associated with it.
  • NEW: Added `Member.canCreate(Subject)`.
  • NEW: Added `Member.canStem(Subject)`.
  • NEW: Added `Member.canAdmin(Subject)`.
  • NEW: Added `Member.canOptin(Subject)`.
  • NEW: Added `Member.canOptout(Subject)`.
  • NEW: Added `Member.canRead(Subject)`.
  • NEW: Added `Member.canUpdate(Subject)`.
  • NEW: Added `Member.canView(Subject)`.
  • NEW: Error Log
  • NEW: Debug Log
  • NEW: Added support for composite memberships (complements, intersections, unions) to groups.
  • NEW: Added `Group.canReadField(Field)`.
  • NEW: Added `Group.canReadField(Subject, Field)`.
  • NEW: Added `Group.canWriteField(Field)`.
  • NEW: Added `Group.canWriteField(Subject, Field)`.
  • UPDATE: Hibernate configuration moved to `conf/`.
  • NEW: Added HibernateSubject for adding I2MI Subjects to the JDBC Source Adapter table within the Groups Registry.
  • BUGFIX: Several indices had gone missing in the Hibernate mapping files as a result of various configuration changes over the past months.
  • NEW: With an eye towards hopefully making migrations easier in the future, we are now storing the schema version number in the database.
  • NEW: StemDisplayExtensionFilter.
  • NEW: StemDisplayNameFilter.
  • NEW: StemExtensionFilter
  • NEW: StemNameFilter
  • UPDATE: Renamed StemNameFilter to StemNameAnyFilter
  • NEW: `Stem.delete()` allows empty stems to be deleted.
  • UPDATE: Replaced `GroupType.addField()` with `GroupType.addAttribute()` and `GroupType.addList()`.
  • NEW: `SubjectFinder.findAll(query, source)` method.
  • NEW: `SubjectFinder.findByIdentifier(id, type, source)` method.
  • NEW: `SubjectFinder.findById(id, type, source)` method.
  • NEW: `SubjectFinder.getSource(id)` method.
  • NEW: `SubjectFinder.getSources(type)` method.
  • NEW: `SubjectFinder.getSources()` method.
  • NEW: `GroupTypeFinder.findAllAssignable()` returns all assignable group types.
  • NEW: Group and Stem extend from common parent: Owner.
  • UPDATE: Restore `GroupTypeFinder.findAll()` - return all public group types
  • BUGFIX: Several tests that were *supposed* to be testing against the epoch were not. This was selectively causing errors while running the test harness, primarily on Windows.
  • UPDDATE: Remove (outdated) schema files.
  • BUGFIX: Do not allow lists to be added to themselves.
  • BUGFIX: Moved GrouperSourceAdapter configuration back into `sources.xml` to fix integration with Signet.
  • NEW: Delete custom fields from custom group types with the API
  • NEW: Add custom fields (attributes and lists) to custom group types with the API
  • NEW: Add custom group types with the API
  • NEW: Cache all Hibernate queries with ehcache
  • NEW: Converted all Hibernate `find()` queries into `createQuery()` queries
  • BUGFIX: Clarify expected error output in test results
  • BUGFIX: Eliminate Hibernate exception when renaming stems with multiple child groups
  • BUGFIX: Split jdbc source initialization into separate ant task
  • BUGFIX: I2MI Subject interface log4j configuration


Grouper v0.9

    Changes:* NEW: New public API.* NEW: New query API. This includes the ability for sites to create their own custom query filters for use within the query API.

  • NEW: New access and naming adapter APIs and interfaces.
  • NEW: "all" subject that can be assigned memberships and granted privileges that maps to all subjects that are identifiable by Grouper's Subject API configuration.
  • NEW: Event logging
  • NEW: Configuration options for controlling what privileges, if any, are granted to the "all" subject whenever a new group or stem is created. By default, READ and VIEW are granted to "all" upon group creation and no privileges are granted to "all" upon stem creation.
  • NEW: Subject IDs associated with Member objects within the Groups Registry can now be changed with the Member.setSubjectId() method.
  • NEW: Internal source adapter for resolving the "root" (GrouperSystem) and "all" (GrouperAll) subjects. No configuration is necessary to use this adapter within Grouper.
  • NEW: Experimental wheel-group support. This is disabled by default. If enabled, all members of the group are treated as root-like subjects with all access and naming privileges.
  • UPDATE: New internals.
  • UPDATE: ehcache-based caches for access and naming privilege resolution.
  • UPDATE: Grouper source adapter no longer needs to be configured within conf/sources.xml.
  • UPDATE: License changed to Apache License, Version 2.0


Grouper v0.6


  • NEW: VIEW Access privilege (#339)
  • NEW: READ Access privilege (#338)
  • NEW: OPTIN Access privilege (#343)
  • NEW: OPTOUT Access privilege (#344)
  • NEW: GrouperGroup.getDisplayExtension() method
  • NEW: GrouperGroup.getDisplayName() method
  • NEW: GrouperGroup.getExtension() method
  • NEW: GrouperGroup.getMembers() method
  • NEW: GrouperGroup.getName() method
  • NEW: GrouperGroup.getStem() method
  • NEW: GrouperMember.getMember() method
  • NEW: GrouperMember.source() method
  • NEW: GrouperQuery.base() filter method
  • NEW: filter method
  • NEW: scoped filter method (#403)
  • NEW: GrouperQuery.groupAttr() filter method
  • NEW: GrouperQuery.groupAttr() scoped filter method (#403)
  • NEW: GrouperQuery.stem() filter method
  • NEW: GrouperQuery.stem() scoped filter method (#403)
  • NEW: GrouperQuery.stemAttr() filter method
  • NEW: GrouperQuery.stemAttr() scoped filter method (#403)
  • NEW: GrouperQuery.getGroups() method
  • NEW: GrouperQuery.getListValues() method
  • NEW: GrouperQuery.getMembers() method
  • NEW: GrouperQuery.getStems() method
  • NEW: GrouperStem.create(session, extension) method
  • NEW: GrouperStem.getDisplayExtension() method
  • NEW: GrouperStem.getDisplayName() method
  • NEW: GrouperStem.getExtension() method
  • NEW: GrouperStem.getMembers() method
  • NEW: GrouperStem.getName() method
  • NEW: GrouperStem.getRootStems() method
  • NEW: GrouperStem.getStem() method
  • NEW: GrouperStem.load(session, extension) method
  • NEW: PostgreSQL now a supported backend (#169) (Simon McLeish, London School of Economics)
  • NEW: displayName is now automatically populated and maintained (#270)
  • NEW: Subject and SubjectAttribute tables
  • UPDATE: Grouper now uses version 0.1 draft 2 of the Subject API specification
  • UPDATED: Reimplemented UPDATE Access privilege (#400)
  • UPDATED: Reimplemented ADMIN Access privilege (#399)
  • UPDATED: Reimplemented CREATE Naming privilege (#401)
  • UPDATED: Reimplemented STEM Naming privilege (#402)
  • UPDATE: Grouper.hasSubjectType() method replaced by SubjectFactory.hasType()
  • UPDATE: Grouper.subjectTypes() method replaced by SubjectFactory.types()
  • UPDATE: GrouperSubject class renamed to SubjectFactory
  • UPDATE: grouper_attribute.groupFieldValue column size increased to 1024
  • UPDATE: grouper_member table now includes a subjectSource column
  • FIX: Root stems could be created with an extension containing the hierarchy delimiter.
  • FIX: Stems and groups could have their extension and isplayExtension set to include the hierarchy delimiter after being created.
  • FIX: whoHas() returns inaccurate results
  • FIX: Error granting privileges to and revoking privileges from self (#426)
  • FIX: displayName of parent stems not consulted when creating new groups and stems.
  • FIX: VIEW, not READ, is needed to access a group or stem GUID. (#411)
  • FIX: The subject that created a session did not have a properly initialized member object (#413)
  • FIX: Privilege and effective membership pollution bug (#405)
  • FIX: Default privilege implementations would attempt to revoke effective list values under select circumstances which would cause an exception to be thrown. (#361)
  • FIX: hasMember() would return incorrect results when a member was both immediate and effective (#360)
  • REMOVED: Stems can no longer be members or subjects
  • REMOVED: GrouperQuery.query() method
  • REMOVED: Grouper.subjectType() method
  • REMOVED: grouper_subjectType table
  • CONTRIB: cvs2subject now uses Grouper's conf/ for its JDBC configuration information.
  • CONTRIB: csv2subject now supports additional input formats


Grouper v0.5.6


  • FIXED: Effective memberships for non-"members" lists (e.g. access and naming privileges) were being calculated incorrectly (#350)
  • FIXED: Non-root subjects could not create stems or groups (#353)
  • FIXED: STEM, not ADMIN, needed to modify namespace attributes (#352)
  • FIXED: Added NullGrouperAttribute class (which extends GrouperAttribute) to handle group attributes that either do not have values or have had their values deleted. (#356)
  • FIXED: GrouperMember.load(session, subject) replaces GrouperMember.load(subject) (#348)
  • FIXED: GrouperGroup.loadByID() now returns properly casted GrouperGroup objects (#349)
  • FIXED: GrouperStem.loadByID() now returns properly casted GrouperStem objects (#349)


Grouper v0.5.5


  • UPDATED: Hibernate internals completely rewritten to improve session and transaction handling
  • UPDATED: New and more thoroughly tested implementation of the memberOf algorithm. In addition, we are now tracking the entire via chain for effective memberships.
  • NEW: Improved Oracle compatibility and support
  • NEW: Created logical distinction between groups (GrouperGroup) and namespaces (GrouperStem)
  • NEW: GrouperGroup.hasMember() method for verifying whether a member belongs to a group (#328)
  • NEW: GrouperMember.isMember() method for verifying whether a member belongs to a group (#328)
  • NEW: GrouperStem.stems() method to retrieve immediate child namespaces within a namespace
  • NEW: GrouperStem.groups() method to retrieve immediate child groups within a namespace
  • NEW: GrouperSession objects now serializable (#296)
  • NEW: More detailed reporting (via exceptions) of errors caused by various runtime error conditions
  • NEW: Now using Commons DBCP by default for connection pooling
  • NEW: Now using Hibernate named queries defined as defined in conf/Grouper.hbm.xml
  • NEW: Use Ant's SQL task to to create, initialize and reset HSQLDB database (#287)
  • FIXED: Removed calls to system.exit() (#179) (David Langenberg, The University Of Chicago)
  • FIXED: sessionID generation bug (#278)
  • FIXED: Effective membership bug with circular group memberships (#286)
  • NEW: GrouperField objects now have public instance methods for getting information about the field
  • FIXED: Effective membership now working with lists other than "members" as well as with the default Access and Naming privilege interfaces
  • NEW: commons-dbcp 1.2.1 .jar file
  • NEW: commons-pool 1.2 .jar file
  • NEW: Hibernate's ODMG interface .jar
  • UPDATED: Hibernate .jar from 2.1.7c to 2.1.8
  • UPDATED: HSQLDB .jar from 1.7.1 to
  • UPDATED: csv2group to handle comments in input files and the -c and -q options
  • Databases created with Grouper 0.5 will not work with this release.\
  • Runtime access to Access and Naming privilege implementations moved from Grouper to GrouperSession.
  • REMOVED: GrouperSession argument requirement for most instance method calls.
        Known Bugs:
  • Significant via chain duplication as reuse between list values is not working.
  • Via chains are not deleted when they are no longer in use.
  • Logging is not especially effective or useful.


Grouper v0.5


  • "Base" and "Naming" group types* Immediate Memberships
  • Effective Memberships
  • Search: By immediate and effective membership
  • Search: By group type
  • Search: By group create time
  • Search: By group modify time
  • Access privilege interface
  • Naming privilege interface
  • An implementation of the access privilege interface that uses groups to manage privileges
  • An implementation of the naming privilege interface that uses groups to manage privileges
  • ADMIN and UPDATE access privileges
  • CREATE and STEM naming privileges
  • A partial implementation of the I2MI Subject interface for locally-defined people subjects
  • A partial implementation of the I2MI Subject interface for groups as subjects
  • Basic Event Logging
  • Contributed: I2MI Subject Loader
  • Contributed: Group Loader
  • Contributed: Member Loader
  • Contributed: Query Program
    Known Bugs:
  • Grouper does not fail gracefully or even necessarily informatively
  • Insufficient data validation within code
  • Not all database updates are atomic transactions (#233) (#248)
  • Loading groups by groupID does not always fail cleanly.
  • GrouperQuery objects do not properly reset their state (#255)
  • Modify attributes may be be incorrect (#247)
  • Session Handling is dubious at best (#173)
  • Insufficient documentation
  • Insufficient test coverage
  • Slow


  • No labels