Example: Using connections with asynchronous beans

An asynchronous bean method can use the connections that its creating Java 2 Platform Enterprise Edition (J2EE) component obtained using java:comp resource references. (For more information on resource references, see the topic References.) 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 J2EE 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...
  }
}


 

See Also


Asynchronous beans
References