Controle de transação na aplicação

olá pessoal …

na minha aplicação tenho 5 camadas divididas assim :

  • business (Rules,Perfil)
  • controller (Action.Form,struts)
  • dao (DAO) (Controle do DAO e da Transaction)
  • filter (verifica permissão de uso ,do usuario na aplicação)
  • model (classes do projeto)

minha duvida com esse controle de transação que estou usando atende
uma aplicação com uns 500 acessos de usuarios …meu problema se não
vai ficar lento os acessos com muitos usuários ???

pois uso Oracle,Tomcat , java 1.4 …

se alguém puder me ajudar agradeceria …

abs


exemplo Transaction

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class XXXXXTransactionDAO extends Object {

//	atributos
  private String datasource;
  Connection conn;
  private DataSource ds;

  
  //construtor ModeloTransactionDAO(String)
  public LanctoTransactionDAO(String datasource) {
	super();
	this.datasource = datasource;
	createConnection();
  }
 
  //metodo createConnection()
  public void createConnection() {
	try {
	    Context ctx = new InitialContext();
		if(ctx == null )
		  throw new Exception("Erro - No Context");
		DataSource dsLocal = (DataSource)ctx.lookup(datasource);
		this.ds = dsLocal;
		
		conn = ds.getConnection();
		conn.setAutoCommit(false);
		
	 }catch(Exception e){
	  e.printStackTrace();
	 }
  }
  
  public boolean insert(String aplicacao,String entidade, String acao, Lancto lancto,UsuarioAplic usuarioAplic) throws Exception {
	boolean transaction = false;
	int seq =0;
	
	try {
	    
	    
		LanctoDAO lanctoDao = new LanctoDAO(conn);
		
		transaction =lanctoDao.insert(lancto, usuarioAplic);
		
		if (transaction){//se consegiu dar insert, inicia regra de negócio para catálogo			  
		  	LanctoRules lanctoRules = new LanctoRules();
			transaction =lanctoRules.criaRegraNegocio(aplicacao,entidade,acao,lancto,usuarioAplic,this.conn);
			String verifica=Workflow.ExistePendencia(aplicacao,entidade, acao, lancto.getIdlancto(),lancto.getStatus(),"",lancto.getVllancto(),usuarioAplic.getUsuariooracle().getCodigo(),false,this.conn);
		  	if ("Nao".equals(verifica)){//Sem pendencias, altera para aprovado
		  		lancto.setStatus(Status.APROVADO);
		  	  	transaction=lanctoDao.alteraStatus(lancto);
		  	}
		}
	} catch (Exception e) {
		e.printStackTrace();
		throw e;
	}
	processTransaction(transaction);
	return transaction;
  }
  
  public boolean update(String aplicacao,String entidade, String acao, Lancto lancto,UsuarioAplic usuarioAplic) throws Exception {
	  boolean transaction = false;
	  try {
		  LanctoDAO LanctoDao = new LanctoDAO(conn);
		  transaction =LanctoDao.update(lancto);	
		  if (transaction){//se consegiu dar update, continua
		  	if(lancto.getStatus()!=Status.EM_APROVACAO){ // Para status diferente de Em Aprovação, altera para em aprovação
		  		lancto.setStatus(Status.EM_APROVACAO);
		  	  	transaction=LanctoDao.alteraStatus(lancto);
			}
		  	if (transaction){//se consegiu dar update, inicia regra de negócio para catálogo
		  		LanctoRules lanctoRules = new LanctoRules();
				transaction =lanctoRules.criaRegraNegocio(aplicacao,entidade,acao,lancto,usuarioAplic,this.conn);	
		  		String verifica=Workflow.ExistePendencia(aplicacao,entidade, acao, lancto.getIdlancto(),lancto.getStatus(),"",lancto.getValor(),usuarioAplic.getUsuariooracle().getCodigo(),false,this.conn);
			  	//System.out.println("verifica"+verifica);
			  	if ("Nao".equals(verifica)){//Sem pendencias, altera para aprovado
			  		lancto.setStatus(Status.APROVADO);
			  	  	transaction=LanctoDao.alteraStatus(lancto);
			  	}
		  	}		  	
		  }
	  } catch (Exception e) {
		  e.printStackTrace();
		  throw e;
	  }
	  processTransaction(transaction);
	  return transaction;
  }
  
  //metodo processTransaction()
  public void processTransaction(boolean transaction) throws Exception {
	try {

		if (transaction) {
			this.conn.commit();
    	} else {
			conn.rollback();
		}
	} catch (Exception e) {
		conn.rollback();
		e.printStackTrace();
		throw e;
	}       
	finally {
		//conn.setAutoCommit(true);
		if (conn != null) {
			try { conn.close(); } catch (SQLException e) { ; }
			conn = null;
		}
	}
  }
  //

}


-DAO

public class XXXXXDAO extends DAO {

	//atributos
	
	private Connection conn;
	//Armazena o tamanho da lista retorno da busca
	private int size = 0;
	public int getSize() {
		   return size;
	}
	public void setSize(int size) {
		this.size =size;
	}
	//construtor padrao
	public LanctoDAO() {
		//super();
		super("datasource");
	}

	
	//construtor LanctoDAO(Connection) 
	public LanctoDAO(Connection conn) {
		super();
		this.conn = conn;
	}
					
	public final String QUERY = "SELECT "

	//metodo insert(Lancto)
	public boolean insert(Lancto lancto, UsuarioAplic usuarioAplic) throws SQLException {
		String sql;
		
		sql = "INSERT INTO LANCTO (x)" +
	            	" VALUES ( ?, ? ,?,+ TO_DATE('"+lancto.getDtlancto()+"', 'DD/MM/RRRR')," +Status.EM_APROVACAO+")";
		
		PreparedStatement pstmt = null;
		boolean verif=false;
		
		
		try {			
		    
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, lancto.getIdlancto());	
			pstmt.setInt(2, lancto.getIdperfil());
			pstmt.setDouble(3, lancto.getVllancto());

			verif=(pstmt.executeUpdate()&gt0);
					
			pstmt.close();
			pstmt = null;
			//conn.commit();
			return(verif); 
			
			
		} catch (SQLException sqle) {
			verif=false;
			pstmt.close();
			rollback(conn);
			//sqle.printStackTrace();
			
			throw sqle;
			
		} finally {
			//conn.close();
		}
	}

Primeiro, use as bbtags “code” para delimitar o seu código, fazendo com que assim ele apareça bem formatado no fórum. Em segundo, procure fazer testes de stress antes de tentar ficar chutando se a sua estrutura atual suporta a demanda desejada. :wink:

Use o jMeter que você saberá como fica sua aplicação… ele é muito bom e da para gerenciar os testes roando a aplicação em várias maquinas para ficar mais próximo do real.

boa sorte.

Poderia ter sido um pouco mais preciso… 500 acessos de usuários concorrentes, simultâneos ou no sistema inteiro por dia?Quantas transações/dia cada usuário fará…