You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2016/07/04 09:01:37 UTC
svn commit: r1751230 -
/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java
Author: cziegeler
Date: Mon Jul 4 09:01:37 2016
New Revision: 1751230
URL: http://svn.apache.org/viewvc?rev=1751230&view=rev
Log:
FELIX-5300 : ServiceComponentRuntime should not throw IllegalStateException
Modified:
felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java
Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java?rev=1751230&r1=1751229&r2=1751230&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/runtime/ServiceComponentRuntimeImpl.java Mon Jul 4 09:01:37 2016
@@ -45,6 +45,7 @@ import org.osgi.service.component.runtim
import org.osgi.service.component.runtime.dto.SatisfiedReferenceDTO;
import org.osgi.service.component.runtime.dto.UnsatisfiedReferenceDTO;
import org.osgi.util.promise.Promise;
+import org.osgi.util.promise.Promises;
public class ServiceComponentRuntimeImpl implements ServiceComponentRuntime
{
@@ -61,6 +62,9 @@ public class ServiceComponentRuntimeImpl
this.componentRegistry = componentRegistry;
}
+ /**
+ * @see org.osgi.service.component.runtime.ServiceComponentRuntime#getComponentDescriptionDTOs(org.osgi.framework.Bundle[])
+ */
public Collection<ComponentDescriptionDTO> getComponentDescriptionDTOs(Bundle... bundles)
{
List<ComponentHolder<?>> holders;
@@ -76,11 +80,18 @@ public class ServiceComponentRuntimeImpl
List<ComponentDescriptionDTO> result = new ArrayList<ComponentDescriptionDTO>(holders.size());
for (ComponentHolder<?> holder: holders)
{
- result.add(holderToDescription(holder));
+ ComponentDescriptionDTO dto = holderToDescription(holder);
+ if ( dto != null )
+ {
+ result.add(dto);
+ }
}
return result;
}
+ /**
+ * @see org.osgi.service.component.runtime.ServiceComponentRuntime#getComponentDescriptionDTO(org.osgi.framework.Bundle, java.lang.String)
+ */
public ComponentDescriptionDTO getComponentDescriptionDTO(Bundle bundle, String name)
{
ComponentHolder<?> holder = componentRegistry.getComponentHolder(bundle, name);
@@ -94,40 +105,84 @@ public class ServiceComponentRuntimeImpl
}
}
+ /**
+ * @see org.osgi.service.component.runtime.ServiceComponentRuntime#getComponentConfigurationDTOs(org.osgi.service.component.runtime.dto.ComponentDescriptionDTO)
+ */
public Collection<ComponentConfigurationDTO> getComponentConfigurationDTOs(ComponentDescriptionDTO description)
{
if ( description == null)
{
return Collections.emptyList();
}
- ComponentHolder<?> holder = getHolderFromDescription( description);
- //Get a fully filled out valid description DTO
- description = holderToDescription(holder);
- List<? extends ComponentManager<?>> managers = holder.getComponents();
- List<ComponentConfigurationDTO> result = new ArrayList<ComponentConfigurationDTO>(managers.size());
- for (ComponentManager<?> manager: managers)
+ try
{
- result.add(managerToConfiguration(manager, description));
+ ComponentHolder<?> holder = getHolderFromDescription( description);
+ // Get a fully filled out valid description DTO
+ description = holderToDescription(holder);
+ if ( description == null)
+ {
+ return Collections.emptyList();
+ }
+ List<? extends ComponentManager<?>> managers = holder.getComponents();
+ List<ComponentConfigurationDTO> result = new ArrayList<ComponentConfigurationDTO>(managers.size());
+ for (ComponentManager<?> manager: managers)
+ {
+ result.add(managerToConfiguration(manager, description));
+ }
+ return result;
+ }
+ catch ( IllegalStateException ise)
+ {
+ return Collections.emptyList();
}
- return result;
}
+ /**
+ * @see org.osgi.service.component.runtime.ServiceComponentRuntime#isComponentEnabled(org.osgi.service.component.runtime.dto.ComponentDescriptionDTO)
+ */
public boolean isComponentEnabled(ComponentDescriptionDTO description)
{
- ComponentHolder<?> holder = getHolderFromDescription( description);
- return holder.isEnabled();
+ try
+ {
+ ComponentHolder<?> holder = getHolderFromDescription( description);
+ return holder.isEnabled();
+ }
+ catch ( IllegalStateException ise)
+ {
+ return false;
+ }
}
+ /**
+ * @see org.osgi.service.component.runtime.ServiceComponentRuntime#enableComponent(org.osgi.service.component.runtime.dto.ComponentDescriptionDTO)
+ */
public Promise<Void> enableComponent(ComponentDescriptionDTO description)
{
- ComponentHolder<?> holder = getHolderFromDescription( description);
- return holder.enableComponents(true);
+ try
+ {
+ ComponentHolder<?> holder = getHolderFromDescription( description);
+ return holder.enableComponents(true);
+ }
+ catch ( IllegalStateException ise)
+ {
+ return Promises.failed(ise);
+ }
}
+ /**
+ * @see org.osgi.service.component.runtime.ServiceComponentRuntime#disableComponent(org.osgi.service.component.runtime.dto.ComponentDescriptionDTO)
+ */
public Promise<Void> disableComponent(ComponentDescriptionDTO description)
{
- ComponentHolder<?> holder = getHolderFromDescription( description);
- return holder.disableComponents(true); //synchronous
+ try
+ {
+ ComponentHolder<?> holder = getHolderFromDescription( description);
+ return holder.disableComponents(true); //synchronous
+ }
+ catch ( IllegalStateException ise)
+ {
+ return Promises.failed(ise);
+ }
}
private ComponentConfigurationDTO managerToConfiguration(ComponentManager<?> manager, ComponentDescriptionDTO description)
@@ -221,6 +276,12 @@ public class ServiceComponentRuntimeImpl
return dto;
}
+ /**
+ * Return the component holder
+ * @param description Component description DTO
+ * @return The component holder
+ * @throws IllegalStateException If the bundle is not active anymore
+ */
private ComponentHolder<?> getHolderFromDescription(ComponentDescriptionDTO description)
{
if (description.bundle == null)
@@ -239,6 +300,11 @@ public class ServiceComponentRuntimeImpl
ComponentMetadata m = holder.getComponentMetadata();
dto.activate = m.getActivate();
dto.bundle = bundleToDTO(holder.getActivator().getBundleContext());
+ // immediately return if bundle is not active anymore
+ if ( dto.bundle == null )
+ {
+ return null;
+ }
dto.configurationPid = m.getConfigurationPid().toArray(new String[m.getConfigurationPid().size()]);
dto.configurationPolicy = m.getConfigurationPolicy();
dto.deactivate = m.getDeactivate();