[jboss-osgi-commits] JBoss-OSGI SVN: r87622 - in projects/jboss-osgi/trunk: build/docbook/en/modules and 6 other directories.
jboss-osgi-commits at lists.jboss.org
jboss-osgi-commits at lists.jboss.org
Tue Apr 21 08:25:03 EDT 2009
Author: thomas.diesler at jboss.com
Date: 2009-04-21 08:25:01 -0400 (Tue, 21 Apr 2009)
New Revision: 87622
Added:
projects/jboss-osgi/trunk/build/docbook/en/modules/ch01-introduction.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/ch02-getting-started.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/ch03-framework-integration.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/ch04-developer-guide.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/ch05-provided-bundles.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/ch06-provided-examples.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/ch07-references.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/ch08-getting-support.xml
Removed:
projects/jboss-osgi/trunk/build/docbook/en/modules/devguide.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/frameworkintegration.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/gettingsupport.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/introduction.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/providedservices.xml
projects/jboss-osgi/trunk/build/docbook/en/modules/references.xml
Modified:
projects/jboss-osgi/trunk/build/docbook/en/master.xml
projects/jboss-osgi/trunk/bundle/common/src/main/java/org/jboss/osgi/common/log/LogServiceTracker.java
projects/jboss-osgi/trunk/spi/src/main/java/org/jboss/osgi/spi/service/microcontainer/package.html
projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/EndpointService.java
projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/log/LogServiceTestCase.java
projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/microcontainer/bundle/MBeanTestService.java
projects/jboss-osgi/trunk/testsuite/example/src/test/resources/example/http/example-http.bnd
Log:
Add docbook chapter on provided examples
Modified: projects/jboss-osgi/trunk/build/docbook/en/master.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/master.xml 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/build/docbook/en/master.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -10,12 +10,13 @@
<toc/>
- <xi:include href="modules/introduction.xml"/>
- <xi:include href="modules/gettingstarted.xml"/>
- <xi:include href="modules/frameworkintegration.xml"/>
- <xi:include href="modules/devguide.xml"/>
- <xi:include href="modules/providedservices.xml"/>
- <xi:include href="modules/references.xml"/>
- <xi:include href="modules/gettingsupport.xml"/>
+ <xi:include href="modules/ch01-introduction.xml"/>
+ <xi:include href="modules/ch02-getting-started.xml"/>
+ <xi:include href="modules/ch03-framework-integration.xml"/>
+ <xi:include href="modules/ch04-developer-guide.xml"/>
+ <xi:include href="modules/ch05-provided-bundles.xml"/>
+ <xi:include href="modules/ch06-provided-examples.xml"/>
+ <xi:include href="modules/ch07-references.xml"/>
+ <xi:include href="modules/ch08-getting-support.xml"/>
</book>
\ No newline at end of file
Copied: projects/jboss-osgi/trunk/build/docbook/en/modules/ch01-introduction.xml (from rev 87606, projects/jboss-osgi/trunk/build/docbook/en/modules/introduction.xml)
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/ch01-introduction.xml (rev 0)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/ch01-introduction.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -0,0 +1,299 @@
+<!--
+ $Id$
+-->
+<chapter xml:id="ChapIntroduction">
+
+ <title>Introduction</title>
+
+ <sect1 xml:id="SecWhatIsOsgi">
+ <title>What is OSGi</title>
+
+ <para>The <ulink url="http://www2.osgi.org/Release4/HomePage">Open Services Gateway Initiative (OSGi)</ulink>,
+ specifications define a standardized, component-oriented, computing environment for networked services that is the foundation
+ of an enhanced service-oriented architecture.</para>
+
+ <para>The OSGi specification defines two things:</para>
+
+ <itemizedlist>
+ <listitem>A set of services that an OSGi container must implement</listitem>
+ <listitem>A contract between the container and your application</listitem>
+ </itemizedlist>
+
+ <para>Developing on the OSGi platform means first building your application using OSGi APIs, then deploying it in an OSGi container.</para>
+
+ <para>The <ulink url="http://www.jboss.org/community/docs/DOC-13273">JBossOSGi Project</ulink> project has two distinct goals</para>
+
+ <orderedlist>
+ <listitem>Provide an integration platform for 3rd party OSGi Frameworks</listitem>
+ <listitem>Provide an OSGi compliant framework implementation based on the <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink></listitem>
+ </orderedlist>
+
+
+ <emphasis role="bold">What does OSGi offer to Java developers?</emphasis>
+
+ <para>OSGi modules provide classloader semantics to partially expose code that can then be consumed by other modules.
+ The implementation details of a module, although scoped public by the Java programming language, remain private to the module.
+ On top of that you can install multiple versions of the same code and resolve dependencies by version and other criteria.
+ OSGi also offers advanced security and lifecycle, which I'll explain in more detail further down.</para>
+
+ <emphasis role="bold">What kind of applications benefit from OSGi?</emphasis>
+
+ <para>Any application that is designed in a modular fashion where it is necessary to start, stop, update individual modules with minimal impact
+ on other modules. Modules can define their own transitive dependencies without the need to resolve these dependencies at the container level.
+ The OSGi platform builds an exellent foundation for the next generation JBoss ESB for example.</para>
+
+ <emphasis role="bold">Should Java EE developers adopt the OSGi programming model?</emphasis>
+
+ <para>Probably not. The OSGi runtime may be used internally by Java EE container providers to achieve the desired isolation and configuration
+ flexibility that the container whishes to provide. At the application programming level, the Java EE model will continue to exist in its own right,
+ wheras the OSGi model may provide the more suitable runtime environment for applications that require the modular isolation, security and lifecycle
+ management that OSGi offers.</para>
+
+ </sect1>
+
+ <sect1 xml:id="SecFramworkOverview">
+ <title>OSGi Framework Overview</title>
+
+ <para>The functionality of the Framework is divided in the following layers:</para>
+
+ <itemizedlist>
+ <listitem>Security Layer</listitem>
+ <listitem>Module Layer</listitem>
+ <listitem>Life Cycle Layer</listitem>
+ <listitem>Service Layer</listitem>
+ <listitem>Actual Services</listitem>
+ </itemizedlist>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/osgi-layers.png"/>
+ </imageobject>
+ </mediaobject>
+
+
+ <emphasis role="bold">OSGi Security Layer</emphasis>
+
+ <para>The OSGi Security Layer is an optional layer that underlies the OSGi Service Platform.
+ The layer is based on the Java 2 security architecture. It provides the infrastructure to deploy and manage
+ applications that must run in fine grained controlled environments.</para>
+
+ <para>The OSGi Service Platform can authenticate code in the following ways:</para>
+
+ <itemizedlist>
+ <listitem>By location</listitem>
+ <listitem>By signer</listitem>
+ </itemizedlist>
+
+ <para>For example, an Operator can grant the ACME company the right to use networking on their devices.
+ The ACME company can then use networking in every bundle they digitally sign and deploy on the Operator’s device.
+ Also, a specific bundle can be granted permission to only manage the life cycle of bundles that are signed by the ACME company.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/osgi-delegation.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <emphasis role="bold">OSGi Module Layer</emphasis>
+
+ <para>The OSGi Module Layer provides a generic and standardized solution for Java modularization.
+ The Framework defines a unit of modularization, called a bundle. A bundle is comprised of Java classes and other resources,
+ which together can provide functions to end users. Bundles can share Java packages among an exporter bundle and an importer bundle
+ in a well-defined way.</para>
+
+ <para>Once a <emphasis role="bold">Bundle</emphasis> is started, its functionality is provided and services are exposed to other bundles installed in the OSGi Service Platform.
+ A bundle can carry descriptive information about itself in the manifest file that is contained in its JAR file.
+ Here are a few important <emphasis role="bold">Manifest Headers</emphasis> defined by the OSGi Framework:</para>
+
+ <itemizedlist>
+ <listitem><emphasis role="bold">Bundle-Activator</emphasis> - class used to start, stop the bundle</listitem>
+ <listitem><emphasis role="bold">Bundle-SymbolicName</emphasis> - identifies the bundle</listitem>
+ <listitem><emphasis role="bold">Bundle-Version</emphasis> - specifies the version of the bundle</listitem>
+ <listitem><emphasis role="bold">Export-Package</emphasis> - declaration of exported packages</listitem>
+ <listitem><emphasis role="bold">Import-Package</emphasis> - declaration of imported packages</listitem>
+ </itemizedlist>
+
+ <para>The notion of OSGi Version Range describes a range of versions using a mathematical interval notation. For example</para>
+
+ <programlisting>
+ Import-Package: com.acme.foo;version="[1.23, 2)", com.acme.bar;version="[4.0, 5.0)"
+ </programlisting>
+
+ <para>With the OSGi Class Loading Architecture many bundles can share a single virtual machine (VM).
+ Within this VM, bundles can hide packages and classes from other bundles, as well as share packages with other bundles.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/osgi-classloader.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>For example, the following import and export definition resolve correctly because the version range in the import definition
+ matches the version in the export definition:</para>
+
+ <programlisting>
+ A: Import-Package: p; version="[1,2)"
+ B: Export-Package: p; version=1.5.1
+ </programlisting>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/osgi-version-constraint.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>Appart from bundle versions, OSGi Attribute Matching is a generic mechanism to allow the importer and exporter to influence the
+ matching process in a declarative way. For example, the following statements will match.</para>
+
+ <programlisting>
+ A: Import-Package: com.acme.foo;company=ACME
+ B: Export-Package: com.acme.foo;company=ACME; security=false
+ </programlisting>
+
+ <para>An exporter can limit the visibility of the classes in a package with the include and exclude directives on the export definition.</para>
+
+ <programlisting>
+ Export-Package: com.acme.foo; include:="Qux*,BarImpl"; exclude:=QuxImpl
+ </programlisting>
+
+ <emphasis role="bold">OSGi Life Cycle Layer</emphasis>
+
+ <para>The Life Cycle Layer provides an API to control the security and life cycle operations of bundles.</para>
+
+ <para>A bundle can be in one of the following states:</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/osgi-life-cycle.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>A bundle is activated by calling its <emphasis role="bold">Bundle Activator</emphasis> object, if one exists.
+ The BundleActivator interface defines methods that the Framework invokes when it starts and stops the bundle.</para>
+
+ <para>A Bundle Context object represents the execution context of a single bundle within the OSGi Service Platform,
+ and acts as a proxy to the underlying Framework. A <emphasis role="bold">Bundle Context</emphasis> object is created by the Framework when a bundle is started.
+ The bundle can use this private BundleContext object for the following purposes:</para>
+
+ <itemizedlist>
+ <listitem>Installing new bundles into the OSGi environment</listitem>
+ <listitem>Interrogating other bundles installed in the OSGi environment</listitem>
+ <listitem>Obtaining a persistent storage area</listitem>
+ <listitem>Retrieving service objects of registered services</listitem>
+ <listitem>Registering services in the Framework service</listitem>
+ <listitem>Subscribing or unsubscribing to Famework events</listitem>
+ </itemizedlist>
+
+ <emphasis role="bold">OSGi Service Layer</emphasis>
+
+ <para>The OSGi Service Layer defines a dynamic collaborative model that is highly integrated with the Life Cycle Layer.
+ The service model is a publish, find and bind model. A service is a normal Java object that is registered under one or more
+ Java interfaces with the service registry.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/osgi-service-registration.png"/>
+ </imageobject>
+ </mediaobject>
+ </sect1>
+
+ <sect1 xml:id="SecServiceCompendium">
+ <title>OSGi Service Compendium</title>
+
+ <para>The OSGi Service Compendium specifies a number of services that may be available in an OSGi runtime environment.
+ Although the OSGi Framework specification is useful in itself already, it only defines the OSGi core infrastructure.
+ The services defined in the compendium specification define the scope and functionality of some common services that
+ bundle developers might want to use. Here is a quick summary:</para>
+
+ <emphasis role="bold">Log Service</emphasis>
+ <para>The Log Service provides a general purpose message logger for the OSGi Service Platform. It consists of two services,
+ one for logging information and another for retrieving current or previously recorded log information.</para>
+
+ <emphasis role="bold">Http Service</emphasis>
+ <para>The Http Service supports two standard techniques for registering servlets and resources to develop communication and
+ user interface solutions for standard technologies such as HTTP, HTML, XML, etc.</para>
+
+ <emphasis role="bold">Device Access Specification</emphasis>
+ <para>The Device Access specification supports the coordination of automatic detection and attachment of existing devices on
+ an OSGi Service Platform, facilitates hot-plugging and -unplugging of new devices, and downloads and installs device drivers on demand.</para>
+
+ <emphasis role="bold">Configuration Admin Service</emphasis>
+ <para>The Configuration Admin service allows an Operator to set the configuration information of deployed bundles.</para>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/osgi-config-service.png" contentwidth="450"/>
+ </imageobject>
+ </mediaobject>
+
+ <emphasis role="bold">Metatype Service</emphasis>
+ <para>The Metatype Service specification defines interfaces that allow bundle developers to describe attribute
+ types in a computer readable form using so-called metadata.</para>
+
+ <emphasis role="bold">Preferences Service</emphasis>
+ <para>The Preferences Service allows storage of data that is specific to a particular user.</para>
+
+ <emphasis role="bold">User Admin Service</emphasis>
+ <para>Bundles can use the User Admin Service to authenticate an initiator and represent this authentication as an Authorization object.
+ Bundles that execute actions on behalf of this user can use the Authorization object to verify if that user is authorized.</para>
+
+ <emphasis role="bold">Wire Admin Service</emphasis>
+ <para>The Wire Admin Service is an administrative service that is used to control a wiring topology in the OSGi Service Platform.
+ It is intended to be used by user interfaces or management programs that control the wiring of services in an OSGi Service Platform.</para>
+
+ <emphasis role="bold">IO Connector Service</emphasis>
+ <para>The IO Connector Service specification adopts the Java 2 Micro Edition (J2ME) javax.microedition.io packages as a basic communications
+ infrastructure.</para>
+
+ <emphasis role="bold">UPnP Device Service</emphasis>
+ <para>The UPnP Device Service specifies how OSGi bundles can be developed that interoperate with UPnP (Universal Plug and Play)
+ devices and UPnP control points.</para>
+
+ <emphasis role="bold">Declarative Services Specification</emphasis>
+ <para>The Declarative Services specification addresses some of the complications that arise when the OSGi service model is
+ used for larger systems and wider deployments, such as: Startup Time, Memory Footprint, Complexity. The service component
+ model uses a declarative model for publishing, finding and binding to OSGi services.</para>
+
+ <emphasis role="bold">Event Admin Service</emphasis>
+ <para>The Event Admin Service provides an inter-bundle communication mechanism. It is based on a event publish and subscribe model, popular in many message based systems.</para>
+
+ <emphasis role="bold">Deployment Admin Service</emphasis>
+ <para>The Deployment Admin Service specification, standardizes the access to some of the responsibilities of the management agent:
+ that is, the lifecycle management of interlinked resources on an OSGi Service Platform.</para>
+
+ <emphasis role="bold">Auto Configuration Specification</emphasis>
+ <para>The Auto Configuration Specification is to allow the configuration of bundles.
+ These bundles can be embedded in Deployment Packages or bundles that are already present on the OSGi Service Platform.</para>
+
+ <emphasis role="bold">Application Admin Service</emphasis>
+ <para>The Application Admin Service is intended to simplify the management of an environment with many different types of applications
+ that are simultaneously available.</para>
+
+ <emphasis role="bold">DMT Admin Service</emphasis>
+ <para>The DMT Admin Service specification defines an API for managing a device using concepts from the OMA DM specifications.</para>
+
+ <emphasis role="bold">Monitor Admin Service</emphasis>
+ <para>The Monitor Admin Service specification outlines how a bundle can publish Status Variables and how administrative bundles
+ can discover Status Variables as well as read and reset their values.</para>
+
+ <emphasis role="bold">Foreign Application Access Specification</emphasis>
+ <para>The Foreign Application Access specification is to enable foreign application models like MIDP, Xlets, Applets, other Java
+ application models to participate in the OSGi service oriented architecture.</para>
+
+ <emphasis role="bold">Service Tracker Specification</emphasis>
+ <para>The Service Tracker specification defines a utility class, ServiceTracker, that makes tracking the registration, modification,
+ and unregistration of services much easier.</para>
+
+ <emphasis role="bold">XML Parser Service Specification</emphasis>
+ <para>The XML Parser Service specification addresses how the classes defined in JAXP can be used in an OSGi Service Platform.</para>
+
+ <emphasis role="bold">Position Specification</emphasis>
+ <para>The Position Specification provides bundle developers with a consistent way of handling geographic positions in OSGi applications.</para>
+
+ <emphasis role="bold">Measurement and State Specification</emphasis>
+ <para>The Measurement and State Specification provides a consistent way of handling a diverse range of measurements for bundle developers.</para>
+
+ <emphasis role="bold">Execution Environment Specification</emphasis>
+ <para>This Execution Environment Specification defines different execution environments for OSGi Server Platform Servers.</para>
+ </sect1>
+
+</chapter>
Copied: projects/jboss-osgi/trunk/build/docbook/en/modules/ch02-getting-started.xml (from rev 87613, projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml)
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/ch02-getting-started.xml (rev 0)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/ch02-getting-started.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -0,0 +1,355 @@
+<!--
+ $Id$
+-->
+<chapter xml:id="ChapGettingStarted">
+
+ <title>Getting Started</title>
+
+ <para>This chapter takes you through the first steps of getting JBossOSGi and
+ provides the initial pointers to get up and running.</para>
+
+ <sect1 xml:id="SecInstall">
+ <title>Installing JBossOSGi</title>
+
+ <para>JBossOSGi is distributed as an <ulink url="http://izpack.org">IzPack</ulink> installer archive.
+ The installer is available from the JBossOSGi <ulink url="https://sourceforge.net/project/showfiles.php?group_id=22866&package_id=316015">download area</ulink>.</para>
+
+ <para>To run the installer execute the following command:</para>
+
+ <!-- [TODO] release update -->
+ <programlisting>
+ java -jar jboss-osgi-installer-1.0.0.Beta1.jar
+ </programlisting>
+
+ <para>The installer first shows a welcome screen</para>
+
+ <!-- [TODO] release update -->
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/izpack-welcome.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>Then you select the installation path for the JBossOSGi distribution. This is the directory where you find the binary build artifacts,
+ the java sources, documentation and the JBossOSGi Runtime.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/izpack-installpath.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>The installer contains multiple installation packs. Greyed packs are required, others are optional and can be deselected.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/izpack-packs.jpg"/>
+ </imageobject>
+ </mediaobject>
+
+ <itemizedlist>
+ <listitem><emphasis role="bold">JBossOSGi Distribution</emphasis> - Documentation, Binary Artifacts and Sources</listitem>
+ <listitem><emphasis role="bold">JBossOSGi Runtime</emphasis> - Standalone JBossOSGi Runtime based on JBossAS</listitem>
+ <listitem><emphasis role="bold">JBossOSGi Integration</emphasis> - Integration with an existing JBossAS instance</listitem>
+ </itemizedlist>
+
+ <para>Next, you will be presented with the choice of supported OSGi Frameworks.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/izpack-target-framework.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>In case you have selected 'JBossOSGi Integration', you will be presented with the choice of supported target containers.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/izpack-target-server.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>You will then have to point the installer to your existing <ulink url="http://http://jboss.org/jbossas">JBossAS</ulink> installation.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/izpack-jboss-home.jpg"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>You can then verify the selected installation options and proceed with the actual installation.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/izpack-verify.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>The installer reports its installation progress and finally displays a confirmation screen. You can now optionally generate
+ an "automatic installation script" that you can use when you want to repeat what you have just done without user interaction.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/izpack-done.png"/>
+ </imageobject>
+ </mediaobject>
+ </sect1>
+
+ <sect1 xml:id="SecRuntime">
+ <title>JBossOSGi Runtime</title>
+
+ <para>If you selected 'JBossOSGi Runtime' during installation you should see a <emphasis role="bold">runtime</emphasis> folder, which contains
+ the JBossOSGi Runtime distribution.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/izpack-structure.jpg"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>The JBossOSGi Runtime is a customized version of the <ulink url="http://www.jboss.org/jbossas">JBoss Application Server</ulink>. From that we removed the services
+ that are not absolutely necessary to run the installed OSGi Framework. Consequently, you can start the JBossOSGi Runtime in the same
+ way as you start <ulink url="http://www.jboss.org/jbossas">JBossAS</ulink></para>
+
+ <programlisting>
+ [tdiesler at tdvaio runtime]$ bin/run.sh
+ =========================================================================
+
+ JBoss Bootstrap Environment
+
+ JBOSS_HOME: /usr/java/jboss-osgi-1.0.0.Beta1/runtime
+
+ ...
+
+ =========================================================================
+
+ 14:43:43,598 INFO [ServerImpl] Starting JBoss (Microcontainer)...
+ ...
+ 14:43:52,298 INFO [FelixIntegration] OSGi Integration Felix - 1.0.0.Beta1
+ 14:43:52,692 INFO [FelixIntegration] Installed bundle: org.osgi.compendium
+ 14:43:52,700 INFO [FelixIntegration] Installed bundle: org.jboss.osgi.service.logging
+ 14:43:52,701 INFO [FelixIntegration] Started bundle: org.osgi.compendium
+ 14:43:52,766 INFO [FelixIntegration] Started bundle: org.jboss.osgi.service.logging
+ 14:43:53,290 INFO [OSGiDeployer] Installed: jboss-osgi-service-webconsole [3][INSTALLED]
+ 14:43:53,297 INFO [OSGiDeployer] Installed: org.apache.felix.bundlerepository [4][INSTALLED]
+ 14:43:53,308 INFO [OSGiDeployer] Installed: org.apache.felix.configadmin [5][INSTALLED]
+ 14:43:53,322 INFO [OSGiDeployer] Installed: org.apache.felix.http.jetty [6][INSTALLED]
+ 14:43:53,328 INFO [OSGiDeployer] Installed: org.apache.felix.log [7][INSTALLED]
+ 14:43:53,333 INFO [OSGiDeployer] Installed: org.apache.felix.metatype [8][INSTALLED]
+ ...
+ 14:43:55,250 INFO [ServerImpl] JBoss (Microcontainer) [5.0.1.GA ...] <emphasis role="bold">Started in 11s:645ms</emphasis>
+ </programlisting>
+
+ <emphasis role="bold">Provided Examples</emphasis>
+
+ <para>JBossOSGi comes with a number of examples that you can build and deploy. Each example
+ deployment is verified by an accompaning test case</para>
+
+ <itemizedlist>
+ <listitem><emphasis role="bold">HTTP Service</emphasis> - Register servlets and resources with the HTTP Service</listitem>
+ <listitem><emphasis role="bold">Log Service</emphasis> - Interact with a local and remote Log Service</listitem>
+ <listitem><emphasis role="bold">Microcontainer Service</emphasis> - Register an MBean through the Microcontainer</listitem>
+ </itemizedlist>
+
+ <programlisting>
+ [tdiesler at tddell example]$ mvn package
+ [INFO] ------------------------------------------------------------------------
+ [INFO] Building JBossOSGi - Testsuite Examples
+ [INFO] task-segment: [package]
+ [INFO] ------------------------------------------------------------------------
+ ...
+ build-example-jars:
+ # example-log (example-log.jar) 2
+ # example-http (example-http.jar) 4
+ # example-microcontainer (example-microcontainer.jar) 4
+ ...
+ Running org.jboss.test.osgi.example.log.LogServiceTestCase
+ Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.849 sec
+ </programlisting>
+
+ <emphasis role="bold">Bundle Deployment</emphasis>
+
+ <para>Bundle deployment works, as you would probably expect, by dropping your OSGi Bundle into the
+ JBossOSGi Runtime <emphasis role="bold">deploy</emphasis> folder.</para>
+
+ <programlisting>
+ [tdiesler at tdvaio testsuite]$ cp .../test-libs/example/example-http.jar .../runtime/server/default/deploy
+ ...
+ 13:59:38,284 INFO [BundleRealDeployer] Installed: example-http [9]
+ 13:59:38,289 INFO [example-http] BundleEvent INSTALLED
+ 13:59:38,297 INFO [example-http] BundleEvent RESOLVED
+ 13:59:38,304 INFO [example-http] ServiceEvent REGISTERED
+ 13:59:38,306 INFO [BundleStartStopDeployer] Started: example-http [9]
+ 13:59:38,306 INFO [example-http] BundleEvent STARTED
+ </programlisting>
+
+ <emphasis role="bold">Managing installed Bundles</emphasis>
+
+ <para>JBossOSGi comes with a simple Web Console, which is currently based on the
+ <ulink url="http://felix.apache.org/site/apache-felix-web-console.html">Apache Felix Web Console</ulink> project.
+ By default the JBossOSGi Web Console is available at <ulink url="http://localhost:8090/jboss-osgi">http://localhost:8090/jboss-osgi</ulink>.
+ </para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/webconsole.png" contentwidth="450"/>
+ </imageobject>
+ </mediaobject>
+
+ <note>
+ <title>TODO: Cleanup and document console provided functionality</title>
+ </note>
+ </sect1>
+
+ <sect1 xml:id="SecHudson">
+ <title>Hudson QA Environment</title>
+
+ <emphasis role="bold">Setup the Hudson QA Environment</emphasis>
+
+ <para>The JBossOSGi <ulink url="http://jbmuc.dyndns.org:8280/hudson">Hudson QA Environment</ulink> is an integral part of the JBossOSGi code base.
+ It is designed for simplicity because we believe that comprehensive QA will only get done if it is dead simple to do so.</para>
+
+ <para>Consequently, you only have to execute two simple ant targets to setup the QA environment that was used to QA the JBossOSGi
+ release that you currently work with.</para>
+
+ <para>If in future we should discover a problem with a previous JBossOSGi release, it will be possible to provide a patch and verify that change using
+ the original QA environment for that release.</para>
+
+ <para>With every release we test the matrix of supported target containers and JDKs.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/hudson-home.png" contentwidth="450"/>
+ </imageobject>
+ </mediaobject>
+
+ <emphasis role="bold">Set Hudson Properties</emphasis>
+
+ <para>You need to set a few properties, especially these</para>
+
+ <itemizedlist>
+ <listitem>hudson.maven.path</listitem>
+ <listitem>hudson.username</listitem>
+ <listitem>hudson.password</listitem>
+ <listitem>hudson.root</listitem>
+ </itemizedlist>
+
+ <programlisting>
+ cd build/hudson
+ cp ant.properties.example ant.properties
+ vi ant.properties
+
+ # The JBoss settings
+ jboss.server.instance=default
+ jboss.bind.address=127.0.0.1
+
+ # JDK settings
+ java.home.jdk15=/usr/java/jdk1.5.0_17
+ java.home.jdk16=/usr/java/jdk1.6.0_11
+
+ # Hudson QA Environment
+ hudson.username=chageme
+ hudson.password=chageme
+
+ hudson.maven.path=/usr/java/apache-maven-2.0.9
+
+ hudson.root=/home/tdiesler/workspace/hudson/jboss-osgi
+
+ hudson.maven.profile=$HUDSONDIR/profiles.xml.local.qa
+
+ hudson.host=jbpm.dyndns.org
+ hudson.admin.port=8250
+ hudson.http.port=8280
+
+ #hudson.jboss501.zip=file:///home/tdiesler/Download/java/jboss/jboss-5.0.1.GA.zip
+
+ hudson.mail.recipients=
+ hudson.smtp.host=localhost
+
+ # Hudson (1.290)
+ apache-tomcat=5.5.20
+ sun-hudson=2402/128862
+ </programlisting>
+
+ <emphasis role="bold">Run Hudson Setup</emphasis>
+
+ <programlisting>
+ [tdiesler at tdvaio hudson]$ ant hudson-setup
+ Buildfile: build.xml
+
+ init:
+ [echo] V1.0.0.Beta1
+
+ init-hudson:
+ [echo]
+ [echo] hudson.root = /home/tdiesler/workspace/hudson/jboss-osgi
+ [echo] hudson.home = /home/tdiesler/workspace/hudson/jboss-osgi/hudson-home
+ [echo]
+
+ ...
+
+ hudson-setup:
+ [copy] Copying 2 files to /home/.../hudson/jboss-osgi/apache-tomcat
+ ...
+ [echo]
+ [echo] *************************************
+ [echo] * Hudson setup successfully *
+ [echo] * ant hudson-start *
+ [echo] *************************************
+ [echo]
+ </programlisting>
+
+ <emphasis role="bold">Run Hudson Start</emphasis>
+
+ <programlisting>
+ [tdiesler at tdvaio hudson]$ ant hudson-start
+ Buildfile: build.xml
+
+ init:
+ [echo] V1.0.0.Beta1
+
+ init-hudson:
+ [echo]
+ [echo] hudson.root = /home/tdiesler/workspace/hudson/jboss-osgi
+ [echo] hudson.home = /home/tdiesler/workspace/hudson/jboss-osgi/hudson-home
+ [echo]
+
+ hudson-start:
+ [echo]
+ [echo] *************************************
+ [echo] * Hudson started successfully *
+ [echo] * http://localhost:8280/hudson *
+ [echo] *************************************
+ [echo]
+
+ BUILD SUCCESSFUL
+ </programlisting>
+
+ <emphasis role="bold">Run Hudson Stop</emphasis>
+
+ <programlisting>
+ [tdiesler at tdvaio hudson]$ ant hudson-stop
+ Buildfile: build.xml
+
+ init:
+ [echo] V1.0.0.Beta1
+
+ init-hudson:
+ [echo]
+ [echo] hudson.root = /home/tdiesler/workspace/hudson/jboss-osgi
+ [echo] hudson.home = /home/tdiesler/workspace/hudson/jboss-osgi/hudson-home
+ [echo]
+
+ hudson-stop:
+ [echo]
+ [echo] *************************************
+ [echo] * Hudson stopped successfully *
+ [echo] * ant hudson-start *
+ [echo] *************************************
+ [echo]
+
+ BUILD SUCCESSFUL
+ </programlisting>
+ </sect1>
+
+</chapter>
\ No newline at end of file
Copied: projects/jboss-osgi/trunk/build/docbook/en/modules/ch03-framework-integration.xml (from rev 87606, projects/jboss-osgi/trunk/build/docbook/en/modules/frameworkintegration.xml)
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/ch03-framework-integration.xml (rev 0)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/ch03-framework-integration.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -0,0 +1,136 @@
+<!--
+ $Id$
+-->
+<chapter xml:id="ChapFrameworkIntegration">
+
+ <title>Framework Integration</title>
+
+ <sect1 xml:id="SecIntFelix">
+ <title>Apache Felix Integration</title>
+
+ <para>JBossOSGi provides integration for the <ulink url="http://felix.apache.org">Apache Felix</ulink> OSGi Framework and some
+ of its core services</para>
+
+ <itemizedlist>
+ <listitem><ulink url="http://felix.apache.org/site/apache-felix-log-service.html">Log Service</ulink> - General purpose message logger</listitem>
+ <listitem><ulink url="http://felix.apache.org/site/apache-felix-http-service.html">HTTP Service</ulink> - Http access to servlets and resources</listitem>
+ <listitem><ulink url="http://felix.apache.org/site/apache-felix-configuration-admin-service.html">Config Admin Service</ulink> - Management of configuration data for configurable components</listitem>
+ </itemizedlist>
+
+ <para>The Apache Felix integration can be configured through a <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> beans
+ configuration</para>
+
+ <programlisting role="XML"><![CDATA[
+ cat server/default/deployers/osgi.deployer/META-INF/osgi-deployers-jboss-beans.xml
+
+ <deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <!-- The OSGiFramework -->
+ <bean name="jboss.osgi:service=Framework" class="org.jboss.osgi.felix.framework.FelixIntegration">
+ <property name="properties">
+ ...
+ </property>
+ <property name="autoStart">
+ <list elementClass="java.net.URL">
+ ...
+ </list>
+ </property>
+ </bean>
+ ...
+ </deployment>
+ ]]></programlisting>
+
+ <para>The following is a description of the configuration properties for the Apache Felix integration.</para>
+
+ <table>
+ <tr><th>Key</th><th>Value</th><th>Description</th></tr>
+ <tr valign="top">
+ <td>org.osgi.framework.storage</td>
+ <td>.../osgi-store</td>
+ <td>OSGi Framework storage area</td>
+ </tr>
+ <tr valign="top">
+ <td>org.osgi.framework.storage.clean</td>
+ <td>onFirstInit</td>
+ <td>Clean the storage area on first init</td>
+ </tr>
+ <tr valign="top">
+ <td>org.osgi.service.http.port</td>
+ <td>8090</td>
+ <td>The default Http Service port</td>
+ </tr>
+ <tr valign="top">
+ <td>felix.cm.dir</td>
+ <td>.../osgi-configadmin</td>
+ <td>Config Admin Service storage area</td>
+ </tr>
+ <tr valign="top">
+ <td>org.osgi.framework.system.packages</td>
+ <td>javax.management, javax.xml...</td>
+ <td>Packages provided by the OSGi System ClassLoader</td>
+ </tr>
+ <tr valign="top">
+ <td>org.jboss.osgi.deferred.start</td>
+ <td>true</td>
+ <td>Bundles can be deployed in any order</td>
+ </tr>
+ </table>
+ </sect1>
+
+ <sect1 xml:id="SecIntEquinox">
+ <title>Equinox Integration</title>
+
+ <para>JBossOSGi also provides basic integration for the <ulink url="http://www.eclipse.org/equinox">Eclpipse Equinox</ulink> OSGi Framework.</para>
+
+ <para>Equinox integration can be configured through a <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> beans
+ configuration</para>
+
+ <programlisting role="XML"><![CDATA[
+ <deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <!-- The OSGiFramework -->
+ <bean name="jboss.osgi:service=Framework" class="org.jboss.osgi.equinox.framework.EquinoxIntegration">
+ <property name="properties">
+ ...
+ </property>
+ <property name="autoStart">
+ <list elementClass="java.net.URL">
+ ...
+ </list>
+ </property>
+ </bean>
+ ...
+ </deployment>
+ ]]></programlisting>
+
+ </sect1>
+
+ <sect1 xml:id="SecIntKnopflerfish">
+ <title>Knopflerfish Integration</title>
+
+ <para>JBossOSGi provides basic integration for the <ulink url="http://www.knopflerfish.org">Makewave Knopflerfish</ulink> OSGi Framework.</para>
+
+ <para>Knopflerfish integration can be configured through a <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> beans
+ configuration</para>
+
+ <programlisting role="XML"><![CDATA[
+ <deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+ <!-- The OSGiFramework -->
+ <bean name="jboss.osgi:service=Framework" class="org.jboss.osgi.knopflerfish.KnopflerfishIntegration">
+ <property name="properties">
+ ...
+ </property>
+ <property name="autoStart">
+ <list elementClass="java.net.URL">
+ ...
+ </list>
+ </property>
+ </bean>
+ ...
+ </deployment>
+ ]]></programlisting>
+
+ </sect1>
+
+</chapter>
Copied: projects/jboss-osgi/trunk/build/docbook/en/modules/ch04-developer-guide.xml (from rev 87613, projects/jboss-osgi/trunk/build/docbook/en/modules/devguide.xml)
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/ch04-developer-guide.xml (rev 0)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/ch04-developer-guide.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -0,0 +1,276 @@
+<!--
+ $Id$
+-->
+<chapter xml:id="ChapDeveloperGuide">
+
+ <title>Developer Documentation</title>
+
+ <sect1 xml:id="SecSPI">
+ <title>Service Provider Interface</title>
+
+ <para>The JBossOSGi Service Provider Interface (SPI) is the integration point between the supported OSGi Frameworks and
+ the <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink>. The configuration defines MC beans for the
+ framework itself and its associated deployers.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/jboss-osgi.png" contentwidth="450"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>The latest version of the <ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc">JBossOSGi SPI</ulink>
+ JavaDoc is published online as part of the JBossOSGi <ulink url="http://jbmuc.dyndns.org:8280/hudson">Hudson QA Environment</ulink>.</para>
+
+ <itemizedlist>
+ <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/package-summary.html">org.jboss.osgi.spi</ulink> - Common classes and interfaces.</listitem>
+ <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/framework/package-summary.html">org.jboss.osgi.spi.framework</ulink> - Framework integration and bootstrap.</listitem>
+ <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/junit/package-summary.html">org.jboss.osgi.spi.junit</ulink> - JUnit test integration.</listitem>
+ <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/logging/package-summary.html">org.jboss.osgi.spi.logging</ulink> - Support for Bundle logging.</listitem>
+ <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/management/package-summary.html">org.jboss.osgi.spi.management</ulink> - Management view on deployed bundles.</listitem>
+ <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/service/microcontainer/package-summary.html">org.jboss.osgi.spi.service.microcontainer</ulink> - Access to the Kernel and MBeanServer.</listitem>
+ </itemizedlist>
+
+ <emphasis role="bold">Bootstrapping JBossOSGi</emphasis>
+
+ <para>The OSGiBootstrap provides an OSGiFramework through a OSGiBootstrapProvider.</para>
+
+ <para>A OSGiBootstrapProvider is discovered in two stages</para>
+
+ <orderedlist>
+ <listitem>Read the bootstrap provider class name from a system property</listitem>
+ <listitem>Read the bootstrap provider class name from a resource file</listitem>
+ </orderedlist>
+
+ <para>In both cases the key is the fully qalified name of the <code>org.jboss.osgi.spi.framework.OSGiBootstrapProvider</code> interface.</para>
+
+ <para>The following code shows how to get the default <code>OSGiFramework</code> from the <code>OSGiBootstrapProvider</code>.</para>
+
+ <programlisting role="JAVA">
+ OSGiBootstrapProvider bootProvider = OSGiBootstrap.getBootstrapProvider();
+ OSGiFramework framework = bootProvider.getFramework();
+ Bundle bundle = framework.getSystemBundle();
+ </programlisting>
+
+ <para>The <code>OSGiBootstrapProvider</code> can also be configured explicitly. The <code>OSGiFramework</code> is a named
+ object from the configuration.</para>
+
+ <programlisting role="JAVA">
+ OSGiBootstrapProvider bootProvider = OSGiBootstrap.getBootstrapProvider();
+ bootProvider.configure(configURL);
+
+ OSGiFramework framework = bootProvider.getFramework("AnotherOSGiFramework");
+ Bundle bundle = framework.getSystemBundle();
+ </programlisting>
+
+ <para>The JBossOSGi SPI comes with a OSGiBootstrapProvider that uses a <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink>
+ bean configuration.</para>
+
+ <programlisting role="XML"><![CDATA[
+ <deployment xmlns="urn:jboss:bean-deployer:2.0" ...>
+
+ <!-- The OSGiFramework -->
+ <bean name="jboss.osgi:service=Framework" class="org.jboss.osgi.felix.framework.FelixIntegration">
+ <property name="felixProperties">
+ <map keyClass="java.lang.String" valueClass="java.lang.String">
+ <entry><key>org.osgi.framework.storage.clean</key><value>onFirstInit</value></entry>
+ <entry>
+ <key>org.osgi.framework.system.packages</key>
+ <value>
+ org.osgi.framework; version=1.4,
+ org.osgi.util.tracker
+ </value>
+ </entry>
+ </map>
+ </property>
+ </bean>
+
+ ...
+
+ </deployment>
+ ]]></programlisting>
+
+ <para>OSGiBootstrapProvider implementations that read their configurtation from some other source are possible, but currently not
+ part of the JBossOSGi SPI.</para>
+
+ <tip>
+ <title>Using the SPI from within JBossAS deployed components</title>
+ <para>If you need access to the OSGi Framework from within an JBossAS deployed component (e.g. servlet, ejb, mbean) you
+ <emphasis role="bold">would not</emphasis> bootstrap JBossOSGi through the SPI. Instead, you would inject the already bootstrapped
+ OSGi Framework instance into your component.</para>
+ </tip>
+ </sect1>
+
+ <sect1 xml:id="SecDeployers">
+ <title>Bundle Deployers</title>
+
+ <para>JBossOSGi comes with a number of <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> based deployers. Each deployer
+ takes care of a specific aspect of bundle deployment.</para>
+
+ <itemizedlist>
+ <listitem><emphasis role="bold">BundleMetaDataDeployer</emphasis> - Create BundleMetaData from Manifest Headers</listitem>
+ <listitem><emphasis role="bold">BundleStructureDeployer</emphasis> - Determine the structure of a Bundle deployment</listitem>
+ <listitem><emphasis role="bold">BundleRealDeployer</emphasis> - Installs the Bundle into the Framework's SystemContext</listitem>
+ <listitem><emphasis role="bold">BundleClassLoaderDeployer</emphasis> - Creates a BundleClassLoader for the deployed Bundle</listitem>
+ <listitem><emphasis role="bold">BundleStartStopDeployer</emphasis> - Starts the Bundle when dependencies are resolved</listitem>
+ <listitem><emphasis role="bold">BundleManagementDeployer</emphasis> - Register the Bundle as MBean with JMX</listitem>
+ </itemizedlist>
+
+ <emphasis role="bold">BundleMetaDataDeployer</emphasis>
+
+ <para>The BundleMetaDataDeployer creates the BundleMetaData from Manifest Headers. If the manifest does not contain
+ a header named <emphasis role="bold">Bundle-SymbolicName</emphasis> this deployer does nothing. </para>
+
+ <emphasis role="bold">BundleStructureDeployer</emphasis>
+
+ <para>The BundleStructureDeployer determines the structure of a Bundle deployment. It ignores all deployments that
+ are not top-level or do not have a manifest header named <emphasis role="bold">Bundle-SymbolicName</emphasis></para>
+
+ <emphasis role="bold">BundleRealDeployer</emphasis>
+
+ <para>The BundleRealDeployer installs the Bundle into the Framework's SystemContext. Optionally you can configure a list of
+ bundle locations that should be skipped and hence not installed. Typically, these bundles are already installed during
+ Framework startup.</para>
+
+ <para>On undeploy the Bundle gets uninstalled from the Framework's SystemContext.</para>
+
+ <emphasis role="bold">BundleClassLoaderDeployer</emphasis>
+
+ <para>The BundleClassLoaderDeployer attaches a ClassLoaderFactory that creates a BundleClassLoader for the deployed Bundle.
+ A BundleClassLoader delegates all classloading concerns to the underlying Bundle.</para>
+
+ <emphasis role="bold">BundleStartStopDeployer</emphasis>
+
+ <para>The BundleStartStopDeployer currently works in two modes:</para>
+
+ <itemizedlist>
+ <listitem>deferredStart (default)</listitem>
+ <listitem>simpleStart</listitem>
+ </itemizedlist>
+
+ <para>In mode <emphasis role="bold">deferredStart</emphasis> the Bundle is added to a list of unresolved Bundles, which then get passed
+ on to <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/packageadmin/PackageAdmin.html#resolveBundles(org.osgi.framework.Bundle[])"><code>PackageAdmin.resolveBundles(Bundle[])</code></ulink>.
+ The deployer then iterates over the unresolved Bundles and only starts those Bundles that are in state
+ <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/framework/Bundle.html#RESOLVED"><code>RESOLVED</code></ulink>.
+ In this mode Bundles can be deployed in any order and only get started when all their respective dependencies can be resolved.</para>
+
+ <para>In mode <emphasis role="bold">simpleStart</emphasis> the deployer attempts to start the Bundle regardless of whether its
+ dependencies can get resolved. In case the Bundle has a dependency oin a package that is not yet available, deployment will fail.
+ In this mode Bundles must be deployed in the order required to start them.</para>
+
+ <para>The start mode is a configurable property on the Framework's SystemContext.</para>
+
+ <programlisting role="XML"><![CDATA[
+ <!--
+ If set to 'true' bundles can be deployed in any order. Deployed bundle will get started when their dependencies can be resolved.
+ If set to 'false' bundles must be deployed in the order that is required to start them.
+ -->
+ <entry><key>org.jboss.osgi.deferred.start</key><value>true</value></entry>
+ ]]></programlisting>
+
+ <emphasis role="bold">BundleManagementDeployer</emphasis>
+
+ <para>The BundleManagementDeployer registers the Bundle as <ulink url="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/StandardMBean.html">StandardMBean</ulink> with JMX.
+ Please see the section on <link linkend="SecJMXView">Management View</link> for details.</para>
+
+ </sect1>
+
+ <sect1 xml:id="SecJMXView">
+ <title>Management View</title>
+
+ <para>JBossOSGi registers the Framework and every deployed Bundle with the JMX <ulink url="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServer.html">MBeanServer</ulink>.</para>
+
+ <emphasis role="bold">The ManagedFramework</emphasis>
+
+ <para>The <code>ManagedFramework</code> gives you access to the MBean views of the deployed Bundles. It is registerd under the name:</para>
+
+ <itemizedlist>
+ <listitem><emphasis role="bold">jboss.osgi:service=ManagedFramework</emphasis></listitem>
+ </itemizedlist>
+
+ <programlisting role="JAVA">
+ public interface ManagedFrameworkMBean
+ {
+ /**
+ * Get the list of all installed bundles
+ */
+ Set<ObjectName> getBundles();
+
+ /**
+ * Get the installed bundle
+ */
+ ObjectName getBundle(String symbolicName);
+ }
+ </programlisting>
+
+ <emphasis role="bold">The ManagedBundle</emphasis>
+
+ <para>The <code>ManagedBundle</code> gives you access to the MBean views of a deployed Bundle. It is registerd under the name:</para>
+
+ <itemizedlist>
+ <listitem><emphasis role="bold">jboss.osgi:bundle=[SymbolicName],id=[BundleId]</emphasis></listitem>
+ </itemizedlist>
+
+ <programlisting role="JAVA">
+ public interface ManagedBundleMBean
+ {
+ /**
+ * Returns this bundle's current state.
+ * A bundle can be in only one state at any time.
+ *
+ * @return An element of UNINSTALLED,INSTALLED, RESOLVED,STARTING, STOPPING,ACTIVE.
+ */
+ int getState();
+
+ /**
+ * Get the bundles object name.
+ */
+ ObjectName getObjectName();
+
+ /**
+ * Returns this bundle's unique identifier.
+ */
+ long getBundleId();
+
+ /**
+ * Returns the symbolic name of this bundle as specified by its Bundle-SymbolicName manifest header
+ */
+ String getSymbolicName();
+
+ /**
+ * Returns the value of the specified property from the BundleContext.
+ */
+ String getProperty(String key);
+
+ /**
+ * Starts this bundle with no options
+ */
+ void start() throws BundleException;
+
+ /**
+ * Stops this bundle with no options.
+ */
+ void stop() throws BundleException;
+ }
+ </programlisting>
+
+ <emphasis role="bold">Accessing the Management Objects</emphasis>
+
+ <para>If you work with the JBossOSGi Testsuite you get access to the Managed Objects through the JBossOSGi SPI provided
+ <ulink url="http://junit.sourceforge.net/">JUnit</ulink> support package <ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/junit/package-summary.html">org.jboss.osgi.spi.junit</ulink>.
+ </para>
+
+ <para>If you install JBossOSGi in an already existing JBossAS instance you also get access to the Managed Objects through the JBoss provided
+ JMX Console (<ulink url="http://localhost:8080/jmx-console">http://localhost:8080/jmx-console</ulink>).</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/jmx-agent-view.png" contentwidth="450"/>
+ </imageobject>
+ </mediaobject>
+
+ <note>
+ <para>The JMX Console is <emphasis role="bold">not part</emphasis> of the <link linkend="SecRuntime">JBossOSGi Runtime</link>.</para>
+ </note>
+ </sect1>
+
+</chapter>
Copied: projects/jboss-osgi/trunk/build/docbook/en/modules/ch05-provided-bundles.xml (from rev 87613, projects/jboss-osgi/trunk/build/docbook/en/modules/providedservices.xml)
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/ch05-provided-bundles.xml (rev 0)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/ch05-provided-bundles.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -0,0 +1,141 @@
+<!--
+ $Id$
+-->
+<chapter xml:id="ChapProvidedBundles">
+
+ <title>Provided Bundles and Services</title>
+
+ <sect1 xml:id="SecLoggingService">
+ <title>Logging Bridge Service</title>
+
+ <para>The JBossOSGi <emphasis role="bold">jboss-osgi-logging.jar</emphasis> bundle contains a simple Logging Bridge Service to
+ <ulink url="http://www.jboss.org/community/docs/DOC-11280">JBoss Logging</ulink>. It registers a trivial LogListener with the
+ LogReaderService in case that service is registered with the Framework.</para>
+
+ <itemizedlist>
+ <listitem><ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/log/LogListener.html">LogListener</ulink> - Subscribes to LogEntry objects from the LogReaderService</listitem>
+ <listitem><ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/log/LogReaderService.html">LogReaderService</ulink> - Provides methods to retrieve LogEntry objects from the log</listitem>
+ </itemizedlist>
+
+ <para>The LogReaderService is part of the standard <ulink url="http://www.osgi.org/Download/File?url=/download/r4v41/r4.cmpn.pdf">OSGi
+ Compendium Services</ulink>. JBossOSGi currently uses the <ulink url="http://felix.apache.org/site/apache-felix-log-service.html">Log Service</ulink>
+ from <ulink url="http://felix.apache.org">Apache Felix</ulink>, which gets deployed as Bundle <emphasis role="bold">org.apache.felix.log.jar</emphasis>
+ </para>
+
+ <para>The LogListener itself logs messages under the Bundle's symbolic name.</para>
+
+ <programlisting role="JAVA">
+ public class JBossLoggingLogListener implements LogListener
+ {
+ public void logged(LogEntry entry)
+ {
+ Bundle bundle = entry.getBundle();
+ int level = entry.getLevel();
+ Throwable throwable = entry.getException();
+
+ String loggerName = bundle.getSymbolicName();
+ Logger log = Logger.getLogger(loggerName);
+
+ if (level == LogService.LOG_DEBUG)
+ log.debug(entry.getMessage(), throwable);
+
+ else if (level == LogService.LOG_INFO)
+ log.info(entry.getMessage(), throwable);
+
+ else if (level == LogService.LOG_WARNING)
+ log.warn(entry.getMessage(), throwable);
+
+ else if (level == LogService.LOG_ERROR)
+ log.error(entry.getMessage(), throwable);
+ }
+ }
+ </programlisting>
+
+ <para>You can therefore change the logging for specific Bundles by
+ <ulink url="http://www.jboss.org/community/docs/DOC-12490">setting the respective logging level</ulink>.</para>
+ </sect1>
+
+ <sect1 xml:id="SecRemoteLogService">
+ <title>Remote Log Service</title>
+
+ <para>The JBossOSGi <emphasis role="bold">jboss-osgi-remotelog.jar</emphasis> bundle contains a client side
+ <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/log/LogReaderService.html">RemoteLogReaderService</ulink> that remotely
+ communicates with a server side <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/log/LogListener.html">LogListener</ulink>.
+ </para>
+
+ <para>The Remote Log Service is configured with these properties.</para>
+
+ <table>
+ <tr><th>Key</th><th>Value</th><th>Description</th></tr>
+ <tr valign="top">
+ <td>org.jboss.osgi.service.remote.log.sender</td>
+ <td>true/false</td>
+ <td>Enable the server side LogListener</td>
+ </tr>
+ <tr valign="top">
+ <td>org.jboss.osgi.service.remote.log.reader</td>
+ <td>true/false</td>
+ <td>Enable the client side LogReaderService</td>
+ </tr>
+ <tr valign="top">
+ <td>org.jboss.osgi.service.remote.log.host</td>
+ <td>localhost</td>
+ <td>The remote host that log messages are sent to</td>
+ </tr>
+ <tr valign="top">
+ <td>org.jboss.osgi.service.remote.log.port</td>
+ <td>localhost</td>
+ <td>The remote port that log messages are sent to</td>
+ </tr>
+ </table>
+
+ <para>On the client side you can install an arbitrary <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/log/LogListener.html">LogListener</ulink>
+ with the <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/log/LogReaderService.html">RemoteLogReaderService</ulink>. The testsuite typically
+ installs an <ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/ws/jboss-osgi/spi/target/apidocs/org/jboss/osgi/spi/logging/LogEntryCache.html">LogEntryCache</ulink>
+ that filters the received log messages.</para>
+
+ <programlisting role="JAVA">
+ LogEntryCache logEntryCache = new LogEntryCache();
+ logEntryCache.addFilter(new LogEntryFilter("example-log(.*)", LogService.LOG_INFO, "\\[ServiceA\\](.*)"));
+
+ // Track the RemoteLogReaderService to add the LogEntryCache as LogListener
+ ServiceTracker tracker = new ServiceTracker(sysContext, RemoteLogReaderService.class.getName(), null)
+ {
+ @Override
+ public Object addingService(ServiceReference sref)
+ {
+ LogReaderService service = (LogReaderService)super.addingService(sref);
+ service.addLogListener(logEntryCache);
+ return service;
+ }
+ };
+ tracker.open();
+ </programlisting>
+ </sect1>
+
+ <sect1 xml:id="SecMicrocontainerService">
+ <title>Microcontainer Service</title>
+
+ <para>JBossOSGi SPI comes with a service that give access to the <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> Kernel
+ and the JMX <ulink url="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServer.html">MBeanServer</ulink>. The service is
+ registered with the Framework under the name</para>
+
+ <itemizedlist>
+ <listitem><emphasis role="bold">org.jboss.osgi.service.MicrocontainerService</emphasis></listitem>
+ </itemizedlist>
+
+ <para>Here is an example of how an OSGi component can register an arbitrary MBean with the
+ <ulink url="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServer.html">MBeanServer</ulink>.</para>
+
+ <programlisting role="JAVA">
+ ServiceReference sref = context.getServiceReference(MicrocontainerService.class.getName());
+ if (sref == null)
+ throw new IllegalStateException("MicrocontainerService not registered");
+
+ MicrocontainerService mcService = (MicrocontainerService)context.getService(sref);
+ MBeanServer mbeanServer = mcService.getMbeanServer();
+ mbeanServer.registerMBean(new Foo(), OBJECT_NAME);
+ </programlisting>
+ </sect1>
+
+</chapter>
Added: projects/jboss-osgi/trunk/build/docbook/en/modules/ch06-provided-examples.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/ch06-provided-examples.xml (rev 0)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/ch06-provided-examples.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -0,0 +1,90 @@
+<!--
+ $Id$
+-->
+<chapter xml:id="ChapProvidedExamples">
+
+ <title>Provided Examples</title>
+
+ <para>JBossOSGi comes with a number of examples that demonstrate supported functionality
+ and show best practices. All examples are part of the binary distribution and tightly
+ integrated in our <ulink url="http://www.jboss.org/community/docs/DOC-13275">Maven Build Process</ulink>
+ and <ulink url="http://www.jboss.org/community/docs/DOC-13420">Hudson QA Environment</ulink>.</para>
+
+ <sect1 xml:id="SecHTTPServiceExample">
+ <title>HTTP Service Example</title>
+
+ <para>The <emphasis role="bold">example-http.jar</emphasis> bundle contains a Service
+ that registeres a servlet and a resource with the <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/http/HttpService.html">HttpService</ulink>.
+ </para>
+
+ <programlisting role="JAVA">
+ ServiceTracker tracker = new ServiceTracker(context, HttpService.class.getName(), null);
+ tracker.open();
+
+ HttpService httpService = (HttpService)tracker.getService();
+ if (httpService == null)
+ throw new IllegalStateException("HttpService not registered");
+
+ Properties initParams = new Properties();
+ initParams.setProperty("initProp", "SomeValue");
+ httpService.registerServlet("/servlet", new EndpointServlet(context), initParams, null);
+ httpService.registerResources("/file", "/res", null);
+ </programlisting>
+
+ <para>The test then verifies that the registered servlet context and the registered resource can be accessed.</para>
+ </sect1>
+
+ <sect1 xml:id="SecLogServiceExample">
+ <title>Log Service Example</title>
+
+ <para>The <emphasis role="bold">example-log.jar</emphasis> bundle contains a Service
+ that logs messages to the <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/log/LogService.html">LogService</ulink>.
+
+ </para>
+
+ <programlisting role="JAVA">
+ public ServiceA(BundleContext context)
+ {
+ log = new LogServiceTracker(context);
+ log.log(LOG_INFO, "[ServiceA] new Service");
+ }
+ </programlisting>
+
+ <para>The test then filters and verifies the log messages.</para>
+
+ <programlisting role="JAVA">
+ LogEntryCache logEntryCache = new LogEntryCache();
+ logEntryCache.addFilter(new LogEntryFilter(null, 0, "\\[ServiceA\\](.*)"));
+ startLogEntryTracking(logEntryCache);
+
+ // Verify the received log entries
+ List entries = logEntryCache.getLog();
+ assertEquals("Number of entries", 1, entries.size());
+ assertEquals("[ServiceA] new Service", entries.get(0).getMessage());
+ </programlisting>
+
+ <para>The test is available both for embedded and remote LogService testing.</para>
+ </sect1>
+
+ <sect1 xml:id="SecMicrocontainerServiceExample">
+ <title>Microcontainer Service Example</title>
+
+ <para>The <emphasis role="bold">example-microcontainer.jar</emphasis> bundle contains a Service
+ that registers an MBean with the <ulink url="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServer.html">MBeanServer</ulink>.
+ </para>
+
+ <programlisting role="JAVA">
+ MicrocontainerService service = (MicrocontainerService)tracker.getService();
+ mbeanServer = mcService.getMbeanServer();
+ mbeanServer.registerMBean(new Foo(), OBJECT_NAME);
+ </programlisting>
+
+ <para>The test then accesses the registered MBean.</para>
+
+ <programlisting role="JAVA">
+ FooMBean foo = (FooMBean)MBeanProxy.get(FooMBean.class, OBJECT_NAME, getServer());
+ assertEquals("hello", foo.echo("hello"));
+ </programlisting>
+ </sect1>
+
+</chapter>
Property changes on: projects/jboss-osgi/trunk/build/docbook/en/modules/ch06-provided-examples.xml
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Copied: projects/jboss-osgi/trunk/build/docbook/en/modules/ch07-references.xml (from rev 87606, projects/jboss-osgi/trunk/build/docbook/en/modules/references.xml)
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/ch07-references.xml (rev 0)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/ch07-references.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -0,0 +1,27 @@
+<!--
+ $Id$
+-->
+<chapter xml:id="ChapReferences">
+
+ <title>References</title>
+
+ <para><emphasis role="bold">Resources</emphasis></para>
+
+ <itemizedlist>
+ <listitem><ulink url="http://www.jboss.org/community/docs/DOC-13273">JBossOSGi Wiki</ulink></listitem>
+ <listitem><ulink url="http://jbossosgi.blogspot.com">JBossOSGi Diary (Blog)</ulink></listitem>
+ <listitem><ulink url="https://jira.jboss.org/jira/browse/JBOSGI">Issue Tracking</ulink></listitem>
+ <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson">Hudson QA</ulink></listitem>
+ <listitem><ulink url="https://anonsvn.jboss.org/repos/jbossas/projects/jboss-osgi">Subversion</ulink></listitem>
+ <listitem><ulink url="http://fisheye.jboss.com/browse/JBossOSGi">Fisheye</ulink></listitem>
+ <listitem><ulink url="http://www.jboss.org/index.html?module=bb&op=viewforum&f=257">User Forum</ulink></listitem>
+ <listitem><ulink url="http://www.jboss.org/index.html?module=bb&op=viewforum&f=256">Design Forum</ulink></listitem>
+ </itemizedlist>
+
+ <para><emphasis role="bold">Authors</emphasis></para>
+
+ <itemizedlist>
+ <listitem><ulink url="email:thomas.diesler at jboss.com">Thomas Diesler</ulink></listitem>
+ </itemizedlist>
+
+</chapter>
Copied: projects/jboss-osgi/trunk/build/docbook/en/modules/ch08-getting-support.xml (from rev 87606, projects/jboss-osgi/trunk/build/docbook/en/modules/gettingsupport.xml)
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/ch08-getting-support.xml (rev 0)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/ch08-getting-support.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -0,0 +1,16 @@
+<!--
+ $Id$
+-->
+<chapter xml:id="ChapGettingSupport">
+
+ <title>Getting Support</title>
+
+ <para>We offer free support through the <ulink url="http://www.jboss.org/index.html?module=bb&op=viewforum&f=257">JBossOSGi User Forum</ulink>.</para>
+
+ <para>Please note, that posts to this forum will be dealt with at the community's leisure.
+ If your business is such that you need to rely on qualified answers within a known time frame,
+ this forum might not be your preferred support channel.</para>
+
+ <para>For professional support please go to <ulink url="http://www.jboss.com/services">JBoss Support Services</ulink>.</para>
+
+</chapter>
Deleted: projects/jboss-osgi/trunk/build/docbook/en/modules/devguide.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/devguide.xml 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/devguide.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -1,276 +0,0 @@
-<!--
- $Id$
--->
-<chapter xml:id="ChapDeveloperGuide">
-
- <title>Developer Documentation</title>
-
- <sect1 xml:id="SecSPI">
- <title>Service Provider Interface</title>
-
- <para>The JBossOSGi Service Provider Interface (SPI) is the integration point between the supported OSGi Frameworks and
- the <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink>. The configuration defines MC beans for the
- framework itself and its associated deployers.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/jboss-osgi.png" contentwidth="450"/>
- </imageobject>
- </mediaobject>
-
- <para>The latest version of the <ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc">JBossOSGi SPI</ulink>
- JavaDoc is published online as part of the JBossOSGi <ulink url="http://jbmuc.dyndns.org:8280/hudson">Hudson QA Environment</ulink>.</para>
-
- <itemizedlist>
- <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/package-summary.html">org.jboss.osgi.spi</ulink> - Common classes and interfaces.</listitem>
- <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/framework/package-summary.html">org.jboss.osgi.spi.framework</ulink> - Framework integration and bootstrap.</listitem>
- <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/junit/package-summary.html">org.jboss.osgi.spi.junit</ulink> - JUnit test integration.</listitem>
- <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/logging/package-summary.html">org.jboss.osgi.spi.logging</ulink> - Support for Bundle logging.</listitem>
- <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/management/package-summary.html">org.jboss.osgi.spi.management</ulink> - Management view on deployed bundles.</listitem>
- <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/service/microcontainer/package-summary.html">org.jboss.osgi.spi.service.microcontainer</ulink> - Access to the Kernel and MBeanServer.</listitem>
- </itemizedlist>
-
- <emphasis role="bold">Bootstrapping JBossOSGi</emphasis>
-
- <para>The OSGiBootstrap provides an OSGiFramework through a OSGiBootstrapProvider.</para>
-
- <para>A OSGiBootstrapProvider is discovered in two stages</para>
-
- <orderedlist>
- <listitem>Read the bootstrap provider class name from a system property</listitem>
- <listitem>Read the bootstrap provider class name from a resource file</listitem>
- </orderedlist>
-
- <para>In both cases the key is the fully qalified name of the <code>org.jboss.osgi.spi.framework.OSGiBootstrapProvider</code> interface.</para>
-
- <para>The following code shows how to get the default <code>OSGiFramework</code> from the <code>OSGiBootstrapProvider</code>.</para>
-
- <programlisting role="JAVA">
- OSGiBootstrapProvider bootProvider = OSGiBootstrap.getBootstrapProvider();
- OSGiFramework framework = bootProvider.getFramework();
- Bundle bundle = framework.getSystemBundle();
- </programlisting>
-
- <para>The <code>OSGiBootstrapProvider</code> can also be configured explicitly. The <code>OSGiFramework</code> is a named
- object from the configuration.</para>
-
- <programlisting role="JAVA">
- OSGiBootstrapProvider bootProvider = OSGiBootstrap.getBootstrapProvider();
- bootProvider.configure(configURL);
-
- OSGiFramework framework = bootProvider.getFramework("AnotherOSGiFramework");
- Bundle bundle = framework.getSystemBundle();
- </programlisting>
-
- <para>The JBossOSGi SPI comes with a OSGiBootstrapProvider that uses a <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink>
- bean configuration.</para>
-
- <programlisting role="XML"><![CDATA[
- <deployment xmlns="urn:jboss:bean-deployer:2.0" ...>
-
- <!-- The OSGiFramework -->
- <bean name="jboss.osgi:service=Framework" class="org.jboss.osgi.felix.framework.FelixIntegration">
- <property name="felixProperties">
- <map keyClass="java.lang.String" valueClass="java.lang.String">
- <entry><key>org.osgi.framework.storage.clean</key><value>onFirstInit</value></entry>
- <entry>
- <key>org.osgi.framework.system.packages</key>
- <value>
- org.osgi.framework; version=1.4,
- org.osgi.util.tracker
- </value>
- </entry>
- </map>
- </property>
- </bean>
-
- ...
-
- </deployment>
- ]]></programlisting>
-
- <para>OSGiBootstrapProvider implementations that read their configurtation from some other source are possible, but currently not
- part of the JBossOSGi SPI.</para>
-
- <tip>
- <title>Using the SPI from within JBossAS deployed components</title>
- <para>If you need access to the OSGi Framework from within an JBossAS deployed component (e.g. servlet, ejb, mbean) you
- <emphasis role="bold">would not</emphasis> bootstrap JBossOSGi through the SPI. Instead, you would inject the already bootstrapped
- OSGi Framework instance into your component.</para>
- </tip>
- </sect1>
-
- <sect1 xml:id="SecDeployers">
- <title>Bundle Deployers</title>
-
- <para>JBossOSGi comes with a number of <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> based deployers. Each deployer
- takes care of a specific aspect of bundle deployment.</para>
-
- <itemizedlist>
- <listitem><emphasis role="bold">BundleMetaDataDeployer</emphasis> - Create BundleMetaData from Manifest Headers</listitem>
- <listitem><emphasis role="bold">BundleStructureDeployer</emphasis> - Determine the structure of a Bundle deployment</listitem>
- <listitem><emphasis role="bold">BundleRealDeployer</emphasis> - Installs the Bundle into the Framework's SystemContext</listitem>
- <listitem><emphasis role="bold">BundleClassLoaderDeployer</emphasis> - Creates a BundleClassLoader for the deployed Bundle</listitem>
- <listitem><emphasis role="bold">BundleStartStopDeployer</emphasis> - Starts the Bundle when dependencies are resolved</listitem>
- <listitem><emphasis role="bold">BundleManagementDeployer</emphasis> - Register the Bundle as MBean with JMX</listitem>
- </itemizedlist>
-
- <emphasis role="bold">BundleMetaDataDeployer</emphasis>
-
- <para>The BundleMetaDataDeployer creates the BundleMetaData from Manifest Headers. If the manifest does not contain
- a header named <emphasis role="bold">Bundle-SymbolicName</emphasis> this deployer does nothing. </para>
-
- <emphasis role="bold">BundleStructureDeployer</emphasis>
-
- <para>The BundleStructureDeployer determines the structure of a Bundle deployment. It ignores all deployments that
- are not top-level or do not have a manifest header named <emphasis role="bold">Bundle-SymbolicName</emphasis></para>
-
- <emphasis role="bold">BundleRealDeployer</emphasis>
-
- <para>The BundleRealDeployer installs the Bundle into the Framework's SystemContext. Optionally you can configure a list of
- bundle locations that should be skipped and hence not installed. Typically, these bundles are already installed during
- Framework startup.</para>
-
- <para>On undeploy the Bundle gets uninstalled from the Framework's SystemContext.</para>
-
- <emphasis role="bold">BundleClassLoaderDeployer</emphasis>
-
- <para>The BundleClassLoaderDeployer attaches a ClassLoaderFactory that creates a BundleClassLoader for the deployed Bundle.
- A BundleClassLoader delegates all classloading concerns to the underlying Bundle.</para>
-
- <emphasis role="bold">BundleStartStopDeployer</emphasis>
-
- <para>The BundleStartStopDeployer currently works in two modes:</para>
-
- <itemizedlist>
- <listitem>deferredStart (default)</listitem>
- <listitem>simpleStart</listitem>
- </itemizedlist>
-
- <para>In mode <emphasis role="bold">deferredStart</emphasis> the Bundle is added to a list of unresolved Bundles, which then get passed
- on to <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/packageadmin/PackageAdmin.html#resolveBundles(org.osgi.framework.Bundle[])"><code>PackageAdmin.resolveBundles(Bundle[])</code></ulink>.
- The deployer then iterates over the unresolved Bundles and only starts those Bundles that are in state
- <ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/framework/Bundle.html#RESOLVED"><code>RESOLVED</code></ulink>.
- In this mode Bundles can be deployed in any order and only get started when all their respective dependencies can be resolved.</para>
-
- <para>In mode <emphasis role="bold">simpleStart</emphasis> the deployer attempts to start the Bundle regardless of whether its
- dependencies can get resolved. In case the Bundle has a dependency oin a package that is not yet available, deployment will fail.
- In this mode Bundles must be deployed in the order required to start them.</para>
-
- <para>The start mode is a configurable property on the Framework's SystemContext.</para>
-
- <programlisting role="XML"><![CDATA[
- <!--
- If set to 'true' bundles can be deployed in any order. Deployed bundle will get started when their dependencies can be resolved.
- If set to 'false' bundles must be deployed in the order that is required to start them.
- -->
- <entry><key>org.jboss.osgi.deferred.start</key><value>true</value></entry>
- ]]></programlisting>
-
- <emphasis role="bold">BundleManagementDeployer</emphasis>
-
- <para>The BundleManagementDeployer registers the Bundle as <ulink url="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/StandardMBean.html">StandardMBean</ulink> with JMX.
- Please see the section on <link linkend="SecJMXView">Management View</link> for details.</para>
-
- </sect1>
-
- <sect1 xml:id="SecJMXView">
- <title>Management View</title>
-
- <para>JBossOSGi registers the Framework and every deployed Bundle with the JMX <ulink url="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServer.html">MBeanServer</ulink>.</para>
-
- <emphasis role="bold">The ManagedFramework</emphasis>
-
- <para>The <code>ManagedFramework</code> gives you access to the MBean views of the deployed Bundles. It is registerd under the name:</para>
-
- <itemizedlist>
- <listitem><emphasis role="bold">jboss.osgi:service=ManagedFramework</emphasis></listitem>
- </itemizedlist>
-
- <programlisting role="JAVA">
- public interface ManagedFrameworkMBean
- {
- /**
- * Get the list of all installed bundles
- */
- Set<ObjectName> getBundles();
-
- /**
- * Get the installed bundle
- */
- ObjectName getBundle(String symbolicName);
- }
- </programlisting>
-
- <emphasis role="bold">The ManagedBundle</emphasis>
-
- <para>The <code>ManagedBundle</code> gives you access to the MBean views of a deployed Bundle. It is registerd under the name:</para>
-
- <itemizedlist>
- <listitem><emphasis role="bold">jboss.osgi:bundle=[SymbolicName],id=[BundleId]</emphasis></listitem>
- </itemizedlist>
-
- <programlisting role="JAVA">
- public interface ManagedBundleMBean
- {
- /**
- * Returns this bundle's current state.
- * A bundle can be in only one state at any time.
- *
- * @return An element of UNINSTALLED,INSTALLED, RESOLVED,STARTING, STOPPING,ACTIVE.
- */
- int getState();
-
- /**
- * Get the bundles object name.
- */
- ObjectName getObjectName();
-
- /**
- * Returns this bundle's unique identifier.
- */
- long getBundleId();
-
- /**
- * Returns the symbolic name of this bundle as specified by its Bundle-SymbolicName manifest header
- */
- String getSymbolicName();
-
- /**
- * Returns the value of the specified property from the BundleContext.
- */
- String getProperty(String key);
-
- /**
- * Starts this bundle with no options
- */
- void start() throws BundleException;
-
- /**
- * Stops this bundle with no options.
- */
- void stop() throws BundleException;
- }
- </programlisting>
-
- <emphasis role="bold">Accessing the Management Objects</emphasis>
-
- <para>If you work with the JBossOSGi Testsuite you get access to the Managed Objects through the JBossOSGi SPI provided
- <ulink url="http://junit.sourceforge.net/">JUnit</ulink> support package <ulink url="http://jbmuc.dyndns.org:8280/hudson/job/jbossosgi-jdk16/javadoc/org/jboss/osgi/spi/junit/package-summary.html">org.jboss.osgi.spi.junit</ulink>.
- </para>
-
- <para>If you install JBossOSGi in an already existing JBossAS instance you also get access to the Managed Objects through the JBoss provided
- JMX Console (<ulink url="http://localhost:8080/jmx-console">http://localhost:8080/jmx-console</ulink>).</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/jmx-agent-view.png" contentwidth="450"/>
- </imageobject>
- </mediaobject>
-
- <note>
- <para>The JMX Console is <emphasis role="bold">not part</emphasis> of the <link linkend="SecRuntime">JBossOSGi Runtime</link>.</para>
- </note>
- </sect1>
-
-</chapter>
Deleted: projects/jboss-osgi/trunk/build/docbook/en/modules/frameworkintegration.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/frameworkintegration.xml 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/frameworkintegration.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -1,136 +0,0 @@
-<!--
- $Id$
--->
-<chapter xml:id="ChapFrameworkIntegration">
-
- <title>Framework Integration</title>
-
- <sect1 xml:id="SecIntFelix">
- <title>Apache Felix Integration</title>
-
- <para>JBossOSGi provides integration for the <ulink url="http://felix.apache.org">Apache Felix</ulink> OSGi Framework and some
- of its core services</para>
-
- <itemizedlist>
- <listitem><ulink url="http://felix.apache.org/site/apache-felix-log-service.html">Log Service</ulink> - General purpose message logger</listitem>
- <listitem><ulink url="http://felix.apache.org/site/apache-felix-http-service.html">HTTP Service</ulink> - Http access to servlets and resources</listitem>
- <listitem><ulink url="http://felix.apache.org/site/apache-felix-configuration-admin-service.html">Config Admin Service</ulink> - Management of configuration data for configurable components</listitem>
- </itemizedlist>
-
- <para>The Apache Felix integration can be configured through a <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> beans
- configuration</para>
-
- <programlisting role="XML"><![CDATA[
- cat server/default/deployers/osgi.deployer/META-INF/osgi-deployers-jboss-beans.xml
-
- <deployment xmlns="urn:jboss:bean-deployer:2.0">
-
- <!-- The OSGiFramework -->
- <bean name="jboss.osgi:service=Framework" class="org.jboss.osgi.felix.framework.FelixIntegration">
- <property name="properties">
- ...
- </property>
- <property name="autoStart">
- <list elementClass="java.net.URL">
- ...
- </list>
- </property>
- </bean>
- ...
- </deployment>
- ]]></programlisting>
-
- <para>The following is a description of the configuration properties for the Apache Felix integration.</para>
-
- <table>
- <tr><th>Key</th><th>Value</th><th>Description</th></tr>
- <tr valign="top">
- <td>org.osgi.framework.storage</td>
- <td>.../osgi-store</td>
- <td>OSGi Framework storage area</td>
- </tr>
- <tr valign="top">
- <td>org.osgi.framework.storage.clean</td>
- <td>onFirstInit</td>
- <td>Clean the storage area on first init</td>
- </tr>
- <tr valign="top">
- <td>org.osgi.service.http.port</td>
- <td>8090</td>
- <td>The default Http Service port</td>
- </tr>
- <tr valign="top">
- <td>felix.cm.dir</td>
- <td>.../osgi-configadmin</td>
- <td>Config Admin Service storage area</td>
- </tr>
- <tr valign="top">
- <td>org.osgi.framework.system.packages</td>
- <td>javax.management, javax.xml...</td>
- <td>Packages provided by the OSGi System ClassLoader</td>
- </tr>
- <tr valign="top">
- <td>org.jboss.osgi.deferred.start</td>
- <td>true</td>
- <td>Bundles can be deployed in any order</td>
- </tr>
- </table>
- </sect1>
-
- <sect1 xml:id="SecIntEquinox">
- <title>Equinox Integration</title>
-
- <para>JBossOSGi also provides basic integration for the <ulink url="http://www.eclipse.org/equinox">Eclpipse Equinox</ulink> OSGi Framework.</para>
-
- <para>Equinox integration can be configured through a <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> beans
- configuration</para>
-
- <programlisting role="XML"><![CDATA[
- <deployment xmlns="urn:jboss:bean-deployer:2.0">
-
- <!-- The OSGiFramework -->
- <bean name="jboss.osgi:service=Framework" class="org.jboss.osgi.equinox.framework.EquinoxIntegration">
- <property name="properties">
- ...
- </property>
- <property name="autoStart">
- <list elementClass="java.net.URL">
- ...
- </list>
- </property>
- </bean>
- ...
- </deployment>
- ]]></programlisting>
-
- </sect1>
-
- <sect1 xml:id="SecIntKnopflerfish">
- <title>Knopflerfish Integration</title>
-
- <para>JBossOSGi provides basic integration for the <ulink url="http://www.knopflerfish.org">Makewave Knopflerfish</ulink> OSGi Framework.</para>
-
- <para>Knopflerfish integration can be configured through a <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> beans
- configuration</para>
-
- <programlisting role="XML"><![CDATA[
- <deployment xmlns="urn:jboss:bean-deployer:2.0">
-
- <!-- The OSGiFramework -->
- <bean name="jboss.osgi:service=Framework" class="org.jboss.osgi.knopflerfish.KnopflerfishIntegration">
- <property name="properties">
- ...
- </property>
- <property name="autoStart">
- <list elementClass="java.net.URL">
- ...
- </list>
- </property>
- </bean>
- ...
- </deployment>
- ]]></programlisting>
-
- </sect1>
-
-</chapter>
Deleted: projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/gettingstarted.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -1,355 +0,0 @@
-<!--
- $Id$
--->
-<chapter xml:id="ChapGettingStarted">
-
- <title>Getting Started</title>
-
- <para>This chapter takes you through the first steps of getting JBossOSGi and
- provides the initial pointers to get up and running.</para>
-
- <sect1 xml:id="SecInstall">
- <title>Installing JBossOSGi</title>
-
- <para>JBossOSGi is distributed as an <ulink url="http://izpack.org">IzPack</ulink> installer archive.
- The installer is available from the JBossOSGi <ulink url="https://sourceforge.net/project/showfiles.php?group_id=22866&package_id=316015">download area</ulink>.</para>
-
- <para>To run the installer execute the following command:</para>
-
- <!-- [TODO] release update -->
- <programlisting>
- java -jar jboss-osgi-installer-1.0.0.Beta1.jar
- </programlisting>
-
- <para>The installer first shows a welcome screen</para>
-
- <!-- [TODO] release update -->
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/izpack-welcome.png"/>
- </imageobject>
- </mediaobject>
-
- <para>Then you select the installation path for the JBossOSGi distribution. This is the directory where you find the binary build artifacts,
- the java sources, documentation and the JBossOSGi Runtime.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/izpack-installpath.png"/>
- </imageobject>
- </mediaobject>
-
- <para>The installer contains multiple installation packs. Greyed packs are required, others are optional and can be deselected.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/izpack-packs.jpg"/>
- </imageobject>
- </mediaobject>
-
- <itemizedlist>
- <listitem><emphasis role="bold">JBossOSGi Distribution</emphasis> - Documentation, Binary Artifacts and Sources</listitem>
- <listitem><emphasis role="bold">JBossOSGi Runtime</emphasis> - Standalone JBossOSGi Runtime based on JBossAS</listitem>
- <listitem><emphasis role="bold">JBossOSGi Integration</emphasis> - Integration with an existing JBossAS instance</listitem>
- </itemizedlist>
-
- <para>Next, you will be presented with the choice of supported OSGi Frameworks.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/izpack-target-framework.png"/>
- </imageobject>
- </mediaobject>
-
- <para>In case you have selected 'JBossOSGi Integration', you will be presented with the choice of supported target containers.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/izpack-target-server.png"/>
- </imageobject>
- </mediaobject>
-
- <para>You will then have to point the installer to your existing <ulink url="http://http://jboss.org/jbossas">JBossAS</ulink> installation.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/izpack-jboss-home.jpg"/>
- </imageobject>
- </mediaobject>
-
- <para>You can then verify the selected installation options and proceed with the actual installation.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/izpack-verify.png"/>
- </imageobject>
- </mediaobject>
-
- <para>The installer reports its installation progress and finally displays a confirmation screen. You can now optionally generate
- an "automatic installation script" that you can use when you want to repeat what you have just done without user interaction.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/izpack-done.png"/>
- </imageobject>
- </mediaobject>
- </sect1>
-
- <sect1 xml:id="SecRuntime">
- <title>JBossOSGi Runtime</title>
-
- <para>If you selected 'JBossOSGi Runtime' during installation you should see a <emphasis role="bold">runtime</emphasis> folder, which contains
- the JBossOSGi Runtime distribution.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/izpack-structure.jpg"/>
- </imageobject>
- </mediaobject>
-
- <para>The JBossOSGi Runtime is a customized version of the <ulink url="http://www.jboss.org/jbossas">JBoss Application Server</ulink>. From that we removed the services
- that are not absolutely necessary to run the installed OSGi Framework. Consequently, you can start the JBossOSGi Runtime in the same
- way as you start <ulink url="http://www.jboss.org/jbossas">JBossAS</ulink></para>
-
- <programlisting>
- [tdiesler at tdvaio runtime]$ bin/run.sh
- =========================================================================
-
- JBoss Bootstrap Environment
-
- JBOSS_HOME: /usr/java/jboss-osgi-1.0.0.Beta1/runtime
-
- ...
-
- =========================================================================
-
- 14:43:43,598 INFO [ServerImpl] Starting JBoss (Microcontainer)...
- ...
- 14:43:52,298 INFO [FelixIntegration] OSGi Integration Felix - 1.0.0.Beta1
- 14:43:52,692 INFO [FelixIntegration] Installed bundle: org.osgi.compendium
- 14:43:52,700 INFO [FelixIntegration] Installed bundle: org.jboss.osgi.service.logging
- 14:43:52,701 INFO [FelixIntegration] Started bundle: org.osgi.compendium
- 14:43:52,766 INFO [FelixIntegration] Started bundle: org.jboss.osgi.service.logging
- 14:43:53,290 INFO [OSGiDeployer] Installed: jboss-osgi-service-webconsole [3][INSTALLED]
- 14:43:53,297 INFO [OSGiDeployer] Installed: org.apache.felix.bundlerepository [4][INSTALLED]
- 14:43:53,308 INFO [OSGiDeployer] Installed: org.apache.felix.configadmin [5][INSTALLED]
- 14:43:53,322 INFO [OSGiDeployer] Installed: org.apache.felix.http.jetty [6][INSTALLED]
- 14:43:53,328 INFO [OSGiDeployer] Installed: org.apache.felix.log [7][INSTALLED]
- 14:43:53,333 INFO [OSGiDeployer] Installed: org.apache.felix.metatype [8][INSTALLED]
- ...
- 14:43:55,250 INFO [ServerImpl] JBoss (Microcontainer) [5.0.1.GA ...] <emphasis role="bold">Started in 11s:645ms</emphasis>
- </programlisting>
-
- <emphasis role="bold">Provided Examples</emphasis>
-
- <para>JBossOSGi comes with a number of examples that you can build and deploy. Each example
- deployment is verified by an accompaning test case</para>
-
- <itemizedlist>
- <listitem><emphasis role="bold">HTTP Service</emphasis> - Register servlets and resources with the HTTP Service</listitem>
- <listitem><emphasis role="bold">Log Service</emphasis> - Interact with a local and remote Log Service</listitem>
- <listitem><emphasis role="bold">Microcontainer Service</emphasis> - Register an MBean through the Microcontainer</listitem>
- </itemizedlist>
-
- <programlisting>
- [tdiesler at tddell example]$ mvn package
- [INFO] ------------------------------------------------------------------------
- [INFO] Building JBossOSGi - Testsuite Examples
- [INFO] task-segment: [package]
- [INFO] ------------------------------------------------------------------------
- ...
- build-example-jars:
- # example-log (example-log.jar) 2
- # example-http (example-http.jar) 4
- # example-microcontainer (example-microcontainer.jar) 4
- ...
- Running org.jboss.test.osgi.example.log.LogServiceTestCase
- Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.849 sec
- </programlisting>
-
- <emphasis role="bold">Bundle Deployment</emphasis>
-
- <para>Bundle deployment works, as you would probably expect, by dropping your OSGi Bundle into the
- JBossOSGi Runtime <emphasis role="bold">deploy</emphasis> folder.</para>
-
- <programlisting>
- [tdiesler at tdvaio testsuite]$ cp .../test-libs/example/example-http.jar .../runtime/server/default/deploy
- ...
- 13:59:38,284 INFO [BundleRealDeployer] Installed: example-http [9]
- 13:59:38,289 INFO [example-http] BundleEvent INSTALLED
- 13:59:38,297 INFO [example-http] BundleEvent RESOLVED
- 13:59:38,304 INFO [example-http] ServiceEvent REGISTERED
- 13:59:38,306 INFO [BundleStartStopDeployer] Started: example-http [9]
- 13:59:38,306 INFO [example-http] BundleEvent STARTED
- </programlisting>
-
- <emphasis role="bold">Managing installed Bundles</emphasis>
-
- <para>JBossOSGi comes with a simple Web Console, which is currently based on the
- <ulink url="http://felix.apache.org/site/apache-felix-web-console.html">Apache Felix Web Console</ulink> project.
- By default the JBossOSGi Web Console is available at <ulink url="http://localhost:8090/jboss-osgi">http://localhost:8090/jboss-osgi</ulink>.
- </para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/webconsole.png" contentwidth="450"/>
- </imageobject>
- </mediaobject>
-
- <note>
- <title>TODO: Cleanup and document console provided functionality</title>
- </note>
- </sect1>
-
- <sect1 xml:id="SecHudson">
- <title>Hudson QA Environment</title>
-
- <emphasis role="bold">Setup the Hudson QA Environment</emphasis>
-
- <para>The JBossOSGi <ulink url="http://jbmuc.dyndns.org:8280/hudson">Hudson QA Environment</ulink> is an integral part of the JBossOSGi code base.
- It is designed for simplicity because we believe that comprehensive QA will only get done if it is dead simple to do so.</para>
-
- <para>Consequently, you only have to execute two simple ant targets to setup the QA environment that was used to QA the JBossOSGi
- release that you currently work with.</para>
-
- <para>If in future we should discover a problem with a previous JBossOSGi release, it will be possible to provide a patch and verify that change using
- the original QA environment for that release.</para>
-
- <para>With every release we test the matrix of supported target containers and JDKs.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/hudson-home.png" contentwidth="450"/>
- </imageobject>
- </mediaobject>
-
- <emphasis role="bold">Set Hudson Properties</emphasis>
-
- <para>You need to set a few properties, especially these</para>
-
- <itemizedlist>
- <listitem>hudson.maven.path</listitem>
- <listitem>hudson.username</listitem>
- <listitem>hudson.password</listitem>
- <listitem>hudson.root</listitem>
- </itemizedlist>
-
- <programlisting>
- cd build/hudson
- cp ant.properties.example ant.properties
- vi ant.properties
-
- # The JBoss settings
- jboss.server.instance=default
- jboss.bind.address=127.0.0.1
-
- # JDK settings
- java.home.jdk15=/usr/java/jdk1.5.0_17
- java.home.jdk16=/usr/java/jdk1.6.0_11
-
- # Hudson QA Environment
- hudson.username=chageme
- hudson.password=chageme
-
- hudson.maven.path=/usr/java/apache-maven-2.0.9
-
- hudson.root=/home/tdiesler/workspace/hudson/jboss-osgi
-
- hudson.maven.profile=$HUDSONDIR/profiles.xml.local.qa
-
- hudson.host=jbpm.dyndns.org
- hudson.admin.port=8250
- hudson.http.port=8280
-
- #hudson.jboss501.zip=file:///home/tdiesler/Download/java/jboss/jboss-5.0.1.GA.zip
-
- hudson.mail.recipients=
- hudson.smtp.host=localhost
-
- # Hudson (1.290)
- apache-tomcat=5.5.20
- sun-hudson=2402/128862
- </programlisting>
-
- <emphasis role="bold">Run Hudson Setup</emphasis>
-
- <programlisting>
- [tdiesler at tdvaio hudson]$ ant hudson-setup
- Buildfile: build.xml
-
- init:
- [echo] V1.0.0.Beta1
-
- init-hudson:
- [echo]
- [echo] hudson.root = /home/tdiesler/workspace/hudson/jboss-osgi
- [echo] hudson.home = /home/tdiesler/workspace/hudson/jboss-osgi/hudson-home
- [echo]
-
- ...
-
- hudson-setup:
- [copy] Copying 2 files to /home/.../hudson/jboss-osgi/apache-tomcat
- ...
- [echo]
- [echo] *************************************
- [echo] * Hudson setup successfully *
- [echo] * ant hudson-start *
- [echo] *************************************
- [echo]
- </programlisting>
-
- <emphasis role="bold">Run Hudson Start</emphasis>
-
- <programlisting>
- [tdiesler at tdvaio hudson]$ ant hudson-start
- Buildfile: build.xml
-
- init:
- [echo] V1.0.0.Beta1
-
- init-hudson:
- [echo]
- [echo] hudson.root = /home/tdiesler/workspace/hudson/jboss-osgi
- [echo] hudson.home = /home/tdiesler/workspace/hudson/jboss-osgi/hudson-home
- [echo]
-
- hudson-start:
- [echo]
- [echo] *************************************
- [echo] * Hudson started successfully *
- [echo] * http://localhost:8280/hudson *
- [echo] *************************************
- [echo]
-
- BUILD SUCCESSFUL
- </programlisting>
-
- <emphasis role="bold">Run Hudson Stop</emphasis>
-
- <programlisting>
- [tdiesler at tdvaio hudson]$ ant hudson-stop
- Buildfile: build.xml
-
- init:
- [echo] V1.0.0.Beta1
-
- init-hudson:
- [echo]
- [echo] hudson.root = /home/tdiesler/workspace/hudson/jboss-osgi
- [echo] hudson.home = /home/tdiesler/workspace/hudson/jboss-osgi/hudson-home
- [echo]
-
- hudson-stop:
- [echo]
- [echo] *************************************
- [echo] * Hudson stopped successfully *
- [echo] * ant hudson-start *
- [echo] *************************************
- [echo]
-
- BUILD SUCCESSFUL
- </programlisting>
- </sect1>
-
-</chapter>
\ No newline at end of file
Deleted: projects/jboss-osgi/trunk/build/docbook/en/modules/gettingsupport.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/gettingsupport.xml 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/gettingsupport.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -1,16 +0,0 @@
-<!--
- $Id$
--->
-<chapter xml:id="ChapGettingSupport">
-
- <title>Getting Support</title>
-
- <para>We offer free support through the <ulink url="http://www.jboss.org/index.html?module=bb&op=viewforum&f=257">JBossOSGi User Forum</ulink>.</para>
-
- <para>Please note, that posts to this forum will be dealt with at the community's leisure.
- If your business is such that you need to rely on qualified answers within a known time frame,
- this forum might not be your preferred support channel.</para>
-
- <para>For professional support please go to <ulink url="http://www.jboss.com/services">JBoss Support Services</ulink>.</para>
-
-</chapter>
Deleted: projects/jboss-osgi/trunk/build/docbook/en/modules/introduction.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/introduction.xml 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/introduction.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -1,299 +0,0 @@
-<!--
- $Id$
--->
-<chapter xml:id="ChapIntroduction">
-
- <title>Introduction</title>
-
- <sect1 xml:id="SecWhatIsOsgi">
- <title>What is OSGi</title>
-
- <para>The <ulink url="http://www2.osgi.org/Release4/HomePage">Open Services Gateway Initiative (OSGi)</ulink>,
- specifications define a standardized, component-oriented, computing environment for networked services that is the foundation
- of an enhanced service-oriented architecture.</para>
-
- <para>The OSGi specification defines two things:</para>
-
- <itemizedlist>
- <listitem>A set of services that an OSGi container must implement</listitem>
- <listitem>A contract between the container and your application</listitem>
- </itemizedlist>
-
- <para>Developing on the OSGi platform means first building your application using OSGi APIs, then deploying it in an OSGi container.</para>
-
- <para>The <ulink url="http://www.jboss.org/community/docs/DOC-13273">JBossOSGi Project</ulink> project has two distinct goals</para>
-
- <orderedlist>
- <listitem>Provide an integration platform for 3rd party OSGi Frameworks</listitem>
- <listitem>Provide an OSGi compliant framework implementation based on the <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink></listitem>
- </orderedlist>
-
-
- <emphasis role="bold">What does OSGi offer to Java developers?</emphasis>
-
- <para>OSGi modules provide classloader semantics to partially expose code that can then be consumed by other modules.
- The implementation details of a module, although scoped public by the Java programming language, remain private to the module.
- On top of that you can install multiple versions of the same code and resolve dependencies by version and other criteria.
- OSGi also offers advanced security and lifecycle, which I'll explain in more detail further down.</para>
-
- <emphasis role="bold">What kind of applications benefit from OSGi?</emphasis>
-
- <para>Any application that is designed in a modular fashion where it is necessary to start, stop, update individual modules with minimal impact
- on other modules. Modules can define their own transitive dependencies without the need to resolve these dependencies at the container level.
- The OSGi platform builds an exellent foundation for the next generation JBoss ESB for example.</para>
-
- <emphasis role="bold">Should Java EE developers adopt the OSGi programming model?</emphasis>
-
- <para>Probably not. The OSGi runtime may be used internally by Java EE container providers to achieve the desired isolation and configuration
- flexibility that the container whishes to provide. At the application programming level, the Java EE model will continue to exist in its own right,
- wheras the OSGi model may provide the more suitable runtime environment for applications that require the modular isolation, security and lifecycle
- management that OSGi offers.</para>
-
- </sect1>
-
- <sect1 xml:id="SecFramworkOverview">
- <title>OSGi Framework Overview</title>
-
- <para>The functionality of the Framework is divided in the following layers:</para>
-
- <itemizedlist>
- <listitem>Security Layer</listitem>
- <listitem>Module Layer</listitem>
- <listitem>Life Cycle Layer</listitem>
- <listitem>Service Layer</listitem>
- <listitem>Actual Services</listitem>
- </itemizedlist>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/osgi-layers.png"/>
- </imageobject>
- </mediaobject>
-
-
- <emphasis role="bold">OSGi Security Layer</emphasis>
-
- <para>The OSGi Security Layer is an optional layer that underlies the OSGi Service Platform.
- The layer is based on the Java 2 security architecture. It provides the infrastructure to deploy and manage
- applications that must run in fine grained controlled environments.</para>
-
- <para>The OSGi Service Platform can authenticate code in the following ways:</para>
-
- <itemizedlist>
- <listitem>By location</listitem>
- <listitem>By signer</listitem>
- </itemizedlist>
-
- <para>For example, an Operator can grant the ACME company the right to use networking on their devices.
- The ACME company can then use networking in every bundle they digitally sign and deploy on the Operator’s device.
- Also, a specific bundle can be granted permission to only manage the life cycle of bundles that are signed by the ACME company.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/osgi-delegation.png"/>
- </imageobject>
- </mediaobject>
-
- <emphasis role="bold">OSGi Module Layer</emphasis>
-
- <para>The OSGi Module Layer provides a generic and standardized solution for Java modularization.
- The Framework defines a unit of modularization, called a bundle. A bundle is comprised of Java classes and other resources,
- which together can provide functions to end users. Bundles can share Java packages among an exporter bundle and an importer bundle
- in a well-defined way.</para>
-
- <para>Once a <emphasis role="bold">Bundle</emphasis> is started, its functionality is provided and services are exposed to other bundles installed in the OSGi Service Platform.
- A bundle can carry descriptive information about itself in the manifest file that is contained in its JAR file.
- Here are a few important <emphasis role="bold">Manifest Headers</emphasis> defined by the OSGi Framework:</para>
-
- <itemizedlist>
- <listitem><emphasis role="bold">Bundle-Activator</emphasis> - class used to start, stop the bundle</listitem>
- <listitem><emphasis role="bold">Bundle-SymbolicName</emphasis> - identifies the bundle</listitem>
- <listitem><emphasis role="bold">Bundle-Version</emphasis> - specifies the version of the bundle</listitem>
- <listitem><emphasis role="bold">Export-Package</emphasis> - declaration of exported packages</listitem>
- <listitem><emphasis role="bold">Import-Package</emphasis> - declaration of imported packages</listitem>
- </itemizedlist>
-
- <para>The notion of OSGi Version Range describes a range of versions using a mathematical interval notation. For example</para>
-
- <programlisting>
- Import-Package: com.acme.foo;version="[1.23, 2)", com.acme.bar;version="[4.0, 5.0)"
- </programlisting>
-
- <para>With the OSGi Class Loading Architecture many bundles can share a single virtual machine (VM).
- Within this VM, bundles can hide packages and classes from other bundles, as well as share packages with other bundles.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/osgi-classloader.png"/>
- </imageobject>
- </mediaobject>
-
- <para>For example, the following import and export definition resolve correctly because the version range in the import definition
- matches the version in the export definition:</para>
-
- <programlisting>
- A: Import-Package: p; version="[1,2)"
- B: Export-Package: p; version=1.5.1
- </programlisting>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/osgi-version-constraint.png"/>
- </imageobject>
- </mediaobject>
-
- <para>Appart from bundle versions, OSGi Attribute Matching is a generic mechanism to allow the importer and exporter to influence the
- matching process in a declarative way. For example, the following statements will match.</para>
-
- <programlisting>
- A: Import-Package: com.acme.foo;company=ACME
- B: Export-Package: com.acme.foo;company=ACME; security=false
- </programlisting>
-
- <para>An exporter can limit the visibility of the classes in a package with the include and exclude directives on the export definition.</para>
-
- <programlisting>
- Export-Package: com.acme.foo; include:="Qux*,BarImpl"; exclude:=QuxImpl
- </programlisting>
-
- <emphasis role="bold">OSGi Life Cycle Layer</emphasis>
-
- <para>The Life Cycle Layer provides an API to control the security and life cycle operations of bundles.</para>
-
- <para>A bundle can be in one of the following states:</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/osgi-life-cycle.png"/>
- </imageobject>
- </mediaobject>
-
- <para>A bundle is activated by calling its <emphasis role="bold">Bundle Activator</emphasis> object, if one exists.
- The BundleActivator interface defines methods that the Framework invokes when it starts and stops the bundle.</para>
-
- <para>A Bundle Context object represents the execution context of a single bundle within the OSGi Service Platform,
- and acts as a proxy to the underlying Framework. A <emphasis role="bold">Bundle Context</emphasis> object is created by the Framework when a bundle is started.
- The bundle can use this private BundleContext object for the following purposes:</para>
-
- <itemizedlist>
- <listitem>Installing new bundles into the OSGi environment</listitem>
- <listitem>Interrogating other bundles installed in the OSGi environment</listitem>
- <listitem>Obtaining a persistent storage area</listitem>
- <listitem>Retrieving service objects of registered services</listitem>
- <listitem>Registering services in the Framework service</listitem>
- <listitem>Subscribing or unsubscribing to Famework events</listitem>
- </itemizedlist>
-
- <emphasis role="bold">OSGi Service Layer</emphasis>
-
- <para>The OSGi Service Layer defines a dynamic collaborative model that is highly integrated with the Life Cycle Layer.
- The service model is a publish, find and bind model. A service is a normal Java object that is registered under one or more
- Java interfaces with the service registry.</para>
-
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/osgi-service-registration.png"/>
- </imageobject>
- </mediaobject>
- </sect1>
-
- <sect1 xml:id="SecServiceCompendium">
- <title>OSGi Service Compendium</title>
-
- <para>The OSGi Service Compendium specifies a number of services that may be available in an OSGi runtime environment.
- Although the OSGi Framework specification is useful in itself already, it only defines the OSGi core infrastructure.
- The services defined in the compendium specification define the scope and functionality of some common services that
- bundle developers might want to use. Here is a quick summary:</para>
-
- <emphasis role="bold">Log Service</emphasis>
- <para>The Log Service provides a general purpose message logger for the OSGi Service Platform. It consists of two services,
- one for logging information and another for retrieving current or previously recorded log information.</para>
-
- <emphasis role="bold">Http Service</emphasis>
- <para>The Http Service supports two standard techniques for registering servlets and resources to develop communication and
- user interface solutions for standard technologies such as HTTP, HTML, XML, etc.</para>
-
- <emphasis role="bold">Device Access Specification</emphasis>
- <para>The Device Access specification supports the coordination of automatic detection and attachment of existing devices on
- an OSGi Service Platform, facilitates hot-plugging and -unplugging of new devices, and downloads and installs device drivers on demand.</para>
-
- <emphasis role="bold">Configuration Admin Service</emphasis>
- <para>The Configuration Admin service allows an Operator to set the configuration information of deployed bundles.</para>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/osgi-config-service.png" contentwidth="450"/>
- </imageobject>
- </mediaobject>
-
- <emphasis role="bold">Metatype Service</emphasis>
- <para>The Metatype Service specification defines interfaces that allow bundle developers to describe attribute
- types in a computer readable form using so-called metadata.</para>
-
- <emphasis role="bold">Preferences Service</emphasis>
- <para>The Preferences Service allows storage of data that is specific to a particular user.</para>
-
- <emphasis role="bold">User Admin Service</emphasis>
- <para>Bundles can use the User Admin Service to authenticate an initiator and represent this authentication as an Authorization object.
- Bundles that execute actions on behalf of this user can use the Authorization object to verify if that user is authorized.</para>
-
- <emphasis role="bold">Wire Admin Service</emphasis>
- <para>The Wire Admin Service is an administrative service that is used to control a wiring topology in the OSGi Service Platform.
- It is intended to be used by user interfaces or management programs that control the wiring of services in an OSGi Service Platform.</para>
-
- <emphasis role="bold">IO Connector Service</emphasis>
- <para>The IO Connector Service specification adopts the Java 2 Micro Edition (J2ME) javax.microedition.io packages as a basic communications
- infrastructure.</para>
-
- <emphasis role="bold">UPnP Device Service</emphasis>
- <para>The UPnP Device Service specifies how OSGi bundles can be developed that interoperate with UPnP (Universal Plug and Play)
- devices and UPnP control points.</para>
-
- <emphasis role="bold">Declarative Services Specification</emphasis>
- <para>The Declarative Services specification addresses some of the complications that arise when the OSGi service model is
- used for larger systems and wider deployments, such as: Startup Time, Memory Footprint, Complexity. The service component
- model uses a declarative model for publishing, finding and binding to OSGi services.</para>
-
- <emphasis role="bold">Event Admin Service</emphasis>
- <para>The Event Admin Service provides an inter-bundle communication mechanism. It is based on a event publish and subscribe model, popular in many message based systems.</para>
-
- <emphasis role="bold">Deployment Admin Service</emphasis>
- <para>The Deployment Admin Service specification, standardizes the access to some of the responsibilities of the management agent:
- that is, the lifecycle management of interlinked resources on an OSGi Service Platform.</para>
-
- <emphasis role="bold">Auto Configuration Specification</emphasis>
- <para>The Auto Configuration Specification is to allow the configuration of bundles.
- These bundles can be embedded in Deployment Packages or bundles that are already present on the OSGi Service Platform.</para>
-
- <emphasis role="bold">Application Admin Service</emphasis>
- <para>The Application Admin Service is intended to simplify the management of an environment with many different types of applications
- that are simultaneously available.</para>
-
- <emphasis role="bold">DMT Admin Service</emphasis>
- <para>The DMT Admin Service specification defines an API for managing a device using concepts from the OMA DM specifications.</para>
-
- <emphasis role="bold">Monitor Admin Service</emphasis>
- <para>The Monitor Admin Service specification outlines how a bundle can publish Status Variables and how administrative bundles
- can discover Status Variables as well as read and reset their values.</para>
-
- <emphasis role="bold">Foreign Application Access Specification</emphasis>
- <para>The Foreign Application Access specification is to enable foreign application models like MIDP, Xlets, Applets, other Java
- application models to participate in the OSGi service oriented architecture.</para>
-
- <emphasis role="bold">Service Tracker Specification</emphasis>
- <para>The Service Tracker specification defines a utility class, ServiceTracker, that makes tracking the registration, modification,
- and unregistration of services much easier.</para>
-
- <emphasis role="bold">XML Parser Service Specification</emphasis>
- <para>The XML Parser Service specification addresses how the classes defined in JAXP can be used in an OSGi Service Platform.</para>
-
- <emphasis role="bold">Position Specification</emphasis>
- <para>The Position Specification provides bundle developers with a consistent way of handling geographic positions in OSGi applications.</para>
-
- <emphasis role="bold">Measurement and State Specification</emphasis>
- <para>The Measurement and State Specification provides a consistent way of handling a diverse range of measurements for bundle developers.</para>
-
- <emphasis role="bold">Execution Environment Specification</emphasis>
- <para>This Execution Environment Specification defines different execution environments for OSGi Server Platform Servers.</para>
- </sect1>
-
-</chapter>
Deleted: projects/jboss-osgi/trunk/build/docbook/en/modules/providedservices.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/providedservices.xml 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/providedservices.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -1,82 +0,0 @@
-<!--
- $Id$
--->
-<chapter xml:id="ChapProvidedServices">
-
- <title>Provided Bundles and Services</title>
-
- <sect1 xml:id="SecLoggingService">
- <title>Logging Service</title>
-
- <para>The JBossOSGi <emphasis role="bold">jboss-osgi-service-logging.jar</emphasis> bundle contains a simple Logging Bridge Service to
- <ulink url="http://www.jboss.org/community/docs/DOC-11280">JBoss Logging</ulink>. It registers a trivial LogListener with the
- LogReaderService in case that service is registered with the Framework.</para>
-
- <itemizedlist>
- <listitem><ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/log/LogListener.html">LogListener</ulink> - Subscribes to LogEntry objects from the LogReaderService</listitem>
- <listitem><ulink url="http://www.osgi.org/javadoc/r4v41/org/osgi/service/log/LogReaderService.html">LogReaderService</ulink> - Provides methods to retrieve LogEntry objects from the log</listitem>
- </itemizedlist>
-
- <para>The LogReaderService is part of the standard <ulink url="http://www.osgi.org/Download/File?url=/download/r4v41/r4.cmpn.pdf">OSGi
- Compendium Services</ulink>. JBossOSGi currently uses the (not yet released) LogService from <ulink url="http://felix.apache.org">Apache Felix</ulink>,
- which gets deployed as Bundle <emphasis role="bold">org.apache.felix.log.jar</emphasis></para>
-
- <para>The LogListener itself logs messages under the Bundle's symbolic name.</para>
-
- <programlisting role="JAVA">
- public class JBossLoggingLogListener implements LogListener
- {
- public void logged(LogEntry entry)
- {
- Bundle bundle = entry.getBundle();
- int level = entry.getLevel();
- Throwable throwable = entry.getException();
-
- String loggerName = bundle.getSymbolicName();
- Logger log = Logger.getLogger(loggerName);
-
- if (level == LogService.LOG_DEBUG)
- log.debug(entry.getMessage(), throwable);
-
- else if (level == LogService.LOG_INFO)
- log.info(entry.getMessage(), throwable);
-
- else if (level == LogService.LOG_WARNING)
- log.warn(entry.getMessage(), throwable);
-
- else if (level == LogService.LOG_ERROR)
- log.error(entry.getMessage(), throwable);
- }
- }
- </programlisting>
-
- <para>You can therefore change the logging for specific Bundles by
- <ulink url="http://www.jboss.org/community/docs/DOC-12490">setting the respective logging level</ulink>.</para>
- </sect1>
-
- <sect1 xml:id="SecMicrocontainerService">
- <title>Microcontainer Service</title>
-
- <para>JBossOSGi SPI comes with a service that give access to the <ulink url="http://www.jboss.org/jbossmc">JBoss Microcontainer</ulink> Kernel
- and the JMX <ulink url="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServer.html">MBeanServer</ulink>. The service is
- registered with the Framework under the name</para>
-
- <itemizedlist>
- <listitem><emphasis role="bold">org.jboss.osgi.service.MicrocontainerService</emphasis></listitem>
- </itemizedlist>
-
- <para>Here is an example of how an OSGi component can register an arbitrary MBean with the
- <ulink url="http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServer.html">MBeanServer</ulink>.</para>
-
- <programlisting role="JAVA">
- ServiceReference sref = context.getServiceReference(MicrocontainerService.class.getName());
- if (sref == null)
- throw new IllegalStateException("MicrocontainerService not registered");
-
- MicrocontainerService mcService = (MicrocontainerService)context.getService(sref);
- MBeanServer mbeanServer = mcService.getMbeanServer();
- mbeanServer.registerMBean(new Foo(), OBJECT_NAME);
- </programlisting>
- </sect1>
-
-</chapter>
Deleted: projects/jboss-osgi/trunk/build/docbook/en/modules/references.xml
===================================================================
--- projects/jboss-osgi/trunk/build/docbook/en/modules/references.xml 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/build/docbook/en/modules/references.xml 2009-04-21 12:25:01 UTC (rev 87622)
@@ -1,27 +0,0 @@
-<!--
- $Id$
--->
-<chapter xml:id="ChapReferences">
-
- <title>References</title>
-
- <para><emphasis role="bold">Resources</emphasis></para>
-
- <itemizedlist>
- <listitem><ulink url="http://www.jboss.org/community/docs/DOC-13273">JBossOSGi Wiki</ulink></listitem>
- <listitem><ulink url="http://jbossosgi.blogspot.com">JBossOSGi Diary (Blog)</ulink></listitem>
- <listitem><ulink url="https://jira.jboss.org/jira/browse/JBOSGI">Issue Tracking</ulink></listitem>
- <listitem><ulink url="http://jbmuc.dyndns.org:8280/hudson">Hudson QA</ulink></listitem>
- <listitem><ulink url="https://anonsvn.jboss.org/repos/jbossas/projects/jboss-osgi">Subversion</ulink></listitem>
- <listitem><ulink url="http://fisheye.jboss.com/browse/JBossOSGi">Fisheye</ulink></listitem>
- <listitem><ulink url="http://www.jboss.org/index.html?module=bb&op=viewforum&f=257">User Forum</ulink></listitem>
- <listitem><ulink url="http://www.jboss.org/index.html?module=bb&op=viewforum&f=256">Design Forum</ulink></listitem>
- </itemizedlist>
-
- <para><emphasis role="bold">Authors</emphasis></para>
-
- <itemizedlist>
- <listitem><ulink url="email:thomas.diesler at jboss.com">Thomas Diesler</ulink></listitem>
- </itemizedlist>
-
-</chapter>
Modified: projects/jboss-osgi/trunk/bundle/common/src/main/java/org/jboss/osgi/common/log/LogServiceTracker.java
===================================================================
--- projects/jboss-osgi/trunk/bundle/common/src/main/java/org/jboss/osgi/common/log/LogServiceTracker.java 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/bundle/common/src/main/java/org/jboss/osgi/common/log/LogServiceTracker.java 2009-04-21 12:25:01 UTC (rev 87622)
@@ -29,8 +29,12 @@
import org.osgi.util.tracker.ServiceTracker;
/**
- * A basic LogService that writes to System.out
+ * A combined ServiceTracker/LogService that bundles can use to access the registered LogService.
*
+ * If a LogService is registered, the LogServiceTracker delegates to that LogService.
+ * If there is no LogService registered, the LogServiceTracker delegates to the {@link SystemLogService}
+ *
+ *
* @author thomas.diesler at jboss.com
* @since 11-Apr-2009
*/
Modified: projects/jboss-osgi/trunk/spi/src/main/java/org/jboss/osgi/spi/service/microcontainer/package.html
===================================================================
--- projects/jboss-osgi/trunk/spi/src/main/java/org/jboss/osgi/spi/service/microcontainer/package.html 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/spi/src/main/java/org/jboss/osgi/spi/service/microcontainer/package.html 2009-04-21 12:25:01 UTC (rev 87622)
@@ -1,5 +1,5 @@
<html>
<body>
-Service that provides access to the Kernel and MBeanServer.
+Provides access to the Kernel and MBeanServer.
</body>
</html>
\ No newline at end of file
Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/EndpointService.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/EndpointService.java 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/EndpointService.java 2009-04-21 12:25:01 UTC (rev 87622)
@@ -28,8 +28,8 @@
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceListener;
-import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
+import org.osgi.util.tracker.ServiceTracker;
/**
* A service that creates an Http context through the HttpService
@@ -39,61 +39,64 @@
*/
public class EndpointService implements ServiceListener
{
- private BundleContext context;
+ private BundleContext context;
- public EndpointService(BundleContext context)
- {
- this.context = context;
- context.addServiceListener(this);
- }
-
- private void registerService()
- {
- try
- {
- HttpService httpService = getHttpService();
-
- Properties initParams = new Properties();
- initParams.setProperty("initProp", "SomeValue");
- httpService.registerServlet("/servlet", new EndpointServlet(context), initParams, null);
- httpService.registerResources("/file", "/res", null);
- }
- catch (Exception ex)
- {
- throw new RuntimeException("Cannot register context", ex);
- }
- }
+ public EndpointService(BundleContext context)
+ {
+ this.context = context;
+ context.addServiceListener(this);
+ }
- private void unregisterService()
- {
- HttpService httpService = getHttpService();
- httpService.unregister("/servlet");
- httpService.unregister("/file");
- context.removeServiceListener(this);
- }
+ private void registerService()
+ {
+ try
+ {
+ HttpService httpService = getHttpService();
- private HttpService getHttpService()
- {
- ServiceReference sref = context.getServiceReference(HttpService.class.getName());
- if (sref == null)
- throw new IllegalStateException("HttpService not registered");
-
- return (HttpService)context.getService(sref);
- }
-
- public void serviceChanged(ServiceEvent event)
- {
- Object service = context.getService(event.getServiceReference());
- if (service == this)
- {
- if (event.getType() == ServiceEvent.REGISTERED)
+ Properties initParams = new Properties();
+ initParams.setProperty("initProp", "SomeValue");
+ httpService.registerServlet("/servlet", new EndpointServlet(context), initParams, null);
+ httpService.registerResources("/file", "/res", null);
+ }
+ catch (Exception ex)
{
- registerService();
+ throw new RuntimeException("Cannot register context", ex);
}
- else if (event.getType() == ServiceEvent.UNREGISTERING)
+ }
+
+ private void unregisterService()
+ {
+ HttpService httpService = getHttpService();
+ httpService.unregister("/servlet");
+ httpService.unregister("/file");
+ context.removeServiceListener(this);
+ }
+
+ private HttpService getHttpService()
+ {
+ ServiceTracker tracker = new ServiceTracker(context, HttpService.class.getName(), null);
+ tracker.open();
+
+ HttpService service = (HttpService)tracker.getService();
+ if (service == null)
+ throw new IllegalStateException("HttpService not registered");
+
+ return service;
+ }
+
+ public void serviceChanged(ServiceEvent event)
+ {
+ Object service = context.getService(event.getServiceReference());
+ if (service == this)
{
- unregisterService();
+ if (event.getType() == ServiceEvent.REGISTERED)
+ {
+ registerService();
+ }
+ else if (event.getType() == ServiceEvent.UNREGISTERING)
+ {
+ unregisterService();
+ }
}
- }
- }
+ }
}
Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/log/LogServiceTestCase.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/log/LogServiceTestCase.java 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/log/LogServiceTestCase.java 2009-04-21 12:25:01 UTC (rev 87622)
@@ -44,12 +44,12 @@
public class LogServiceTestCase extends OSGiTest
{
private LogEntryCache logEntryCache;
-
+
@Override
protected void setUp() throws Exception
{
super.setUp();
-
+
logEntryCache = new LogEntryCache(new LogEntryFilter("example-log(.*)", LogService.LOG_INFO, "\\[ServiceA\\](.*)"));
startLogEntryTracking(logEntryCache);
}
@@ -71,16 +71,16 @@
URL testURL = getTestArchiveURL("example/example-log.jar");
Bundle bundleA = sysContext.installBundle(testURL.toExternalForm());
bundleA.start();
-
+
// Verify that the bundle is active
assertEquals("Test bundle ACTIVE", Bundle.ACTIVE, bundleA.getState());
-
+
// Wait a little for the asynchronous log entry to arrive
Thread.sleep(200);
-
+
// Uninstall the test bundle
bundleA.uninstall();
-
+
// Verify the received log entries
List<LogEntry> entries = logEntryCache.getLog();
assertEquals("Number of entries", 1, entries.size());
Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/microcontainer/bundle/MBeanTestService.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/microcontainer/bundle/MBeanTestService.java 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/microcontainer/bundle/MBeanTestService.java 2009-04-21 12:25:01 UTC (rev 87622)
@@ -28,11 +28,10 @@
import org.jboss.osgi.spi.management.ObjectNameFactory;
import org.jboss.osgi.spi.service.microcontainer.MicrocontainerService;
-import org.jboss.test.osgi.example.microcontainer.bundle.Foo;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceListener;
-import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
/**
* A service that registers an MBean
@@ -82,11 +81,14 @@
private MicrocontainerService getMicrocontainerService()
{
- ServiceReference sref = context.getServiceReference(MicrocontainerService.class.getName());
- if (sref == null)
- throw new IllegalStateException("MicrocontainerService not registered");
-
- return (MicrocontainerService)context.getService(sref);
+ ServiceTracker tracker = new ServiceTracker(context, MicrocontainerService.class.getName(), null);
+ tracker.open();
+
+ MicrocontainerService service = (MicrocontainerService)tracker.getService();
+ if (service == null)
+ throw new IllegalStateException("MicrocontainerService not registered");
+
+ return service;
}
public void serviceChanged(ServiceEvent event)
Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/resources/example/http/example-http.bnd
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/resources/example/http/example-http.bnd 2009-04-21 11:11:20 UTC (rev 87621)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/resources/example/http/example-http.bnd 2009-04-21 12:25:01 UTC (rev 87622)
@@ -3,7 +3,4 @@
Bundle-SymbolicName: example-http
Bundle-Activator: org.jboss.test.osgi.example.http.bundle.ServiceActivator
Export-Package: org.jboss.test.osgi.example.http.bundle
-Include-Resource: res/message.txt=message.txt
-
-# For some reason this does not work
-# Include-Resource: src/test/resources/service/http/message.txt
\ No newline at end of file
+Include-Resource: res/message.txt=message.txt
\ No newline at end of file
More information about the jboss-osgi-commits
mailing list