Shared Libraries

compared with
Key
This line was removed.
This word was removed. This word was added.
This line was added.

Changes (17)

View Page History
{column}

h1. Packaging EJB container RMI client libraries
h1. Why use shared libraries ?

todo

Since the petals-bc-ejb is a generic binding component that allows to call Enterprise Java Beans running on different kind of application servers, you must add your application specific RMI client libraries to the component classpath. There are three solutions to add the libraries to do so :
* add the libraries directly in the component classpath (bad)
By default this component uses a shared library called "petals-sl-ejb" which must contains the RMI client libraries of the EJB targeted EJB container with its JEE EJB specification.

h2. Anatomy of a shared library

A shared library archive may look like this :

{noformat}petals-sl-ejb.zip {noformat}my-shared-library.zip
+ META-INF
- jbi.xml
- my-ejb-container-rmi-client.jar my-shared-library.jar
- my-ejb-container-rmi-client-dependency1.jar my-jar-dependency1.jar
- my-ejb-container-rmi-client-dependency2.jar my-jar-dependency2.jar
- my-ejb-container-ejb-specification.jar{noformat} my-jar-dependency3.jar{noformat}

Adding jar files to the archive is not sufficient. Each jar contained by the shared library must be declared within its JBI descriptor. 
xmlns:jbi="http://java.sun.com/xml/ns/jbi" version="1.0">

<jbi:shared-library class-loader-delegation="self-first" version="my-ejb-container-versionXYZ"> version="my-shared-library-versionXYZ">

<jbi:identification>
<jbi:name>petals-sl-ejb</jbi:name>
<jbi:description>SharedLibrary EJB for my-ejb-container-versionXYZ</jbi:description> <jbi:description>My Shared Library vXYZ</jbi:description>
</jbi:identification>

<jbi:shared-library-class-path>
<jbi:path-element>my-ejb-container-rmi-client.jar</jbi:path-element> <jbi:path-element>my-shared-library.jar</jbi:path-element>
<jbi:path-element>my-ejb-container-rmi-client-dependency1.jar</jbi:path-element> <jbi:path-element>my-jar-dependency1.jar</jbi:path-element>
<jbi:path-element>my-ejb-container-rmi-client-dependency2.jar</jbi:path-element> <jbi:path-element>my-jar-dependency2.jar</jbi:path-element>
<jbi:path-element>my-ejb-container-ejb-specification.jar</jbi:path-element> <jbi:path-element>my-jar-dependency3.jar</jbi:path-element>
</jbi:shared-library-class-path>

</jbi:jbi>{code}

Finally, to add this shared library to the component classpath you must add the following section to the JBI descriptor of the component (here with the default shared library for the EJB component) just after the end of the "bootstrap-class-path" element :
{code:lang=xml}<shared-library>petals-sl-ejb</shared-library>{code} {code:lang=xml}<shared-library>my-shared-library</shared-library>{code}

{column}