You can configure data sources from within your test case (avoiding the
need for an openejb.xml
entirely) like so:
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory");
p.put("myDataSource", "new://Resource?type=DataSource");
p.put("myDataSource.JdbcDriver", "org.apache.derby.jdbc.EmbeddedDriver");
p.put("myDataSource.JdbcUrl", "jdbc:derby:derbyDB;create=true");
p.put("myDataSource.JtaManaged", "true");
Context context = new InitialContext(p);
Under certain circumstances it may be necessary to load two versions of the same driver. This is possible by definition of a classpath for the resource which points to the specific driver files required for the DataSource:
p.put("myDataSourceOne", "new://Resource?type=DataSource&classpath=/path/to/driverVersionOne.jar");
p.put("myDataSourceOne.JdbcDriver", "org.apache.derby.jdbc.EmbeddedDriver");
p.put("myDataSource.JdbcUrl", "jdbc:derby:myDatabaseOne;create=true");
....
p.put("myDataSourceTwo", "new://Resource?type=DataSource&classpath=/path/to/driverVersionTwo.jar");
p.put("myDataSourceTwo.JdbcDriver", "org.apache.derby.jdbc.EmbeddedDriver");
p.put("myDataSource.JdbcUrl", "jdbc:derby:myDatabaseTwo;create=true");
This will allow an application to communicate through legacy drivers to the same JDBC provider.
See Embedded Configuration for further details on properties and overrides.
See Containers and Resources for a full list of supported Resource types and their properties.
When configuring DataSources to be used by persistence.xml files, the
DataSource supplied for <jta-data-source>
is typically identical to the
<non-jta-data-source>
, but with the JtaManaged
property set differently.
Keeping with our philosophy to free you up from redundant configuration, we
will happily auto-create a missing jta-data-source or non-jta-data-source
based upon the supplied DataSource.
In the example above, a new DataSource would be generated as an exact copy
but with the name "myDataSourceUnmanaged" and its JtaManaged
flag set to
false
. If the supplied DataSource was not JtaManaged
, then the generated
DataSource would be called "myDataSourceJta" and have its JtaManaged
flag
set to true
.
When relying on this functionality it is not necessary to specify the name
of the generated DataSource in the persistence.xml
file.