Portlet Preferences are not stored on a user by user basis.
Looking in the database, it looks as though the preferences are being associated with the fragment ID for the portlet of the psml page.
I am pretty sure that the intention of the portlet spec is to enable the storing of preferences on a user by user basis. But apparently this is not possible in jetspeed unless the user creates a new portal page?
The data I see in the DB seems to support this:
I login as user A, and I have a portlet preference for one of my report portlets called reportTimeZone. By default is set to US/Eastern.
User A edits his portlet preferences and sets the reportTimeZone to be US/Pacific.
Looking in the prefs_property_value table, can see the newly created value. It has node ID 2875 and value US/Pacific. The property name is 0, I assume that this is the index in the array if it were multi-valued.
I then look in the prefs_node table for a row with node_id=2875. The row is present and the full path of the node is:
Note that reports-3 is the fragment ID for the portlet fragment in the psml page.
However, instead of 'no-principal', I would have expected to see the user name of user A.
So now I log in as user B and go to edit my portlet preferences and the value of the reportTimeZone preference is set to US/Pacific, not the default US/Eastern I would have expected.
So I then, as user B, set the reportTimeZone to US/Central and update my preferences.
Sure enough, it overwrites the value in the prefs_property_value table to US/Central.
So, in order to get the behaviour I need, I would have to generate portal pages for each user and vary the id of the portlet fragment? This does not seem like a good solution to me.
Further, in my environment, users are not permitted to create their own pages and customize them. I am simply providing a form in the doEdit method of my portlet to allow users to customize the behaviour of the portlet.
So, in my environment, imagine I had a weather portlet on a portal page. If someone sets their preferred city to be Bangkok, then all users will get weather for Bangkok!
This does not seem right to me...