Thanks for the response. I think we can move to using a resource-ref, not a big change really. currently we get a data source by getting the name of the data source from an env-var. Since we're using xdoclet to generate the descriptors, and ant to do the build, the value in the env-var is configurable if need be. It's just a string. so we do:

InitialContext ctx = new InitialContext();
String dataSourceName = (String) ctx.lookup("DATASOURCE");

then to actually get the DataSource,

DataSource dataSource = (DataSource) ctx.lookup(dataSourceName);

It must be a weblogic specific thing that the datasource is just made available to the 
context of the components that are in the server the datasource is deployed to.  We're 
certainly learning lots about spec compliance (like it's not a good idea to call 
business methods on other beans in your ejbCreate :o ).


Thanks again! ~mark

David Blevins wrote:

On Thu, Aug 26, 2004 at 01:38:51AM +0200, Jacek Laskowski wrote:


Mark Lybarger wrote:



is it possible for me to configure openejb to make available a
datasource outside of using a resource-ref?


You don't have to use resource-ref. You can declare InitialContextFactory as the Local or Remote one of OpenEJB and use the stuff bound to it. Resource-refs are the way to abstract a code from the real container of these refs. Using resource-ref allows you to make changes to resource configuration outside of your code (no recompilation necessary then).

Just attach itself to OpenEJB JNDI via the Local or Remote InitialContext (see http://www.openejb.org/embedded.html or http://www.openejb.org/remote-server.html) and lookup what's available casting where required to the appropriate type, e.g. javax.sql.DataSource.




A couple corrections: using resourc-refs is the only J2EE or EJB compliant way to get a DataSource from an enterprise bean; datasources aren't available through either the Local or Remote InitialContext implementations.

The compliant way is to do this:


<resource-ref> <res-ref-name>my/favorite/datasource/foo</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>



These are all valid ways to get that datasource.

-----------------
        InitialContext ctx = new InitialContext();
        DataSource ds = (DataSource) 
ctx.lookup("java:comp/env/my/favorite/datasource/foo");
-----------------
        Context ctx = new InitialContext();
        ctx = (Context) ctx.lookup("java:comp/env");
        // ...
        DataSource ds = (DataSource) ctx.lookup("my/favorite/datasource/foo");
-----------------
        Context ctx = new InitialContext();
        ctx = (Context) ctx.lookup("java:comp/env");
        // ...
        ctx = (Context) ctx.lookup("my/favorite");
        // ...
        DataSource ds = (DataSource) ctx.lookup("datasource/foo");
-----------------


Everything the bean looks up from JNDI must be relative to "java:comp/env" in one way or another.

-David







Reply via email to