Montagem metodo generico

4 respostas
standart

Olá amigos, estou precisando montar um metodo generico na minha classe de persistencia com essas caracteristicas.

Metodo:

private void execute(String comando, Object... parans){
     
  switch(comando){
         case COMMIT:  
                comandos;  
                break;  
            case ROLLBACK:  
                comandos;  
                break; 
  }
}

Bom, a estrutura seria mais ou menos essa, minha dúvida seria a seguinte. Em parans eu tenho objetos do tipo EntityManager, Transition e objetos de negócios, queria saber como posso saber a posição de cada um desses objetos dentro da lista parans?

Obrigado a todos.

4 Respostas

ViniGodoy

Primeiro de tudo, sempre que postar códigos, use a tag code:
[code]
Seu código aqui
[/code]

Você pode testar com instance of:

for (Object obj : parans) {
   if (obj instanceof Transition) {
      fazAlgumaCoisa();
   } else if (obj instanceof EntityManager) {
      fazOutraCoisa();
   }
}

Outra coisa, seria uma boa você transformar essa String de comando em um objeto. Existiria a interface Comando, com o método Execute.
E duas classes (Rollback e Commit) que a implementariam.

Aí vc poderia fazer ali uma simples chamada de método:
private void execute(Commando comando, Object params) {
    comando.execute(params);
}

Eliminar o switch e deixar o sistema muito mais fácil de estender.

standart

Olá Vini, acabei de corrigir o problema tdo uso da tag code, foi falta de atenção apenas. Muito grato sobre a resposta, vou tentar implementar suas sugestões.

ViniGodoy:
Primeiro de tudo, sempre que postar códigos, use a tag code: [code] Seu código aqui [/code]

Você pode testar com instance of:

for (Object obj : parans) {
   if (obj instanceof Transition) {
      fazAlgumaCoisa();
   } else if (obj instanceof EntityManager) {
      fazOutraCoisa();
   }
}

Outra coisa, seria uma boa você transformar essa String de comando em um objeto. Existiria a interface Comando, com o método Execute.
E duas classes (Rollback e Commit) que a implementariam.

Aí vc poderia fazer ali uma simples chamada de método:
private void execute(Commando comando, Object params) {
    comando.execute(params);
}

Eliminar o switch e deixar o sistema muito mais fácil de estender.

C

Opa cara blz

Um erro que pode ta acontendo é que você esta usando uma string como argumento do comando switch quando ele so aceita tipos primtivos…

standart

Oi Vini acho que meu objetivo de simplificar as coisas está por deixar as coisas ainda mais complexas, deixa eu tentar mostrar o que esta me incomodando em meu código.

Tenho uma Classe DAO Generica e nela os metodos comuns, add, update, remove e get. Vou colocar o Add para analise.

@Override
	public T add(T object) throws RuntimeException {
		EntityManager em = ManagerController.getInstance().getEntityManager();
		EntityTransaction tx = em.getTransaction();
		try{
			em.persist(object);
			tx.commit();
		}catch(PersistenceException ex){
			em.getTransaction().rollback();
			ex.printStackTrace();
		}finally{
			em.close();
		}
		return object;
	}

O que eu queria tirar era essas chamadas ao commit, rollback que se repete em todos os metodos comuns dessa classe DAO.

Acho que agora ficou mais simples de entender e sugerir uma solução mais simples e enxuta.

Abraços

standart:
Olá Vini, acabei de corrigir o problema tdo uso da tag code, foi falta de atenção apenas. Muito grato sobre a resposta, vou tentar implementar suas sugestões.
ViniGodoy:
Primeiro de tudo, sempre que postar códigos, use a tag code: [code] Seu código aqui [/code]

Você pode testar com instance of:

for (Object obj : parans) {
   if (obj instanceof Transition) {
      fazAlgumaCoisa();
   } else if (obj instanceof EntityManager) {
      fazOutraCoisa();
   }
}

Outra coisa, seria uma boa você transformar essa String de comando em um objeto. Existiria a interface Comando, com o método Execute.
E duas classes (Rollback e Commit) que a implementariam.

Aí vc poderia fazer ali uma simples chamada de método:
private void execute(Commando comando, Object params) {
    comando.execute(params);
}

Eliminar o switch e deixar o sistema muito mais fácil de estender.

Criado 27 de junho de 2010
Ultima resposta 27 de jun. de 2010
Respostas 4
Participantes 3