The current implementation of the PortletFactory maintains internal caches for lookup of PortletApplication and Portlet definition references (e.g. classloader and validator).
This poses a problem on clustered environments when a live redeployment is performed across a cluster setup.
Such a redeployment might cause reregistration of a PortletApplication causing the internal oid values to change.
On the node where this deployment is performed, this is not causing any problems as the application will first also reregister with the PortletFactory, but other nodes not yet updated can become out of sync temporarily.
In that case, the PortletFactory on those other nodes can throw an UnavailableException as their internal oids won't match up anymore.
The solution is to not use the oid values anymore, but only use cache keys using the public unique name values of both the PortletApplication and the Portlet as those should remain stable,
unless a portlet is actually dropped by a redeployment, but then that Portlet logically truly should be marked as Unavailable anyway.
BTW: for Jetspeed 2.2, we're going to remove the public access to the internal oids as much as possible (if possible: 100%) to prevent potentially similar problems in other areas as well.