Sometimes it is necessary for the client to start a transaction with which to execute EJB methods. In this scenario, the client has to propagate a transaction to the EJB container. To start a transaction in the client layer, first create an instance of the JNDI context and use it to acquire a UserTransaction instance. This trick should only be used with session or BMP beans. The EJB to be used should not declare its transaction level to be RequiresNew, Never, or NotSupported; anything else will work correctly (Required, Supports, or Mandatory).

public class BeanClient {
    public static void main(String[] args) {
        // first configure and retreive initial context:
        Properties props = new Properties();
                Context context = new InitialContext(props);
        // get the user transaction instance:
        UserTransaction transaction = (UserTransaction)
        // perform transaction:
        try {
            // do something with beans:
        catch (Exception e) {