iPOJO Arch commandArchitecture introspection is required when the system doesn't work as expected. In this case, having a quick access to instances states and interconnection is a stringent requirement. The arch command allows getting these data from the Felix Shell and from the Equinox shell. DownloadThe Felix command is available from the download page and in the arch folder of the iPOJO trunk http://svn.apache.org/repos/asf/felix/trunk/ipojo/arch/. UsageOnce you get the bundle, just install and start it in the OSGi Framework shell: Felix start file:/BUNDLE_URL.jar Equinox install file:/BUNDLE_URL.jar Bundle X installed start X Then, you can use it to introspect the system by launching the arch command. 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 Reading instance architectureWhen you launch the arch command, the list of created instances (enabling architecture introspection) is displayed. -> 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 -> 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: 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. -> 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" In the previous case, the dependency on {{
spell.services.DictionaryService}} use the service 41 from the iPOJO
instance named {{ spell.english.EnglishDictionary-0}} List available factoriesTo list available factories (i.e. component types), launch the arch -factories command: -> 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: 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]" On the first line, you get the implementation class of the type, the state of the factory, the bundle declaring the type and the name of the type. Then you get the list of required and missing handlers. List available handlersYou can also list available handlers with the arch -handlers command. -> 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.white-board-pattern:wbp (VALID) Handlers with the org.apache.felix.ipojo namespace (section before :) are core handlers (provided by the iPOJO bundle). Others are external handlers (provided by others bundles). |
OverviewGetting Started
User Guide
Tools
Developer Guide
Misc & Contact
|