package sampleear;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.transaction.UserTransaction;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;

@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MyStatelessSessionBean implements RemoteBusinessInterface {
	SessionContext ejbContext;
	public void setSessionContext(SessionContext context)
	{
		this.ejbContext = context;
	}
	static int count = 0;
	public String update(String tag) {
		try {
			InitialContext initCtx = new InitialContext();
			javax.sql.DataSource ds = 
				//(javax.sql.DataSource)initCtx.lookup("jca:/console.dbpool/oracleocitest/JCAManagedConnectionFactory/oracleocitest");
				(javax.sql.DataSource)initCtx.lookup("jca:/console.dbpool/oracleXATest/JCAManagedConnectionFactory/oracleXATest");
			System.out.println("Get UserTransaction");
			UserTransaction ut = (UserTransaction)initCtx.lookup("java:comp/UserTransaction");//ejbContext.getUserTransaction();
			ut.begin();System.out.println("Begin UserTransaction");
			Connection conn = ds.getConnection();System.out.println("getConnection");
			conn.setAutoCommit(false);
			
			String sql = "select * from msgseq where appname='a'";
			PreparedStatement statement = conn.prepareStatement(sql);
			ResultSet set = statement.executeQuery();
			if(!set.next())
				sql = "insert into msgseq values('a', 'key', 0)";
			else
			{
				String value = set.getString("value");
				value = new Integer(Integer.parseInt(value) + 1).toString();
				sql = "update msgseq set value=" + value + " where appname='a'";
			}
			statement = conn.prepareStatement(sql);
			statement.executeUpdate();
			
			conn.close();System.out.println("close connection");
			ut.commit();System.out.println("Commit UserTransaction");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return this.getClass().getName()+ " updated " + tag;
	}

}
