Author: chris.laprun(a)jboss.com
Date: 2007-09-17 21:20:26 -0400 (Mon, 17 Sep 2007)
New Revision: 8307
Modified:
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/config/ProducerConfigurationTestCase.java
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/framework/support/BehaviorBackedServiceFactory.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistryService.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/EndpointConfigurationInfo.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationFactory.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationImpl.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerRegistrationRequirementsImpl.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/AbstractJNDIServiceFactory.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/CachingServiceFactory.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/PerEndpointSOAPInvokerServiceFactory.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/RemoteSOAPInvokerServiceFactory.java
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/ServiceFactory.java
trunk/wsrp/src/resources/portal-wsrp-sar/conf/producer/config.xml
Log:
- JBPORTAL-1700
+ ConsumerRegistryService should be able to start even if a consumer throws an
Exception.
+ Added ServiceFactory.isFailed method to avoid infinite loop if a consumer is not
available and fails to start.
+ Now uses a default validator for registration properties if none was provided (to
allow for empty registration configurations.
+ RegistrationPolicy is not initialized anymore if registration is not required.
+ Do not initialize RegistrationManager if registration is not required.
+ Updated ProducerConfigurationTestCase.
Modified:
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/config/ProducerConfigurationTestCase.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/config/ProducerConfigurationTestCase.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/config/ProducerConfigurationTestCase.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -102,13 +102,18 @@
Map properties = requirements.getRegistrationProperties();
assertNotNull(properties);
assertTrue(properties.isEmpty());
+ assertNotNull(requirements.getPolicy());
}
public void testMinimalUnmarshalling() throws Exception
{
ProducerConfiguration producerConfiguration =
getProducerConfiguration("minimal.xml");
ProducerRegistrationRequirements requirements =
producerConfiguration.getRegistrationRequirements();
- assertNull(requirements);
+ assertNotNull(requirements);
+ assertFalse(requirements.requiresRegistration());
+ assertFalse(requirements.fullServiceDescriptionRequiresRegistration());
+ assertTrue(requirements.getRegistrationProperties().isEmpty());
+ assertNull(requirements.getPolicy());
}
public void testInvalidMultipleRegistrationConfiguration() throws Exception
Modified:
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/framework/support/BehaviorBackedServiceFactory.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/framework/support/BehaviorBackedServiceFactory.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/test/wsrp/framework/support/BehaviorBackedServiceFactory.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -113,6 +113,11 @@
return true;
}
+ public boolean isFailed()
+ {
+ return false;
+ }
+
public String getServiceDescriptionURL()
{
return SD_URL;
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistryService.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistryService.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/ConsumerRegistryService.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -264,19 +264,20 @@
createConsumerFrom(producerInfo);
- // if the producer is marked as active, activate it fo' real! :)
- if (producerInfo.isActive())
+ try
{
- try
+ // if the producer is marked as active, activate it fo' real! :)
+ if (producerInfo.isActive())
{
activateConsumerWith(producerInfo.getId());
}
- catch (ConsumerException e)
- {
- producerInfo.setActive(false);
- updateProducerInfo(producerInfo);
- }
}
+ catch (Exception e)
+ {
+ producerInfo.setActive(false);
+ updateProducerInfo(producerInfo);
+ }
+
}
}
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/EndpointConfigurationInfo.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/EndpointConfigurationInfo.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/consumer/EndpointConfigurationInfo.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -250,14 +250,21 @@
{
if (!serviceFactory.isAvailable())
{
- try
+ if (!serviceFactory.isFailed())
{
- serviceFactory.start();
- refreshServices();
+ try
+ {
+ serviceFactory.start();
+ refreshServices();
+ }
+ catch (Exception e)
+ {
+ throw new ConsumerException("Couldn't start ServiceFactory",
e);
+ }
}
- catch (Exception e)
+ else
{
- throw new ConsumerException("Couldn't start ServiceFactory",
e);
+ throw new ConsumerException("ServiceFactory has an error condition that
couldn't be recovered from.");
}
}
}
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java 2007-09-18
01:07:30 UTC (rev 8306)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/WSRPProducerImpl.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -271,13 +271,20 @@
super.startService();
producerConfiguration = configurationService.getConfiguration();
ProducerRegistrationRequirements registrationRequirements =
getProducerRegistrationRequirements();
- registrationManager.setPolicy(registrationRequirements.getPolicy());
-
registrationRequirements.addRegistrationPropertyChangeListeners(registrationManager);
+ if (registrationRequirements.requiresRegistration())
+ {
+ registrationManager.setPolicy(registrationRequirements.getPolicy());
+
registrationRequirements.addRegistrationPropertyChangeListeners(registrationManager);
+ }
}
protected void stopService() throws Exception
{
-
getProducerRegistrationRequirements().removeRegistrationPropertyChangeListener(registrationManager);
+ ProducerRegistrationRequirements registrationRequirements =
getProducerRegistrationRequirements();
+ if (registrationRequirements.requiresRegistration())
+ {
+
registrationRequirements.removeRegistrationPropertyChangeListener(registrationManager);
+ }
super.stopService();
}
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationFactory.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationFactory.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/ProducerConfigurationFactory.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -219,11 +219,6 @@
throw new IllegalStateException("Doesn't make sense to define a
property validator without using DefaultRegistrationPolicy!");
}
- if (conf.getRegistrationRequirements() != null)
- {
- throw new IllegalStateException("ProducerConfiguration already has
registration information set!");
- }
-
conf.setRegistrationRequirements(regReq);
}
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationImpl.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationImpl.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerConfigurationImpl.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -39,16 +39,16 @@
public ProducerRegistrationRequirements getRegistrationRequirements()
{
+ if (requirements == null)
+ {
+ requirements = DEFAULT_REGISTRATION_REQUIREMENTS;
+ }
+
return requirements;
}
public void setRegistrationRequirements(ProducerRegistrationRequirements
requirements)
{
- if (requirements == null)
- {
- requirements = DEFAULT_REGISTRATION_REQUIREMENTS;
- }
-
this.requirements = requirements;
}
}
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerRegistrationRequirementsImpl.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerRegistrationRequirementsImpl.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/producer/config/impl/ProducerRegistrationRequirementsImpl.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -23,10 +23,12 @@
package org.jboss.portal.wsrp.producer.config.impl;
+import org.jboss.logging.Logger;
import org.jboss.portal.common.util.ParameterValidation;
import org.jboss.portal.registration.RegistrationPolicy;
import org.jboss.portal.registration.RegistrationPropertyChangeListener;
import org.jboss.portal.registration.policies.DefaultRegistrationPolicy;
+import org.jboss.portal.registration.policies.DefaultRegistrationPropertyValidator;
import org.jboss.portal.registration.policies.RegistrationPropertyValidator;
import org.jboss.portal.wsrp.producer.config.ProducerRegistrationRequirements;
import org.jboss.portal.wsrp.registration.RegistrationPropertyDescription;
@@ -46,6 +48,8 @@
*/
public class ProducerRegistrationRequirementsImpl implements
ProducerRegistrationRequirements
{
+ private final Logger log = Logger.getLogger(getClass());
+
private boolean requiresRegistration;
private boolean fullServiceDescriptionRequiresRegistration;
private transient Set listeners = new HashSet(3);
@@ -56,6 +60,7 @@
/** property name (QName) -> PropertyDescription */
private Map registrationProperties;
public final static String DEFAULT_POLICY_CLASS_NAME =
"org.jboss.portal.registration.policies.DefaultRegistrationPolicy";
+ public final static String DEFAULT_VALIDATOR_CLASS_NAME =
"org.jboss.portal.registration.policies.DefaultRegistrationPropertyValidator";
public ProducerRegistrationRequirementsImpl(boolean requiresMarshalling, boolean
requiresRegistration, boolean fullServiceDescriptionRequiresRegistration)
{
@@ -195,10 +200,11 @@
public RegistrationPolicy getPolicy()
{
- if (policy == null)
+ if (policy == null && requiresRegistration)
{
if (policyClassName != null)
{
+ log.debug("Using registration policy: " + policyClassName);
ClassLoader loader = Thread.currentThread().getContextClassLoader();
try
{
@@ -226,37 +232,42 @@
}
else
{
- if (validatorClassName == null)
- {
- throw new IllegalArgumentException("No RegistrationPolicy was
defined, was thus expecting a registration " +
- "property validator to assign to
DefaultRegistrationPolicy!");
- }
-
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ log.debug("Using default registration policy: " +
DEFAULT_POLICY_CLASS_NAME);
RegistrationPropertyValidator validator;
- try
+ if (validatorClassName != null)
{
- Class validatorClass = loader.loadClass(validatorClassName);
- Class expectedInterface =
loader.loadClass("org.jboss.portal.registration.policies.RegistrationPropertyValidator");
- if (!expectedInterface.isAssignableFrom(validatorClass))
+ log.debug("Using registration property validator: " +
validatorClassName);
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ try
{
- throw new IllegalArgumentException("Validator class does not
implement RegistrationPropertyValidator!");
+ Class validatorClass = loader.loadClass(validatorClassName);
+ Class expectedInterface =
loader.loadClass("org.jboss.portal.registration.policies.RegistrationPropertyValidator");
+ if (!expectedInterface.isAssignableFrom(validatorClass))
+ {
+ throw new IllegalArgumentException("Validator class does not
implement RegistrationPropertyValidator!");
+ }
+ validator =
(RegistrationPropertyValidator)validatorClass.newInstance();
}
- validator = (RegistrationPropertyValidator)validatorClass.newInstance();
+ catch (ClassNotFoundException e)
+ {
+ IllegalArgumentException iae = new
IllegalArgumentException("Couldn't find validator class " +
validatorClassName + ".");
+ iae.initCause(e);
+ throw iae;
+ }
+ catch (Exception e)
+ {
+ IllegalArgumentException iae = new
IllegalArgumentException("Couldn't instantiate validator class.");
+ iae.initCause(e);
+ throw iae;
+ }
}
- catch (ClassNotFoundException e)
+ else
{
- IllegalArgumentException iae = new
IllegalArgumentException("Couldn't find validator class " +
validatorClassName + ".");
- iae.initCause(e);
- throw iae;
+ log.debug("Using default registration property validator: " +
DEFAULT_VALIDATOR_CLASS_NAME);
+ validator = new DefaultRegistrationPropertyValidator();
}
- catch (Exception e)
- {
- IllegalArgumentException iae = new
IllegalArgumentException("Couldn't instantiate validator class.");
- iae.initCause(e);
- throw iae;
- }
+
policy = new DefaultRegistrationPolicy();
((DefaultRegistrationPolicy)policy).setValidator(validator);
}
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/AbstractJNDIServiceFactory.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/AbstractJNDIServiceFactory.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/AbstractJNDIServiceFactory.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -52,6 +52,9 @@
/** Default mapping between WSRP port type class and associated JNDI name */
private static Properties DEFAULT_FACTORY_MAPPING;
+ /** Wheter or not this ServiceFactory has an error condition */
+ protected boolean failed = false;
+
static
{
// fix-me: this is hardcoded from values from
portal-wsrp-client.jar/META-INF/jboss-client.xml... NOT GOOD!
@@ -154,6 +157,11 @@
}
}
+ public boolean isFailed()
+ {
+ return failed;
+ }
+
public Properties getPortJNDIMapping()
{
return portJNDIMapping;
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/services/CachingServiceFactory.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/CachingServiceFactory.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/CachingServiceFactory.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -83,6 +83,11 @@
return delegate != null && delegate.isAvailable();
}
+ public boolean isFailed()
+ {
+ return delegate == null || delegate.isFailed();
+ }
+
public String getServiceDescriptionURL()
{
if (delegate != null)
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/PerEndpointSOAPInvokerServiceFactory.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/PerEndpointSOAPInvokerServiceFactory.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/PerEndpointSOAPInvokerServiceFactory.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -133,6 +133,7 @@
{
if (isMandatoryInterface)
{
+ failed = true;
throw new IllegalStateException("Mandatory interface URLs were not
properly initialized: no proper service URL for "
+ serviceClass.getName());
}
@@ -150,6 +151,6 @@
public boolean isAvailable()
{
- return !EndpointConfigurationInfo.UNSET.equals(serviceDescriptionURL) &&
!EndpointConfigurationInfo.UNSET.equals(markupURL);
+ return !failed &&
!EndpointConfigurationInfo.UNSET.equals(serviceDescriptionURL) &&
!EndpointConfigurationInfo.UNSET.equals(markupURL);
}
}
Modified:
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/RemoteSOAPInvokerServiceFactory.java
===================================================================
---
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/RemoteSOAPInvokerServiceFactory.java 2007-09-18
01:07:30 UTC (rev 8306)
+++
trunk/wsrp/src/main/org/jboss/portal/wsrp/services/RemoteSOAPInvokerServiceFactory.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -24,9 +24,9 @@
package org.jboss.portal.wsrp.services;
import org.jboss.logging.Logger;
+import org.jboss.portal.common.io.IOTools;
+import org.jboss.portal.common.net.URLStreamOpeningThread;
import org.jboss.portal.common.util.ParameterValidation;
-import org.jboss.portal.common.net.URLStreamOpeningThread;
-import org.jboss.portal.common.io.IOTools;
import org.xml.sax.InputSource;
import javax.wsdl.Definition;
@@ -91,19 +91,21 @@
"find the WSRP services definition");
iae.initCause(e);
available = false;
+ failed = true;
throw iae;
}
catch (Exception e)
{
log.info("Couldn't access WSDL information. Service won't be
available", e);
available = false;
+ failed = true;
throw e;
}
}
public boolean isAvailable()
{
- return available;
+ return available && !failed;
}
private void initServices() throws MalformedURLException
Modified: trunk/wsrp/src/main/org/jboss/portal/wsrp/services/ServiceFactory.java
===================================================================
--- trunk/wsrp/src/main/org/jboss/portal/wsrp/services/ServiceFactory.java 2007-09-18
01:07:30 UTC (rev 8306)
+++ trunk/wsrp/src/main/org/jboss/portal/wsrp/services/ServiceFactory.java 2007-09-18
01:20:26 UTC (rev 8307)
@@ -36,6 +36,8 @@
boolean isAvailable();
+ boolean isFailed();
+
String getServiceDescriptionURL();
String getMarkupURL();
Modified: trunk/wsrp/src/resources/portal-wsrp-sar/conf/producer/config.xml
===================================================================
--- trunk/wsrp/src/resources/portal-wsrp-sar/conf/producer/config.xml 2007-09-18 01:07:30
UTC (rev 8306)
+++ trunk/wsrp/src/resources/portal-wsrp-sar/conf/producer/config.xml 2007-09-18 01:20:26
UTC (rev 8307)
@@ -24,9 +24,12 @@
<!DOCTYPE producer-configuration PUBLIC "-//JBoss Portal//DTD WSRP Local Producer
Configuration 2.6//EN"
"http://www.jboss.org/portal/dtd/jboss-wsrp-producer_2_6.dtd">
+<!-- Configuration using registration with default registration property validator.
-->
<producer-configuration>
<registration-configuration
fullServiceDescriptionRequiresRegistration="true">
<registration-property-validator>org.jboss.portal.registration.policies.DefaultRegistrationPropertyValidator</registration-property-validator>
</registration-configuration>
</producer-configuration>
+ <!-- Configuration without registration -->
+ <!--<producer-configuration/>-->
\ No newline at end of file