Example: Use connections with asynchronous beans
An asynchronous bean method can use the connections that its creating JEE component obtained using java:comp resource references.
For more information on resource references, refer to the References topic. The following is an example of an asynchronous bean that uses connections correctly:
class GoodAsynchBean { DataSource ds; public GoodAsynchBean() throws NamingException { // ok to cache a connection factory or datasource // as class instance data. InitialContext ic = new InitialContext(); // it is assumed that the created Java EE component has this // resource reference defined in its deployment descriptor. ds = (DataSource)ic.lookup("java:comp/env/jdbc/myDataSource"); } // When the asynchronous bean method is called, get a connection, // use it, then close it. void anEventListener() { Connection c = null; try { c = ds.getConnection(); // use the connection now... } finally { if(c != null) c.close(); } } }The following example of an asynchronous bean that uses connections incorrectly:
class BadAsynchBean { DataSource ds; // Do not do this. We cannot cache connections across asynch method calls. Connection c; public BadAsynchBean() throws NamingException { // ok to cache a connection factory or datasource as // class instance data. InitialContext ic = new InitialContext(); ds = (DataSource)ic.lookup("java:comp/env/jdbc/myDataSource"); // here, you broke the rules... c = ds.getConnection(); } // Now when the asynch method is called, illegally use the cached connection // and you likely see J2C related exceptions at run time. // close it. void someAsynchMethod() { // use the connection now... } }
Related concepts
Asynchronous beans References in application deployment descriptor files
Related tasks
Use asynchronous beans Reference topic