Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Overview

Span
stylefloat: right; margin-left: 20px;

HTML

Div

In this example we use the @Resource annotation to inject a javax.sql.DataSource into our bean. The trickiest thing about injecting a DataSource is not declaring the annotation, but actually configuring the data source.

In OpenEJB the rules are quite simple. An declaration like the following in code:

Code Block

@Resource DataSource customerDataSource;

Matches a data source declared as follows in the openejb.xml file:

Code Block

<Resource type="DataSource" id="customerDataSource">
 ....
</Resource>

As seen in this example, the data source can also be declared via properties as follows:

Code Block

customerDataSource = new://Resource?type=DataSource

This style of properties creation can be used in the InitialContext properties, set into the System properties, or passed in on the command line as vm properties.

The source for this example is in the "injection-of-datasource" directory located in the openejb-examples.zip available on the download page.

Div
styleclear:both;

The Code

Wiki Markup
{snippet:id=code|url=openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/MoviesImpl.java|lang=java}

...

Wiki Markup
{snippet:id=code|url=openejb3/examples/injection-of-datasource/src/test/java/org/superbiz/injection/MoviesTest.java|lang=java}

Note in the above test code the following lines:

Code Block

p.put("movieDatabase", "new://Resource?type=DataSource");
p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");

As mentioned these actually create and configure the data source. When OpenEJB boots up, these properties will get read and executed allowing you to keep all the configuration required to run your tests right in the test case itself. No need to keep dozens of openejb.xml config files in your projects or try and create one big configuration that might end up loading a lot of unneeded containers and resources.

In your production system you can place the properties into the OPENEJB_HOME/conf/system.properties file or add them to your OPENEJB_HOME/conf/openejb.xml with a declaration like so:

Code Block
xml
xml

<Resource type="DataSource" id="movieDatabase">
 JdbcDriver = org.hsqldb.jdbcDriver
 JdbcUrl = jdbc:hsqldb:mem:moviedb
</Resource>

Running

Running the example is fairly simple. In the "injection-of-datasource" directory of the examples zip, just run:

...