You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2010/02/24 19:15:45 UTC
svn commit: r915909 [2/3] - in /felix/trunk/ipojo:
annotations/src/main/java/org/apache/felix/ipojo/annotations/
api/src/main/java/org/apache/felix/ipojo/api/
core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/
core/src/main/resources/ ...
Modified: felix/trunk/ipojo/manipulator/src/main/resources/core.xsd
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/resources/core.xsd?rev=915909&r1=915908&r2=915909&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/src/main/resources/core.xsd (original)
+++ felix/trunk/ipojo/manipulator/src/main/resources/core.xsd Wed Feb 24 18:15:44 2010
@@ -18,262 +18,289 @@
-->
<xs:schema elementFormDefault="qualified" targetNamespace="org.apache.felix.ipojo"
xmlns="org.apache.felix.ipojo" xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <xs:annotation>
- <xs:documentation>iPOJO Core XML-Schema. This grammars models iPOJO descriptor using core features. It provides several extensibility mechanism in order to compose this schema with external handlers and other component implementation type such as compositions.</xs:documentation></xs:annotation>
- <xs:element name="ipojo">
+ <xs:annotation>
+ <xs:documentation>iPOJO Core XML-Schema. This grammars models iPOJO descriptor using core
+ features. It provides several extensibility mechanism in order to compose this schema with
+ external handlers and other component implementation type such as
+ compositions.</xs:documentation>
+ </xs:annotation>
+ <xs:element name="ipojo">
<xs:complexType>
- <xs:annotation>
- <xs:documentation>iPOJO top level element.</xs:documentation>
- </xs:annotation>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>iPOJO top level element.</xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="handler" minOccurs="0" maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>The handler declarations.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The handler declarations.</xs:documentation>
+ </xs:annotation>
</xs:element>
<xs:element ref="instance" minOccurs="0" maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>The instance declarations.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The instance declarations.</xs:documentation>
+ </xs:annotation>
</xs:element>
<xs:element ref="component" minOccurs="0" maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>The component type declarations.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The component type declarations.</xs:documentation>
+ </xs:annotation>
</xs:element>
- <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
- </xs:any>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
+ > </xs:any>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="HandlerType">
- <xs:annotation>
- <xs:documentation>Description of the handler.</xs:documentation>
- </xs:annotation>
- <xs:complexContent>
+ <xs:annotation>
+ <xs:documentation>Description of the handler.</xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
<xs:extension base="RootElementType">
<xs:sequence maxOccurs="unbounded" minOccurs="0">
- <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any"
- processContents="skip">
- </xs:any>
+ <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="skip"
+ > </xs:any>
</xs:sequence>
<xs:attribute name="classname" type="xs:string" use="required">
- <xs:annotation>
- <xs:documentation>The implementation class of the handler. The specified class must implement (direcly or not) the "org.apache.felix.ipojo.Handler" interface.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The implementation class of the handler. The specified class must
+ implement (direcly or not) the "org.apache.felix.ipojo.Handler"
+ interface.</xs:documentation>
+ </xs:annotation>
</xs:attribute>
<xs:attribute name="name" type="xs:string" use="required">
- <xs:annotation>
- <xs:documentation>The name of the handler.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The name of the handler.</xs:documentation>
+ </xs:annotation>
</xs:attribute>
<xs:attribute name="namespace" type="xs:string" use="optional">
- <xs:annotation>
- <xs:documentation>The XML namespace of the handler.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- <xs:attribute name="architecture" type="xs:boolean"
- use="optional" fixed="false">
- <xs:annotation>
- <xs:documentation>Enables or disables the architecture exposition. By default, the architecture is not exposed. This allows handler introspection.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The XML namespace of the handler.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="architecture" type="xs:boolean" use="optional" fixed="false">
+ <xs:annotation>
+ <xs:documentation>Enables or disables the architecture exposition. By default, the
+ architecture is not exposed. This allows handler introspection.</xs:documentation>
+ </xs:annotation>
</xs:attribute>
<xs:attribute name="level" type="xs:int" use="optional">
- <xs:annotation>
- <xs:documentation>The start level of the handler.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The start level of the handler.</xs:documentation>
+ </xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="InstanceType">
- <xs:annotation>
- <xs:documentation>Describes an instance of a component.</xs:documentation>
- </xs:annotation>
- <xs:complexContent>
+ <xs:annotation>
+ <xs:documentation>Describes an instance of a component.</xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
<xs:extension base="RootElementType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="property" type="InstancePropertyType">
<xs:annotation>
<xs:documentation>The instance properties.</xs:documentation>
- </xs:annotation></xs:element>
+ </xs:annotation>
+ </xs:element>
</xs:sequence>
<xs:attribute name="component" type="xs:string">
<xs:annotation>
<xs:documentation>The name of the instance component type.</xs:documentation>
- </xs:annotation></xs:attribute>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="name" type="xs:string" use="optional">
- <xs:annotation>
- <xs:documentation>The (unique) name of the instance.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The (unique) name of the instance.</xs:documentation>
+ </xs:annotation>
</xs:attribute>
<xs:attribute name="version" type="xs:string" use="optional">
- <xs:annotation>
- <xs:documentation>The version of the factory to use.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The version of the factory to use.</xs:documentation>
+ </xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="InstancePropertyType">
- <xs:annotation>
- <xs:documentation>Defines a property of an instance configuration.</xs:documentation>
- </xs:annotation>
- <xs:sequence>
- <xs:element name="property" type="InstancePropertyType" minOccurs="0" maxOccurs="unbounded"></xs:element>
+ <xs:annotation>
+ <xs:documentation>Defines a property of an instance configuration.</xs:documentation>
+ </xs:annotation>
+ <xs:sequence>
+ <xs:element name="property" type="InstancePropertyType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Name of the property. Can be optional if a property is inside a structure.
-The 'instance.name' property has a special semantic as it will be used as the instance name.</xs:documentation>
- </xs:annotation></xs:attribute>
+ The 'instance.name' property has a special semantic as it will be used as the instance
+ name.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="value" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>Value of the property. Can be null for property containing other properties.</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:documentation>Value of the property. Can be null for property containing other
+ properties.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="type" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>Type of the property, used to create the adequate object. Supported values are list, array, dictionary and map.</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:documentation>Type of the property, used to create the adequate object. Supported values
+ are list, array, dictionary and map.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
</xs:complexType>
- <xs:complexType name="RootElementType"></xs:complexType>
+ <xs:complexType name="RootElementType"/>
<xs:complexType name="ComponentType">
<xs:annotation>
<xs:documentation>Declares an atomic (i.e. primitive) component type.</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element ref="callback" minOccurs="0"
- maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>Describes the method(s) to invoke when the component's state changes.</xs:documentation>
- </xs:annotation>
+ <xs:element ref="callback" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>Describes the method(s) to invoke when the component's state
+ changes.</xs:documentation>
+ </xs:annotation>
</xs:element>
- <xs:element ref="provides" minOccurs="0"
- maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>Indicates the component provided service(s). By default, all implemented interfaces are published.</xs:documentation>
- </xs:annotation>
+ <xs:element ref="provides" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>Indicates the component provided service(s). By default, all implemented
+ interfaces are published.</xs:documentation>
+ </xs:annotation>
</xs:element>
- <xs:element ref="requires" minOccurs="0"
- maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>Indicates the service requirements of the component.</xs:documentation>
- </xs:annotation>
+ <xs:element ref="requires" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>Indicates the service requirements of the component.</xs:documentation>
+ </xs:annotation>
</xs:element>
- <xs:element ref="properties" minOccurs="0"
- maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>Describes the properties of the component.</xs:documentation>
- </xs:annotation>
+ <xs:element ref="properties" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>Describes the properties of the component.</xs:documentation>
+ </xs:annotation>
</xs:element>
<xs:element ref="controller" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Lifecycle controller for this component.</xs:documentation>
- </xs:annotation></xs:element>
- <xs:any namespace="##other" processContents="lax"
- minOccurs="0" maxOccurs="unbounded">
- </xs:any>
+ </xs:annotation>
+ </xs:element>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"
+ > </xs:any>
</xs:choice>
<xs:attribute name="name" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>Specifies the name of the component type. This name is used to identify the factory attached to this type. If not specified, the factory name is the implementation class name.</xs:documentation>
+ <xs:documentation>Specifies the name of the component type. This name is used to identify
+ the factory attached to this type. If not specified, the factory name is the
+ implementation class name.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="public" type="xs:boolean" use="optional">
<xs:annotation>
- <xs:documentation>Determines if the component type is public or private. A public factory (default) can be used from any bundles.</xs:documentation>
+ <xs:documentation>Determines if the component type is public or private. A public factory
+ (default) can be used from any bundles.</xs:documentation>
</xs:annotation>
</xs:attribute>
- <xs:attribute name="classname" type="xs:string"
- use="required">
+ <xs:attribute name="classname" type="xs:string" use="required">
<xs:annotation>
- <xs:documentation>Specifies the implementation class of the component type.</xs:documentation>
+ <xs:documentation>Specifies the implementation class of the component
+ type.</xs:documentation>
</xs:annotation>
</xs:attribute>
- <xs:attribute name="architecture" type="xs:boolean"
- use="optional">
+ <xs:attribute name="architecture" type="xs:boolean" use="optional">
<xs:annotation>
- <xs:documentation>Enables or disables the architecture exposition. By default, the architecture is exposed. This allows instance introspection.</xs:documentation>
+ <xs:documentation>Enables or disables the architecture exposition. By default, the
+ architecture is exposed. This allows instance introspection.</xs:documentation>
</xs:annotation>
</xs:attribute>
- <xs:attribute name="immediate" type="xs:boolean"
- use="optional">
- <xs:annotation>
- <xs:documentation>Creates the object of the component implementation type as soon as the component instance becomes valid. The default value is "true" if the component doesn't provide any service, "false" otherwise.</xs:documentation>
- </xs:annotation>
+ <xs:attribute name="immediate" type="xs:boolean" use="optional">
+ <xs:annotation>
+ <xs:documentation>Creates the object of the component implementation type as soon as the
+ component instance becomes valid. The default value is "true" if the component doesn't
+ provide any service, "false" otherwise.</xs:documentation>
+ </xs:annotation>
</xs:attribute>
<xs:attribute name="factory-method" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>Factory method called to create POJO objects instead of the constructor. The specified method must be a static method of the implementation class returning an instance of this implementation class. The factory method can receive the bundle context in argument.</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:documentation>Factory method called to create POJO objects instead of the constructor.
+ The specified method must be a static method of the implementation class returning an
+ instance of this implementation class. The factory method can receive the bundle context
+ in argument.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="version" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Set the version of this component type</xs:documentation>
- </xs:annotation></xs:attribute>
+ </xs:annotation>
+ </xs:attribute>
</xs:complexType>
<xs:complexType name="RequiresType">
- <xs:annotation>
- <xs:documentation>Description of component services requirements.</xs:documentation>
- </xs:annotation>
- <xs:complexContent>
+ <xs:annotation>
+ <xs:documentation>Description of component services requirements.</xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
<xs:extension base="ServiceDependencyType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
- <xs:element name="callback"
- type="DependencyCallbackType">
- <xs:annotation>
- <xs:documentation>Service requirement method invocation description. Here can be specified a bind method called when a service appears and an unbind method called when a service disappears.</xs:documentation>
- </xs:annotation>
+ <xs:element name="callback" type="DependencyCallbackType">
+ <xs:annotation>
+ <xs:documentation>Service requirement method invocation description. Here can be
+ specified a bind method called when a service appears and an unbind method called
+ when a service disappears.</xs:documentation>
+ </xs:annotation>
</xs:element>
</xs:sequence>
- <xs:attribute name="interface" type="xs:string"
- use="prohibited">
- <xs:annotation>
- <xs:documentation>The interface describing the required service type. This attribute is needed only when using aggregate dependencies with field injection and when the type of this field is a list, vector, collection and set. This attribute is deprecated, use 'specification'.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
-
- <xs:attribute name="field" type="xs:string"
- use="optional">
- <xs:annotation>
- <xs:documentation>The name of the field representing the service dependency in the implementation class.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
-
- <xs:attribute name="nullable" type="xs:boolean"
- use="optional">
- <xs:annotation>
- <xs:documentation>Enable or disable the Nullable pattern on optional service dependencies. By default, Nullable pattern is enabled. If disabled, iPOJO will inject null instead of a Nullable object.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
-
- <xs:attribute name="default-implementation"
- type="xs:string" use="optional">
- <xs:annotation>
- <xs:documentation>Specifies the default implementation class for an optional service dependency. If no providers are found, iPOJO creates an instance of the default-implementation (nullary constructor) and injects it. The given class must implement the required service interface.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
-
- <xs:attribute name="from" type="xs:string"
- use="optional">
- <xs:annotation>
- <xs:documentation>Specific service provider. The dependency can only be fulfilled by the component with the matching name, or by the service with a matching PID.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
-
- <xs:attribute name="proxy" type="xs:boolean"
- use="optional">
- <xs:annotation>
- <xs:documentation>Enables or Disable the proxy injection (on field injection)</xs:documentation>
- </xs:annotation>
+ <xs:attribute name="interface" type="xs:string" use="prohibited">
+ <xs:annotation>
+ <xs:documentation>The interface describing the required service type. This attribute is
+ needed only when using aggregate dependencies with field injection and when the type
+ of this field is a list, vector, collection and set. This attribute is deprecated, use
+ 'specification'.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="field" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>The name of the field representing the service dependency in the
+ implementation class.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="nullable" type="xs:boolean" use="optional">
+ <xs:annotation>
+ <xs:documentation>Enable or disable the Nullable pattern on optional service
+ dependencies. By default, Nullable pattern is enabled. If disabled, iPOJO will inject
+ null instead of a Nullable object.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="default-implementation" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Specifies the default implementation class for an optional service
+ dependency. If no providers are found, iPOJO creates an instance of the
+ default-implementation (nullary constructor) and injects it. The given class must
+ implement the required service interface.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="from" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>Specific service provider. The dependency can only be fulfilled by the
+ component with the matching name, or by the service with a matching
+ PID.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
+ <xs:attribute name="proxy" type="xs:boolean" use="optional">
+ <xs:annotation>
+ <xs:documentation>Enables or Disable the proxy injection (on field
+ injection)</xs:documentation>
+ </xs:annotation>
</xs:attribute>
<xs:attribute name="scope" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
- <xs:enumeration value="global"></xs:enumeration>
- <xs:enumeration value="composite"></xs:enumeration>
- <xs:enumeration value="composite+global"></xs:enumeration>
+ <xs:enumeration value="global"/>
+ <xs:enumeration value="composite"/>
+ <xs:enumeration value="composite+global"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
@@ -282,213 +309,269 @@
</xs:complexContent>
</xs:complexType>
<xs:complexType name="DependencyCallbackType">
- <xs:annotation>
- <xs:documentation>Dependency callbacks are used to receive notification when service providers arrive and leave.</xs:documentation>
- </xs:annotation>
- <xs:attribute name="method" type="xs:string" use="required">
- <xs:annotation>
- <xs:documentation>Method to call</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:annotation>
+ <xs:documentation>Dependency callbacks are used to receive notification when service providers
+ arrive and leave.</xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="method" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>Method to call</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="type" use="required">
- <xs:annotation>
- <xs:documentation>
- Type of callback (bind, unbind, or updated). Bind means that the method will be called when a provider arrives. Unbind means that the method will be called when a provider leaves.
- Updated means that a service was modified but is still valid for the service dependency.
- </xs:documentation>
- </xs:annotation>
- <xs:simpleType>
+ <xs:annotation>
+ <xs:documentation> Type of callback (bind, unbind, or updated). Bind means that the method
+ will be called when a provider arrives. Unbind means that the method will be called when a
+ provider leaves. Updated means that a service was modified but is still valid for the
+ service dependency. </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
<xs:restriction base="xs:string">
- <xs:enumeration value="bind"></xs:enumeration>
- <xs:enumeration value="unbind"></xs:enumeration>
- <xs:enumeration value="modified"></xs:enumeration>
+ <xs:enumeration value="bind"/>
+ <xs:enumeration value="unbind"/>
+ <xs:enumeration value="modified"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="CallbackType">
+ <xs:annotation>
+ <xs:documentation>Lifecycle Callback. Allows a POJO to be notified when the instance becomes
+ valid or invalid.</xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="method" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>Specifies the method to call on the transition.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="transition" use="required">
+ <xs:annotation>
+ <xs:documentation>Specifies the transition when the callback needs to be
+ invoked.</xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
<xs:annotation>
- <xs:documentation>Lifecycle Callback. Allows a POJO to be notified when the instance becomes valid or invalid.</xs:documentation>
+ <xs:documentation>Lifecycle transition state. "validate" means that the component's
+ instance was invalid and becomes valid, "invalidate" means that the component's intance
+ was valid and becomes invalid.</xs:documentation>
</xs:annotation>
- <xs:attribute name="method" type="xs:string" use="required">
- <xs:annotation>
- <xs:documentation>Specifies the method to call on the transition.</xs:documentation>
- </xs:annotation></xs:attribute>
- <xs:attribute name="transition" use="required">
- <xs:annotation>
- <xs:documentation>Specifies the transition when the callback needs to be invoked.</xs:documentation>
- </xs:annotation>
- <xs:simpleType>
- <xs:annotation>
- <xs:documentation>Lifecycle transition state. "validate" means that the component's instance was invalid and becomes valid, "invalidate" means that the component's intance was valid and becomes invalid.</xs:documentation>
- </xs:annotation>
- <xs:restriction base="xs:string">
- <xs:enumeration value="validate"></xs:enumeration>
- <xs:enumeration value="invalidate"></xs:enumeration>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="validate"/>
+ <xs:enumeration value="invalidate"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
- <xs:element name="provides" type="ProvidesType" id="provides"></xs:element>
- <xs:complexType name="ProvidesType">
- <xs:annotation>
- <xs:documentation>Provided service(s) description.</xs:documentation>
- </xs:annotation>
- <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="provides" type="ProvidesType" id="provides"/>
+ <xs:complexType name="ProvidesType">
+ <xs:annotation>
+ <xs:documentation>Provided service(s) description.</xs:documentation>
+ </xs:annotation>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:choice>
<xs:element name="property" type="PropertyType">
<xs:annotation>
<xs:documentation>List of service specific properties.</xs:documentation>
- </xs:annotation></xs:element>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="controller" minOccurs="0" maxOccurs="1" type="ServiceControllerType">
+ <xs:annotation>
+ <xs:documentation>Service Controller impacting the current provided
+ service</xs:documentation>
+ </xs:annotation>
+ </xs:element>
+ </xs:choice>
</xs:sequence>
<xs:attribute name="interface" type="xs:string" use="prohibited">
<xs:annotation>
- <xs:documentation>Deprecated attribute, use 'specifications' instead of 'interface'</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:documentation>Deprecated attribute, use 'specifications' instead of
+ 'interface'</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="specifications" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>The list of service specifications (i.e. interfaces) to expose. By default, all interfaces implemented by the component implementation class are published.</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:documentation>The list of service specifications (i.e. interfaces) to expose. By
+ default, all interfaces implemented by the component implementation class are
+ published.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="factory" type="xs:string" use="prohibited">
<xs:annotation>
<xs:documentation>Use 'strategy' instead of 'factory'</xs:documentation>
- </xs:annotation></xs:attribute>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="strategy" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>POJO creation strategy. By default, the POJO object is created once (singleton). If the factory is set to "SERVICE", the creation policy follows the OSGi service factory policy (one object object per asking bundle).
- INSTANCE allows creating one different POJO object per asking instance. Finally, a custom strategy can be used by specifying the qualified name of the class extending CreationPolicy</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:documentation>POJO creation strategy. By default, the POJO object is created once
+ (singleton). If the factory is set to "SERVICE", the creation policy follows the OSGi
+ service factory policy (one object object per asking bundle). INSTANCE allows creating one
+ different POJO object per asking instance. Finally, a custom strategy can be used by
+ specifying the qualified name of the class extending CreationPolicy</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ <xs:complexType name="ServiceControllerType">
+ <xs:annotation>
+ <xs:documentation> Defines a service controller. </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="field" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation> Field of the controller </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="value" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation> Intiail value of the controller </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
</xs:complexType>
<xs:complexType name="PropertyType">
<xs:annotation>
- <xs:documentation>
- Defines a component property.
- </xs:documentation>
+ <xs:documentation> Defines a component property. </xs:documentation>
</xs:annotation>
<xs:attribute name="field" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>
- Field of the property
- </xs:documentation>
+ <xs:documentation> Field of the property </xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="method" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>
- Setter method of the property. This method is called
- to inject property value.
- </xs:documentation>
+ <xs:documentation> Setter method of the property. This method is called to inject property
+ value. </xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="name" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>
- Name of the property.
- </xs:documentation>
+ <xs:documentation> Name of the property. </xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="value" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>
- Default value of the property.
- </xs:documentation>
+ <xs:documentation> Default value of the property. </xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="type" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>
- Type of the property.
- </xs:documentation>
+ <xs:documentation> Type of the property. </xs:documentation>
</xs:annotation>
</xs:attribute>
- <xs:attribute name="mandatory" type="xs:boolean" use="optional" default="false">
- <xs:annotation>
- <xs:documentation>Set the property as mandatory. A mandatory property MUST receive a value either in the component type description or in the instance configuration. Properties are optional by default.</xs:documentation>
- </xs:annotation></xs:attribute>
- </xs:complexType>
- <xs:element name="callback" type="CallbackType" id="callback"></xs:element>
+ <xs:attribute name="mandatory" type="xs:boolean" use="optional" default="false">
+ <xs:annotation>
+ <xs:documentation>Set the property as mandatory. A mandatory property MUST receive a value
+ either in the component type description or in the instance configuration. Properties are
+ optional by default.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
+ <xs:element name="callback" type="CallbackType" id="callback"/>
<xs:element name="controller" type="ControllerType" id="controller">
<xs:annotation>
- <xs:documentation></xs:documentation>
- </xs:annotation></xs:element>
- <xs:element name="requires" type="RequiresType" id="requires"></xs:element>
- <xs:element name="component" type="ComponentType" id="component"></xs:element>
- <xs:element name="handler" type="HandlerType" id="handler"></xs:element>
- <xs:element name="instance" type="InstanceType" id="instance"></xs:element>
+ <xs:documentation/>
+ </xs:annotation>
+ </xs:element>
+ <xs:element name="requires" type="RequiresType" id="requires"/>
+ <xs:element name="component" type="ComponentType" id="component"/>
+ <xs:element name="handler" type="HandlerType" id="handler"/>
+ <xs:element name="instance" type="InstanceType" id="instance"/>
- <xs:element name="properties" type="PropertiesType" id="properties"></xs:element>
+ <xs:element name="properties" type="PropertiesType" id="properties"/>
<xs:complexType name="PropertiesType">
- <xs:annotation>
- <xs:documentation>List of component, instance or service properties. This field will receive the property value.</xs:documentation>
- </xs:annotation>
- <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>List of component, instance or service properties. This field will receive
+ the property value.</xs:documentation>
+ </xs:annotation>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="property" type="PropertyType">
<xs:annotation>
<xs:documentation>The list of properties.</xs:documentation>
- </xs:annotation></xs:element>
+ </xs:annotation>
+ </xs:element>
</xs:sequence>
<xs:attribute name="propagation" type="xs:boolean" use="optional">
<xs:annotation>
- <xs:documentation>Propagation of the component properties to the provided services. If this parameter is set to "true", each time properties are reconfigured, they are propagated to each service published by the component.</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:documentation>Propagation of the component properties to the provided services. If this
+ parameter is set to "true", each time properties are reconfigured, they are propagated to
+ each service published by the component.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="pid" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>Unique identifier used to reconfigure components properties (via Managed Services) with the Configuration Admin.</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:documentation>Unique identifier used to reconfigure components properties (via Managed
+ Services) with the Configuration Admin.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="updated" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>Method called when a reconfiguration is done</xs:documentation>
- </xs:annotation></xs:attribute>
+ </xs:annotation>
+ </xs:attribute>
</xs:complexType>
<xs:complexType name="ServiceDependencyType">
- <xs:attribute name="specification" type="xs:string" use="optional">
- <xs:annotation>
- <xs:documentation>The specification describing the required service type. This attribute is needed only when using aggregate dependencies with field injection and when the type of this field is a list, vector, collection and set.</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:attribute name="specification" type="xs:string" use="optional">
+ <xs:annotation>
+ <xs:documentation>The specification describing the required service type. This attribute is
+ needed only when using aggregate dependencies with field injection and when the type of
+ this field is a list, vector, collection and set.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="optional" type="xs:boolean" use="optional">
- <xs:annotation>
- <xs:documentation>Sets the service dependency optionality</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>Sets the service dependency optionality</xs:documentation>
+ </xs:annotation>
</xs:attribute>
<xs:attribute name="aggregate" type="xs:boolean" use="optional">
- <xs:annotation>
- <xs:documentation>Sets the service dependency cardinality.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>Sets the service dependency cardinality.</xs:documentation>
+ </xs:annotation>
</xs:attribute>
<xs:attribute name="policy" use="optional">
- <xs:annotation>
- <xs:documentation>Sets the binding policy of the dependency. Three policies are supported. The dynamic policy supports service providers dynamism. The static policy freezes the provider set as soon as the dependency is used. The dynamic-priority policy is an extension of the dynamic policy, but providers are ranked.</xs:documentation>
- </xs:annotation>
- <xs:simpleType>
+ <xs:annotation>
+ <xs:documentation>Sets the binding policy of the dependency. Three policies are supported.
+ The dynamic policy supports service providers dynamism. The static policy freezes the
+ provider set as soon as the dependency is used. The dynamic-priority policy is an
+ extension of the dynamic policy, but providers are ranked.</xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
<xs:restriction base="xs:string">
- <xs:enumeration value="dynamic"></xs:enumeration>
- <xs:enumeration value="static"></xs:enumeration>
- <xs:enumeration value="dynamic-priority"></xs:enumeration>
+ <xs:enumeration value="dynamic"/>
+ <xs:enumeration value="static"/>
+ <xs:enumeration value="dynamic-priority"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="comparator" type="xs:string" use="optional">
- <xs:annotation>
- <xs:documentation>The comparator attribute allows specifying the class used to compare providers. This class must implemented the java.util.Comparator class and must support the comparison of service references.</xs:documentation>
- </xs:annotation>
+ <xs:annotation>
+ <xs:documentation>The comparator attribute allows specifying the class used to compare
+ providers. This class must implemented the java.util.Comparator class and must support the
+ comparison of service references.</xs:documentation>
+ </xs:annotation>
</xs:attribute>
<xs:attribute name="filter" type="xs:string" use="optional">
<xs:annotation>
<xs:documentation>LDAP filter used to filter providers</xs:documentation>
- </xs:annotation></xs:attribute>
+ </xs:annotation>
+ </xs:attribute>
<xs:attribute name="id" type="xs:string" use="optional">
<xs:annotation>
- <xs:documentation>id of the service dependency. The id allows to indentify and to refert to this dependency.</xs:documentation>
- </xs:annotation></xs:attribute>
+ <xs:documentation>id of the service dependency. The id allows to indentify and to refert to
+ this dependency.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
</xs:complexType>
- <xs:complexType name="ControllerType">
- <xs:annotation>
- <xs:documentation>Specifies the lifecycle controller of a component, which allows to validate or invalidate component instances.</xs:documentation>
- </xs:annotation>
- <xs:attribute name="field" type="xs:string" use="required">
- <xs:annotation>
- <xs:documentation>The name of the component lifecycle controller field. The type of the specified field must be boolean. Setting the value of the specified field to "true" means the validation of the component instance while setting it to "false" means the invalidation of the component instance.</xs:documentation>
- </xs:annotation>
- </xs:attribute>
- </xs:complexType>
+ <xs:complexType name="ControllerType">
+ <xs:annotation>
+ <xs:documentation>Specifies the lifecycle controller of a component, which allows to validate
+ or invalidate component instances.</xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="field" type="xs:string" use="required">
+ <xs:annotation>
+ <xs:documentation>The name of the component lifecycle controller field. The type of the
+ specified field must be boolean. Setting the value of the specified field to "true" means
+ the validation of the component instance while setting it to "false" means the
+ invalidation of the component instance.</xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ </xs:complexType>
</xs:schema>
Modified: felix/trunk/ipojo/tests/core/annotations/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/pom.xml?rev=915909&r1=915908&r2=915909&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/pom.xml (original)
+++ felix/trunk/ipojo/tests/core/annotations/pom.xml Wed Feb 24 18:15:44 2010
@@ -116,7 +116,7 @@
</plugin>
- <!-- <plugin>
+ <plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-junit4osgi-plugin</artifactId>
<version>1.1.0-SNAPSHOT</version>
@@ -132,7 +132,7 @@
</configuration>
</execution>
</executions>
- </plugin>-->
+ </plugin>
</plugins>
</build>
</project>
Modified: felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java?rev=915909&r1=915908&r2=915909&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java (original)
+++ felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/ServiceProdiving.java Wed Feb 24 18:15:44 2010
@@ -82,6 +82,16 @@
}
+ public void testServiceController() {
+ Element meta = helper.getMetadata("org.apache.felix.ipojo.test.scenarios.component.PSServiceController");
+ Element[] provs = meta.getElements("provides");
+ assertNotNull("Provides exists ", provs);
+ System.out.println(provs[0].toString());
+ assertNotNull(provs[0].getElements("controller"));
+ assertEquals(1, provs[0].getElements("controller").length);
+ assertEquals("false", provs[0].getElements("controller")[0].getAttribute("value"));
+ }
+
private Element getPropertyByName(Element[] props, String name) {
for (int i = 0; i < props.length; i++) {
String na = props[i].getAttribute("name");
Added: felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceController.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceController.java?rev=915909&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceController.java (added)
+++ felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceController.java Wed Feb 24 18:15:44 2010
@@ -0,0 +1,54 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Provides;
+import org.apache.felix.ipojo.annotations.ServiceController;
+import org.apache.felix.ipojo.test.scenarios.annotations.service.BarService;
+import org.apache.felix.ipojo.test.scenarios.annotations.service.FooService;
+
+@Component
+@Provides(specifications= {FooService.class, BarService.class})
+public class PSServiceController implements FooService, BarService {
+
+ @ServiceController(value=false)
+ public boolean controller;
+
+ public boolean foo() {
+ return false;
+ }
+
+ public Properties fooProps() {
+ return null;
+ }
+
+ public boolean getBoolean() {
+ return false;
+ }
+
+ public double getDouble() {
+ return 0;
+ }
+
+ public int getInt() {
+ return 0;
+ }
+
+ public long getLong() {
+ return 0;
+ }
+
+ public Boolean getObject() {
+ return null;
+ }
+
+ public boolean bar() {
+ return false;
+ }
+
+ public Properties getProps() {
+ return null;
+ }
+
+}
Propchange: felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/PSServiceController.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: felix/trunk/ipojo/tests/core/service-providing/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/pom.xml?rev=915909&r1=915908&r2=915909&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/pom.xml (original)
+++ felix/trunk/ipojo/tests/core/service-providing/pom.xml Wed Feb 24 18:15:44 2010
@@ -1,102 +1,120 @@
<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
-->
<project>
- <modelVersion>4.0.0</modelVersion>
- <packaging>bundle</packaging>
- <name>iPOJO Service Providing Test Suite</name>
- <artifactId>tests.core.ps</artifactId>
- <groupId>ipojo.tests</groupId>
- <version>1.5.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.ipojo</artifactId>
- <version>${pom.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.ipojo.metadata</artifactId>
- <version>${pom.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.osgi.core</artifactId>
- <version>1.0.1</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.ipojo.junit4osgi</artifactId>
- <version>1.1.0-SNAPSHOT</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <version>1.4.3</version>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Export-Package>
- org.apache.felix.ipojo.test.scenarios.ps.service
- </Export-Package>
- <Bundle-SymbolicName>
- ${pom.artifactId}
- </Bundle-SymbolicName>
- <Private-Package>
- org.apache.felix.ipojo.test*
- </Private-Package>
- <Test-Suite>
- org.apache.felix.ipojo.test.scenarios.ps.ProvidedServiceTestSuite
- </Test-Suite>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-ipojo-plugin</artifactId>
- <version>${pom.version}</version>
- <executions>
- <execution>
- <goals>
- <goal>ipojo-bundle</goal>
- </goals>
- <configuration>
- <ignoreAnnotations>true</ignoreAnnotations>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
+ <modelVersion>4.0.0</modelVersion>
+ <packaging>bundle</packaging>
+ <name>iPOJO Service Providing Test Suite</name>
+ <artifactId>tests.core.ps</artifactId>
+ <groupId>ipojo.tests</groupId>
+ <version>1.5.0-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.metadata</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>1.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.junit4osgi</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>1.4.3</version>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Export-Package>
+ org.apache.felix.ipojo.test.scenarios.ps.service
+ </Export-Package>
+ <Bundle-SymbolicName>
+ ${pom.artifactId}
+ </Bundle-SymbolicName>
+ <Private-Package>
+ org.apache.felix.ipojo.test*
+ </Private-Package>
+ <Test-Suite>
+ org.apache.felix.ipojo.test.scenarios.ps.ProvidedServiceTestSuite
+ </Test-Suite>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-ipojo-plugin</artifactId>
+ <version>${pom.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>ipojo-bundle</goal>
+ </goals>
+ <configuration>
+ <ignoreAnnotations>true</ignoreAnnotations>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-junit4osgi-plugin</artifactId>
+ <version>1.1.0-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ <configuration>
+ <configuration>
+ <org.osgi.http.port>8083</org.osgi.http.port>
+ </configuration>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
</project>
Added: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/ControllerCheckService.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/ControllerCheckService.java?rev=915909&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/ControllerCheckService.java (added)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/ControllerCheckService.java Wed Feb 24 18:15:44 2010
@@ -0,0 +1,56 @@
+package org.apache.felix.ipojo.test.scenarios.component.controller;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.ps.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
+
+public class ControllerCheckService implements FooService, CheckService {
+
+
+ private boolean controller;
+
+ public boolean foo() {
+ return controller;
+ }
+
+ public Properties fooProps() {
+ Properties props = new Properties();
+ props.put("controller", new Boolean(controller));
+ return props;
+ }
+
+ public boolean getBoolean() {
+ return false;
+ }
+
+ public double getDouble() {
+ return 0;
+ }
+
+ public int getInt() {
+ return 0;
+ }
+
+ public long getLong() {
+ return 0;
+ }
+
+ public Boolean getObject() {
+ return null;
+ }
+
+ public boolean check() {
+ System.out.println("Before : " + controller);
+ controller = ! controller; // Change
+ System.out.println("After : " + controller);
+ return controller;
+ }
+
+ public Properties getProps() {
+ Properties props = new Properties();
+ props.put("controller", new Boolean(controller));
+ return props;
+ }
+
+}
Propchange: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/ControllerCheckService.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/DoubleControllerCheckService.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/DoubleControllerCheckService.java?rev=915909&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/DoubleControllerCheckService.java (added)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/DoubleControllerCheckService.java Wed Feb 24 18:15:44 2010
@@ -0,0 +1,66 @@
+package org.apache.felix.ipojo.test.scenarios.component.controller;
+
+import java.util.Properties;
+
+import org.apache.felix.ipojo.test.scenarios.ps.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
+
+public class DoubleControllerCheckService implements FooService, CheckService {
+
+
+ private boolean controllerFoo;
+ private boolean controllerCS;
+
+ public boolean foo() {
+ controllerFoo = ! controllerFoo;
+ return controllerFoo;
+ }
+
+ public Properties fooProps() {
+ Properties props = new Properties();
+ props.put("controller", new Boolean(controllerFoo));
+
+ controllerCS = true;
+ controllerFoo = true;
+
+ return props;
+ }
+
+ public boolean getBoolean() {
+ return false;
+ }
+
+ public double getDouble() {
+ return 0;
+ }
+
+ public int getInt() {
+ return 0;
+ }
+
+ public long getLong() {
+ return 0;
+ }
+
+ public Boolean getObject() {
+ return null;
+ }
+
+ public boolean check() {
+ controllerCS = ! controllerCS;
+ return controllerCS;
+ }
+
+ public Properties getProps() {
+ Properties props = new Properties();
+ props.put("controller", new Boolean(controllerCS));
+
+ // Invert both
+ controllerCS = ! controllerCS;
+ controllerFoo = ! controllerFoo;
+
+ return props;
+
+ }
+
+}
Propchange: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/component/controller/DoubleControllerCheckService.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java?rev=915909&r1=915908&r2=915909&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java (original)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ProvidedServiceTestSuite.java Wed Feb 24 18:15:44 2010
@@ -39,6 +39,7 @@
ots.addTestSuite(ClassTest.class);
ots.addTestSuite(OSGiPropertiesTest.class);
ots.addTestSuite(NullCheck.class);
+ ots.addTestSuite(ServiceControllerTest.class);
return ots;
}
Added: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java?rev=915909&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java (added)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java Wed Feb 24 18:15:44 2010
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.ipojo.test.scenarios.ps;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceDescription;
+import org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandlerDescription;
+import org.apache.felix.ipojo.junit4osgi.OSGiTestCase;
+import org.apache.felix.ipojo.junit4osgi.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.scenarios.ps.service.CheckService;
+import org.apache.felix.ipojo.test.scenarios.ps.service.FooService;
+
+public class ServiceControllerTest extends OSGiTestCase {
+
+ IPOJOHelper helper;
+
+ public void setUp() {
+ helper = new IPOJOHelper(this);
+ }
+
+
+ public void tearDown() {
+ helper.dispose();
+ }
+
+
+ public void testComponentWithAController() {
+ ComponentInstance ci = helper.createComponentInstance("PS-Controller-1-default");
+ // Controller set to true.
+ waitForService(FooService.class.getName(), null, 5000);
+ waitForService(CheckService.class.getName(), null, 5000);
+
+ CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+ assertNotNull(check);
+
+ assertFalse(check.check());
+
+ // FooService should not be there anymore
+ assertNull(getServiceReference(FooService.class.getName()));
+
+ assertTrue(check.check());
+
+ assertNotNull(getServiceReference(FooService.class.getName()));
+
+ ci.dispose();
+ }
+
+ public void testComponentWithAControllerSetToFalse() {
+ ComponentInstance ci = helper.createComponentInstance("PS-Controller-1-false");
+ // Controller set to false.
+ waitForService(CheckService.class.getName(), null, 5000);
+ assertNull(getServiceReference(FooService.class.getName()));
+
+ CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+ assertNotNull(check);
+
+ assertTrue(check.check());
+ assertNotNull(getServiceReference(FooService.class.getName()));
+
+ assertFalse(check.check());
+ // FooService should not be there anymore
+ assertNull(getServiceReference(FooService.class.getName()));
+
+ ci.dispose();
+ }
+
+ public void testComponentWithTwoControllersSetToTrue() {
+ ComponentInstance ci = helper.createComponentInstance("PS-Controller-2-truetrue");
+
+ waitForService(CheckService.class.getName(), null, 5000);
+ waitForService(FooService.class.getName(), null, 5000);
+
+ CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+ assertNotNull(check);
+
+ check.check();
+
+ assertNull(getServiceReference(CheckService.class.getName()));
+ assertNotNull(getServiceReference(FooService.class.getName()));
+
+ FooService fs = (FooService) getServiceObject(FooService.class.getName(), null);
+ fs.foo();
+
+ assertNull(getServiceReference(CheckService.class.getName()));
+ assertNull(getServiceReference(FooService.class.getName()));
+
+ ci.dispose();
+ }
+
+ public void testComponentWithTwoControllersSetToTrueAndFalse() {
+ ComponentInstance ci = helper.createComponentInstance("PS-Controller-2-truefalse");
+
+ waitForService(CheckService.class.getName(), null, 5000);
+
+ assertFalse(isServiceAvailable(FooService.class.getName()));
+
+ CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+ assertNotNull(check);
+
+ check.getProps();
+
+ assertFalse(isServiceAvailable(CheckService.class.getName()));
+ assertTrue(isServiceAvailable(FooService.class.getName()));
+
+ FooService fs = (FooService) getServiceObject(FooService.class.getName(), null);
+ fs.fooProps();
+
+ assertTrue(isServiceAvailable(CheckService.class.getName()));
+ assertTrue(isServiceAvailable(FooService.class.getName()));
+
+ ci.dispose();
+ }
+
+ public void testArchitecture() {
+ ComponentInstance ci = helper.createComponentInstance("PS-Controller-1-default");
+ // Controller set to true.
+ waitForService(FooService.class.getName(), null, 5000);
+ waitForService(CheckService.class.getName(), null, 5000);
+
+ ProvidedServiceHandlerDescription pshd = null;
+ pshd = (ProvidedServiceHandlerDescription) ci.getInstanceDescription()
+ .getHandlerDescription("org.apache.felix.ipojo:provides");
+
+ ProvidedServiceDescription ps = getPS(FooService.class.getName(), pshd.getProvidedServices());
+ assertEquals("true", ps.getController());
+
+ CheckService check = (CheckService) getServiceObject(CheckService.class.getName(), null);
+ assertNotNull(check);
+
+ assertFalse(check.check());
+
+ ps = getPS(FooService.class.getName(), pshd.getProvidedServices());
+ assertEquals("false", ps.getController());
+
+ assertTrue(check.check());
+
+ ps = getPS(FooService.class.getName(), pshd.getProvidedServices());
+ assertEquals("true", ps.getController());
+
+ }
+
+ private ProvidedServiceDescription getPS(String itf, ProvidedServiceDescription[] svc) {
+ for (int i = 0; i < svc.length; i++) {
+ if (svc[i].getServiceSpecifications()[0].equals(itf)) {
+ return svc[i];
+ }
+ }
+
+ fail("Service : " + itf + " not found");
+ return null;
+ }
+}
Propchange: felix/trunk/ipojo/tests/core/service-providing/src/main/java/org/apache/felix/ipojo/test/scenarios/ps/ServiceControllerTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: felix/trunk/ipojo/tests/core/service-providing/src/main/resources/metadata.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/service-providing/src/main/resources/metadata.xml?rev=915909&r1=915908&r2=915909&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/service-providing/src/main/resources/metadata.xml (original)
+++ felix/trunk/ipojo/tests/core/service-providing/src/main/resources/metadata.xml Wed Feb 24 18:15:44 2010
@@ -168,4 +168,46 @@
<property field="prop2"/>
</provides>
</component>
+
+ <!-- Service Controller -->
+ <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.ControllerCheckService"
+ name="PS-Controller-1-default">
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
+ <controller field="controller"/>
+ </provides>
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
+ </provides>
+ </component>
+ <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.ControllerCheckService"
+ name="PS-Controller-1-false">
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
+ <property name="test2" type="string" value="test2"/>
+ <controller field="controller" value="false"/>
+ <property name="test" type="string" value="test"/>
+ </provides>
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
+ </provides>
+ </component>
+ <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
+ name="PS-Controller-2-truetrue">
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
+ <property name="test2" type="string" value="test2"/>
+ <controller field="controllerFoo" value="true"/>
+ <property name="test" type="string" value="test"/>
+ </provides>
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
+ <controller field="controllerCS" value="true"/>
+ </provides>
+ </component>
+ <component classname="org.apache.felix.ipojo.test.scenarios.component.controller.DoubleControllerCheckService"
+ name="PS-Controller-2-truefalse">
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.FooService">
+ <property name="test2" type="string" value="test2"/>
+ <controller field="controllerFoo" value="false"/>
+ <property name="test" type="string" value="test"/>
+ </provides>
+ <provides specifications="org.apache.felix.ipojo.test.scenarios.ps.service.CheckService">
+ <controller field="controllerCS" value="true"/>
+ </provides>
+ </component>
</ipojo>
Modified: felix/trunk/ipojo/tests/handler/transaction/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/handler/transaction/pom.xml?rev=915909&r1=915908&r2=915909&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/handler/transaction/pom.xml (original)
+++ felix/trunk/ipojo/tests/handler/transaction/pom.xml Wed Feb 24 18:15:44 2010
@@ -32,13 +32,19 @@
<artifactId>org.apache.felix.ipojo.handler.transaction</artifactId>
<version>${pom.version}</version>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo.test.helpers</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
<!--
Pax Exam API:
-->
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam</artifactId>
- <version>1.1.0</version>
+ <version>1.2.0</version>
</dependency>
<!--
During runtime Pax Exam will discover the OSGi container to use by
@@ -50,7 +56,7 @@
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam-container-default
</artifactId>
- <version>1.1.0</version>
+ <version>1.2.0</version>
</dependency>
<!--
If your test code is based on JUnit you will have to have the Junit
@@ -59,7 +65,7 @@
<dependency>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam-junit</artifactId>
- <version>1.1.0</version>
+ <version>1.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
@@ -68,11 +74,11 @@
<type>jar</type>
<scope>test</scope>
</dependency>
-
+ <!-- Tinybundles -->
<dependency>
<groupId>org.ops4j.pax.swissbox</groupId>
<artifactId>pax-swissbox-tinybundles</artifactId>
- <version>1.0.0</version>
+ <version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
@@ -87,12 +93,12 @@
<dependency>
<groupId>org.ops4j.pax.logging</groupId>
<artifactId>pax-logging-api</artifactId>
- <version>1.3.0</version>
+ <version>1.4</version>
</dependency>
<dependency>
<groupId>org.ops4j.pax.logging</groupId>
<artifactId>pax-logging-service</artifactId>
- <version>1.3.0</version>
+ <version>1.4</version>
</dependency>
</dependencies>
Modified: felix/trunk/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestAnnotations.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestAnnotations.java?rev=915909&r1=915908&r2=915909&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestAnnotations.java (original)
+++ felix/trunk/ipojo/tests/handler/transaction/src/test/java/org/apache/felix/ipojo/transaction/test/TestAnnotations.java Wed Feb 24 18:15:44 2010
@@ -1,16 +1,16 @@
package org.apache.felix.ipojo.transaction.test;
-import static org.ops4j.pax.exam.CoreOptions.bundle;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.CoreOptions.options;
import static org.ops4j.pax.exam.CoreOptions.provision;
import static org.ops4j.pax.exam.MavenUtils.asInProject;
-import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.with;
import java.io.File;
-import java.net.URL;
+import java.io.InputStream;
import org.apache.felix.ipojo.metadata.Element;
+import org.apache.felix.ipojo.test.helpers.IPOJOHelper;
+import org.apache.felix.ipojo.test.helpers.OSGiHelper;
import org.apache.felix.ipojo.tinybundles.BundleAsiPOJO;
import org.apache.felix.ipojo.transaction.test.component.ComponentUsingAnnotations;
import org.apache.felix.ipojo.transaction.test.component.FooImpl;
@@ -60,33 +60,24 @@
public static Option[] configure() {
ROOT.mkdirs();
- URL service = TinyBundles.newBundle()
- .addClass(CheckService.class)
- .addClass(Foo.class)
- .prepare(
- with()
- .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
- .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
- )
- .build( TinyBundles.asURL());
-
- String fooimpl = TinyBundles.newBundle()
- .addClass(FooImpl.class)
- .prepare(
- with()
- .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
- .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
- )
- .build( new BundleAsiPOJO(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml")) ).toExternalForm();
-
- String test = TinyBundles.newBundle()
- .addClass(ComponentUsingAnnotations.class)
- .prepare(
- with()
- .set(Constants.BUNDLE_SYMBOLICNAME,"Transaction Annotation Test")
- .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
- )
- .build( new BundleAsiPOJO(new File(ROOT, "annotations.jar"), new File(TEST, "annotation.xml")) ).toExternalForm();
+ InputStream service = TinyBundles.newBundle()
+ .add(CheckService.class)
+ .add(Foo.class)
+ .set(Constants.BUNDLE_SYMBOLICNAME,"Service")
+ .set(Constants.EXPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+ .build( TinyBundles.withBnd());
+
+ InputStream fooimpl = TinyBundles.newBundle()
+ .add(FooImpl.class)
+ .set(Constants.BUNDLE_SYMBOLICNAME,"Foo Provider")
+ .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service")
+ .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "FooImpl.jar"), new File(TEST, "foo.xml")) );
+
+ InputStream test = TinyBundles.newBundle()
+ .add(ComponentUsingAnnotations.class)
+ .set(Constants.BUNDLE_SYMBOLICNAME,"TransactionAnnotationTest")
+ .set(Constants.IMPORT_PACKAGE, "org.apache.felix.ipojo.transaction.test.service, javax.transaction")
+ .build( BundleAsiPOJO.asiPOJOBundle(new File(ROOT, "annotations.jar"), new File(TEST, "annotation.xml")) );
Option[] opt = options(
@@ -96,17 +87,14 @@
mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo").version(asInProject()),
mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.handler.transaction").version(asInProject()),
mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.transaction").version(asInProject()),
- mavenBundle()
- .groupId( "org.ops4j.pax.swissbox" )
- .artifactId( "pax-swissbox-tinybundles" )
- .version(asInProject()),
- bundle(service.toExternalForm()),
- bundle(fooimpl),
- bundle(test)
- )
+ mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo.test.helpers").version(asInProject())
+ ),
+ provision(
+ service,
+ fooimpl,
+ test
)
-
- ;
+ );
return opt;
}
@@ -154,7 +142,8 @@
private Bundle getBundle() {
for(Bundle b : context.getBundles()) {
- if ("Transaction Annotation Test".equals(b.getSymbolicName())) {
+ System.out.println(b.getSymbolicName());
+ if ("TransactionAnnotationTest".equals(b.getSymbolicName())) {
return b;
}
}