Java Reference
In-Depth Information
That's a slightly long-winded way of getting hold of a datasource from JNDI . It's too
long to fit on a single line in this topic, in fact! Enterprise OSG i gives you the tools to
do better than that. The osgi.jndi.service.name property is a special property that
tells the container to register the service in JNDI under that name. You can shorten
the JNDI name to just the namespace and the name you provided:
osgi:service/jdbc/fancyfoodsdb
NOTE: APACHE ARIES LIMITATIONS For Apache Aries transactions wrappers
bundle versions 0.3 and below, the short-form JNDI lookup won't work, and
the long-form lookup should be used instead.
The osgi.jndi.service.name property works in both directions. Objects registered
in JNDI can be looked up as OSG i services using their interface name. As part of the
conversion, the container will set the osgi.jndi.service.name to the object's origi-
nal JNDI name.
THE DATASOURCE MANIFEST
Before the datasource can be deployed as an OSG i bundle, it will also need a manifest.
The manifest defines the bundle symbolic name, and it will also need to import some
packages. But wait—why does a bundle with no source code need to import packages?
Just because the bundle doesn't have any class files doesn't mean it's not doing
anything. The datasource bundle does a great deal, but does it declaratively with Blue-
print metadata. In this example, the Blueprint file refers to classes and interfaces in
the javax.sql and org.apache.derby.jdbc packages. These classes will be instanti-
ated by the Blueprint container on behalf of the bundle.
Think for a moment about what would happen if you tried to start the datasource
bundle in an environment where nothing provided the javax.sql or
org.apache.derby.jdbc packages. When the Blueprint container tried to instantiate
the EmbeddedDataSource class it would fail horribly with a ClassNotFoundException .
Not good. OSG i is all about avoiding these unpleasant runtime surprises by declaring
dependencies up front.
With those dependencies, the manifest is as follows:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Fancy Foods Datasource
Bundle-SymbolicName: fancyfoods.datasource
Bundle-Version: 1.0.0
Import-Package: javax.sql,
org.apache.derby.jdbc
CONFIRMING YOU HAVE A DATASOURCE—OR THREE
Build your JAR and drop it into the load directory. When you list the bundles with ss , you
should see your datasource bundle. If you get the bundle details with the bundle com-
mand, you'll see that your bundle is providing several datasource services (figure 3.4).
Not only do you have the two datasource services you registered, the container has
helpfully provided you with a third. The third service implements the DataSource
Search WWH ::




Custom Search