Author: chris.laprun(a)jboss.com
Date: 2012-03-28 11:35:22 -0400 (Wed, 28 Mar 2012)
New Revision: 8661
Modified:
components/wsrp/trunk/producer/src/main/java/org/gatein/registration/impl/RegistrationManagerImpl.java
Log:
Bug 807626 / GTNWSRP-283 - Producer registration error when producer is set to not use
registrations: added a workaround (and fix) in case we have improper persisted state.
Modified:
components/wsrp/trunk/producer/src/main/java/org/gatein/registration/impl/RegistrationManagerImpl.java
===================================================================
---
components/wsrp/trunk/producer/src/main/java/org/gatein/registration/impl/RegistrationManagerImpl.java 2012-03-28
13:14:33 UTC (rev 8660)
+++
components/wsrp/trunk/producer/src/main/java/org/gatein/registration/impl/RegistrationManagerImpl.java 2012-03-28
15:35:22 UTC (rev 8661)
@@ -146,12 +146,17 @@
RegistrationSPI registration =
persistenceManager.addRegistrationFor((ConsumerSPI)consumer, registrationProperties);
// let the policy decide what the handle should be
- String handle =
policy.createRegistrationHandleFor(registration.getPersistentKey());
- registration.setRegistrationHandle(handle);
+ createAndSetRegistrationHandle(registration);
return registration;
}
+ private void createAndSetRegistrationHandle(RegistrationSPI registration)
+ {
+ String handle =
policy.createRegistrationHandleFor(registration.getPersistentKey());
+ registration.setRegistrationHandle(handle);
+ }
+
public Consumer createConsumer(String name) throws RegistrationException,
InvalidConsumerDataException
{
// check with policy if we allow the consumer
@@ -288,8 +293,21 @@
getPersistenceManager().saveChangesTo(registration);
return registration;
}
- //The unregistered consumer should only ever have one registration, return that
- return unregConsumer.getRegistrations().iterator().next();
+ else
+ {
+ //The unregistered consumer should only ever have one registration, return that
+ final Registration registration =
unregConsumer.getRegistrations().iterator().next();
+
+ // but first check that we don't have an improper persisted state due to
GTNWSRP-283
+ if (registration.getRegistrationHandle() == null || RegistrationStatus.PENDING
== registration.getStatus())
+ {
+ // if we have improper persisted state, correct it
+ createAndSetRegistrationHandle((RegistrationSPI)registration);
+ registration.setStatus(RegistrationStatus.VALID);
+ getPersistenceManager().saveChangesTo(registration);
+ }
+ return registration;
+ }
}
public void removeRegistration(String registrationHandle) throws
RegistrationException, NoSuchRegistrationException