Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Once you get the bundle, just install and start it in the OSGi Framework shell:

Code Block
nonexmlnone
xml
titleFelix
start file:/BUNDLE_URL.jar
Code Block
nonexmlnone
xml
titleEquinox
install file:/BUNDLE_URL.jar
Bundle X installed
start X

Then, you can use it to introspect the system by launching the arch command.

Code Block
xml
xml
arch => displays instances name & state (equivalent to arch \-instances)
arch -instance $instance_name => displays complete information about the instance $instance_name
arch -factories => display the list of available factories
arch -factory $factory_name => display complete information about the factory $factory_name
arch -handlers => list available handlers

...

When you launch the arch command, the list of created instances (enabling architecture introspection) is displayed.

Code Block
xml
xml
-> arch
Instance ArchCommand -> valid
Instance spell.english.EnglishDictionary-0 -> valid
Instance spell.checker.SpellCheck-0 -> valid
Instance spell.gui.SpellCheckerGui-0 -> valid

To get more information on an instance, launch arch -instance the_instance_name

Code Block
xml
xml
-> arch -instance spell.checker.SpellCheck-0                                    
instance component.type="spell.checker.SpellCheck" state="valid" bundle="8" name="spell.checker.SpellCheck-0"
	handler state="valid" name="org.apache.felix.ipojo.handlers.dependency.DependencyHandler"
		requires optional="false" aggregate="false" state="resolved" binding-policy="dynamic" specification="spell.services.DictionaryService"
	handler state="valid" name="org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler"
		provides service.id="36" state="registered" specifications="[spell.services.SpellChecker]"
			property value="spell.checker.SpellCheck" name="factory.name"
			property value="spell.checker.SpellCheck-0" name="instance.name"
	handler state="valid" name="org.apache.felix.ipojo.handlers.architecture.ArchitectureHandler"
-> 

Instance architecture is organized as follows:
On the first line, are displayed the component type (i.e. factory), the instance state (valid or invalid), the bundle from which the instance is created, and the instance name.
Then, the information is organized handler by handler (a piece of container). For each handler plugged on the instance can participate to the instance architecture. For each handler its name (such as {{ org.apache.felix.ipojo.handlers.dependency.DependencyHandler}} for iPOJO service dependencies, {{ org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler}} for iPOJO service providing...) and the state (either valid or invalid are displayed. Remember that an instance is valid only and only if all plugged handlers are valid.
The org.apache.felix.ipojo.handlers.dependency.DependencyHandler provides data on service dependencies and more precisely on the state of service dependencies. In the previous example, the dependency on {{ spell.services.DictionaryService}} was resolved. On the following example, the same dependency is no more resolved:

Code Block
xml
xml
instance component.type="spell.checker.SpellCheck" state="invalid" bundle="8" name="spell.checker.SpellCheck-0"
	handler state="invalid" name="org.apache.felix.ipojo.handlers.dependency.DependencyHandler"
		requires optional="false" aggregate="false" state="unresolved" binding-policy="dynamic" specification="spell.services.DictionaryService"
	handler state="valid" name="org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler"
		provides state="unregistered" specifications="[spell.services.SpellChecker]"
			property value="spell.checker.SpellCheck" name="factory.name"
			property value="spell.checker.SpellCheck-0" name="instance.name"
	handler state="valid" name="org.apache.felix.ipojo.handlers.architecture.ArchitectureHandler" 

Notes that, the instance also becomes invalid and that the provided service is unregistered.
If the provider comes back, the dependency becomes resolved and the instance becomes valid
If an instance begins to use a service, the bound providers are described in the instance architecture:

Code Block
xml
xml
-> arch -instance spell.checker.SpellCheck-0 
instance component.type="spell.checker.SpellCheck" state="valid" bundle="8" name="spell.checker.SpellCheck-0"
	object name="spell.checker.SpellCheck@e222eb"
	handler state="valid" name="org.apache.felix.ipojo.handlers.dependency.DependencyHandler"
		requires optional="false" aggregate="false" state="resolved" binding-policy="dynamic" specification="spell.services.DictionaryService"
			uses service.id="41" instance.name="spell.english.EnglishDictionary-0"
	handler state="valid" name="org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandler"
		provides service.id="42" state="registered" specifications="[spell.services.SpellChecker]"
			property value="spell.checker.SpellCheck" name="factory.name"
			property value="spell.checker.SpellCheck-0" name="instance.name"
	handler state="valid" name="org.apache.felix.ipojo.handlers.architecture.ArchitectureHandler"

...

To list available factories (i.e. component types), launch the arch -factories command:

Code Block
xml
xml
-> arch -factories
Factory spell.checker.SpellCheck (VALID)
Factory spell.gui.SpellCheckerGui (VALID)
Factory spell.english.EnglishDictionary (VALID)

For each available (public) factories,the name and the sate are displayed. A factory is valid if and only if all required handlers are available. To get more information on a factory launch the arch -factory factory_name command:

Code Block
xml
xml
factory implementation-class="spell.english.EnglishDictionary" state="valid" bundle="7" name="spell.english.EnglishDictionary"
	provides specification="spell.services.DictionaryService"
	missinghandlers list="[]"
	requiredhandlers list="[org.apache.felix.ipojo:provides, org.apache.felix.ipojo:architecture]"

...

You can also list available handlers with the arch -handlers command.

Code Block
xml
xml
-> arch -handlers
Handler org.apache.felix.ipojo:controller (VALID)
Handler org.apache.felix.ipojo:callback (VALID)
Handler org.apache.felix.ipojo:requires (VALID)
Handler org.apache.felix.ipojo:provides (VALID)
Handler org.apache.felix.ipojo:properties (VALID)
Handler org.apache.felix.ipojo:architecture (VALID)
Handler org.apache.felix.ipojo.handler.whiteboard:wbp (VALID)

...