Author: chris.laprun(a)jboss.com
Date: 2010-11-18 09:48:39 -0500 (Thu, 18 Nov 2010)
New Revision: 5162
Modified:
portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/state/consumer/JCRConsumerRegistry.java
Log:
- GTNWSRP-158, GTNWSRP-161, GTNWSRP-163: Synchronize update of the ProducerInfo since it
can be called concurrently when portlet invocations trigger a ProducerInfo refresh.
Modified:
portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/state/consumer/JCRConsumerRegistry.java
===================================================================
---
portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/state/consumer/JCRConsumerRegistry.java 2010-11-18
14:45:07 UTC (rev 5161)
+++
portal/trunk/component/wsrp/src/main/java/org/gatein/portal/wsrp/state/consumer/JCRConsumerRegistry.java 2010-11-18
14:48:39 UTC (rev 5162)
@@ -68,10 +68,11 @@
@Override
protected void save(ProducerInfo info, String messageOnError)
{
- ChromatticSession session = persister.getSession();
try
{
+ ChromatticSession session = persister.getSession();
+
ProducerInfosMapping pims = getProducerInfosMapping(session);
ProducerInfoMapping pim = pims.createProducerInfo(info.getId());
String key = session.persist(pims, pim, info.getId());
@@ -103,18 +104,23 @@
+ "' hasn't been persisted and thus cannot be updated.");
}
- ChromatticSession session = persister.getSession();
- ProducerInfoMapping pim = session.findById(ProducerInfoMapping.class, key);
- if (pim == null)
+ String oldId;
+ String newId;
+ synchronized (this)
{
- throw new IllegalArgumentException("Couldn't find ProducerInfoMapping
associated with key " + key);
+ ChromatticSession session = persister.getSession();
+ ProducerInfoMapping pim = session.findById(ProducerInfoMapping.class, key);
+ if (pim == null)
+ {
+ throw new IllegalArgumentException("Couldn't find
ProducerInfoMapping associated with key " + key);
+ }
+ oldId = pim.getId();
+ newId = producerInfo.getId();
+ pim.initFrom(producerInfo);
+
+ persister.closeSession(true);
}
- String oldId = pim.getId();
- String newId = producerInfo.getId();
- pim.initFrom(producerInfo);
- persister.closeSession(true);
-
// if the consumer's id has changed, return the old one so that state can be
updated
return (oldId.equals(newId)) ? null : oldId;
}
Show replies by date